app/helpers/policies_helper.rb
module PoliciesHelper
def profiles_selection
return @scap_content.scap_content_profiles if @scap_content.present?
return @policy.scap_content.scap_content_profiles if @policy.scap_content.present?
return []
end
def policy_profile_from_scap_content(policy)
policy.scap_content_profile.nil? ? "Default" : policy.scap_content_profile.title
end
def deploy_by_radios(f, policy)
ForemanOpenscap::ConfigNameService.new.configs.map do |tool|
popover_block = tag.span(popover("", config_inline_help(tool.inline_help)), class: 'scap_policy_popover')
label = label_tag('', :class => 'col-md-2 control-label', :for => "policy_deploy_by_#{tool.type}") do
tool.type.to_s.capitalize.html_safe
end
radio = content_tag(:div, :class => "col-md-2") do
f.radio_button(:deploy_by, tool.type, :disabled => !tool.available?, :checked => deploy_by_radio_checked(policy, tool))
end
content_tag(:div, :class => "clearfix") do
content_tag(:div, :class => "form-group") do
label.html_safe + popover_block.html_safe + radio.html_safe
end
end
end.join('').html_safe
end
def config_inline_help(help_hash)
link = if help_hash[:route_helper_method] && respond_to?(help_hash[:route_helper_method])
link_to_if_authorized help_hash[:replace_text], public_send(help_hash[:route_helper_method])
else
help_hash[:replace_text]
end
text = help_hash[:text]
text = text.split(help_hash[:replace_text], 2).join(link) if help_hash.key?(:replace_text)
text.html_safe
end
def deploy_by_radio_checked(policy, tool)
type = policy.deploy_by ? policy.deploy_by.to_sym : :manual
tool.type == type
end
def effective_policy_profile(policy)
policy.tailoring_file ? policy.tailoring_file_profile.title : policy_profile_from_scap_content(policy)
end
def scap_content_selector(form)
scap_contents = ::ForemanOpenscap::ScapContent.authorized(:view_scap_contents).all
if scap_contents.length > 1
select_f form, :scap_content_id, scap_contents, :id, :title,
{ :include_blank => _("Choose existing SCAP Content") },
{ :label => _("SCAP Content"),
:required => true,
:onchange => 'scap_content_selected(this);',
:'data-url' => method_path('scap_content_selected') }
else
select_f form, :scap_content_id, scap_contents, :id, :title,
{ :label => _("SCAP Content"),
:required => true,
:onchange => 'scap_content_selected(this);',
:'data-url' => method_path('scap_content_selected') }
end
end
def scap_content_profile_selector(form)
if profiles_selection.length == 1
select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
{ :selected => @policy.scap_content_profile_id },
{ :label => _("XCCDF Profile"),
:disabled => profiles_selection.empty? ? true : false,
:help_inline => :indicator }
else
select_f form, :scap_content_profile_id, profiles_selection, :id, :title,
{ :selected => @policy.scap_content_profile_id,
:include_blank => _("Default XCCDF profile") },
{ :label => _("XCCDF Profile"),
:disabled => profiles_selection.empty? ? true : false,
:help_inline => :indicator }
end
end
def tailoring_file_selector(form)
select_f form, :tailoring_file_id, ForemanOpenscap::TailoringFile.all.authorized(:view_tailoring_files), :id, :name,
{ :include_blank => _('Choose Tailoring File') },
{ :label => _('Tailoring File'),
:onchange => 'tailoring_file_selected(this)',
:'data-url' => method_path('tailoring_file_selected') }
end
def tailoring_file_profile_selector(form, tailoring_file)
if tailoring_file
select_f form, :tailoring_file_profile_id, tailoring_file.scap_content_profiles, :id, :title,
{ :selected => @policy.tailoring_file_profile_id },
{ :label => _("XCCDF Profile in Tailoring File"),
:help_inline => _("This profile will be used to override the one from scap content") }
else
# to make sure tailoring profile id is nil when tailoring file is deselected
form.hidden_field(:tailoring_file_profile_id, :value => nil)
end
end
def submit_or_cancel_policy(form, overwrite = nil, args = {})
args[:cancel_path] ||= send("#{controller_name}_path")
content_tag(:div, :class => "clearfix") do
content_tag(:div, :class => "form-actions") do
text = overwrite ? overwrite : _("Submit")
options = { :class => "btn btn-primary" }
previous = form.object.first_step? ? ' ' : previous_link(form)
cancel_and_submit = content_tag(:div, :class => "pull-right") do
link_to(_("Cancel"), args[:cancel_path], :class => "btn btn-default") + ' ' +
form.submit(text, options)
end
(previous + cancel_and_submit).html_safe
end
end
end
def show_partial_wizard(step)
@policy.current_step == step ? 'show-pane' : 'hide-pane'
end
def previous_link(form)
previous = content_tag(:span, "", :class => 'glyphicon glyphicon-chevron-left')
content_tag(:div, :class => 'pull-left') do
link_to(previous.html_safe, '#', :class => 'btn btn-default', :onclick => "previous_step('#{@policy.previous_step}')")
end
end
def days_of_week_hash
Hash[*Date::DAYNAMES.map { |day| [day.downcase, day] }.flatten]
end
def translate_steps(policy)
policy.steps.map { |step| _(step) }
end
end