+sub generate_chart_content {
+ my ($self, %params) = @_;
+
+ $params{action_bar} //= 1;
+
+ my $opts = $self->{options};
+
+ my $assignment_x = $opts->{chart_export}->{assignment_x};
+ my $assignments_y = $opts->{chart_export}->{assignments_y};
+
+ my @labels;
+ my @datasets;
+ foreach my $row_set (@{ $self->{data} }) {
+ next if ('ARRAY' ne ref $row_set);
+ foreach my $row (@{ $row_set }) {
+ my $label = $row->{$assignment_x}->{data}->[0];
+ if ($label) {
+ push @labels, $label;
+
+ my @set;
+ foreach my $assignment_y (@$assignments_y) {
+ my $y = $row->{$assignment_y}->{data}->[0];
+ push @set, $y;
+ }
+ push @datasets, \@set;
+ }
+ }
+ }
+
+ my $variables = {
+ 'TITLE' => $opts->{title},
+ 'TOP_INFO_TEXT' => $self->html_format($opts->{top_info_text}),
+ 'RAW_TOP_INFO_TEXT' => $opts->{raw_top_info_text},
+ 'BOTTOM_INFO_TEXT' => $self->html_format($opts->{bottom_info_text}),
+ 'RAW_BOTTOM_INFO_TEXT' => $opts->{raw_bottom_info_text},
+ 'EXPORT_VARIABLE_LIST' => join(' ', @{ $self->{export}->{variable_list} }),
+ 'EXPORT_NEXTSUB' => $self->{export}->{nextsub},
+ 'DATA_PRESENT' => $self->{data_present},
+ 'CONTROLLER_DISPATCH' => $opts->{controller_class},
+ 'TABLE_CLASS' => $opts->{table_class},
+ 'SKIP_BUTTONS' => !!$params{action_bar},
+ };
+
+ $::request->layout->add_javascripts('chart.js', 'kivi.ChartReport.js');
+
+ $::form->header;
+ print $::form->parse_html_template('report_generator/chart_report',
+ {
+ labels => to_json(\@labels),
+ datasets => to_json(\@datasets),
+ data_labels => to_json($assignments_y),
+ %$variables,
+ }
+ );
+}
+
+sub check_for_pdf_api {
+ return eval { require PDF::API2; 1; } ? 1 : 0;
+}
+