From 3b233d75ef4f87516e942a0ff2ae4896092fc51d Mon Sep 17 00:00:00 2001 From: Aday Bujeda Date: Fri, 22 Sep 2023 17:46:55 +0100 Subject: [PATCH] Added support for static values to scripts forms --- .../app/controllers/scripts_controller.rb | 8 ++++---- .../batch_connect/session_contexts_helper.rb | 8 ++++++-- apps/dashboard/app/helpers/scripts_helper.rb | 6 +++++- apps/dashboard/app/models/script.rb | 5 +++-- .../session_contexts/_fixed.html.erb | 6 ++++++ .../_editable_number.html.erb | 15 +++++++++++++-- .../_editable_select.html.erb | 16 +++++++++++++--- .../editable_form_fields/_generic.html.erb | 2 +- apps/dashboard/app/views/scripts/show.html.erb | 2 +- apps/dashboard/config/locales/en.yml | 1 + apps/dashboard/test/system/jobs_app_test.rb | 2 ++ 11 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 apps/dashboard/app/views/batch_connect/session_contexts/_fixed.html.erb diff --git a/apps/dashboard/app/controllers/scripts_controller.rb b/apps/dashboard/app/controllers/scripts_controller.rb index 3f5a76aa52..0746925c89 100644 --- a/apps/dashboard/app/controllers/scripts_controller.rb +++ b/apps/dashboard/app/controllers/scripts_controller.rb @@ -7,10 +7,10 @@ class ScriptsController < ApplicationController before_action :find_script, only: [:show, :edit, :destroy, :submit, :save] SAVE_SCRIPT_KEYS = [ - :cluster, :auto_accounts, :auto_accounts_exclude, :auto_scripts, :auto_scripts_exclude, - :auto_queues, :auto_queues_exclude, :auto_batch_clusters, :auto_batch_clusters_exclude, - :bc_num_slots, :bc_num_slots_min, :bc_num_slots_max, - :bc_num_hours, :bc_num_hours_min, :bc_num_hours_max + :cluster, :auto_accounts, :auto_accounts_exclude, :auto_accounts_fixed, :auto_scripts, :auto_scripts_exclude, :auto_scripts_fixed, + :auto_queues, :auto_queues_exclude, :auto_queues_fixed, :auto_batch_clusters, :auto_batch_clusters_exclude, :auto_batch_clusters_fixed, + :bc_num_slots, :bc_num_slots_fixed, :bc_num_slots_min, :bc_num_slots_max, + :bc_num_hours, :bc_num_hours_fixed, :bc_num_hours_min, :bc_num_hours_max ].freeze def new diff --git a/apps/dashboard/app/helpers/batch_connect/session_contexts_helper.rb b/apps/dashboard/app/helpers/batch_connect/session_contexts_helper.rb index 7304dedeb3..85c6590ecc 100644 --- a/apps/dashboard/app/helpers/batch_connect/session_contexts_helper.rb +++ b/apps/dashboard/app/helpers/batch_connect/session_contexts_helper.rb @@ -1,13 +1,17 @@ # Helper for creating new batch connect sessions. module BatchConnect::SessionContextsHelper - def create_widget(form, attrib, format: nil, hide_excludable: true) - return '' if attrib.fixed? + def create_widget(form, attrib, format: nil, hide_excludable: true, hide_fixed: true) + return '' if hide_fixed && attrib.fixed? return '' if attrib.hide_when_empty? && attrib.value.blank? widget = attrib.widget field_options = attrib.field_options(fmt: format) all_options = attrib.all_options(fmt: format) + if attrib.fixed? + return render :partial => "batch_connect/session_contexts/fixed", :locals => { form: form, attrib: attrib, field_options: field_options, format: format } + end + case widget when 'select' form.select(attrib.id, attrib.select_choices(hide_excludable: hide_excludable), field_options, attrib.html_options) diff --git a/apps/dashboard/app/helpers/scripts_helper.rb b/apps/dashboard/app/helpers/scripts_helper.rb index f461e1561d..804edda226 100644 --- a/apps/dashboard/app/helpers/scripts_helper.rb +++ b/apps/dashboard/app/helpers/scripts_helper.rb @@ -5,7 +5,11 @@ module ScriptsHelper def create_editable_widget(form, attrib, format: nil) widget = attrib.widget attrib.html_options = { class: 'real-field', autocomplete: 'off' } - locals = { form: form, attrib: attrib, format: format } + # For editable script elements, we want the standard render form even when they are fixed. + # We need to reset the fixed attribute to avoid being render as a read only text field. + fixed_attribute = attrib.fixed? + attrib.opts[:fixed] = false + locals = { form: form, attrib: attrib, format: format, fixed: fixed_attribute } case widget when 'number_field' diff --git a/apps/dashboard/app/models/script.rb b/apps/dashboard/app/models/script.rb index e7cb0e55a7..1a2edde3c5 100644 --- a/apps/dashboard/app/models/script.rb +++ b/apps/dashboard/app/models/script.rb @@ -111,7 +111,7 @@ def respond_to_missing?(method_name, include_private = false) end def original_parameter(string) - match = /([\w_]+)_(?:min|max|exclude)/.match(string) + match = /([\w_]+)_(?:min|max|exclude|fixed)/.match(string) match[1] end @@ -201,7 +201,7 @@ def self.script_form_file(script_path) # parameters you got from the controller that affect the attributes, not form. # i.e., mins & maxes you set in the form but get serialized to the 'attributes' section. def attribute_parameter?(name) - name.end_with?('_min') || name.end_with?('_max') || name.end_with?('_exclude') + name.end_with?('_min') || name.end_with?('_max') || name.end_with?('_exclude') || name.end_with?('_fixed') end # update the 'form' portion of the yaml file given 'params' from the controller. @@ -222,6 +222,7 @@ def update_attributes(params) orig_param = original_parameter(key).to_sym self[orig_param].min = value if key.end_with?('_min') && !value.to_s.empty? self[orig_param].max = value if key.end_with?('_max') && !value.to_s.empty? + self[orig_param].opts[:fixed] = true if key.end_with?('_fixed') if key.end_with?('_exclude') exclude_list = value.split(',').to_a diff --git a/apps/dashboard/app/views/batch_connect/session_contexts/_fixed.html.erb b/apps/dashboard/app/views/batch_connect/session_contexts/_fixed.html.erb new file mode 100644 index 0000000000..56de8de31a --- /dev/null +++ b/apps/dashboard/app/views/batch_connect/session_contexts/_fixed.html.erb @@ -0,0 +1,6 @@ +<%- + all_options = attrib.all_options(fmt: format) + all_options[:readonly] = true +%> + +<%= form.text_field(attrib.id, all_options) %> \ No newline at end of file diff --git a/apps/dashboard/app/views/scripts/editable_form_fields/_editable_number.html.erb b/apps/dashboard/app/views/scripts/editable_form_fields/_editable_number.html.erb index 54c5b41348..987c39acf4 100644 --- a/apps/dashboard/app/views/scripts/editable_form_fields/_editable_number.html.erb +++ b/apps/dashboard/app/views/scripts/editable_form_fields/_editable_number.html.erb @@ -1,4 +1,4 @@ -<%- +<%- field_id = "#{form.object_name}_#{attrib.id}" min_edit_id = "#{field_id}_min" min_edit_name = "#{form.object_name}[#{attrib.id}_min]" @@ -8,13 +8,24 @@ current_min = attrib.field_options[:min] current_max = attrib.field_options[:max] + + fixed_id = "#{field_id}_fixed" + fixed_name = "#{form.object_name}[#{attrib.id}_fixed]" -%>
- <%= create_widget(form, attrib, format: format) %> + <%= create_widget(form, attrib, format: format, hide_fixed: false) %>
+
+
+ > + +
+
+ +
- <%= create_widget(form, attrib, format: format, hide_excludable: false) %> + <%= create_widget(form, attrib, format: format, hide_excludable: false, hide_fixed: false) %>
- + +
+
+ > + +
+
+
    <%- attrib.select_choices(hide_excludable: false).each do |select_data| %> <%- @@ -45,5 +55,5 @@ value="<%= attrib.exclude_select_choices.join(',') %>"> - <%= render(partial: 'scripts/editable_form_fields/edit_field_buttons', locals: { field_id: field_id }) %> + <%= render(partial: 'scripts/editable_form_fields/edit_field_buttons', locals: { field_id: field_id, fixed_name: fixed_name }) %>
diff --git a/apps/dashboard/app/views/scripts/editable_form_fields/_generic.html.erb b/apps/dashboard/app/views/scripts/editable_form_fields/_generic.html.erb index 0a60d47e73..23bad9a01f 100644 --- a/apps/dashboard/app/views/scripts/editable_form_fields/_generic.html.erb +++ b/apps/dashboard/app/views/scripts/editable_form_fields/_generic.html.erb @@ -3,7 +3,7 @@ -%>
- <%= create_widget(form, attrib, format: format) %> + <%= create_widget(form, attrib, format: format, hide_fixed: false) %>
diff --git a/apps/dashboard/app/views/scripts/show.html.erb b/apps/dashboard/app/views/scripts/show.html.erb index 6cd949a8de..fa5d5db596 100644 --- a/apps/dashboard/app/views/scripts/show.html.erb +++ b/apps/dashboard/app/views/scripts/show.html.erb @@ -7,7 +7,7 @@ <%= bootstrap_form_for(@script, url: submit_project_script_path) do |f| %> <% @script.smart_attributes.each do |attrib| %> <%# TODO generate render_format %> - <%= create_widget(f, attrib, format: nil) %> + <%= create_widget(f, attrib, format: nil, hide_fixed: false) %> <% end %> <%= f.submit t('dashboard.batch_connect_form_launch'), class: "btn btn-primary btn-block" %> diff --git a/apps/dashboard/config/locales/en.yml b/apps/dashboard/config/locales/en.yml index d00726c3cd..c5cc66e8df 100644 --- a/apps/dashboard/config/locales/en.yml +++ b/apps/dashboard/config/locales/en.yml @@ -241,6 +241,7 @@ en: jobs_scripts_deleted: "Script successfully deleted!" jobs_scripts_submitted: "Successfully submited job %{job_id}." jobs_scripts_delete_script_confirmation: "Delete all contents of script?" + jobs_scripts_static_field: "Static Value" settings_updated: "Settings updated" diff --git a/apps/dashboard/test/system/jobs_app_test.rb b/apps/dashboard/test/system/jobs_app_test.rb index b7aa7891c3..8707c903e4 100644 --- a/apps/dashboard/test/system/jobs_app_test.rb +++ b/apps/dashboard/test/system/jobs_app_test.rb @@ -398,6 +398,7 @@ def add_bc_num_hours(project_id, script_id) fill_in('script_bc_num_hours', with: 42) fill_in('script_bc_num_hours_min', with: 20) fill_in('script_bc_num_hours_max', with: 101) + find('#script_bc_num_hours_fixed').click find('#save_script_bc_num_hours').click # correctly saves @@ -439,6 +440,7 @@ def add_bc_num_hours(project_id, script_id) min: 20 step: 1 value: '42' + fixed: true max: 101 label: Number of hours help: ''