Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 58 additions & 5 deletions app/controllers/application_controller/buttons.rb
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ def automate_button_field_changed
@edit[:new][:button_icon] = params[:button_icon] if params[:button_icon]
@edit[:new][:button_color] = params[:button_color] if params[:button_color]
@edit[:new][:dialog_id] = params[:dialog_id] if params[:dialog_id]
@edit[:new][:disabled_text] = params[:disabled_text] if params[:disabled_text]
visibility_box_edit
end

Expand All @@ -124,7 +125,7 @@ def automate_button_field_changed
page.replace("form_role_visibility", :partial => "layouts/role_visibility", :locals => {:rec_id => (@custom_button.id || "new").to_s, :action => "automate_button_field_changed"})
end
unless params[:target_class]
@changed = (@edit[:new] != @edit[:current])
@changed = session[:changed] = (@edit[:new] != @edit[:current])
page << javascript_for_miq_button_visibility(@changed)
end
page << "miqSparkle(false);"
Expand Down Expand Up @@ -451,17 +452,27 @@ def group_create_update(typ)

def button_create_update(typ)
@edit = session[:edit]
@custom_button = @edit[:custom_button]
@record = @custom_button = @edit[:custom_button]
@changed = (@edit[:new] != @edit[:current])

case params[:button]
when 'cancel' then ab_button_cancel(typ)
when 'add' then ab_button_add
when 'save' then ab_button_save
when 'reset' then ab_button_reset
when 'enablement_expression', 'visibility_expression' then ab_expression
end
end

def ab_expression
@changed = session[:changed] = (@edit[:new] != @edit[:current])
@expkey = params[:button].to_sym
@edit[:visibility_expression_table] = exp_build_table_or_nil(@edit[:new][:visibility_expression])
@edit[:enablement_expression_table] = exp_build_table_or_nil(@edit[:new][:enablement_expression])
@in_a_form = true
replace_right_cell(:nodetype => x_node)
end

def ab_button_cancel(typ)
if typ == "update"
add_flash(_("Edit of Custom Button \"%{name}\" was cancelled by the user") % {:name => @edit[:current][:name]})
Expand Down Expand Up @@ -563,6 +574,7 @@ def ab_button_save
add_flash(_("Custom Button \"%{name}\" was saved") % {:name => @edit[:new][:description]})
@edit = session[:edit] = nil
ab_get_node_info(x_node) if x_active_tree == :ab_tree
build_filter_exp_table
replace_right_cell(:nodetype => x_node, :replace_trees => x_active_tree == :ab_tree ? [:ab] : [:sandt])
else
@custom_button.errors.each do |field, msg|
Expand All @@ -578,7 +590,6 @@ def ab_button_save
end

def ab_button_reset
ab_button_reset
button_set_form_vars
@changed = session[:changed] = false
add_flash(_("All changes have been reset"), :warning)
Expand Down Expand Up @@ -652,7 +663,7 @@ def button_new_edit(typ)
CustomButton.find(from_cid(params[:id]))
button_set_form_vars
@in_a_form = true
session[:changed] = false
@changed = session[:changed] = false
@breadcrumbs = []
title = if typ == "new"
_("Add Button")
Expand Down Expand Up @@ -823,6 +834,7 @@ def button_set_record_vars(button)
button.userid = session[:userid]
button.uri = @edit[:uri]
button[:options] = {}
button.disabled_text = @edit[:new][:disabled_text]
# button[:options][:target_attr_name] = @edit[:new][:target_attr_name]
button.uri_path, button.uri_attributes, button.uri_message = CustomButton.parse_uri(@edit[:uri])
button.uri_attributes["request"] = @edit[:new][:object_request]
Expand All @@ -844,7 +856,37 @@ def button_set_record_vars(button)
button.visibility[:roles] = ["_ALL_"]
end
button_set_resource_action(button)
# @custom_button.resource_action = @edit[:new][:dialog_id] ? Dialog.find_by_id(@edit[:new][:dialog_id]) : nil
button_set_expressions_record(button)
end

def button_set_expressions_record(button)
exp_remove_tokens(@edit[:new][:visibility_expression])
exp_remove_tokens(@edit[:new][:enablement_expression])
button.visibility_expression = @edit[:new][:visibility_expression]["???"] ? nil : MiqExpression.new(@edit[:new][:visibility_expression])
button.enablement_expression = @edit[:new][:enablement_expression]["???"] ? nil : MiqExpression.new(@edit[:new][:enablement_expression])
end

def field_expression_model
@custom_button.applies_to_class ||= (x_active_tree == :ab_tree ? @sb[:target_classes][@resolve[:target_class]] : "ServiceTemplate")
end

def button_set_expression_vars(field_expression, field_expression_table)
@edit[:new][field_expression] = @custom_button[field_expression].kind_of?(MiqExpression) ? @custom_button[field_expression].exp : nil
# Populate exp editor fields for the expression column
@edit[field_expression] ||= ApplicationController::Filter::Expression.new
@edit[field_expression][:expression] = [] # Store exps in an array
if @edit[:new][field_expression].blank?
@edit[field_expression][:expression] = {"???" => "???"} # Set as new exp element
@edit[:new][field_expression] = copy_hash(@edit[field_expression][:expression]) # Copy to new exp
else
@edit[field_expression][:expression] = copy_hash(@edit[:new][field_expression])
end
@edit[field_expression_table] = exp_build_table_or_nil(@edit[field_expression][:expression])

@expkey = field_expression # Set expression key to expression
@edit[field_expression].history.reset(@edit[field_expression][:expression])
@edit[field_expression][:exp_table] = exp_build_table(@edit[field_expression][:expression])
@edit[field_expression][:exp_model] = field_expression_model # Set model for the exp editor
end

def button_set_resource_action(button)
Expand Down Expand Up @@ -914,12 +956,16 @@ def button_set_form_vars
:description => @custom_button.description,
:button_icon => @custom_button.options.try(:[], :button_icon),
:button_color => @custom_button.options.try(:[], :button_color),
:disabled_text => @custom_button.disabled_text,
:display => @custom_button.options.try(:[], :display).nil? ? true : @custom_button.options[:display],
:open_url => @custom_button.options.try(:[], :open_url) ? @custom_button.options[:open_url] : false,
:display_for => @custom_button.options.try(:[], :display_for) ? @custom_button.options[:display_for] : 'single',
:submit_how => @custom_button.options.try(:[], :submit_how) ? @custom_button.options[:submit_how] : 'one',
:object_message => @custom_button.uri_message || "create",
)
button_set_expression_vars(:enablement_expression, :enablement_expression_table)
button_set_expression_vars(:visibility_expression, :visibility_expression_table)

@edit[:current] = copy_hash(@edit[:new])

@edit[:visibility_types] = [["<To All>", "all"], ["<By Role>", "role"]]
Expand All @@ -946,6 +992,7 @@ def button_set_form_vars
get_available_dialogs
@edit[:current] = copy_hash(@edit[:new])
session[:edit] = @edit
@changed = session[:changed] = (@edit[:new] != @edit[:current])
end

# Set user record variables to new values
Expand Down Expand Up @@ -1144,4 +1191,10 @@ def selected_consecutive?
is_consecutive = last_idx - first_idx + 1 <= params[:selected_fields].length
[is_consecutive, first_idx, last_idx]
end

# Get information for a condition
def build_filter_exp_table
@visibility_expression_table = @custom_button.visibility_expression.kind_of?(MiqExpression) ? exp_build_table(@custom_button.visibility_expression.exp) : nil
@enablement_expression_table = @custom_button.enablement_expression.kind_of?(MiqExpression) ? exp_build_table(@custom_button.enablement_expression.exp) : nil
end
end
12 changes: 6 additions & 6 deletions app/controllers/application_controller/filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def exp_button
end

if flash_errors?
javascript_flash(:flash_div_id => 'adv_search_flash')
javascript_flash(:flash_div_id => 'exp_editor_flash')
else
if ["commit", "not", "remove"].include?(params[:pressed])
copy = copy_hash(@edit[@expkey][:expression])
Expand All @@ -45,8 +45,8 @@ def exp_button
@edit[@expkey][:exp_table] = exp_build_table(@edit[@expkey][:expression])
render :update do |page|
page << javascript_prologue
page.replace("flash_msg_div", :partial => "layouts/flash_msg")
# page.replace("form_expression_div", :partial=>"form_expression")
# Don't need to replace flash div as it's included throught
# exp_editor. That is rendered either throught adv_search_body or directly.
if !@edit[:adv_search_open].nil?
page.replace("adv_search_body", :partial => "layouts/adv_search_body")
page.replace("adv_search_footer", :partial => "layouts/adv_search_footer")
Expand All @@ -73,7 +73,7 @@ def exp_token_pressed
token = params[:token].to_i
if token == @edit[@expkey][:exp_token] || # User selected same token as already selected
(@edit[@expkey][:exp_token] && @edit[:edit_exp].key?("???")) # or new token in process
javascript_flash(:spinner_off => true)
javascript_flash(:flash_div_id => 'exp_editor_flash', :spinner_off => true)
else
exp = exp_find_by_token(@edit[@expkey][:expression], token)
@edit[:edit_exp] = copy_hash(exp)
Expand Down Expand Up @@ -120,11 +120,11 @@ def exp_changed
page << javascript_prologue
end
elsif @refresh_div.to_s == 'flash_msg_div'
javascript_flash
javascript_flash(:flash_div_id => 'exp_editor_flash')
else
render :update do |page|
page << javascript_prologue
page.replace("flash_msg_div", :partial => "layouts/flash_msg")
page.replace("exp_editor_flash", :partial => "layouts/flash_msg", :locals => {:flash_div_id => 'exp_editor_flash'})
page.replace("exp_atom_editor_div", :partial => "layouts/exp_atom/editor")

page << ENABLE_CALENDAR if @edit[@expkey].calendar_needed?
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
module ApplicationController::Filter::SubstMixin
include ActiveSupport::Concern
def exp_build_table_or_nil(exp)
return nil if exp == {"???" => "???"}
exp_build_table(exp)
end

# Build an array of expression symbols by recursively traversing the MiqExpression object
# and inserting sequential tokens for each expression part
def exp_build_table(exp, quick_search = false)
Expand Down
24 changes: 12 additions & 12 deletions app/controllers/miq_ae_customization_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -409,22 +409,22 @@ def setup_presenter_based_on_active_tree(nodetype, presenter)
end
end

def right_cell_text_for_node(record, model_name)
if record && record.id
_("Editing %{model} \"%{name}\"") % {:name => record.name,
:model => ui_lookup(:model => model_name)}
else
_("Adding a new %{model}") % {:model => ui_lookup(:model => model_name)}
end
end

def setup_presenter_for_ab_tree(nodetype, presenter)
case nodetype
when 'button_edit'
@right_cell_text = if @custom_button && @custom_button.id
_("Editing %{model} \"%{name}\"") % {:name => @custom_button.name,
:model => ui_lookup(:model => "CustomButton")}
else
_("Adding a new %{model}") % {:model => ui_lookup(:model => "CustomButton")}
end
@right_cell_text = right_cell_text_for_node(@custom_button, "CustomButton")
presenter.update(:main_div, render_proc[:partial => "shared/buttons/ab_form"])
when 'group_edit'
@right_cell_text = if @custom_button_set && @custom_button_set.id
_("Editing %{model} \"%{name}\"") % {:name => @custom_button_set.name,
:model => ui_lookup(:model => "CustomButtonSet")}
else
_("Adding a new %{model}") % {:model => ui_lookup(:model => "CustomButtonSet")}
end
@right_cell_text = right_cell_text_for_node(@custom_button_set, "CustomButonSet")
when 'group_reorder'
@right_cell_text = _("%{models} Group Reorder") % {:models => ui_lookup(:models => "CustomButton")}
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ def ab_get_node_info(node)
end
elsif @nodetype.length == 1 && nodeid[1] == "ub" # Unassigned buttons group selected
@sb[:buttons] = []
@right_cell_text = _("%{typ} Button Group \"Unassigned Buttons\"") %
{:typ => @sb[:target_classes].invert[nodeid[2]]}
@right_cell_text = _("%{typ} Button Group \"Unassigned Buttons\"") % {:typ => @sb[:target_classes].invert[nodeid[2]]}
uri = CustomButton.buttons_for(nodeid[2]).sort_by(&:name)
unless uri.blank?
uri.each do |b|
Expand Down Expand Up @@ -100,6 +99,8 @@ def ab_get_node_info(node)
# selected button is under assigned folder
@resolve[:new][:target_class] = @sb[:target_classes].invert[@nodetype[1]]
end
@visibility_expression_table = exp_build_table(@custom_button.visibility_expression.exp) if @custom_button.visibility_expression.kind_of?(MiqExpression)
@enablement_expression_table = exp_build_table(@custom_button.enablement_expression.exp) if @custom_button.enablement_expression.kind_of?(MiqExpression)
@right_cell_text = _("Button \"%{name}\"") % {:name => @custom_button.name}
else # assigned buttons node/folder
@sb[:applies_to_class] = @nodetype[1]
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/miq_policy_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1070,7 +1070,7 @@ def build_expression(parent, model)
else
@edit[:expression][:expression] = copy_hash(@edit[:new][:expression])
end
@edit[:expression_table] = @edit[:expression][:expression] == {"???" => "???"} ? nil : exp_build_table(@edit[:expression][:expression])
@edit[:expression_table] = exp_build_table_or_nil(@edit[:expression][:expression])

@expkey = :expression # Set expression key to expression
@edit[@expkey].history.reset(@edit[:expression][:expression])
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/miq_policy_controller/alerts.rb
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ def alert_build_blank_exp
@edit[:expression][:expression] = [] # Store exps in an array
@edit[:expression][:expression] = {"???" => "???"} # Set as new exp element
@edit[:new][:expression] = copy_hash(@edit[:expression][:expression]) # Copy to new exp
@edit[:expression_table] = @edit[:expression][:expression] == {"???" => "???"} ? nil : exp_build_table(@edit[:expression][:expression])
@edit[:expression_table] = exp_build_table_or_nil(@edit[:expression][:expression])

@expkey = :expression # Set expression key to expression
@edit[@expkey].history.reset(@edit[:expression][:expression])
Expand Down
8 changes: 4 additions & 4 deletions app/controllers/miq_policy_controller/conditions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,8 @@ def condition_edit
when "expression", "applies_to_exp"
session[:changed] = (@edit[:new] != @edit[:current])
@expkey = params[:button].to_sym
@edit[:expression_table] = @edit[:new][:expression] == {"???" => "???"} ? nil : exp_build_table(@edit[:new][:expression])
@edit[:scope_table] = @edit[:new][:applies_to_exp] == {"???" => "???"} ? nil : exp_build_table(@edit[:new][:applies_to_exp])
@edit[:expression_table] = exp_build_table_or_nil(@edit[:new][:expression])
@edit[:scope_table] = exp_build_table_or_nil(@edit[:new][:applies_to_exp])
replace_right_cell(:nodetype => "co")
end
end
Expand Down Expand Up @@ -188,7 +188,7 @@ def condition_build_edit_screen
else
@edit[:expression][:expression] = copy_hash(@edit[:new][:expression])
end
@edit[:expression_table] = @edit[:expression][:expression] == {"???" => "???"} ? nil : exp_build_table(@edit[:expression][:expression])
@edit[:expression_table] = exp_build_table_or_nil(@edit[:expression][:expression])

@expkey = :expression # Set expression key to expression
@edit[@expkey].history.reset(@edit[:expression][:expression])
Expand All @@ -204,7 +204,7 @@ def condition_build_edit_screen
else
@edit[:applies_to_exp][:expression] = copy_hash(@edit[:new][:applies_to_exp])
end
@edit[:scope_table] = @edit[:applies_to_exp][:expression] == {"???" => "???"} ? nil : exp_build_table(@edit[:applies_to_exp][:expression])
@edit[:scope_table] = exp_build_table_or_nil(@edit[:applies_to_exp][:expression])

@expkey = :applies_to_exp # Set temporarily while building applies_to_exp exp editor vars
@edit[@expkey].history.reset(@edit[:applies_to_exp][:expression])
Expand Down
2 changes: 0 additions & 2 deletions app/views/layouts/_adv_search_body.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
= " (#{h(@edit[@expkey][:selected][:description])})"
- elsif @edit && @edit[:adv_search_report]
= " (from report #{h(@edit[:adv_search_report])})"
= render :partial => 'layouts/flash_msg', :locals => {:flash_div_id => 'adv_search_flash'}
%br
- if @edit && @edit[@expkey][:expression]
= render(:partial => 'layouts/exp_editor')
Expand Down Expand Up @@ -50,7 +49,6 @@
= _("Choose a %{model} report filter") % {:model => ui_lookup(:model => @edit[@expkey][:exp_model])}
- elsif mode == "save"
.modal-body
= render :partial => 'layouts/flash_msg', :locals => {:flash_div_id => 'adv_search_flash'}
.form-horizontal.static
.form-group
%label.control-label.col-md-5
Expand Down
25 changes: 25 additions & 0 deletions app/views/layouts/_custom_button_expression.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
-# expression_type
- table_key = "#{expression_type}_table".to_sym

.div{:id => "form_#{expression_type}_div"}
- if @expkey == expression_type
%h3= title + _("(Choose an element of the expression to edit)")
= render :partial => 'layouts/exp_editor'
- else
%h3= title + _('(Press the "Edit" button to edit the expression)')
= link_to(image_tag('toolbars/edit.png', :border => "0", :alt => (t = _("Edit this Expression"))),
{:action => 'button_update', :button => expression_type},
{"data-miq_sparkle_on" => true, "data-miq_sparkle_off" => true, :remote => true, "data-method" => :post, :title => t})
%br
- if @edit[table_key].nil?
= render :partial => 'layouts/info_msg',
:locals => {:message => _("No enablement expression defined.")}
- else
- @edit[table_key].each do |token|
- if !["AND", "OR", "(", ")"].include?([token].flatten.first)
= h([token].flatten.first)
- else
%font{:color => "black"}
%b
= h([token].flatten.first)

1 change: 1 addition & 0 deletions app/views/layouts/_exp_editor.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
= javascript_tag("ManageIQ.expEditor.second.title = '#{@edit[@expkey][:val2][:title]}';")

#exp_editor_div
= render :partial => 'layouts/flash_msg', :locals => {:flash_div_id => 'exp_editor_flash'}
%fieldset
.toolbar-pf-actions
.form-group
Expand Down
3 changes: 3 additions & 0 deletions app/views/layouts/_role_enablement_expression.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
= render :partial => 'layouts/custom_button_expression',
:locals => {:expression_type => :enablement_expression,
:title => _('Enablement Expression')}
3 changes: 3 additions & 0 deletions app/views/layouts/_role_visibility_expression.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
= render :partial => 'layouts/custom_button_expression',
:locals => {:expression_type => :visibility_expression,
:title => _('Visibility Expression')}
12 changes: 11 additions & 1 deletion app/views/shared/buttons/_ab_form.html.haml
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,17 @@
options_for_select([[_('Submit all'), 'all'], [_('One by one'), 'one']], @edit[:new][:submit_how]),
"data-miq_sparkle_on" => true,
)

= render(:partial => "layouts/role_enablement_expression",
:locals => {:rec_id => @custom_button ? @custom_button.id : 'new', :action => "automate_button_field_changed"})
%h3
= _('Disabled Button Text')
.form-horizontal.static
= text_field_tag("disabled_text", @edit[:new][:disabled_text],
:maxlength => 50,
:class => "form-control",
"data-miq_observe" => {:interval => '.5', :url => url}.to_json)
= render(:partial => "layouts/role_visibility_expression",
:locals => {:rec_id => @custom_button ? @custom_button.id : 'new', :action => "automate_button_field_changed"})
= render(:partial => "layouts/ae_resolve_options",
:locals => {:resolve => @edit,
:form_action => "ae_resolve",
Expand Down
Loading