# frozen_string_literal: true module ForemanBootdisk module HostsHelperExt def host_title_actions(host) if host.bootdisk_downloadable? title_actions( button_group( select_action_button( _('Boot disk'), { class: 'btn btn-group' }, display_bootdisk_link_if_authorized( _("Host '%s' image") % host.name.split('.')[0], { controller: 'foreman_bootdisk/disks', action: 'host', id: host }, class: 'la' ), display_bootdisk_link_if_authorized( _("Full host '%s' image") % host.name.split('.')[0], { controller: 'foreman_bootdisk/disks', action: 'full_host', id: host }, class: 'la' ), content_tag(:li, '', class: 'divider'), display_bootdisk_link_if_authorized( _('Generic image'), { controller: 'foreman_bootdisk/disks', action: 'generic' }, class: 'la' ), display_bootdisk_for_subnet(host), content_tag(:li, '', class: 'divider'), display_bootdisk_link_if_authorized( _('Help'), { controller: 'foreman_bootdisk/disks', action: 'help' }, class: 'la' ) ) ) ) else bootdisk_button_disabled(host) end super end def bootdisk_button_disabled(host) title_actions( button_group( link_to(_('Boot disk'), '#', disabled: true, class: 'btn btn-default', title: _('Boot disk download not available for %s architecture') % host.architecture.name) ) ) end # need to wrap this one in a test for template proxy presence def display_bootdisk_for_subnet(host) if (proxy = host.try(:subnet).try(:tftp)) && proxy.has_feature?('Templates') display_bootdisk_link_if_authorized( _("Subnet '%s' generic image") % host.subnet.name, { controller: 'foreman_bootdisk/disks', action: 'subnet', id: host }, class: 'la' ) else '' end end # Core Foreman helpers can't look up a URL against a mounted engine def display_bootdisk_link_if_authorized(name, options = {}, html_options = {}) if bootdisk_authorized_for(options) link_to(name, bootdisk_url(options), html_options) else '' end end def bootdisk_url(options) ForemanBootdisk::Engine.routes.url_for(options.merge(only_path: true, script_name: foreman_bootdisk_path)) end def bootdisk_authorized_for(options) User.current.allowed_to?(options) end end end