app/presenters/widget_presenter.rb
class WidgetPresenter
include ApplicationHelper
include ActionView::Helpers::UrlHelper
def initialize(view, controller, widget)
@view = view
@controller = controller
@widget = widget
@sb = controller.instance_eval { @sb }
end
extend Forwardable
def_delegators(:@controller, :current_user, :url_for_only_path, :initiate_wait_for_task,
:session_init, :session_reset, :start_url_for_user)
attr_reader :widget
def render_partial
@controller.render_to_string(:template => 'dashboard/_widget', :handler => [:haml],
:layout => false, :locals => {:presenter => self}).html_safe
end
def widget_buttons
buttons = []
if role_allows?(:feature => "dashboard_add")
unless @sb[:dashboards][@sb[:active_db]][:locked]
buttons.push(:id => "w_#{@widget.id}_close",
:title => _("Remove from Dashboard"),
:name => _("Remove Widget"),
:confirm => _("Are you sure you want to remove '%{title}'" \
"from the Dashboard?") % {:title => @widget.title},
:dataRemote => true,
:sparkleOn => true,
:href => '/dashboard/widget_close?widget=' + @widget.id.to_s,
:fonticon => 'fa fa-times fa-fw',
:dataMethod => 'post')
end
minimized = @sb[:dashboards][@sb[:active_db]][:minimized].include?(@widget.id)
title = minimized ? _("Maximize") : _("Minimize")
buttons.push(:id => "w_#{@widget.id}_minmax",
:title => title,
:name => title,
:confirm => false,
:dataRemote => true,
:href => '/dashboard/widget_toggle_minmax?widget=' + @widget.id.to_s,
:fonticon => "fa fa-caret-square-o-#{minimized ? 'down' : 'up'} fa-fw",
:dataMethod => 'post')
end
if @widget.contents_for_user(current_user).present? && %w[report chart].include?(@widget.content_type)
title = if @widget.content_type == "chart"
_("Open the chart and full report in a new window")
else
_("Open the full report in a new window")
end
confirm = if @widget.content_type == "chart"
_("This will show the chart and the entire report (all rows) in your browser. Do you want to proceed?")
else
_("This will show the entire report (all rows) in your browser. Do you want to proceed?")
end
buttons.push(:id => "w_#{@widget.id}_fullscreen",
:title => title,
:name => _("Full Screen"),
:confirm => confirm,
:href => "/dashboard/report_only?rr_id=#{@widget.contents_for_user(current_user).miq_report_result_id}&type=#{@widget.content_type == "chart" ? 'hybrid' : 'tabular'}",
:fonticon => 'fa fa-arrows-alt fa-fw',
:target => "_blank",
:rel => "noopener noreferrer")
buttons.push(:id => "w_#{@widget.id}_pdf",
:title => _("Print the full report (all rows) or export it as a PDF file"),
:name => _("Print or export to PDF"),
:href => '/dashboard/widget_to_pdf?rr_id=' + @widget.contents_for_user(current_user).miq_report_result_id.to_s,
:fonticon => 'pficon pficon-print fa-fw',
:target => '_blank',
:rel => "noopener noreferrer")
end
if @widget.content_type == 'chart'
buttons.push(:id => "w_#{@widget.id}_zoom",
:title => _("Zoom in on this chart"),
:name => _("Zoom in"),
:href => '/dashboard/widget_zoom?widget=' + @widget.id.to_s,
:fonticon => 'fa fa-plus fa-fw',
:dataRemote => true,
:sparkleOn => true,
:dataMethod => 'post')
end
if @widget.content_type != 'menu'
buttons.push(:id => "w_#{@widget.id}_refresh",
:title => _("Refresh this Widget"),
:name => _("Refresh"),
:fonticon => 'fa fa-refresh fa-fw',
:refresh => true)
end
buttons.to_json
end
def self.chart_data
@chart_data ||= []
end
def self.reset_data
@chart_data = []
end
end