From f7e08adb07b50260c70177772228c7a69bdf8d06 Mon Sep 17 00:00:00 2001 From: Harpreet Kataria Date: Mon, 16 Jun 2014 11:10:18 -0400 Subject: [PATCH 1/4] Added CRUD support for Automate Domains. - Added support to Add/Edit/Delete Automate Domains. Moved some of the methods to private area and changed existing code that was being used to add/edit namespaces to be used for add/edit of domains. - Added support to change priority of Automate Domains. - Added support to allow users to local/unlock domains. This feature is protected by RBAC, so only users that have access to these features will be able to see these buttons. - Added product features for the new buttons. - Changed role_allows? method in user model to check for allows_any? feature when a hidden feature comes in. - Added spec tests to verify, lock/unlock and priority order change features. - Fixed any broken spec tests in application_helper specs, deleted any AE related spec tests that aren't valid any more. - Fixed an issue where correct tabs were not shown as inactive tabs on edit screen. Issue #2045 --- .../assets/javascripts/cfme_application.js | 4 +- .../controllers/miq_ae_class_controller.rb | 610 +++++++++++------- vmdb/app/helpers/application_helper.rb | 38 +- vmdb/app/models/miq_ae_domain.rb | 6 + vmdb/app/models/user.rb | 5 +- .../layouts/_page_header_navbar.html.haml | 2 +- .../_domains_priority_form.html.erb | 48 ++ .../miq_ae_class/_fields_seq_form.html.erb | 4 + vmdb/app/views/miq_ae_class/_ns_list.html.erb | 24 +- vmdb/config/locales/en.yml | 4 + vmdb/config/routes.rb | 2 + vmdb/db/fixtures/miq_product_features.yml | 38 ++ ...r_tb.yaml => miq_ae_domain_center_tb.yaml} | 27 +- .../toolbars/miq_ae_domains_center_tb.yaml | 37 ++ .../miq_ae_class_controller_spec.rb | 50 +- vmdb/spec/helpers/application_helper_spec.rb | 32 +- vmdb/spec/models/miq_product_feature_spec.rb | 6 +- 17 files changed, 660 insertions(+), 277 deletions(-) create mode 100644 vmdb/app/views/miq_ae_class/_domains_priority_form.html.erb rename vmdb/product/toolbars/{miq_ae_namespaces_center_tb.yaml => miq_ae_domain_center_tb.yaml} (52%) create mode 100644 vmdb/product/toolbars/miq_ae_domains_center_tb.yaml diff --git a/vmdb/app/assets/javascripts/cfme_application.js b/vmdb/app/assets/javascripts/cfme_application.js index 1b97cc311c6..4d4a77d4eb5 100644 --- a/vmdb/app/assets/javascripts/cfme_application.js +++ b/vmdb/app/assets/javascripts/cfme_application.js @@ -1150,11 +1150,11 @@ function miq_jquery_disable_inactive_tabs(tabs_div){ //getting length of tabs on screen tab_len = $j('#' + tabs_div).tabs('length'); //getting index of currently active tabs - curTab = $j('.ui-tabs-panel:not(.ui-tabs-hide)') + curTab = $j('#' + tabs_div).tabs().tabs('option', 'selected').valueOf(); //building array of tab indexes to be disabled, excluding active tab index var arr=new Array for(var i=1,j=0;i<=tab_len;i++){ - if(i != curTab.index()){ + if(i != curTab+1){ arr[j++] = i-1; } } diff --git a/vmdb/app/controllers/miq_ae_class_controller.rb b/vmdb/app/controllers/miq_ae_class_controller.rb index a83575276ee..0ab7fc6b7e2 100644 --- a/vmdb/app/controllers/miq_ae_class_controller.rb +++ b/vmdb/app/controllers/miq_ae_class_controller.rb @@ -42,26 +42,37 @@ def change_tab end end + AE_X_BUTTON_ALLOWED_ACTIONS = { + 'instance_fields_edit' => :edit_instance, + 'method_inputs_edit' => :edit_mehod, + 'miq_ae_class_edit' => :edit_class, + 'miq_ae_class_delete' => :deleteclasses, + 'miq_ae_class_new' => :new, + 'miq_ae_domain_delete' => :delete_domain, + 'miq_ae_domain_edit' => :edit_domain, + 'miq_ae_domain_lock' => :domain_lock, + 'miq_ae_domain_unlock' => :domain_unlock, + 'miq_ae_domain_new' => :new_domain, + 'miq_ae_domain_priority_edit' => :domains_priority_edit, + 'miq_ae_field_edit' => :edit_fields, + 'miq_ae_field_seq' => :fields_seq_edit, + 'miq_ae_instance_delete' => :deleteinstances, + 'miq_ae_instance_edit' => :edit_instance, + 'miq_ae_instance_new' => :new_instance, + 'miq_ae_item_edit' => :edit_item, + 'miq_ae_method_delete' => :deletemethods, + 'miq_ae_method_edit' => :edit_method, + 'miq_ae_method_new' => :new_method, + 'miq_ae_namespace_delete' => :delete_ns, + 'miq_ae_namespace_edit' => :edit_ns, + 'miq_ae_namespace_new' => :new_ns, + }.freeze + def x_button - # handle buttons pressed on the button bar - @sb[:action] = params[:pressed] - delete_ns if params[:pressed] == "miq_ae_namespace_delete" - edit_ns if params[:pressed] == "miq_ae_namespace_edit" - new_ns if params[:pressed] == "miq_ae_namespace_new" - deleteinstances if params[:pressed] == "miq_ae_instance_delete" - edit_instance if params[:pressed] == "miq_ae_instance_edit" - new_instance if params[:pressed] == "miq_ae_instance_new" - edit_instance if params[:pressed] == "instance_fields_edit" - edit_item if params[:pressed] == "miq_ae_item_edit" - edit_class if params[:pressed] == "miq_ae_class_edit" - deleteclasses if params[:pressed] == "miq_ae_class_delete" - new if params[:pressed] == "miq_ae_class_new" - edit_fields if params[:pressed] == "miq_ae_field_edit" - deletemethods if params[:pressed] == "miq_ae_method_delete" - edit_method if params[:pressed] == "miq_ae_method_edit" - new_method if params[:pressed] == "miq_ae_method_new" - edit_method if params[:pressed] == "method_inputs_edit" - fields_seq_edit if params[:pressed] == "miq_ae_field_seq" + @sb[:action] = action = params[:pressed] + raise ActionController::RoutingError.new('invalid button action') unless + AE_X_BUTTON_ALLOWED_ACTIONS.key?(action) + self.send(AE_X_BUTTON_ALLOWED_ACTIONS[action]) end def explorer @@ -172,21 +183,21 @@ def get_node_info(node) set_right_cell_text(x_node,@ae_class) end when "aei" - inst = MiqAeInstance.find_by_id(from_cid(id[1])) - if inst.nil? + @record = MiqAeInstance.find_by_id(from_cid(id[1])) + if @record.nil? set_root_node else - @edit[:new][:ae_inst][:name] = inst.name - @edit[:new][:ae_inst][:display_name] = inst.display_name - @edit[:new][:ae_inst][:description] = inst.description - @ae_class = inst.ae_class - @edit[:ae_class_id] = @ae_class.id - @edit[:grid_inst_xml] = build_fields_grid(@ae_class.ae_fields,inst) - @sb[:active_tab] = "instances" - set_right_cell_text(x_node,inst) + @edit[:new][:ae_inst][:name] = @record.name + @edit[:new][:ae_inst][:display_name] = @record.display_name + @edit[:new][:ae_inst][:description] = @record.description + @ae_class = @record.ae_class + @edit[:ae_class_id] = @ae_class.id + @edit[:grid_inst_xml] = build_fields_grid(@ae_class.ae_fields, @record) + @sb[:active_tab] = "instances" + set_right_cell_text(x_node, @record) end when "aem" - @edit[:new][:ae_method] = @ae_method = MiqAeMethod.find_by_id(from_cid(id[1])) + @record = @edit[:new][:ae_method] = @ae_method = MiqAeMethod.find_by_id(from_cid(id[1])) if @edit[:new][:ae_method].nil? set_root_node else @@ -199,18 +210,18 @@ def get_node_info(node) set_right_cell_text(x_node,@edit[:new][:ae_method]) end when "aen" - rec = MiqAeNamespace.find_by_id(from_cid(id[1])) - if rec.nil? + @record = MiqAeNamespace.find_by_id(from_cid(id[1])) + if @record.nil? set_root_node else records = Array.new # Add Namespaces under a namespace - details = MiqAeNamespace.all(:conditions => {:parent_id=>rec.id.to_i}) + details = MiqAeNamespace.all(:conditions => {:parent_id => @record.id.to_i}) details.flatten.sort{|a,b| a.display_name.to_s + a.name.to_s <=> b.display_name.to_s + b.name.to_s}.each do |r| records.push(r) end # Add classes under a namespace - details_cls = rec.ae_classes + details_cls = @record.ae_classes if !details_cls.nil? details_cls.flatten.sort{|a,b| a.display_name.to_s + a.name.to_s <=> b.display_name.to_s + b.name.to_s}.each do |r| records.push(r) @@ -220,10 +231,11 @@ def get_node_info(node) @temp[:combo_xml] = get_combo_xml([MiqAeField.new]) @temp[:dtype_combo_xml] = get_dtype_combo_xml([MiqAeField.new]) # passing fields because that's how many combo boxes we need @sb[:active_tab] = "details" - set_right_cell_text(x_node,rec) + set_right_cell_text(x_node, @record) end else rec = MiqAeNamespace.all(:conditions => {:parent_id=>nil}) + @record = nil @temp[:grid_xml] = build_toplevel_grid(rec) @right_cell_text = "Datastore" @sb[:active_tab] = "namespaces" @@ -238,6 +250,7 @@ def tree_select @lastaction = "explorer" self.x_active_tree = params[:tree] if params[:tree] self.x_node = params[:id] + @sb[:action] = nil replace_right_cell end @@ -277,44 +290,52 @@ def replace_right_cell(replace_trees = []) end if @sb[:action] == "miq_ae_field_seq" - presenter[:lock_unlock_trees][:ae_tree] = true presenter[:replace_partials][:flash_msg_div_fields_seq] = r[ :partial => "layouts/flash_msg", :locals => {:div_num=>"_fields_seq"} ] if @flash_array presenter[:update_partials][:class_fields_div] = r[:partial => "fields_seq_form"] + elsif @sb[:action] == "miq_ae_domain_priority_edit" + presenter[:replace_partials][:flash_msg_div_domains_priority] = r[ + :partial => "layouts/flash_msg", + :locals => {:div_num=>"_domains_priority"} + ] if @flash_array + presenter[:update_partials][:ns_list_div] = r[:partial => "domains_priority_form"] else @sb[:active_tab] = 'instances' if nodes[0] == 'aec' && !['methods', 'props', 'schema'].include?(@sb[:active_tab]) presenter[:update_partials][:main_div] = r[:partial=>"all_tabs"] end if @in_a_form - action_url = case nodes.first - when 'root', 'aen' - if @edit.key?(:ae_class_id) - @edit[:rec_id].nil? ? 'create' : 'update' - else - @edit[:rec_id].nil? ? 'create_ns' : 'update_ns' - end - when 'aei' - @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' - when 'aem' - @edit[:rec_id].nil? ? 'create_method' : 'update_method' - when 'aec' - case @sb[:active_tab] - when 'instances' then @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' - when 'methods' then @edit[:rec_id].nil? ? 'create_method' : 'update_method' - when 'props' then @edit[:rec_id].nil? ? 'create' : 'update' - else @sb[:action] == 'miq_ae_field_seq' ? 'fields_seq_edit' : 'update_fields' - end - end + action_url = case nodes.first + when 'root', 'aen' + if @sb[:action] == "miq_ae_domain_priority_edit" + 'domains_priority_edit' + elsif @edit.key?(:ae_class_id) + @edit[:rec_id].nil? ? 'create' : 'update' + else + @edit[:rec_id].nil? ? 'create_ns' : 'update_ns' + end + when 'aei' + @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' + when 'aem' + @edit[:rec_id].nil? ? 'create_method' : 'update_method' + when 'aec' + case @sb[:active_tab] + when 'instances' then @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' + when 'methods' then @edit[:rec_id].nil? ? 'create_method' : 'update_method' + when 'props' then @edit[:rec_id].nil? ? 'create' : 'update' + else @sb[:action] == 'miq_ae_field_seq' ? 'fields_seq_edit' : 'update_fields' + end + end presenter[:expand_collapse_cells][:c] = 'expand' # incase it was collapsed for summary screen, and incase there were no records on show_list presenter[:set_visible_elements][:form_buttons_div] = true presenter[:update_partials][:form_buttons_div] = r[ :partial => "layouts/x_edit_buttons", :locals => { - :record_id => @edit[:rec_id], - :action_url => action_url, - :serialize => @sb[:active_tab] == 'methods', + :record_id => @edit[:rec_id], + :action_url => action_url, + :multi_record => @sb[:action] == "miq_ae_domain_priority_edit", + :serialize => @sb[:active_tab] == 'methods', } ] else @@ -728,14 +749,14 @@ def edit_fields replace_right_cell end + def edit_domain + assert_privileges("miq_ae_domain_edit") + edit_domain_or_namespace + end + def edit_ns assert_privileges("miq_ae_namespace_edit") - obj = find_checked_items - @ae_ns = MiqAeNamespace.find(from_cid(obj[0].split('-')[1])) - set_ns_form_vars - @in_a_form = true - session[:changed] = @changed = false - replace_right_cell + edit_domain_or_namespace end def edit_instance @@ -1012,25 +1033,6 @@ def fields_set_form_vars session[:edit] = @edit end - # Set form variables for edit - def set_ns_form_vars - session[:field_data] = Hash.new - @edit = Hash.new - session[:edit] = Hash.new - @edit[:ae_ns_id] = @ae_ns.id - @edit[:new] = Hash.new - @edit[:current] = Hash.new - @edit[:rec_id] = @ae_ns.id || nil - @edit[:key] = "aens_edit__#{@ae_ns.id || "new"}" - @edit[:new][:ns_name] = @ae_ns.name - @edit[:new][:ns_description] = @ae_ns.description - @edit[:current] = @edit[:new].dup - @right_cell_text = @edit[:rec_id].nil? ? - I18n.t("cell_header.adding_model_record",:model=>ui_lookup(:model=>"MiqAeNamespace")) : - I18n.t("cell_header.editing_model_record",:model=>ui_lookup(:model=>"MiqAeNamespace"), :name=>@ae_ns.name) - session[:edit] = @edit - end - # Set form variables for edit def set_method_form_vars session[:field_data] = Hash.new @@ -1418,7 +1420,7 @@ def update_ns when "cancel" session[:edit] = nil # clean out the saved info add_flash(I18n.t("flash.edit.cancelled", - :model=>ui_lookup(:model=>"MiqAeNamespace"), + :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), :name=>@ae_ns.name)) @in_a_form = false replace_right_cell @@ -1438,7 +1440,7 @@ def update_ns end else add_flash(I18n.t("flash.edit.saved", - :model=>ui_lookup(:model=>"MiqAeNamespace"), + :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), :name=>ae_ns.name)) AuditEvent.success(build_saved_audit(ae_ns, @edit)) session[:edit] = nil # clean out the saved info @@ -1446,7 +1448,7 @@ def update_ns replace_right_cell([:ae]) end when "reset" - set_ns_form_vars + set_ns_form_vars("MiqAeNamespace") session[:changed] = @changed = false add_flash(I18n.t("flash.edit.reset"), :warning) @button = "reset" @@ -1529,14 +1531,6 @@ def new replace_right_cell end - def new_ns - assert_privileges("miq_ae_namespace_new") - @ae_ns = MiqAeNamespace.new - set_ns_form_vars - @in_a_form = true - replace_right_cell - end - def new_instance assert_privileges("miq_ae_instance_new") @ae_values = Array.new @@ -1650,7 +1644,7 @@ def create_ns case params[:button] when "cancel" add_flash(I18n.t("flash.add.cancelled", - :model=>ui_lookup(:model=>"MiqAeNamespace"))) + :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"))) @in_a_form = false replace_right_cell when "add" @@ -1667,7 +1661,7 @@ def create_ns end else add_flash(I18n.t("flash.add.added", - :model=>ui_lookup(:model=>"MiqAeNamespace"), + :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), :name=>add_ae_ns.name)) @in_a_form = false replace_right_cell([:ae]) @@ -1844,11 +1838,15 @@ def field_method_delete # Get variables from user edit form def fields_seq_field_changed return unless load_edit("fields_edit__seq","replace_cell__explorer") - move_cols_up if params[:button] == "up" - move_cols_down if params[:button] == "down" + move_selected_fields_up(@edit[:new][:fields_list], params[:seq_fields], "Fields") if params[:button] == "up" + move_selected_fields_down(@edit[:new][:fields_list], params[:seq_fields], "Fields") if params[:button] == "down" + unless @flash_array + @refresh_div = "column_lists" + @refresh_partial = "fields_seq_form" + end @changed = (@edit[:new] != @edit[:current]) render :update do |page| # Use JS to update the display - page.replace("flash_msg_div_fields_seq", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"fields_seq"}) unless @refresh_div && @refresh_div != "column_lists" + page.replace("flash_msg_div_fields_seq", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_fields_seq"}) unless @refresh_div && @refresh_div != "column_lists" page.replace(@refresh_div, :partial=>@refresh_partial) if @refresh_div if @changed page << javascript_for_miq_button_visibility(@changed) @@ -1903,6 +1901,51 @@ def fields_seq_edit end end + def priority_form_field_changed + return unless load_edit(params[:id],"replace_cell__explorer") + priority_get_form_vars + render :update do |page| # Use JS to update the display + changed = (@edit[:new] != @edit[:current]) + page.replace("flash_msg_div_domains_priority", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_domains_priority"}) if @flash_array + page.replace(@refresh_div, + :partial => @refresh_partial, + :locals => {:action => "domains_priority_edit"}) if @refresh_div + page << javascript_for_miq_button_visibility(changed) + page << "miqSparkle(false);" + end + end + + def domains_priority_edit + assert_privileges("miq_ae_domain_priority_edit") + case params[:button] + when "cancel" + @sb[:action] = @in_a_form = nil + @edit = session[:edit] = nil # clean out the saved info + add_flash(I18n.t("flash.priority_order_cancelled")) + replace_right_cell + when "save" + return unless load_edit("priority__edit","replace_cell__explorer") + #TODO: need to move this to model method + @edit[:new][:domain_order].reverse!.each_with_index do |domain, i| + d = MiqAeDomain.find_by_name(domain.split(" (Read Only)").first) + d.priority = i + 1 + d.save! + end + add_flash(I18n.t("flash.priority_order_saved")) + @sb[:action] = @in_a_form = nil + @edit = session[:edit] = nil # clean out the saved info + replace_right_cell([:ae]) + when "reset", nil # Reset or first time in + priority_edit_screen + if params[:button] == "reset" + add_flash(I18n.t("flash.edit.reset"), :warning) + end + @lock_tree = true + session[:changed] = @changed = false + replace_right_cell + end + end + private def get_rec_name(rec) @@ -1997,9 +2040,19 @@ def process_aemethods(aemethods, task) process_elements(aemethods, MiqAeMethod, task) end + # Delete all selected or single displayed aeclasses(s) + def delete_domain + assert_privileges("miq_ae_domain_delete") + delete_domain_or_namespaces + end + # Delete all selected or single displayed aeclasses(s) def delete_ns assert_privileges("miq_ae_namespace_delete") + delete_domain_or_namespaces + end + + def delete_domain_or_namespaces @sb[:row_selected] = find_checked_items ae_ns = [] ae_cs = [] @@ -2007,7 +2060,12 @@ def delete_ns @sb[:row_selected].each do |items| item = items.split('-') if item[0] == "aen" - ae_ns.push(from_cid(item[1])) + record = MiqAeNamespace.find_by_id(from_cid(item[1])) + if record.editable? + ae_ns.push(from_cid(item[1])) + else + add_flash(I18n.t("flash.cannot_delete", :model => ui_lookup(:model=>"MiqAeDomain"), :field => record.name), :error) + end else ae_cs.push(from_cid(item[1])) end @@ -2060,92 +2118,85 @@ def fields_get_form_vars @ae_class = MiqAeClass.find_by_id(from_cid(@edit[:ae_class_id])) @in_a_form = true @in_a_form_fields = true - if ["up","down"].include?(params[:button]) - move_cols_up if params[:button] == "up" - move_cols_down if params[:button] == "down" - @temp[:combo_xml] = get_combo_xml(@edit[:new][:fields].sort_by{|a| [a.priority.to_i]}) - @temp[:dtype_combo_xml] = get_dtype_combo_xml(@edit[:new][:fields].sort_by{|a| [a.priority.to_i]}) # passing fields because that's how many combo boxes we need - else - if params[:item].blank? && !["accept", "save"].include?(params[:button]) && params["action"] != "field_delete" - session[:field_data][:aetype] = @edit[:new_field][:aetype] = params[:field_aetype] if params[:field_aetype] - session[:field_data][:datatype] = @edit[:new_field][:datatype] = params[:field_datatype] if params[:field_datatype] - session[:field_data][:name] = @edit[:new_field][:name] = params[:field_name].strip if params[:field_name] - session[:field_data][:display_name] = @edit[:new_field][:display_name] = params[:field_display_name] if params[:field_display_name] - session[:field_data][:description] = @edit[:new_field][:description] = params[:field_description] if params[:field_description] - if params[:field_substitution] - session[:field_data][:substitution] = @edit[:new_field][:substitute] = params[:field_substitution].to_i == 1 ? true : false - end + if params[:item].blank? && !["accept", "save"].include?(params[:button]) && params["action"] != "field_delete" + session[:field_data][:aetype] = @edit[:new_field][:aetype] = params[:field_aetype] if params[:field_aetype] + session[:field_data][:datatype] = @edit[:new_field][:datatype] = params[:field_datatype] if params[:field_datatype] + session[:field_data][:name] = @edit[:new_field][:name] = params[:field_name].strip if params[:field_name] + session[:field_data][:display_name] = @edit[:new_field][:display_name] = params[:field_display_name] if params[:field_display_name] + session[:field_data][:description] = @edit[:new_field][:description] = params[:field_description] if params[:field_description] + if params[:field_substitution] + session[:field_data][:substitution] = @edit[:new_field][:substitute] = params[:field_substitution].to_i == 1 ? true : false + end - @edit[:new_field][:priority] = 1 - @edit[:new][:fields].sort_by{|a| [a.priority.to_i]}.each_with_index do |flds,i| - if i == @edit[:new][:fields].length-1 - if flds.priority.nil? - @edit[:new_field][:priority] = 1 - else - @edit[:new_field][:priority] = flds.priority.to_i+1 - end + @edit[:new_field][:priority] = 1 + @edit[:new][:fields].sort_by{|a| [a.priority.to_i]}.each_with_index do |flds,i| + if i == @edit[:new][:fields].length-1 + if flds.priority.nil? + @edit[:new_field][:priority] = 1 + else + @edit[:new_field][:priority] = flds.priority.to_i+1 end end - session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_default_value] if params[:field_default_value] - session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_password_value] if params[:field_password_value] - session[:field_data][:message] = @edit[:new_field][:message] = params[:field_message] if params[:field_message] - session[:field_data][:collect] = @edit[:new_field][:collect] = params[:field_collect] if params[:field_collect] - session[:field_data][:on_entry] = @edit[:new_field][:on_entry] = params[:field_on_entry] if params[:field_on_entry] - session[:field_data][:on_exit] = @edit[:new_field][:on_exit] = params[:field_on_exit] if params[:field_on_exit] - session[:field_data][:on_error] = @edit[:new_field][:on_error] = params[:field_on_error] if params[:field_on_error] - session[:field_data][:max_retries] = @edit[:new_field][:max_retries] = params[:field_max_retries] if params[:field_max_retries] - session[:field_data][:max_time] = @edit[:new_field][:max_time] = params[:field_max_time] if params[:field_max_time] - @edit[:new_field][:class_id] = @ae_class.id - - @edit[:new][:fields].each_with_index do |flds,i| - var_name = "fields_aetype" << i.to_s - @edit[:new][:fields][i][:aetype] = params[var_name.to_sym] if params[var_name.to_sym] - var_name = "fields_datatype" << i.to_s - @edit[:new][:fields][i][:datatype] = params[var_name.to_sym] if params[var_name.to_sym] - - @edit[:new][:fields][i][:name] = params["fields_name_#{i}".to_sym].strip if params["fields_name_#{i}".to_sym] - @edit[:new][:fields][i][:display_name] = params["fields_display_name_#{i}".to_sym] if params["fields_display_name_#{i}".to_sym] - @edit[:new][:fields][i][:description] = params["fields_description_#{i}".to_sym] if params["fields_description_#{i}".to_sym] - if params["fields_substitution_#{i}".to_sym] - @edit[:new][:fields][i][:substitute] = params["fields_substitution_#{i}".to_sym].to_i == 1 ? true : false - end + end + session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_default_value] if params[:field_default_value] + session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_password_value] if params[:field_password_value] + session[:field_data][:message] = @edit[:new_field][:message] = params[:field_message] if params[:field_message] + session[:field_data][:collect] = @edit[:new_field][:collect] = params[:field_collect] if params[:field_collect] + session[:field_data][:on_entry] = @edit[:new_field][:on_entry] = params[:field_on_entry] if params[:field_on_entry] + session[:field_data][:on_exit] = @edit[:new_field][:on_exit] = params[:field_on_exit] if params[:field_on_exit] + session[:field_data][:on_error] = @edit[:new_field][:on_error] = params[:field_on_error] if params[:field_on_error] + session[:field_data][:max_retries] = @edit[:new_field][:max_retries] = params[:field_max_retries] if params[:field_max_retries] + session[:field_data][:max_time] = @edit[:new_field][:max_time] = params[:field_max_time] if params[:field_max_time] + @edit[:new_field][:class_id] = @ae_class.id - @edit[:new][:fields][i][:default_value] = params["fields_default_value_#{i}".to_sym] if params["fields_default_value_#{i}".to_sym] - @edit[:new][:fields][i][:default_value] = params["fields_password_value_#{i}".to_sym] if params["fields_password_value_#{i}".to_sym] - @edit[:new][:fields][i][:message] = params["fields_message_#{i}".to_sym] if params["fields_message_#{i}".to_sym] - @edit[:new][:fields][i][:collect] = params["fields_collect_#{i}".to_sym] if params["fields_collect_#{i}".to_sym] - @edit[:new][:fields][i][:on_entry] = params["fields_on_entry_#{i}".to_sym] if params["fields_on_entry_#{i}".to_sym] - @edit[:new][:fields][i][:on_exit] = params["fields_on_exit_#{i}".to_sym] if params["fields_on_exit_#{i}".to_sym] - @edit[:new][:fields][i][:on_error] = params["fields_on_error_#{i}".to_sym] if params["fields_on_error_#{i}".to_sym] - @edit[:new][:fields][i][:max_retries] = params["fields_max_retries_#{i}".to_sym] if params["fields_max_retries_#{i}".to_sym] - @edit[:new][:fields][i][:max_time] = params["fields_max_time_#{i}".to_sym] if params["fields_max_time_#{i}".to_sym] - #@edit[:new][:fields][i][:class_id] = @ae_class.id.to_s - end - elsif params[:button] == "accept" - if !session[:field_data][:name] || session[:field_data][:name] == "" - add_flash(I18n.t("flash.edit.field_required", :field=>"Name"), :error) - return + @edit[:new][:fields].each_with_index do |flds,i| + var_name = "fields_aetype" << i.to_s + @edit[:new][:fields][i][:aetype] = params[var_name.to_sym] if params[var_name.to_sym] + var_name = "fields_datatype" << i.to_s + @edit[:new][:fields][i][:datatype] = params[var_name.to_sym] if params[var_name.to_sym] + + @edit[:new][:fields][i][:name] = params["fields_name_#{i}".to_sym].strip if params["fields_name_#{i}".to_sym] + @edit[:new][:fields][i][:display_name] = params["fields_display_name_#{i}".to_sym] if params["fields_display_name_#{i}".to_sym] + @edit[:new][:fields][i][:description] = params["fields_description_#{i}".to_sym] if params["fields_description_#{i}".to_sym] + if params["fields_substitution_#{i}".to_sym] + @edit[:new][:fields][i][:substitute] = params["fields_substitution_#{i}".to_sym].to_i == 1 ? true : false end - new_field = MiqAeField.new - new_field.name = @edit[:new_field][:name] - new_field.display_name = @edit[:new_field][:display_name] - new_field.description = @edit[:new_field][:description] - new_field.aetype = @edit[:new_field][:aetype] - new_field.datatype = @edit[:new_field][:datatype] - new_field.substitute = @edit[:new_field][:substitute] - new_field.priority = @edit[:new_field][:priority] - new_field.default_value = @edit[:new_field][:default_value] - new_field.message = @edit[:new_field][:message] - new_field.collect = @edit[:new_field][:collect] - new_field.class_id = @edit[:new_field][:class_id] - new_field.on_entry = @edit[:new_field][:on_entry] - new_field.on_exit = @edit[:new_field][:on_exit] - new_field.on_error = @edit[:new_field][:on_error] - new_field.max_retries = @edit[:new_field][:max_retries] - new_field.max_time = @edit[:new_field][:max_time] - @edit[:new][:fields].push(new_field) - @edit[:new_field] = session[:field_data] = {} + + @edit[:new][:fields][i][:default_value] = params["fields_default_value_#{i}".to_sym] if params["fields_default_value_#{i}".to_sym] + @edit[:new][:fields][i][:default_value] = params["fields_password_value_#{i}".to_sym] if params["fields_password_value_#{i}".to_sym] + @edit[:new][:fields][i][:message] = params["fields_message_#{i}".to_sym] if params["fields_message_#{i}".to_sym] + @edit[:new][:fields][i][:collect] = params["fields_collect_#{i}".to_sym] if params["fields_collect_#{i}".to_sym] + @edit[:new][:fields][i][:on_entry] = params["fields_on_entry_#{i}".to_sym] if params["fields_on_entry_#{i}".to_sym] + @edit[:new][:fields][i][:on_exit] = params["fields_on_exit_#{i}".to_sym] if params["fields_on_exit_#{i}".to_sym] + @edit[:new][:fields][i][:on_error] = params["fields_on_error_#{i}".to_sym] if params["fields_on_error_#{i}".to_sym] + @edit[:new][:fields][i][:max_retries] = params["fields_max_retries_#{i}".to_sym] if params["fields_max_retries_#{i}".to_sym] + @edit[:new][:fields][i][:max_time] = params["fields_max_time_#{i}".to_sym] if params["fields_max_time_#{i}".to_sym] + #@edit[:new][:fields][i][:class_id] = @ae_class.id.to_s end + elsif params[:button] == "accept" + if !session[:field_data][:name] || session[:field_data][:name] == "" + add_flash(I18n.t("flash.edit.field_required", :field=>"Name"), :error) + return + end + new_field = MiqAeField.new + new_field.name = @edit[:new_field][:name] + new_field.display_name = @edit[:new_field][:display_name] + new_field.description = @edit[:new_field][:description] + new_field.aetype = @edit[:new_field][:aetype] + new_field.datatype = @edit[:new_field][:datatype] + new_field.substitute = @edit[:new_field][:substitute] + new_field.priority = @edit[:new_field][:priority] + new_field.default_value = @edit[:new_field][:default_value] + new_field.message = @edit[:new_field][:message] + new_field.collect = @edit[:new_field][:collect] + new_field.class_id = @edit[:new_field][:class_id] + new_field.on_entry = @edit[:new_field][:on_entry] + new_field.on_exit = @edit[:new_field][:on_exit] + new_field.on_error = @edit[:new_field][:on_error] + new_field.max_retries = @edit[:new_field][:max_retries] + new_field.max_time = @edit[:new_field][:max_time] + @edit[:new][:fields].push(new_field) + @edit[:new_field] = session[:field_data] = {} end end @@ -2209,8 +2260,12 @@ def get_method_form_vars # Get variables from edit form def get_ns_form_vars @ae_ns = MiqAeNamespace.find_by_id(from_cid(@edit[:ae_ns_id])) - @edit[:new][:ns_name] = params[:ns_name].blank? ? nil : params[:ns_name] if params[:ns_name] - @edit[:new][:ns_description] = params[:ns_description].blank? ? nil : params[:ns_description] if params[:ns_description] + @edit[:new][:ns_name] = params[:ns_name].blank? ? + nil : params[:ns_name] if params[:ns_name] + @edit[:new][:ns_description] = params[:ns_description].blank? ? + nil : params[:ns_description] if params[:ns_description] + @edit[:new][:enabled] = params[:ns_enabled] == "1" ? + true : false if params[:ns_enabled] @in_a_form = true end @@ -2283,9 +2338,14 @@ def set_method_record_vars(miqaemethod) # Set record variables to new values def set_ns_record_vars(miqaens) - miqaens.name = @edit[:new][:ns_name].strip unless @edit[:new][:ns_name].blank? + miqaens.name = @edit[:new][:ns_name].strip unless @edit[:new][:ns_name].blank? miqaens.description = @edit[:new][:ns_description] - miqaens.parent_id = from_cid(x_node.split('-')[1]) if x_node != "root" + miqaens.parent_id = @edit[:new][:domain] ? nil : from_cid(x_node.split('-')[1]) + if @edit[:new][:domain] + miqaens.enabled = @edit[:new][:enabled] + # set highest priority on new records. + miqaens.priority = MiqAeDomain.highest_priority + 1 unless miqaens.id + end end # Set record variables to new values @@ -2364,68 +2424,184 @@ def fields_seq_edit_screen(id) session[:edit] = @edit end - def move_cols_up - return unless load_edit("fields_edit__seq","replace_cell__explorer") - if !params[:seq_fields] || params[:seq_fields].length == 0 || params[:seq_fields][0] == "" - add_flash(I18n.t("flash.edit.no_fields_to_move.up", :field=>"fields"), :error) + def move_selected_fields_up(available_fields, selected_fields, display_name) + if no_items_selected?(selected_fields) + add_flash(I18n.t("flash.edit.no_fields_to_move.up", :field => display_name), :error) return end - consecutive, first_idx, last_idx = selected_consecutive? - if ! consecutive - add_flash(I18n.t("flash.edit.select_fields_to_move.up", :field=>"fields"), :error) + consecutive, first_idx, last_idx = selected_consecutive?(available_fields, selected_fields) + unless consecutive + add_flash(I18n.t("flash.edit.select_fields_to_move.up", :field => display_name), :error) else if first_idx > 0 - @edit[:new][:fields_list][first_idx..last_idx].reverse.each do |field| - pulled = @edit[:new][:fields_list].delete(field) - @edit[:new][:fields_list].insert(first_idx - 1, pulled) + available_fields[first_idx..last_idx].reverse.each do |field| + pulled = available_fields.delete(field) + available_fields.insert(first_idx - 1, pulled) end end - @refresh_div = "column_lists" - @refresh_partial = "fields_seq_form" end - @selected = params[:seq_fields] + @selected = selected_fields end - def move_cols_down - return unless load_edit("fields_edit__seq","replace_cell__explorer") - if !params[:seq_fields] || params[:seq_fields].length == 0 || params[:seq_fields][0] == "" - add_flash(I18n.t("flash.edit.no_fields_to_move.down", :field=>"fields"), :error) + def move_selected_fields_down(available_fields, selected_fields, display_name) + if no_items_selected?(selected_fields) + add_flash(I18n.t("flash.edit.no_fields_to_move.down", :field=> display_name), :error) return end - consecutive, first_idx, last_idx = selected_consecutive? - if ! consecutive - add_flash(I18n.t("flash.edit.select_fields_to_move.down", :field=>"fields"), :error) + consecutive, first_idx, last_idx = selected_consecutive?(available_fields, selected_fields) + unless consecutive + add_flash(I18n.t("flash.edit.select_fields_to_move.down", :field => display_name), :error) else - if last_idx < @edit[:new][:fields_list].length - 1 + if last_idx < available_fields.length - 1 insert_idx = last_idx + 1 # Insert before the element after the last one - insert_idx = -1 if last_idx == @edit[:new][:fields_list].length - 2 # Insert at end if 1 away from end - @edit[:new][:fields_list][first_idx..last_idx].each do |field| - pulled = @edit[:new][:fields_list].delete(field) - @edit[:new][:fields_list].insert(insert_idx, pulled) + insert_idx = -1 if last_idx == available_fields.length - 2 # Insert at end if 1 away from end + available_fields[first_idx..last_idx].each do |field| + pulled = available_fields.delete(field) + available_fields.insert(insert_idx, pulled) end end - @refresh_div = "column_lists" - @refresh_partial = "fields_seq_form" end - @selected = params[:seq_fields] + @selected = selected_fields + end + + def no_items_selected?(field_name) + !field_name || field_name.length == 0 || field_name[0] == "" end - def selected_consecutive? + def selected_consecutive?(available_fields, selected_fields) first_idx = last_idx = 0 - @edit[:new][:fields_list].each_with_index do |nf,idx| - first_idx = idx if nf == params[:seq_fields].first - if nf == params[:seq_fields].last + available_fields.each_with_index do |nf, idx| + first_idx = idx if nf == selected_fields.first + if nf == selected_fields.last last_idx = idx break end end - if last_idx - first_idx + 1 > params[:seq_fields].length + if last_idx - first_idx + 1 > selected_fields.length return [false, first_idx, last_idx] else return [true, first_idx, last_idx] end end + def edit_domain_or_namespace + obj = find_checked_items + obj = [x_node] if obj.nil? && params[:pressed] == "miq_ae_domain_edit" + @ae_ns = MiqAeNamespace.find(from_cid(obj[0].split('-')[1])) + if @ae_ns.domain? && !@ae_ns.editable? + add_flash(I18n.t("flash.cant_edit_read_only", + :model => ui_lookup(:model => "MiqAeDomain"), + :name => @ae_ns.name), + :error) + else + set_ns_form_vars("MiqAeNamespace") + @in_a_form = true + session[:changed] = @changed = false + end + replace_right_cell + end + + def new_ns + assert_privileges("miq_ae_namespace_new") + new_domain_or_namespace("MiqAeNamespace") + end + + def new_domain + assert_privileges("miq_ae_domain_new") + new_domain_or_namespace("MiqAeDomain") + end + + def new_domain_or_namespace(typ) + @ae_ns = MiqAeNamespace.new + set_ns_form_vars(typ) + @in_a_form = true + replace_right_cell + end + + # Set form variables for edit + def set_ns_form_vars(typ) + session[:field_data] = {} + @edit = {} + session[:edit] = {} + @edit[:ae_ns_id] = @ae_ns.id + @edit[:new] = {} + @edit[:current] = {} + @edit[:rec_id] = @ae_ns.id || nil + @edit[:key] = "aens_edit__#{@ae_ns.id || "new"}" + @edit[:new][:ns_name] = @ae_ns.name + @edit[:new][:ns_description] = @ae_ns.description + # set these field for a new domain or when existing record is a domain + if typ == "MiqAeDomain" || (@ae_ns.id && @ae_ns.domain?) + @edit[:new][:domain] = true + @edit[:new][:enabled] = @ae_ns.enabled + end + @edit[:current] = @edit[:new].dup + @right_cell_text = @edit[:rec_id].nil? ? + I18n.t("cell_header.adding_model_record", + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}")) : + I18n.t("cell_header.editing_model_record", + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), + :name => @ae_ns.name) + session[:edit] = @edit + end + + def priority_edit_screen + @in_a_form = true + @edit = {} + @edit[:new] = {} + @edit[:current] = {} + @edit[:new][:domain_order] = [] + MiqAeDomain.order('priority DESC').collect { |domain| @edit[:new][:domain_order].push("#{domain.editable? ? + domain.name : domain.name + " (Read Only)"}") unless domain.priority == 0 } + @edit[:key] = "priority__edit" + @edit[:current] = copy_hash(@edit[:new]) + session[:edit] = @edit + end + + def priority_get_form_vars + @in_a_form = true + move_selected_fields_up(@edit[:new][:domain_order], params[:seq_fields], "Domains") if params[:button] == "up" + move_selected_fields_down(@edit[:new][:domain_order], params[:seq_fields], "Domains") if params[:button] == "down" + unless @flash_array + @refresh_div = "domains_list" + @refresh_partial = "domains_priority_form" + end + end + + def domain_toggle(locked) + assert_privileges("miq_ae_domain_#{locked ? 'lock' : 'unlock'}") + action = locked ? "Locked" : "Unlocked" + if params[:id].nil? + add_flash(I18n.t("flash.no_records_selected_to_be_marked", + :model => ui_lookup(:model => "MiqAeDomain"), + :action => action), + :error) + render :update do |page| + page.replace("flash_msg_div", :partial => "layouts/flash_msg") + end + end + domain_toggle_lock(params[:id], locked) + add_flash(I18n.t("flash.selected_records_were_marked", + :model => ui_lookup(:model=>"MiqAeDomain"), + :action => action), + :info, true) unless flash_errors? + replace_right_cell([:ae]) + end + + def domain_lock + domain_toggle(true) + end + + def domain_unlock + domain_toggle(false) + end + + def domain_toggle_lock(domain_id, lock_value) + domain = MiqAeNamespace.find_by_id(domain_id) + domain.system = lock_value + domain.save! + end + def get_session_data @layout = "miq_ae_class" @title = "Datastore" diff --git a/vmdb/app/helpers/application_helper.rb b/vmdb/app/helpers/application_helper.rb index d74c448eb92..cd0740abd61 100644 --- a/vmdb/app/helpers/application_helper.rb +++ b/vmdb/app/helpers/application_helper.rb @@ -825,6 +825,15 @@ def build_toolbar_hide_button(id) when "action_delete" return true if !role_allows(:feature=>"action_delete") end + when "MiqAeClass", "MiqAeField", "MiqAeInstance", "MiqAeMethod", "MiqAeNamespace" + case id + when "miq_ae_domain_lock" + return true unless @record.editable? + when "miq_ae_domain_unlock" + return true if @record.editable? || @record.priority.to_i == 0 + else + return true unless @record.editable? + end when "MiqAlert" case id when "alert_copy" @@ -1165,6 +1174,17 @@ def build_toolbar_disable_button(id) return "Default actions can not be deleted." if @record.action_type == "default" return "Actions assigned to Policies can not be deleted" if @record.miq_policies.length > 0 end + when "MiqAeNamespace" + case id + when "miq_ae_domain_delete" + return "Read Only Domain cannot be deleted." unless @record.editable? + when "miq_ae_domain_edit" + return "Read Only Domain cannot be edited" unless @record.editable? + when "miq_ae_domain_lock" + return "Domain is Locked." unless @record.editable? + when "miq_ae_domain_unlock" + return "Domain is Unlocked." if @record.editable? + end when "MiqAlert" case id when "alert_delete" @@ -1895,9 +1915,8 @@ def center_toolbar_filename_explorer def center_toolbar_filename_automate nodes = x_node.split('-') - return "blank_view_tb" unless ae_object_editable?(nodes) return case nodes.first - when "root" then "blank_view_tb" + when "root" then "miq_ae_domains_center_tb" when "aen" then domain_or_namespace_toolbar(nodes.last) when "aec" then case @sb[:active_tab] when "methods" then "miq_ae_methods_center_tb" @@ -1910,21 +1929,10 @@ def center_toolbar_filename_automate end end - def ae_object_editable?(nodes) - kls = case nodes.first - when "aen" then MiqAeNamespace - when "aec" then MiqAeClass - when "aei" then MiqAeInstance - when "aem" then MiqAeMethod - else nil - end - kls.find_by_id(from_cid(nodes.last)).editable? unless kls.nil? - end - def domain_or_namespace_toolbar(node_id) ns = MiqAeNamespace.find(from_cid(node_id)) - if ns.domain? && ns.editable? - "miq_ae_namespaces_center_tb" + if ns.domain? + "miq_ae_domain_center_tb" elsif !ns.domain? "miq_ae_namespace_center_tb" else diff --git a/vmdb/app/models/miq_ae_domain.rb b/vmdb/app/models/miq_ae_domain.rb index f521d19d9e9..e88306abd61 100644 --- a/vmdb/app/models/miq_ae_domain.rb +++ b/vmdb/app/models/miq_ae_domain.rb @@ -5,4 +5,10 @@ class MiqAeDomain < MiqAeNamespace def self.enabled where(:enabled => true) end + + protected + + def self.highest_priority + MiqAeDomain.order('priority DESC').first.priority + end end diff --git a/vmdb/app/models/user.rb b/vmdb/app/models/user.rb index 82c2fa3189d..22ff92216b7 100644 --- a/vmdb/app/models/user.rb +++ b/vmdb/app/models/user.rb @@ -174,7 +174,10 @@ def ldap_group def role_allows?(options={}) return false if self.miq_user_role.nil? - self.miq_user_role.allows?(options) + feature = MiqProductFeature.find_by_identifier(options[:identifier]) + feature.try(:hidden) ? + self.miq_user_role.allows_any?(:identifiers => [options[:identifier]]) : + self.miq_user_role.allows?(options) end def role_allows_any?(options={}) diff --git a/vmdb/app/views/layouts/_page_header_navbar.html.haml b/vmdb/app/views/layouts/_page_header_navbar.html.haml index 3502d890b72..d5156d4b8e5 100644 --- a/vmdb/app/views/layouts/_page_header_navbar.html.haml +++ b/vmdb/app/views/layouts/_page_header_navbar.html.haml @@ -209,7 +209,7 @@ %a{:href=>'/dashboard/maintab/?tab=aut'}= h(MAIN_TABS[:aut]) %ul(class="#{primary_nav_class(:aut)}") - -if role_allows(:feature => 'miq_ae_class_explorer') + -if role_allows(:feature => 'miq_ae_domain_view') %li(class="#{secondary_nav_class('miq_ae_class')}") %a{:href=>'/miq_ae_class/explorer'}Explorer diff --git a/vmdb/app/views/miq_ae_class/_domains_priority_form.html.erb b/vmdb/app/views/miq_ae_class/_domains_priority_form.html.erb new file mode 100644 index 00000000000..7a99f36aa13 --- /dev/null +++ b/vmdb/app/views/miq_ae_class/_domains_priority_form.html.erb @@ -0,0 +1,48 @@ +<%= render :partial => "layouts/flash_msg", :locals=>{:div_num=>"_domains_priority"} %> +
+ + + + + + +
+ + + + + + + + + +
* Select one or more consecutive groups to move up or down.
+
Domains:
+ <%= select_tag('seq_fields[]', options_for_select(@edit[:new][:domain_order], @selected), { :multiple=> true, :style=>"width: 450px", :size=>20, :id=>"seq_fields" } ) %> + + <% if @edit[:new][:domain_order].length < 2 %> + <%= image_tag("/images/toolbars/up.png", :class=>"dimmed small") %> + <% else %> + <%= link_to(image_tag("/images/toolbars/up.png", + :class=>"rollover small", :alt=>"Move selected fields up"), + {:action=>'priority_form_field_changed', :button=>'up', :id=>"priority__edit"}, + "data-submit" =>"domains_list", + :remote=>true, + :title=>'Move selected fields up') + %> + <% end %> + + <% if @edit[:new][:domain_order].length < 2 %> + <%= image_tag("/images/toolbars/down.png", :class=>"dimmed small") %> + <% else %> + <%= link_to(image_tag("/images/toolbars/down.png", + :class=>"rollover small", :alt=>"Move selected fields down"), + {:action=>'priority_form_field_changed', :button=>'down', :id=>"priority__edit"}, + "data-submit" =>"domains_list", + :remote=>true, + :title=>'Move selected fields down') + %> + <% end %> +
+
+
diff --git a/vmdb/app/views/miq_ae_class/_fields_seq_form.html.erb b/vmdb/app/views/miq_ae_class/_fields_seq_form.html.erb index 79eadc08c80..65c3545aaf6 100644 --- a/vmdb/app/views/miq_ae_class/_fields_seq_form.html.erb +++ b/vmdb/app/views/miq_ae_class/_fields_seq_form.html.erb @@ -49,3 +49,7 @@ + diff --git a/vmdb/app/views/miq_ae_class/_ns_list.html.erb b/vmdb/app/views/miq_ae_class/_ns_list.html.erb index f0b46d77744..838f41a109b 100644 --- a/vmdb/app/views/miq_ae_class/_ns_list.html.erb +++ b/vmdb/app/views/miq_ae_class/_ns_list.html.erb @@ -30,10 +30,12 @@

Info

- - - - + <% unless @edit[:new][:domain] %> + + + + + <% end %> + <% if @edit[:new][:domain] %> + + + + + <% end %>
<%= Dictionary::gettext('fqname', :type=>:column, :notfound=>:titleize)%><%= h(@sb[:namespace_path]) %>
<%= Dictionary::gettext('fqname', :type=>:column, :notfound=>:titleize)%><%= h(@sb[:namespace_path]) %>
Name @@ -53,8 +55,22 @@ "data-miq_observe"=>{:interval=>'.5', :url=>url}.to_json) %>
Enabled + <%= check_box_tag("ns_enabled", + value = "1", + checked = @edit[:new][:enabled], + "data-miq_observe_checkbox"=>{:url=>url}.to_json) %> +
+ <%# Need this to bind checkbox observers when under DHTMLX tabs %> + <%# TODO: Remove when DHTMLX tabs are converted to jQuery tabs %> + <% end %> diff --git a/vmdb/config/locales/en.yml b/vmdb/config/locales/en.yml index abb8bfbd975..b112cbe5add 100644 --- a/vmdb/config/locales/en.yml +++ b/vmdb/config/locales/en.yml @@ -373,9 +373,12 @@ en: no_records_selected_for_task: 'No %{model} were selected for %{task}' no_records_selected_to_be_disabled: 'No %{model} were selected to be disabled' no_records_selected_to_be_enabled: 'No %{model} were selected to be enabled' + no_records_selected_to_be_marked: 'No %{model} were selected to be marked as %{action}' no_utilization_data_available: "No Utilization data available" no_vc_defined: "No Virtual Center instances have been defined, press a button to Add or Discover one" press_back_button: "Press your browser's Back button or click a tab to continue" + priority_order_cancelled: "Edit of Priority Order was cancelled by the user" + priority_order_saved: "Priority Order was saved" record_no_longer_exists: "%{record_name} no longer exists in the database" record_not_authorized for user: "You are not authorized to view %{record_name}" search_not_found: "The selected Filter record was not found" @@ -427,6 +430,7 @@ en: selected_records_deleted_with_count: "Successfully deleted %{count_model} from the CFME Database" selected_records_were_disabled: 'The selected %{model} were disabled' selected_records_were_enabled: 'The selected %{model} were enabled' + selected_records_were_marked: 'The selected %{model} were marked as %{action}' task_cancelled: "%{task} was cancelled by the user" unknown_error: "Unknown error has occurred" user_not_authorized: "The user is not authorized for this task or item." diff --git a/vmdb/config/routes.rb b/vmdb/config/routes.rb index 831233fe079..9b0a333c8fe 100644 --- a/vmdb/config/routes.rb +++ b/vmdb/config/routes.rb @@ -527,6 +527,7 @@ create_instance create_method create_ns + domains_priority_edit explorer expand_toggle field_accept @@ -542,6 +543,7 @@ form_instance_field_changed form_method_field_changed form_ns_field_changed + priority_form_field_changed reload tree_select tree_autoload_dynatree diff --git a/vmdb/db/fixtures/miq_product_features.yml b/vmdb/db/fixtures/miq_product_features.yml index 1bcffeabfb5..90985f38d08 100644 --- a/vmdb/db/fixtures/miq_product_features.yml +++ b/vmdb/db/fixtures/miq_product_features.yml @@ -1922,6 +1922,44 @@ :feature_type: node :identifier: miq_ae_class_explorer :children: + - :name: Automate Domains + :description: Automate Domains + :feature_type: node + :identifier: miq_ae_domain + :children: + - :name: View + :description: View + :feature_type: view + :identifier: miq_ae_domain_view + - :name: Modify + :description: Modify Domain + :feature_type: admin + :identifier: miq_ae_domain_admin + :children: + - :name: Add + :description: Add Automate Domain + :feature_type: admin + :identifier: miq_ae_domain_new + - :name: Edit + :description: Edit Automate Domain + :feature_type: admin + :identifier: miq_ae_domain_edit + - :name: Delete + :description: Delete Automate Domain + :feature_type: admin + :identifier: miq_ae_domain_delete + - :name: Priority Order + :description: Edit Priority Order of Domains + :feature_type: admin + :identifier: miq_ae_domain_priority_edit + - :name: Unlock + :description: Unlock Domain + :feature_type: admin + :identifier: miq_ae_domain_unlock + - :name: Lock + :description: Lock Domain + :feature_type: admin + :identifier: miq_ae_domain_lock - :name: Automate Namespace :description: Automate Namespace :feature_type: node diff --git a/vmdb/product/toolbars/miq_ae_namespaces_center_tb.yaml b/vmdb/product/toolbars/miq_ae_domain_center_tb.yaml similarity index 52% rename from vmdb/product/toolbars/miq_ae_namespaces_center_tb.yaml rename to vmdb/product/toolbars/miq_ae_domain_center_tb.yaml index 428749c4ee6..dd17ed3609c 100644 --- a/vmdb/product/toolbars/miq_ae_namespaces_center_tb.yaml +++ b/vmdb/product/toolbars/miq_ae_domain_center_tb.yaml @@ -2,15 +2,33 @@ # Toolbar config file # --- -:model: MiqAeNamespace +:model: MiqAeDomain :button_groups: -- :name: miq_ae_namespace_vmdb +- :name: miq_ae_domain_vmdb :items: - - :buttonSelect: miq_ae_namespace_vmdb_choice + - :buttonSelect: miq_ae_domain_vmdb_choice :image: vmdb :title: Configuration :text: Configuration :items: + - :button: miq_ae_domain_edit + :image: edit + :text: 'Edit this Domain' + :title: 'Edit this Domain' + - :button: miq_ae_domain_delete + :image: delete + :text: 'Remove this Domain' + :title: 'Remove this Domain' + :confirm: 'Are you sure you want to remove this Domain?' + - :button: miq_ae_domain_unlock + :image: enable + :text: Unlock this Domain + :title: Unlock this Domain + - :button: miq_ae_domain_lock + :image: disable + :text: Lock this Domain + :title: Lock this Domain + - :separator: - :button: miq_ae_namespace_new :image: new_namespace :text: 'Add a New Namespace' @@ -29,4 +47,5 @@ :url_parms: 'main_div' :confirm: 'Are you sure you want to remove the selected Namespaces?' :enabled: 'false' - :onwhen: '1+' \ No newline at end of file + :onwhen: '1+' + diff --git a/vmdb/product/toolbars/miq_ae_domains_center_tb.yaml b/vmdb/product/toolbars/miq_ae_domains_center_tb.yaml new file mode 100644 index 00000000000..12522815606 --- /dev/null +++ b/vmdb/product/toolbars/miq_ae_domains_center_tb.yaml @@ -0,0 +1,37 @@ +# +# Toolbar config file +# +--- +:model: MiqAeDomain +:button_groups: +- :name: miq_ae_domain_vmdb + :items: + - :buttonSelect: miq_ae_domain_vmdb_choice + :image: vmdb + :title: Configuration + :text: Configuration + :items: + - :button: miq_ae_domain_new + :image: new_namespace + :text: 'Add a New Domain' + :title: 'Add a New Domain' + - :button: miq_ae_domain_edit + :image: edit + :text: 'Edit Selected Domains' + :title: 'Select a single Domains to edit' + :url_parms: 'main_div' + :enabled: 'false' + :onwhen: '1' + - :button: miq_ae_domain_delete + :image: remove + :text: 'Remove Domains' + :title: 'Remove selected Domains' + :url_parms: 'main_div' + :confirm: 'Are you sure you want to remove the selected Domains?' + :enabled: 'false' + :onwhen: '1+' + - :separator: + - :button: miq_ae_domain_priority_edit + :image: edit-assign + :text: "Edit Priority Order of Domains" + :title: "Edit Priority Order of Domains" diff --git a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb index b0a6dfb3f50..51ed4d13a23 100644 --- a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb +++ b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb @@ -2,7 +2,7 @@ describe MiqAeClassController do context "#set_record_vars" do - it "dashboard owner remains unchanged" do + it "Namespace remains unchanged when a class is edited" do ns = FactoryGirl.create(:miq_ae_namespace) cls = FactoryGirl.create(:miq_ae_class, :namespace_id => ns.id) ns_id = cls.namespace_id @@ -33,7 +33,55 @@ fq_name = "" controller.send(:set_right_cell_text, id) assigns(:sb)[:namespace_path].should == fq_name + end + end + + context "#domain_lock" do + it "Marks domain as locked/readonly" do + set_user_privileges + ns = FactoryGirl.create(:miq_ae_namespace, :system => false) + controller.instance_variable_set(:@_params, {:id => ns.id}) + controller.stub(:replace_right_cell) + controller.send(:domain_lock) + ns.reload + ns.system.should == true + end + end + context "#domain_unlock" do + it "Marks domain as unlocked/editable" do + set_user_privileges + ns = FactoryGirl.create(:miq_ae_namespace, :system => true) + controller.instance_variable_set(:@_params, {:id => ns.id}) + controller.stub(:replace_right_cell) + controller.send(:domain_unlock) + ns.reload + ns.system.should == false + end + end + + context "#domains_priority_edit" do + it "sets priority of domains" do + set_user_privileges + ns1 = FactoryGirl.create(:miq_ae_namespace, :name => "test1", :parent => nil, :priority => 1) + ns2 = FactoryGirl.create(:miq_ae_namespace, :name => "test2", :parent => nil, :priority => 2) + ns3 = FactoryGirl.create(:miq_ae_namespace, :name => "test3", :parent => nil, :priority => 3) + ns4 = FactoryGirl.create(:miq_ae_namespace, :name => "test4", :parent => nil, :priority => 4) + order = ["test3", "test2", "test4", "test1"] + edit = { + :new => {:domain_order => order}, + :key => "priority__edit", + :current => {:domain_order => order}, + } + controller.instance_variable_set(:@_params, {:button => "save"}) + controller.instance_variable_set(:@edit, edit) + controller.instance_variable_set(:@sb, {}) + session[:edit] = edit + controller.stub(:replace_right_cell) + controller.send(:domains_priority_edit) + domain_order = [] + MiqAeDomain.order('priority ASC').collect { |domain| domain_order.push(domain.name) unless domain.priority == 0} + domain_order.should eq(edit[:new][:domain_order]) end end end diff --git a/vmdb/spec/helpers/application_helper_spec.rb b/vmdb/spec/helpers/application_helper_spec.rb index f565f80b4ab..2fed4d7e23a 100644 --- a/vmdb/spec/helpers/application_helper_spec.rb +++ b/vmdb/spec/helpers/application_helper_spec.rb @@ -3991,43 +3991,17 @@ def setup_firefox_with_linux :trees => {:ae_tree => {:tree => :ae_tree}}} end - it "should return blank toolbar on root node" do + it "should return domains toolbar on root node" do x_node_set('root', :ae_tree) toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") - end - - it "should return blank toolbar on read only namespace and class nodes" do - n1 = FactoryGirl.create(:miq_ae_namespace, :name => 'ns1', :priority => 10, :system => true) - x_node_set("aen-#{n1.id}", :ae_tree) - toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") - - c1 = FactoryGirl.create(:miq_ae_class, :namespace_id => n1.id, :name => "foo") - x_node_set("aec-#{c1.id}", :ae_tree) - - @sb[:active_tab] = "props" - toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") - - @sb[:active_tab] = "methods" - toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") - - @sb[:active_tab] = "schema" - toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") - - @sb[:active_tab] = "" - toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("blank_view_tb") + toolbar_name.should eq("miq_ae_domains_center_tb") end it "should return namespaces toolbar on domain node" do n1 = FactoryGirl.create(:miq_ae_namespace, :name => 'ns1', :priority => 10) x_node_set("aen-#{n1.id}", :ae_tree) toolbar_name = center_toolbar_filename_automate - toolbar_name.should eq("miq_ae_namespaces_center_tb") + toolbar_name.should eq("miq_ae_domain_center_tb") end it "should return namespace toolbar on namespace node" do diff --git a/vmdb/spec/models/miq_product_feature_spec.rb b/vmdb/spec/models/miq_product_feature_spec.rb index 6a83d4e5519..857b472be17 100644 --- a/vmdb/spec/models/miq_product_feature_spec.rb +++ b/vmdb/spec/models/miq_product_feature_spec.rb @@ -5,14 +5,14 @@ it "empty table" do MiqRegion.seed MiqProductFeature.seed - MiqProductFeature.count.should eq(773) + MiqProductFeature.count.should eq(782) end it "run twice" do MiqRegion.seed MiqProductFeature.seed MiqProductFeature.seed - MiqProductFeature.count.should eq(773) + MiqProductFeature.count.should eq(782) end it "with existing records" do @@ -24,7 +24,7 @@ MiqRegion.seed MiqProductFeature.seed - MiqProductFeature.count.should eq(773) + MiqProductFeature.count.should eq(782) expect { deleted.reload }.to raise_error(ActiveRecord::RecordNotFound) changed.reload.name.should == "About" unchanged.reload.updated_at.should be_same_time_as unchanged_orig_updated_at From 7a489284f6355ea41a5e5281a7b43a7c2e9dbb40 Mon Sep 17 00:00:00 2001 From: Harpreet Kataria Date: Mon, 16 Jun 2014 12:06:58 -0400 Subject: [PATCH 2/4] Fixed rubocop warnings. Issue #2045 --- .../controllers/miq_ae_class_controller.rb | 163 ++++++++++-------- vmdb/app/models/miq_ae_domain.rb | 2 - vmdb/app/models/user.rb | 4 +- vmdb/config/locales/en.yml | 1 + .../miq_ae_class_controller_spec.rb | 26 +-- 5 files changed, 108 insertions(+), 88 deletions(-) diff --git a/vmdb/app/controllers/miq_ae_class_controller.rb b/vmdb/app/controllers/miq_ae_class_controller.rb index 0ab7fc6b7e2..b11f4308532 100644 --- a/vmdb/app/controllers/miq_ae_class_controller.rb +++ b/vmdb/app/controllers/miq_ae_class_controller.rb @@ -70,9 +70,9 @@ def change_tab def x_button @sb[:action] = action = params[:pressed] - raise ActionController::RoutingError.new('invalid button action') unless + raise ActionController::RoutingError, I18n.t("flash.invalid_button_action") unless AE_X_BUTTON_ALLOWED_ACTIONS.key?(action) - self.send(AE_X_BUTTON_ALLOWED_ACTIONS[action]) + send(AE_X_BUTTON_ALLOWED_ACTIONS[action]) end def explorer @@ -298,7 +298,7 @@ def replace_right_cell(replace_trees = []) elsif @sb[:action] == "miq_ae_domain_priority_edit" presenter[:replace_partials][:flash_msg_div_domains_priority] = r[ :partial => "layouts/flash_msg", - :locals => {:div_num=>"_domains_priority"} + :locals => {:div_num => "_domains_priority"} ] if @flash_array presenter[:update_partials][:ns_list_div] = r[:partial => "domains_priority_form"] else @@ -335,7 +335,7 @@ def replace_right_cell(replace_trees = []) :record_id => @edit[:rec_id], :action_url => action_url, :multi_record => @sb[:action] == "miq_ae_domain_priority_edit", - :serialize => @sb[:active_tab] == 'methods', + :serialize => @sb[:active_tab] == 'methods', } ] else @@ -1413,15 +1413,15 @@ def update_fields def update_ns assert_privileges("miq_ae_namespace_edit") - return unless load_edit("aens_edit__#{params[:id]}","replace_cell__explorer") + return unless load_edit("aens_edit__#{params[:id]}", "replace_cell__explorer") get_ns_form_vars @changed = (@edit[:new] != @edit[:current]) case params[:button] when "cancel" session[:edit] = nil # clean out the saved info add_flash(I18n.t("flash.edit.cancelled", - :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), - :name=>@ae_ns.name)) + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), + :name => @ae_ns.name)) @in_a_form = false replace_right_cell when "save" @@ -1436,12 +1436,14 @@ def update_ns session[:changed] = @changed @changed = true render :update do |page| - page.replace("flash_msg_div_ns_list", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_ns_list"}) + page.replace("flash_msg_div_ns_list", + :partial => "layouts/flash_msg", + :locals => {:div_num => "_ns_list"}) end else add_flash(I18n.t("flash.edit.saved", - :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), - :name=>ae_ns.name)) + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), + :name => ae_ns.name)) AuditEvent.success(build_saved_audit(ae_ns, @edit)) session[:edit] = nil # clean out the saved info @in_a_form = false @@ -1639,12 +1641,12 @@ def create_method def create_ns assert_privileges("miq_ae_namespace_new") - return unless load_edit("aens_edit__new","replace_cell__explorer") + return unless load_edit("aens_edit__new", "replace_cell__explorer") get_ns_form_vars case params[:button] when "cancel" add_flash(I18n.t("flash.add.cancelled", - :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"))) + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"))) @in_a_form = false replace_right_cell when "add" @@ -1655,14 +1657,16 @@ def create_ns add_ae_ns.save! end rescue StandardError => bang - add_flash(I18n.t("flash.error_during", :task=>"add") << bang.message, :error) + add_flash(I18n.t("flash.error_during", :task => "add") << bang.message, :error) render :update do |page| - page.replace("flash_msg_div_ns_list", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_ns_list"}) + page.replace("flash_msg_div_ns_list", + :partial => "layouts/flash_msg", + :locals => {:div_num => "_ns_list"}) end else add_flash(I18n.t("flash.add.added", - :model=>ui_lookup(:model=>"#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), - :name=>add_ae_ns.name)) + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), + :name => add_ae_ns.name)) @in_a_form = false replace_right_cell([:ae]) end @@ -1846,7 +1850,9 @@ def fields_seq_field_changed end @changed = (@edit[:new] != @edit[:current]) render :update do |page| # Use JS to update the display - page.replace("flash_msg_div_fields_seq", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_fields_seq"}) unless @refresh_div && @refresh_div != "column_lists" + page.replace("flash_msg_div_fields_seq", + :partial => "layouts/flash_msg", + :locals => {:div_num => "_fields_seq"}) unless @refresh_div && @refresh_div != "column_lists" page.replace(@refresh_div, :partial=>@refresh_partial) if @refresh_div if @changed page << javascript_for_miq_button_visibility(@changed) @@ -1902,11 +1908,13 @@ def fields_seq_edit end def priority_form_field_changed - return unless load_edit(params[:id],"replace_cell__explorer") + return unless load_edit(params[:id], "replace_cell__explorer") priority_get_form_vars render :update do |page| # Use JS to update the display changed = (@edit[:new] != @edit[:current]) - page.replace("flash_msg_div_domains_priority", :partial=>"layouts/flash_msg", :locals=>{:div_num=>"_domains_priority"}) if @flash_array + page.replace("flash_msg_div_domains_priority", + :partial => "layouts/flash_msg", + :locals => {:div_num => "_domains_priority"}) if @flash_array page.replace(@refresh_div, :partial => @refresh_partial, :locals => {:action => "domains_priority_edit"}) if @refresh_div @@ -1924,8 +1932,8 @@ def domains_priority_edit add_flash(I18n.t("flash.priority_order_cancelled")) replace_right_cell when "save" - return unless load_edit("priority__edit","replace_cell__explorer") - #TODO: need to move this to model method + return unless load_edit("priority__edit", "replace_cell__explorer") + # TODO: need to move this to model method @edit[:new][:domain_order].reverse!.each_with_index do |domain, i| d = MiqAeDomain.find_by_name(domain.split(" (Read Only)").first) d.priority = i + 1 @@ -2064,7 +2072,10 @@ def delete_domain_or_namespaces if record.editable? ae_ns.push(from_cid(item[1])) else - add_flash(I18n.t("flash.cannot_delete", :model => ui_lookup(:model=>"MiqAeDomain"), :field => record.name), :error) + add_flash(I18n.t("flash.cannot_delete", + :model => ui_lookup(:model => "MiqAeDomain"), + :field => record.name), + :error) end else ae_cs.push(from_cid(item[1])) @@ -2118,64 +2129,72 @@ def fields_get_form_vars @ae_class = MiqAeClass.find_by_id(from_cid(@edit[:ae_class_id])) @in_a_form = true @in_a_form_fields = true - if params[:item].blank? && !["accept", "save"].include?(params[:button]) && params["action"] != "field_delete" - session[:field_data][:aetype] = @edit[:new_field][:aetype] = params[:field_aetype] if params[:field_aetype] - session[:field_data][:datatype] = @edit[:new_field][:datatype] = params[:field_datatype] if params[:field_datatype] - session[:field_data][:name] = @edit[:new_field][:name] = params[:field_name].strip if params[:field_name] - session[:field_data][:display_name] = @edit[:new_field][:display_name] = params[:field_display_name] if params[:field_display_name] - session[:field_data][:description] = @edit[:new_field][:description] = params[:field_description] if params[:field_description] + if params[:item].blank? && !%w(accept save).include?(params[:button]) && params["action"] != "field_delete" + field_data = session[:field_data] + new_field = @edit[:new_field] + + field_data[:aetype] = new_field[:aetype] = params[:field_aetype] if params[:field_aetype] + field_data[:datatype] = new_field[:datatype] = params[:field_datatype] if params[:field_datatype] + field_data[:name] = new_field[:name] = params[:field_name].strip if params[:field_name] + field_data[:display_name] = new_field[:display_name] = params[:field_display_name] if params[:field_display_name] + field_data[:description] = new_field[:description] = params[:field_description] if params[:field_description] if params[:field_substitution] - session[:field_data][:substitution] = @edit[:new_field][:substitute] = params[:field_substitution].to_i == 1 ? true : false + field_data[:substitution] = new_field[:substitute] = params[:field_substitution].to_i == 1 ? true : false end - @edit[:new_field][:priority] = 1 - @edit[:new][:fields].sort_by{|a| [a.priority.to_i]}.each_with_index do |flds,i| - if i == @edit[:new][:fields].length-1 + new_field[:priority] = 1 + @edit[:new][:fields].sort_by { |a| [a.priority.to_i] }.each_with_index do |flds, i| + if i == @edit[:new][:fields].length - 1 if flds.priority.nil? - @edit[:new_field][:priority] = 1 + new_field[:priority] = 1 else - @edit[:new_field][:priority] = flds.priority.to_i+1 + new_field[:priority] = flds.priority.to_i + 1 end end end - session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_default_value] if params[:field_default_value] - session[:field_data][:default_value] = @edit[:new_field][:default_value] = params[:field_password_value] if params[:field_password_value] - session[:field_data][:message] = @edit[:new_field][:message] = params[:field_message] if params[:field_message] - session[:field_data][:collect] = @edit[:new_field][:collect] = params[:field_collect] if params[:field_collect] - session[:field_data][:on_entry] = @edit[:new_field][:on_entry] = params[:field_on_entry] if params[:field_on_entry] - session[:field_data][:on_exit] = @edit[:new_field][:on_exit] = params[:field_on_exit] if params[:field_on_exit] - session[:field_data][:on_error] = @edit[:new_field][:on_error] = params[:field_on_error] if params[:field_on_error] - session[:field_data][:max_retries] = @edit[:new_field][:max_retries] = params[:field_max_retries] if params[:field_max_retries] - session[:field_data][:max_time] = @edit[:new_field][:max_time] = params[:field_max_time] if params[:field_max_time] - @edit[:new_field][:class_id] = @ae_class.id - - @edit[:new][:fields].each_with_index do |flds,i| + field_data[:default_value] = new_field[:default_value] = + params[:field_default_value] if params[:field_default_value] + field_data[:default_value] = new_field[:default_value] = + params[:field_password_value] if params[:field_password_value] + field_data[:message] = new_field[:message] = params[:field_message] if params[:field_message] + field_data[:collect] = new_field[:collect] = params[:field_collect] if params[:field_collect] + field_data[:on_entry] = new_field[:on_entry] = params[:field_on_entry] if params[:field_on_entry] + field_data[:on_exit] = new_field[:on_exit] = params[:field_on_exit] if params[:field_on_exit] + field_data[:on_error] = new_field[:on_error] = params[:field_on_error] if params[:field_on_error] + field_data[:max_retries] = new_field[:max_retries] = params[:field_max_retries] if params[:field_max_retries] + field_data[:max_time] = new_field[:max_time] = params[:field_max_time] if params[:field_max_time] + new_field[:class_id] = @ae_class.id + + @edit[:new][:fields].each_with_index do |fld, i| var_name = "fields_aetype" << i.to_s - @edit[:new][:fields][i][:aetype] = params[var_name.to_sym] if params[var_name.to_sym] + fld[:aetype] = params[var_name.to_sym] if params[var_name.to_sym] var_name = "fields_datatype" << i.to_s - @edit[:new][:fields][i][:datatype] = params[var_name.to_sym] if params[var_name.to_sym] + fld[:datatype] = params[var_name.to_sym] if params[var_name.to_sym] - @edit[:new][:fields][i][:name] = params["fields_name_#{i}".to_sym].strip if params["fields_name_#{i}".to_sym] - @edit[:new][:fields][i][:display_name] = params["fields_display_name_#{i}".to_sym] if params["fields_display_name_#{i}".to_sym] - @edit[:new][:fields][i][:description] = params["fields_description_#{i}".to_sym] if params["fields_description_#{i}".to_sym] + fld[:name] = params["fields_name_#{i}".to_sym].strip if params["fields_name_#{i}".to_sym] + fld[:display_name] = + params["fields_display_name_#{i}".to_sym] if params["fields_display_name_#{i}".to_sym] + fld[:description] = + params["fields_description_#{i}".to_sym] if params["fields_description_#{i}".to_sym] if params["fields_substitution_#{i}".to_sym] - @edit[:new][:fields][i][:substitute] = params["fields_substitution_#{i}".to_sym].to_i == 1 ? true : false + fld[:substitute] = params["fields_substitution_#{i}".to_sym].to_i == 1 ? true : false end - @edit[:new][:fields][i][:default_value] = params["fields_default_value_#{i}".to_sym] if params["fields_default_value_#{i}".to_sym] - @edit[:new][:fields][i][:default_value] = params["fields_password_value_#{i}".to_sym] if params["fields_password_value_#{i}".to_sym] - @edit[:new][:fields][i][:message] = params["fields_message_#{i}".to_sym] if params["fields_message_#{i}".to_sym] - @edit[:new][:fields][i][:collect] = params["fields_collect_#{i}".to_sym] if params["fields_collect_#{i}".to_sym] - @edit[:new][:fields][i][:on_entry] = params["fields_on_entry_#{i}".to_sym] if params["fields_on_entry_#{i}".to_sym] - @edit[:new][:fields][i][:on_exit] = params["fields_on_exit_#{i}".to_sym] if params["fields_on_exit_#{i}".to_sym] - @edit[:new][:fields][i][:on_error] = params["fields_on_error_#{i}".to_sym] if params["fields_on_error_#{i}".to_sym] - @edit[:new][:fields][i][:max_retries] = params["fields_max_retries_#{i}".to_sym] if params["fields_max_retries_#{i}".to_sym] - @edit[:new][:fields][i][:max_time] = params["fields_max_time_#{i}".to_sym] if params["fields_max_time_#{i}".to_sym] - #@edit[:new][:fields][i][:class_id] = @ae_class.id.to_s + fld[:default_value] = + params["fields_default_value_#{i}".to_sym] if params["fields_default_value_#{i}".to_sym] + fld[:default_value] = + params["fields_password_value_#{i}".to_sym] if params["fields_password_value_#{i}".to_sym] + fld[:message] = params["fields_message_#{i}".to_sym] if params["fields_message_#{i}".to_sym] + fld[:collect] = params["fields_collect_#{i}".to_sym] if params["fields_collect_#{i}".to_sym] + fld[:on_entry] = params["fields_on_entry_#{i}".to_sym] if params["fields_on_entry_#{i}".to_sym] + fld[:on_exit] = params["fields_on_exit_#{i}".to_sym] if params["fields_on_exit_#{i}".to_sym] + fld[:on_error] = params["fields_on_error_#{i}".to_sym] if params["fields_on_error_#{i}".to_sym] + fld[:max_retries] = params["fields_max_retries_#{i}".to_sym] if params["fields_max_retries_#{i}".to_sym] + fld[:max_time] = params["fields_max_time_#{i}".to_sym] if params["fields_max_time_#{i}".to_sym] end elsif params[:button] == "accept" if !session[:field_data][:name] || session[:field_data][:name] == "" - add_flash(I18n.t("flash.edit.field_required", :field=>"Name"), :error) + add_flash(I18n.t("flash.edit.field_required", :field => "Name"), :error) return end new_field = MiqAeField.new @@ -2430,28 +2449,26 @@ def move_selected_fields_up(available_fields, selected_fields, display_name) return end consecutive, first_idx, last_idx = selected_consecutive?(available_fields, selected_fields) - unless consecutive - add_flash(I18n.t("flash.edit.select_fields_to_move.up", :field => display_name), :error) - else + if consecutive if first_idx > 0 available_fields[first_idx..last_idx].reverse.each do |field| pulled = available_fields.delete(field) available_fields.insert(first_idx - 1, pulled) end end + else + add_flash(I18n.t("flash.edit.select_fields_to_move.up", :field => display_name), :error) end @selected = selected_fields end def move_selected_fields_down(available_fields, selected_fields, display_name) if no_items_selected?(selected_fields) - add_flash(I18n.t("flash.edit.no_fields_to_move.down", :field=> display_name), :error) + add_flash(I18n.t("flash.edit.no_fields_to_move.down", :field => display_name), :error) return end consecutive, first_idx, last_idx = selected_consecutive?(available_fields, selected_fields) - unless consecutive - add_flash(I18n.t("flash.edit.select_fields_to_move.down", :field => display_name), :error) - else + if consecutive if last_idx < available_fields.length - 1 insert_idx = last_idx + 1 # Insert before the element after the last one insert_idx = -1 if last_idx == available_fields.length - 2 # Insert at end if 1 away from end @@ -2460,6 +2477,8 @@ def move_selected_fields_down(available_fields, selected_fields, display_name) available_fields.insert(insert_idx, pulled) end end + else + add_flash(I18n.t("flash.edit.select_fields_to_move.down", :field => display_name), :error) end @selected = selected_fields end @@ -2552,7 +2571,7 @@ def priority_edit_screen @edit[:current] = {} @edit[:new][:domain_order] = [] MiqAeDomain.order('priority DESC').collect { |domain| @edit[:new][:domain_order].push("#{domain.editable? ? - domain.name : domain.name + " (Read Only)"}") unless domain.priority == 0 } + domain.name : domain.name + " (Read Only)"}") unless domain.priority == 0 } @edit[:key] = "priority__edit" @edit[:current] = copy_hash(@edit[:new]) session[:edit] = @edit @@ -2582,7 +2601,7 @@ def domain_toggle(locked) end domain_toggle_lock(params[:id], locked) add_flash(I18n.t("flash.selected_records_were_marked", - :model => ui_lookup(:model=>"MiqAeDomain"), + :model => ui_lookup(:model => "MiqAeDomain"), :action => action), :info, true) unless flash_errors? replace_right_cell([:ae]) diff --git a/vmdb/app/models/miq_ae_domain.rb b/vmdb/app/models/miq_ae_domain.rb index e88306abd61..d45ba201b20 100644 --- a/vmdb/app/models/miq_ae_domain.rb +++ b/vmdb/app/models/miq_ae_domain.rb @@ -6,8 +6,6 @@ def self.enabled where(:enabled => true) end - protected - def self.highest_priority MiqAeDomain.order('priority DESC').first.priority end diff --git a/vmdb/app/models/user.rb b/vmdb/app/models/user.rb index 22ff92216b7..46d04af1370 100644 --- a/vmdb/app/models/user.rb +++ b/vmdb/app/models/user.rb @@ -176,8 +176,8 @@ def role_allows?(options={}) return false if self.miq_user_role.nil? feature = MiqProductFeature.find_by_identifier(options[:identifier]) feature.try(:hidden) ? - self.miq_user_role.allows_any?(:identifiers => [options[:identifier]]) : - self.miq_user_role.allows?(options) + miq_user_role.allows_any?(:identifiers => [options[:identifier]]) : + miq_user_role.allows?(options) end def role_allows_any?(options={}) diff --git a/vmdb/config/locales/en.yml b/vmdb/config/locales/en.yml index b112cbe5add..f924d6f602f 100644 --- a/vmdb/config/locales/en.yml +++ b/vmdb/config/locales/en.yml @@ -421,6 +421,7 @@ en: count_not_in_current_region: "%{label} are not in the current region and will be skipped" error_during_delete_with_count: "Error during %{count_model} delete from the CFME Database" error_no_longer_exists: "Error: Record no longer exists in the database" + invalid_button_action: "Invalid button action." not_in_current_region: "The selected %{label} is not in the current region" refresh_cu_data: "Refresh of recent C&U data has been initiated" schedule_queued_to_run: "The selected Schedule has been queued to run" diff --git a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb index 51ed4d13a23..ae707391fcc 100644 --- a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb +++ b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb @@ -40,7 +40,7 @@ it "Marks domain as locked/readonly" do set_user_privileges ns = FactoryGirl.create(:miq_ae_namespace, :system => false) - controller.instance_variable_set(:@_params, {:id => ns.id}) + controller.instance_variable_set(:@_params, :id => ns.id) controller.stub(:replace_right_cell) controller.send(:domain_lock) ns.reload @@ -52,7 +52,7 @@ it "Marks domain as unlocked/editable" do set_user_privileges ns = FactoryGirl.create(:miq_ae_namespace, :system => true) - controller.instance_variable_set(:@_params, {:id => ns.id}) + controller.instance_variable_set(:@_params, :id => ns.id) controller.stub(:replace_right_cell) controller.send(:domain_unlock) ns.reload @@ -63,24 +63,26 @@ context "#domains_priority_edit" do it "sets priority of domains" do set_user_privileges - ns1 = FactoryGirl.create(:miq_ae_namespace, :name => "test1", :parent => nil, :priority => 1) - ns2 = FactoryGirl.create(:miq_ae_namespace, :name => "test2", :parent => nil, :priority => 2) - ns3 = FactoryGirl.create(:miq_ae_namespace, :name => "test3", :parent => nil, :priority => 3) - ns4 = FactoryGirl.create(:miq_ae_namespace, :name => "test4", :parent => nil, :priority => 4) - order = ["test3", "test2", "test4", "test1"] + FactoryGirl.create(:miq_ae_namespace, :name => "test1", :parent => nil, :priority => 1) + FactoryGirl.create(:miq_ae_namespace, :name => "test2", :parent => nil, :priority => 2) + FactoryGirl.create(:miq_ae_namespace, :name => "test3", :parent => nil, :priority => 3) + FactoryGirl.create(:miq_ae_namespace, :name => "test4", :parent => nil, :priority => 4) + order = %w(test3 test2 test4 test1) edit = { - :new => {:domain_order => order}, - :key => "priority__edit", - :current => {:domain_order => order}, + :new => {:domain_order => order}, + :key => "priority__edit", + :current => {:domain_order => order}, } - controller.instance_variable_set(:@_params, {:button => "save"}) + controller.instance_variable_set(:@_params, :button => "save") controller.instance_variable_set(:@edit, edit) controller.instance_variable_set(:@sb, {}) session[:edit] = edit controller.stub(:replace_right_cell) controller.send(:domains_priority_edit) domain_order = [] - MiqAeDomain.order('priority ASC').collect { |domain| domain_order.push(domain.name) unless domain.priority == 0} + MiqAeDomain.order('priority ASC').collect { |domain| + domain_order.push(domain.name) unless domain.priority == 0 + } domain_order.should eq(edit[:new][:domain_order]) end end From 101405ca3c247679c26a693eb543d45c2f8223fe Mon Sep 17 00:00:00 2001 From: Harpreet Kataria Date: Tue, 17 Jun 2014 17:10:22 -0400 Subject: [PATCH 3/4] Cleanup of code from PR reviews. - Some cleanup in the code where action_url is being set, moved that into its own method. - More cleanup in the area where attributes are being set for MiqAeField. Changed name of the form field for substitute column so looping over form fields in controller to set MiqAeField attributes gets easier. - Updated spec test to use miq_ae_domain_enabled and miq_ae_domain_disabled factories. - Fixed an issue found with Domain delete during testing. Issue #2045 --- .../controllers/miq_ae_class_controller.rb | 149 ++++++++---------- .../views/miq_ae_class/_class_fields.html.erb | 10 +- .../miq_ae_class_controller_spec.rb | 4 +- 3 files changed, 71 insertions(+), 92 deletions(-) diff --git a/vmdb/app/controllers/miq_ae_class_controller.rb b/vmdb/app/controllers/miq_ae_class_controller.rb index b11f4308532..b6225eccaa0 100644 --- a/vmdb/app/controllers/miq_ae_class_controller.rb +++ b/vmdb/app/controllers/miq_ae_class_controller.rb @@ -306,27 +306,7 @@ def replace_right_cell(replace_trees = []) presenter[:update_partials][:main_div] = r[:partial=>"all_tabs"] end if @in_a_form - action_url = case nodes.first - when 'root', 'aen' - if @sb[:action] == "miq_ae_domain_priority_edit" - 'domains_priority_edit' - elsif @edit.key?(:ae_class_id) - @edit[:rec_id].nil? ? 'create' : 'update' - else - @edit[:rec_id].nil? ? 'create_ns' : 'update_ns' - end - when 'aei' - @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' - when 'aem' - @edit[:rec_id].nil? ? 'create_method' : 'update_method' - when 'aec' - case @sb[:active_tab] - when 'instances' then @edit[:rec_id].nil? ? 'create_instance' : 'update_instance' - when 'methods' then @edit[:rec_id].nil? ? 'create_method' : 'update_method' - when 'props' then @edit[:rec_id].nil? ? 'create' : 'update' - else @sb[:action] == 'miq_ae_field_seq' ? 'fields_seq_edit' : 'update_fields' - end - end + action_url = create_action_url(nodes.first) presenter[:expand_collapse_cells][:c] = 'expand' # incase it was collapsed for summary screen, and incase there were no records on show_list presenter[:set_visible_elements][:form_buttons_div] = true presenter[:update_partials][:form_buttons_div] = r[ @@ -1665,8 +1645,8 @@ def create_ns end else add_flash(I18n.t("flash.add.added", - :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), - :name => add_ae_ns.name)) + :model => ui_lookup(:model => "#{@edit[:new][:domain] ? "MiqAeDomain" : "MiqAeNamespace"}"), + :name => add_ae_ns.name)) @in_a_form = false replace_right_cell([:ae]) end @@ -1682,7 +1662,7 @@ def field_select @temp[:combo_xml] = get_combo_xml(@edit[:new][:fields]) @temp[:dtype_combo_xml] = get_dtype_combo_xml(@edit[:new][:fields]) # passing fields because that's how many combo boxes we need session[:field_data] = Hash.new - @edit[:new_field][:substitute] = session[:field_data][:substitution] = true + @edit[:new_field][:substitute] = session[:field_data][:substitute] = true @changed = (@edit[:new] != @edit[:current]) @edit[:current][:fields].each_with_index do |fld,i| #needed to compare each object's attributes to find out if something has changed if @edit[:new][:fields][i].attributes != fld.attributes @@ -1956,6 +1936,34 @@ def domains_priority_edit private + def create_action_url(node) + prefix = @edit[:rec_id].nil? ? 'create' : 'update' + case node + when 'root', 'aen' + if @sb[:action] == "miq_ae_domain_priority_edit" + 'domains_priority_edit' + elsif @edit.key?(:ae_class_id) + prefix + else + prefix + '_ns' + end + when 'aei' + prefix + '_instance' + when 'aem' + prefix + '_method' + when 'aec' + return 'fields_seq_edit' if @sb[:action] == 'miq_ae_field_seq' + prefix = @edit[:rec_id].nil? ? 'create' : 'update' + suffix = { + 'instances' => '_instance', + 'methods' => '_method', + 'props' => '', + 'schema' => '_fields' + } + prefix + suffix[@sb[:active_tab]] + end + end + def get_rec_name(rec) column = rec.display_name.blank? ? :name : :display_name if rec.kind_of?(MiqAeNamespace) && rec.domain? && !rec.editable? @@ -2064,7 +2072,10 @@ def delete_domain_or_namespaces @sb[:row_selected] = find_checked_items ae_ns = [] ae_cs = [] - if @sb[:row_selected] + if params[:id] && params[:pressed] == "miq_ae_domain_delete" + ae_ns.push(params[:id]) + self.x_node = "root" + elsif @sb[:row_selected] @sb[:row_selected].each do |items| item = items.split('-') if item[0] == "aen" @@ -2124,6 +2135,12 @@ def find_checked_items(prefix = nil) end end + def field_attributes + [:aetype, :class_id, :collect, :datatype, :default_value, :description, + :display_name, :max_retries, :max_time, :message, :name, :on_entry, + :on_error, :on_exit, :priority, :substitute] + end + # Get variables from edit form def fields_get_form_vars @ae_class = MiqAeClass.find_by_id(from_cid(@edit[:ae_class_id])) @@ -2133,15 +2150,17 @@ def fields_get_form_vars field_data = session[:field_data] new_field = @edit[:new_field] - field_data[:aetype] = new_field[:aetype] = params[:field_aetype] if params[:field_aetype] - field_data[:datatype] = new_field[:datatype] = params[:field_datatype] if params[:field_datatype] - field_data[:name] = new_field[:name] = params[:field_name].strip if params[:field_name] - field_data[:display_name] = new_field[:display_name] = params[:field_display_name] if params[:field_display_name] - field_data[:description] = new_field[:description] = params[:field_description] if params[:field_description] - if params[:field_substitution] - field_data[:substitution] = new_field[:substitute] = params[:field_substitution].to_i == 1 ? true : false + field_attributes.each do |field| + field_name = "field_#{field}".to_sym + if field == :substitute + field_data[field] = new_field[field] = params[field_name].to_i == 1 if params[field_name] + else + field_data[field] = new_field[field] = params[field_name] if params[field_name] + end end + field_data[:default_value] = new_field[:default_value] = + params[:field_password_value] if params[:field_password_value] new_field[:priority] = 1 @edit[:new][:fields].sort_by { |a| [a.priority.to_i] }.each_with_index do |flds, i| if i == @edit[:new][:fields].length - 1 @@ -2152,69 +2171,29 @@ def fields_get_form_vars end end end - field_data[:default_value] = new_field[:default_value] = - params[:field_default_value] if params[:field_default_value] - field_data[:default_value] = new_field[:default_value] = - params[:field_password_value] if params[:field_password_value] - field_data[:message] = new_field[:message] = params[:field_message] if params[:field_message] - field_data[:collect] = new_field[:collect] = params[:field_collect] if params[:field_collect] - field_data[:on_entry] = new_field[:on_entry] = params[:field_on_entry] if params[:field_on_entry] - field_data[:on_exit] = new_field[:on_exit] = params[:field_on_exit] if params[:field_on_exit] - field_data[:on_error] = new_field[:on_error] = params[:field_on_error] if params[:field_on_error] - field_data[:max_retries] = new_field[:max_retries] = params[:field_max_retries] if params[:field_max_retries] - field_data[:max_time] = new_field[:max_time] = params[:field_max_time] if params[:field_max_time] new_field[:class_id] = @ae_class.id @edit[:new][:fields].each_with_index do |fld, i| - var_name = "fields_aetype" << i.to_s - fld[:aetype] = params[var_name.to_sym] if params[var_name.to_sym] - var_name = "fields_datatype" << i.to_s - fld[:datatype] = params[var_name.to_sym] if params[var_name.to_sym] - - fld[:name] = params["fields_name_#{i}".to_sym].strip if params["fields_name_#{i}".to_sym] - fld[:display_name] = - params["fields_display_name_#{i}".to_sym] if params["fields_display_name_#{i}".to_sym] - fld[:description] = - params["fields_description_#{i}".to_sym] if params["fields_description_#{i}".to_sym] - if params["fields_substitution_#{i}".to_sym] - fld[:substitute] = params["fields_substitution_#{i}".to_sym].to_i == 1 ? true : false + field_attributes.each do |field| + field_name = "fields_#{field}_#{i}".to_sym + if field == :substitute + fld[field] = params[field_name].to_i == 1 if params[field_name] + elsif %w(aetype datatype).include?(field.to_s) + var_name = "fields_#{field}#{i}" + fld[field] = params[var_name.to_sym] if params[var_name.to_sym] + else + fld[field] = params[field_name] if params[field_name] + end end - - fld[:default_value] = - params["fields_default_value_#{i}".to_sym] if params["fields_default_value_#{i}".to_sym] - fld[:default_value] = - params["fields_password_value_#{i}".to_sym] if params["fields_password_value_#{i}".to_sym] - fld[:message] = params["fields_message_#{i}".to_sym] if params["fields_message_#{i}".to_sym] - fld[:collect] = params["fields_collect_#{i}".to_sym] if params["fields_collect_#{i}".to_sym] - fld[:on_entry] = params["fields_on_entry_#{i}".to_sym] if params["fields_on_entry_#{i}".to_sym] - fld[:on_exit] = params["fields_on_exit_#{i}".to_sym] if params["fields_on_exit_#{i}".to_sym] - fld[:on_error] = params["fields_on_error_#{i}".to_sym] if params["fields_on_error_#{i}".to_sym] - fld[:max_retries] = params["fields_max_retries_#{i}".to_sym] if params["fields_max_retries_#{i}".to_sym] - fld[:max_time] = params["fields_max_time_#{i}".to_sym] if params["fields_max_time_#{i}".to_sym] end elsif params[:button] == "accept" if !session[:field_data][:name] || session[:field_data][:name] == "" add_flash(I18n.t("flash.edit.field_required", :field => "Name"), :error) return end - new_field = MiqAeField.new - new_field.name = @edit[:new_field][:name] - new_field.display_name = @edit[:new_field][:display_name] - new_field.description = @edit[:new_field][:description] - new_field.aetype = @edit[:new_field][:aetype] - new_field.datatype = @edit[:new_field][:datatype] - new_field.substitute = @edit[:new_field][:substitute] - new_field.priority = @edit[:new_field][:priority] - new_field.default_value = @edit[:new_field][:default_value] - new_field.message = @edit[:new_field][:message] - new_field.collect = @edit[:new_field][:collect] - new_field.class_id = @edit[:new_field][:class_id] - new_field.on_entry = @edit[:new_field][:on_entry] - new_field.on_exit = @edit[:new_field][:on_exit] - new_field.on_error = @edit[:new_field][:on_error] - new_field.max_retries = @edit[:new_field][:max_retries] - new_field.max_time = @edit[:new_field][:max_time] - @edit[:new][:fields].push(new_field) + new_fields = {} + field_attributes.each_with_object({}) { |field| new_fields[field] = @edit[:new_field][field] } + @edit[:new][:fields].push(MiqAeField.new(new_fields)) @edit[:new_field] = session[:field_data] = {} end end diff --git a/vmdb/app/views/miq_ae_class/_class_fields.html.erb b/vmdb/app/views/miq_ae_class/_class_fields.html.erb index 6888db4a12c..87699d42841 100644 --- a/vmdb/app/views/miq_ae_class/_class_fields.html.erb +++ b/vmdb/app/views/miq_ae_class/_class_fields.html.erb @@ -71,7 +71,7 @@ :title => "Click to delete this field from schema") %> - <% ["name", "aetype", "datatype", "default_value", "display_name", "description", "substitution", "collect", "message", "on_entry", "on_exit", "on_error", "max_retries", "max_time"].each do |fname| %> + <% ["name", "aetype", "datatype", "default_value", "display_name", "description", "substitute", "collect", "message", "on_entry", "on_exit", "on_error", "max_retries", "max_time"].each do |fname| %> <% if ["aetype", "datatype"].include?(fname) %> <% combo_id = "fields_#{fname}_id#{i}" %> @@ -81,7 +81,7 @@ <% combo_url = "/miq_ae_class/fields_form_field_changed/#{@ae_class.id || 'new'}" %>
<%= render :partial => 'layouts/dhtmlxcombo', :locals => { :combo_id => combo_id, :combo_name => combo_name, :xml_combo => xml_combo, :combo_url => combo_url } %> - <% elsif fname == 'substitution' %> + <% elsif fname == 'substitute' %> <%= check_box_tag("fields_#{fname}_#{i}", value="1", checked=field.substitute, "data-miq_observe_checkbox"=>{:url=>url}.to_json) %> @@ -133,7 +133,7 @@ :title => "Add this entry") %> - <% ["name", "aetype", "datatype", "default_value", "display_name", "description", "substitution", "collect", "message", "on_entry", "on_exit", "on_error", "max_retries", "max_time"].each do |fname| %> + <% ["name", "aetype", "datatype", "default_value", "display_name", "description", "substitute", "collect", "message", "on_entry", "on_exit", "on_error", "max_retries", "max_time"].each do |fname| %> <% if ["aetype", "datatype"].include?(fname) %> <% combo_id = "field_#{fname}_id" %> @@ -142,8 +142,8 @@ <% combo_url = "/miq_ae_class/fields_form_field_changed/#{@ae_class.id || 'new'}" %>
<%= render :partial => 'layouts/dhtmlxcombo', :locals => { :combo_id => combo_id, :combo_name => combo_name, :xml_combo => xml_combo, :combo_url => combo_url } %> - <% elsif fname == 'substitution' %> - <% checked = !session[:field_data].blank? && session[:field_data][:substitution] %> + <% elsif fname == 'substitute' %> + <% checked = !session[:field_data].blank? && session[:field_data][:substitute] %> <%= check_box_tag("field_#{fname}", value="1", checked=checked, "data-miq_observe_checkbox"=>{:url=>url}.to_json) %> diff --git a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb index ae707391fcc..95e081267b4 100644 --- a/vmdb/spec/controllers/miq_ae_class_controller_spec.rb +++ b/vmdb/spec/controllers/miq_ae_class_controller_spec.rb @@ -39,7 +39,7 @@ context "#domain_lock" do it "Marks domain as locked/readonly" do set_user_privileges - ns = FactoryGirl.create(:miq_ae_namespace, :system => false) + ns = FactoryGirl.create(:miq_ae_domain_enabled) controller.instance_variable_set(:@_params, :id => ns.id) controller.stub(:replace_right_cell) controller.send(:domain_lock) @@ -51,7 +51,7 @@ context "#domain_unlock" do it "Marks domain as unlocked/editable" do set_user_privileges - ns = FactoryGirl.create(:miq_ae_namespace, :system => true) + ns = FactoryGirl.create(:miq_ae_domain_disabled) controller.instance_variable_set(:@_params, :id => ns.id) controller.stub(:replace_right_cell) controller.send(:domain_unlock) From d003bb351c21eb79c48ec42ad1871fd9d49f58bd Mon Sep 17 00:00:00 2001 From: Harpreet Kataria Date: Wed, 18 Jun 2014 12:03:32 -0400 Subject: [PATCH 4/4] Added Lock/Unlock parent feature. - Added Lock/Unlock as a parent feature and made Lock and Unlock features as hidden features under new feature so only a single feature shows up in the Access Control to toggle between Lock/Unlock. Issue #2045 --- vmdb/db/fixtures/miq_product_features.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/vmdb/db/fixtures/miq_product_features.yml b/vmdb/db/fixtures/miq_product_features.yml index 90985f38d08..56f58b51180 100644 --- a/vmdb/db/fixtures/miq_product_features.yml +++ b/vmdb/db/fixtures/miq_product_features.yml @@ -1952,14 +1952,21 @@ :description: Edit Priority Order of Domains :feature_type: admin :identifier: miq_ae_domain_priority_edit - - :name: Unlock - :description: Unlock Domain + - :name: Lock/Unlock + :description: Lock/Unlock Domain :feature_type: admin - :identifier: miq_ae_domain_unlock - - :name: Lock - :description: Lock Domain - :feature_type: admin - :identifier: miq_ae_domain_lock + :identifier: miq_ae_domain_lock_unlock + :children: + - :name: Unlock + :description: Unlock Domain + :feature_type: admin + :identifier: miq_ae_domain_unlock + :hidden: true + - :name: Lock + :description: Lock Domain + :feature_type: admin + :identifier: miq_ae_domain_lock + :hidden: true - :name: Automate Namespace :description: Automate Namespace :feature_type: node