OpenSCAP/foreman_openscap

View on GitHub
app/helpers/policies_helper.rb

Summary

Maintainability
A
1 hr
Test Coverage
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