public function getFooter () { $data = new stdClass(); $data->config = $this->ReportConfig; $data->footer_contents = ''; $reportId = intval($this->ReportConfig->getId()); if(!empty($this->ReportConfig->options['visual']['footer'])) { foreach($this->ReportConfig->options['visual']['footer'] as $footer) { $cols = $this->ReportConfig->columns; $offset = $this->ReportConfig->getOffset(); $sort = $this->ReportConfig->sort; $colorColumn = !empty($this->ReportConfig->options['visual']['useColumnDataForColor']) ? $this->ReportConfig->options['visual']['useColumnDataForColor'] : NULL; $this->ReportConfig->options['visual']['useColumnDataForColor'] = NULL; $this->ReportConfig->setColumns(array($footer['measure'])); $this->ReportConfig->sort = NULL; $this->ReportConfig->setOffset(0); $format = array( array( 'formatter' => array( 'format' => isset($footer['format']) ? $footer['format'] : 'number', 'scale' => isset($footer['scale']) ? $footer['scale'] : 0 ), 'displayName' => $footer['text'], 'columnId' => $footer['measure'], ) ); $this->ReportConfig->setColumnConfigs($format); $value = $this->ReportConfig->getData(); list($fields, $formatted, $errors) = array_values(gd_report_format_data($this->ReportConfig, $value)); $fontSize = intval(!empty($footer['size']) ? $footer['size'] : '14'); $styles = 'text-align:' . (!empty($footer['alignment']) ? $footer['alignment'] : 'right') . ';color: ' . (!empty($footer['color']) ? $footer['color'] . ' !important' : '#000080 !important') . ';font-size: ' . $fontSize . 'px;font-weight: bold;'; $data->footer_contents .= '<span class="gd-footer-measure" style="' . $styles . '">' . $footer['text'] . ': ' . $formatted[0]->record[$footer['measure']] . '</span>'; $this->ReportConfig->options['visual']['useColumnDataForColor'] = $colorColumn; $this->ReportConfig->setColumns($cols); $this->ReportConfig->sort = $sort; $this->ReportConfig->setOffset($offset); } } drupal_alter('gd_report_view_footer', $data); // TODO Move to new report rendering JavaScript // Set timeout is necessary for Dashboard Builder. // Not entirely certain but pretty sure .html() of the DashboardCanvas caused main UI thread of browser to stall and not calculated heights until after .html() call is over // Which means when the script below is ran by jQuery inside .html() call, elements without specified heights like footer are 0 $footerScript = '<script type="text/javascript">!function(global) { !function($,undefined) { setTimeout(function() { var height = $("#report-' . $reportId . '").height(); var footerHeight = $("#gd-report-footer-' . $reportId . '").height(); $("#report-' . $reportId . '").height((height - footerHeight)); $("#report-' . $reportId . '").trigger("ready.report.render"); }, 1); }(global.GD_jQuery ? global.GD_jQuery : jQuery); }(!window ? this : window);</script>'; return '<div id="gd-report-footer-'.$reportId.'" report_id="'.$reportId.'" class="gd-report-footer">' . $data->footer_contents . '</div>'.$footerScript; }
protected function getBody(array $options) { if (!empty($this->ReportConfig->title)) { $constants = $this->getConstants($options); list($fields,$tableData,$errors) = array_values(gd_report_format_data($this->ReportConfig,$this->ReportConfig->getData())); $data = 'var ReportData = {}; ReportData.data='.json_encode($tableData).'; ReportData.drilldowns = '. json_encode($this->ReportConfig->drilldowns) .';'; $viewCode = $this->ReportConfig->getCustomView(); if ( !isset($viewCode) ) { $node = $this->ReportConfig->getNode(); if ( !isset($node) && $this->ReportConfig->getId() ) { $node = node_load($this->ReportConfig->getId()); } if ( isset($node) ) { $viewCode = $node->field_report_custom_view[$node->language][0]['value']; } } if ( isset($viewCode) ) { $viewCode = $this->scopeScripts($viewCode, $constants, $data); } return $viewCode; } return ''; }