/** * Generates a report file. * * @param int $idReport ID of the report to generate. If idReport=0 it will generate a report containing all reports * for the specified period & date * @param string $date YYYY-MM-DD * @param int|false $idSite * @param string|false $language If not passed, will use default language. * @param int|false $outputType 1 = download report, 2 = save report to disk, defaults to download * @param string|false $period Defaults to 'day'. If not specified, will default to the report's period set when creating the report * @param string $reportFormat pdf, html * @param int|false $aggregateReportsFormat 1 = display only tables, 2 = display only graphs, 3 = display both */ public function generateReport($idReport, $date, $idSite = false, $language = false, $outputType = false, $period = false, $reportFormat = false, $aggregateReportsFormat = false) { Piwik::checkUserIsNotAnonymous(); // Load specified language if (empty($language)) { $language = Piwik_Translate::getInstance()->getLanguageDefault(); } Piwik_Translate::getInstance()->reloadLanguage($language); // Available reports $reportMetadata = Piwik_API_API::getInstance()->getReportMetadata($idSite); // Test template: include all reports if ($idReport == 0) { if (empty($period)) { $period = 'day'; } if (empty($reportFormat)) { $reportFormat = Piwik_PDFReports::DEFAULT_FORMAT; } if (empty($aggregateReportsFormat)) { $aggregateReportsFormat = Piwik_PDFReports::DEFAULT_AGGREGATE_REPORTS_FORMAT; } $reports = array(); foreach ($reportMetadata as $report) { if ($report['category'] != 'API') { $reports[] = $report; } } $description = Piwik_Translate('PDFReports_DefaultContainingAllReports'); } else { $pdfReports = $this->getReports($idSite, $_period = false, $idReport); $pdfReport = reset($pdfReports); $reportUniqueIds = explode(',', $pdfReport['reports']); $description = $pdfReport['description']; // If period wasn't specified, we shall default to the report's period if (empty($period)) { $period = 'day'; if ($pdfReport['period'] != 'never') { $period = $pdfReport['period']; } } // If format wasn't specified, defaults to the report's format if (empty($reportFormat)) { $reportFormat = $pdfReport['format']; // Handle cases for reports created before the 'format' field if (empty($reportFormat)) { $reportFormat = Piwik_PDFReports::DEFAULT_FORMAT; } } // If $aggregateReportsFormat wasn't specified, defaults to the report configuration if (empty($aggregateReportsFormat)) { $aggregateReportsFormat = $pdfReport['aggregate_reports_format']; } // We need to lookup which reports metadata are registered in this report $reports = array(); foreach ($reportMetadata as $metadata) { if (in_array($metadata['uniqueId'], $reportUniqueIds)) { $reports[] = $metadata; } } } // prepare the report renderer $reportRenderer = Piwik_ReportRenderer::factory($reportFormat); $reportRenderer->setLocale($language); $reportRenderer->setRenderImageInline($outputType == self::OUTPUT_DOWNLOAD ? true : false); $description = str_replace(array("\r", "\n"), ' ', $description); // The report will be rendered with the first 23 rows and will aggregate other rows in a summary row $filterTruncateGET = Piwik_Common::getRequestVar('filter_truncate', false); $_GET['filter_truncate'] = 23; $websiteName = $prettyDate = false; $processedReports = array(); foreach ($reports as $action) { $apiModule = $action['module']; $apiAction = $action['action']; $apiParameters = array(); if (isset($action['parameters'])) { $apiParameters = $action['parameters']; } $report = Piwik_API_API::getInstance()->getProcessedReport($idSite, $period, $date, $apiModule, $apiAction, $segment = false, $apiParameters, $idGoal = false, $language); $websiteName = $report['website']; $prettyDate = $report['prettyDate']; $reportMetadata = $report['metadata']; $isAggregateReport = !empty($reportMetadata['dimension']); $report['displayTable'] = !$isAggregateReport || $aggregateReportsFormat == Piwik_PDFReports::AGGREGATE_REPORTS_FORMAT_TABLES || $aggregateReportsFormat == Piwik_PDFReports::AGGREGATE_REPORTS_FORMAT_TABLES_GRAPHS; $report['displayGraph'] = (!$isAggregateReport || $aggregateReportsFormat == Piwik_PDFReports::AGGREGATE_REPORTS_FORMAT_GRAPHS || $aggregateReportsFormat == Piwik_PDFReports::AGGREGATE_REPORTS_FORMAT_TABLES_GRAPHS) && Piwik::isGdExtensionEnabled() && Piwik_PluginsManager::getInstance()->isPluginActivated('ImageGraph') && !empty($reportMetadata['imageGraphUrl']); $processedReports[] = $report; } // Restore values if ($filterTruncateGET !== false) { $_GET['filter_truncate'] = $filterTruncateGET; } // generate the report $reportRenderer->renderFrontPage($websiteName, $prettyDate, $description, $reports); array_walk($processedReports, array($reportRenderer, 'renderReport')); switch ($outputType) { case self::OUTPUT_SAVE_ON_DISK: $outputFilename = 'Email Report - ' . $idReport . '.' . $date . '.' . $idSite . '.' . $language; $outputFilename = $reportRenderer->sendToDisk($outputFilename); $additionalFiles = array(); if ($reportFormat == 'html') { foreach ($processedReports as &$report) { if ($report['displayGraph']) { $additionalFile = array(); $additionalFile['filename'] = $report['metadata']['name'] . '.png'; $additionalFile['cid'] = $report['metadata']['uniqueId']; $additionalFile['content'] = Piwik_ReportRenderer::getStaticGraph($report['metadata']['imageGraphUrl'], Piwik_ReportRenderer_Html::IMAGE_GRAPH_WIDTH, Piwik_ReportRenderer_Html::IMAGE_GRAPH_HEIGHT); $additionalFile['mimeType'] = 'image/png'; $additionalFile['encoding'] = Zend_Mime::ENCODING_BASE64; $additionalFiles[] = $additionalFile; } } } return array($outputFilename, $prettyDate, $websiteName, $reportFormat, $additionalFiles); break; default: case self::OUTPUT_DOWNLOAD: $reportRenderer->sendToBrowserDownload("{$websiteName} - {$prettyDate} - {$description}"); break; } }
/** * @param Piwik_Event_Notification $notification notification object */ function getRendererInstance($notification) { if (self::manageEvent($notification)) { $reportRenderer =& $notification->getNotificationObject(); $notificationInfo = $notification->getNotificationInfo(); $reportFormat = $notificationInfo[Piwik_PDFReports_API::REPORT_KEY]['format']; $outputType = $notificationInfo[Piwik_PDFReports_API::OUTPUT_TYPE_INFO_KEY]; $reportRenderer = Piwik_ReportRenderer::factory($reportFormat); if ($reportFormat == Piwik_ReportRenderer::HTML_FORMAT) { $reportRenderer->setRenderImageInline($outputType != Piwik_PDFReports_API::OUTPUT_SAVE_ON_DISK); } } }
/** * @param Piwik_Event_Notification $notification notification object */ function getRendererInstance($notification) { if (self::manageEvent($notification)) { $reportRenderer =& $notification->getNotificationObject(); $notificationInfo = $notification->getNotificationInfo(); $reportFormat = $notificationInfo[Piwik_PDFReports_API::REPORT_KEY]['format']; $reportRenderer = Piwik_ReportRenderer::factory($reportFormat); } }
/** * Generates a report file. * * @param int $idReport ID of the report to generate. If idReport=0 it will generate a report containing all reports * for the specified period & date * @param string $date YYYY-MM-DD * @param int|false $idSite * @param string|false $language If not passed, will use default language. * @param int|false $outputType 1 = download report, 2 = save report to disk, defaults to download * @param string|false $period Defaults to 'day'. If not specified, will default to the report's period set when creating the report * @param string $reportFormat pdf, html */ public function generateReport($idReport, $date, $idSite = false, $language = false, $outputType = false, $period = false, $reportFormat = false) { // Load specified language if(empty($language)) { $language = Piwik_Translate::getInstance()->getLanguageDefault(); } Piwik_Translate::getInstance()->reloadLanguage($language); // Available reports static $reportMetadata = null; if(is_null($reportMetadata)) { $reportMetadata = Piwik_API_API::getInstance()->getReportMetadata($idSite); } // Test template: include all reports if($idReport == 0) { if(empty($period)) { $period = 'day'; } if(empty($reportFormat)) { $reportFormat = Piwik_PDFReports::DEFAULT_FORMAT; } $reports = $reportMetadata; $description = Piwik_Translate('PDFReports_DefaultContainingAllReports'); } // Template is a custom template else { $pdfReports = $this->getReports($idSite, $_period = false, $idReport); $pdfReport = reset($pdfReports); $reportUniqueIds = explode(',', $pdfReport['reports']); $description = $pdfReport['description']; // If period wasn't specified, we shall default to the report's period if(empty($period)) { $period = 'day'; if($pdfReport['period'] != 'never') { $period = $pdfReport['period']; } } // If format wasn't specified, defaults to the report's format if(empty($reportFormat)) { $reportFormat = $pdfReport['format']; // Handle cases for reports created before the 'format' field if(empty($reportFormat)) { $reportFormat = Piwik_PDFReports::DEFAULT_FORMAT; } } // We need to lookup which reports metadata are registered in this report $reports = array(); foreach($reportMetadata as $metadata) { if(in_array($metadata['uniqueId'], $reportUniqueIds)) { $reports[] = $metadata; } } } // The report will be rendered with the first 30 rows and will aggregate other rows in a summary row $filterTruncateGET = Piwik_Common::getRequestVar('filter_truncate', false); $_GET['filter_truncate'] = 30; $websiteName = $prettyDate = false; $processedReports = array(); foreach ($reports as $action) { $apiModule = $action['module']; $apiAction = $action['action']; $apiParameters = array(); if(isset($action['parameters'])) { $apiParameters = $action['parameters']; } $report = Piwik_API_API::getInstance()->getProcessedReport($idSite, $period, $date, $apiModule, $apiAction, $segment = false, $apiParameters, $idGoal = false, $language); $websiteName = $report['website']; $prettyDate = $report['prettyDate']; $processedReports[] = $report; } // Restore values if($filterTruncateGET !== false) { $_GET['filter_truncate'] = $filterTruncateGET; } if(empty($reportFormat)) { $reportFormat = Piwik_PDFReports::DEFAULT_FORMAT; } // Generate the report $reportRenderer = Piwik_ReportRenderer::factory($reportFormat); $reportRenderer->setLocale($language); $reportRenderer->renderFrontPage($websiteName, $prettyDate, $description, $reports ); array_walk($processedReports, array($reportRenderer, 'renderReport')); switch($outputType) { case self::OUTPUT_SAVE_ON_DISK: $outputFilename = 'Email Report - ' . $idReport . '.' . $date . '.' . $idSite . '.' . $language; $outputFilename = $reportRenderer->sendToDisk($outputFilename); return array( $outputFilename, $prettyDate, $websiteName, $reportFormat ); break; default: case self::OUTPUT_DOWNLOAD: $reportRenderer->sendToBrowserDownload("$websiteName - $prettyDate - $description"); break; } }