app/models/miq_widget/report_content.rb
class MiqWidget::ReportContent < MiqWidget::ContentGeneration
def generate(user_or_group)
report.rpt_options ||= {}
report.col_formats ||= {}
self.widget_options ||= {}
original_col_order = report.col_order
report.col_order = widget_options[:col_order] if widget_options[:col_order]
row_count = widget_options[:row_count] || MiqWidget::DEFAULT_ROW_COUNT
headers = report.col_order.inject([]) { |a, c| a << report.headers[original_col_order.index(c)] }
col_formats = report.col_order.inject([]) { |a, c| a << report.col_formats[original_col_order.index(c)] }
report.col_formats = col_formats # Use widget's column formats
report.rpt_options[:in_a_widget] = true # Let html builders know we're in a widget
tz = timezone
tz ||= user_or_group.get_timezone if user_or_group.respond_to?(:get_timezone)
body = user_or_group.with_a_timezone(tz) do
if report.rpt_options.fetch_path(:summary, :hide_detail_rows)
report.rpt_options[:group_limit] = row_count
report.build_html_rows.join
else
report.group = nil # Ignore groupings for widgets, unless hiding details
report.build_html_rows(true)[0..row_count - 1].join # clickable_rows = true
end
end
empty_row = "<tr><td>#{_("No records found")}</td>#{"<td></td>" * (headers.length - 1)}</tr>"
rows = "<table class='table table-striped table-bordered table-hover'><thead><tr>"
headers.each { |h| rows << "<th>#{h}</th>" }
rows << "</tr></thead><tbody>"
rows << (body.presence || empty_row)
rows << "</tbody></table>"
end
end