public function index() { Piwik::checkUserIsNotAnonymous(); $view = Piwik_View::factory('index'); $this->setGeneralVariablesView($view); $view->currentUserEmail = Piwik::getCurrentUserEmail(); $availableReports = Piwik_API_API::getInstance()->getReportMetadata($this->idSite); $reportsByCategory = array(); foreach ($availableReports as $report) { $reportsByCategory[$report['category']][] = $report; } unset($reportsByCategory['API']); $reports = Piwik_PDFReports_API::getInstance()->getReports($this->idSite, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = true); $reportsById = array(); foreach ($reports as &$report) { $report['additional_emails'] = str_replace(',', "\n", $report['additional_emails']); $report['reports'] = explode(',', str_replace('.', '_', $report['reports'])); $reportsById[$report['idreport']] = $report; } $view->downloadOutputType = Piwik_PDFReports_API::OUTPUT_DOWNLOAD; $columnsCount = 2; $view->newColumnAfter = ceil(count($reportsByCategory) / $columnsCount); $view->reportsByCategory = $reportsByCategory; $view->reportsJSON = Piwik_Common::json_encode($reportsById); $view->periods = array_merge(array('never' => Piwik_Translate('General_Never')), Piwik_PDFReports_API::getPeriodToFrequency()); $view->defaultFormat = Piwik_PDFReports::DEFAULT_FORMAT; $view->formats = Piwik_ReportRenderer::$availableReportRenderers; $view->aggregateReportsFormats = Piwik_PDFReports_API::getAggregateReportsFormats(); $view->reports = $reports; $view->language = Piwik_LanguagesManager::getLanguageCodeForCurrentUser(); echo $view->render(); }
/** * When the MultiSites plugin is not activated, the SMS content should invite the user to activate it back * * @group Plugins * @group MobileMessaging */ public function testWarnUserViaSMSMultiSitesDeactivated() { // safety net Piwik_PluginsManager::getInstance()->loadPlugins(array('PDFReports', 'MobileMessaging')); $this->assertFalse(Piwik_PluginsManager::getInstance()->isPluginActivated('MultiSites')); $PdfReportsAPIInstance = Piwik_PDFReports_API::getInstance(); $reportId = $PdfReportsAPIInstance->addReport($this->idSiteAccess, 'description', 'month', 'mobile', 'sms', array(), array("phoneNumbers" => array('33698896656'))); list($outputFilename, $prettyDate, $websiteName, $additionalFiles) = $PdfReportsAPIInstance->generateReport($reportId, '01-01-2010', 'en', 2); $handle = fopen($outputFilename, "r"); $contents = fread($handle, filesize($outputFilename)); fclose($handle); $this->assertEquals(Piwik_Translate('MobileMessaging_MultiSites_Must_Be_Activated'), $contents); }
public function index() { $view = Piwik_View::factory('index'); $this->setGeneralVariablesView($view); $view->countWebsites = count(Piwik_SitesManager_API::getInstance()->getSitesIdWithAtLeastViewAccess()); // get report types $reportTypes = Piwik_PDFReports_API::getReportTypes(); $view->reportTypes = $reportTypes; $view->defaultReportType = self::DEFAULT_REPORT_TYPE; $view->defaultReportFormat = Piwik_PDFReports::DEFAULT_REPORT_FORMAT; $reportsByCategoryByType = array(); $reportFormatsByReportType = array(); $allowMultipleReportsByReportType = array(); foreach ($reportTypes as $reportType => $reportTypeIcon) { // get report formats $reportFormatsByReportType[$reportType] = Piwik_PDFReports_API::getReportFormats($reportType); $allowMultipleReportsByReportType[$reportType] = Piwik_PDFReports_API::allowMultipleReports($reportType); // get report metadata $reportsByCategory = array(); $availableReportMetadata = Piwik_PDFReports_API::getReportMetadata($this->idSite, $reportType); foreach ($availableReportMetadata as $reportMetadata) { $reportsByCategory[$reportMetadata['category']][] = $reportMetadata; } $reportsByCategoryByType[$reportType] = $reportsByCategory; } $view->reportsByCategoryByReportType = $reportsByCategoryByType; $view->reportFormatsByReportType = $reportFormatsByReportType; $view->allowMultipleReportsByReportType = $allowMultipleReportsByReportType; $reports = array(); $reportsById = array(); if (!Piwik::isUserIsAnonymous()) { $reports = Piwik_PDFReports_API::getInstance()->getReports($this->idSite, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = true); foreach ($reports as &$report) { $report['recipients'] = Piwik_PDFReports_API::getReportRecipients($report); $reportsById[$report['idreport']] = $report; } } $view->reports = $reports; $view->reportsJSON = Piwik_Common::json_encode($reportsById); $view->downloadOutputType = Piwik_PDFReports_API::OUTPUT_INLINE; $periods = array_merge(array('never' => Piwik_Translate('General_Never')), Piwik_PDFReports::getPeriodToFrequency()); // Do not display date range in selector unset($periods['range']); $view->periods = $periods; $view->defaultPeriod = Piwik_PDFReports::DEFAULT_PERIOD; $view->language = Piwik_LanguagesManager::getLanguageCodeForCurrentUser(); echo $view->render(); }
function generateAndSendScheduledReports($period) { // Select all reports to generate $reportsToGenerate = Piwik_PDFReports_API::getInstance()->getReports($idSite = false, $period); // For each, generate the file and send the message with the attached report foreach ($reportsToGenerate as $report) { Piwik_PDFReports_API::getInstance()->sendReport($report['idreport']); } }
function _updateReport($idReport, $data) { $idReport = Piwik_PDFReports_API::getInstance()->updateReport($idReport, $data['idsite'], $data['description'], $data['period'], $data['type'], $data['format'], $data['reports'], $data['parameters']); return $idReport; }
/** * Create one MAIL and two MOBILE scheduled reports * * Reports sent by mail can contain PNG graphs when the user specifies it. * Depending on the system under test, generated images differ slightly. * Because of this discrepancy, PNG graphs are only tested if the system under test * has the characteristics described in 'canImagesBeIncludedInScheduledReports' * * @see canImagesBeIncludedInScheduledReports * @param int $idSite id of website created */ protected static function setUpScheduledReports($idSite) { $includeImages = self::canImagesBeIncludedInScheduledReports(); // fake access is needed so API methods can call Piwik::getCurrentUserLogin(), e.g: 'PDFReports.addReport' $pseudoMockAccess = new FakeAccess(); FakeAccess::$superUser = true; Zend_Registry::set('access', $pseudoMockAccess); // retrieve available reports $availableReportMetadata = Piwik_PDFReports_API::getReportMetadata($idSite, Piwik_PDFReports::EMAIL_TYPE); $availableReportIds = array(); foreach ($availableReportMetadata as $reportMetadata) { $availableReportIds[] = $reportMetadata['uniqueId']; } //@review should we also test evolution graphs? // set-up mail report Piwik_PDFReports_API::getInstance()->addReport($idSite, 'Mail Test report', 'day', Piwik_PDFReports::EMAIL_TYPE, Piwik_ReportRenderer::HTML_FORMAT, $availableReportIds, array("displayFormat" => $includeImages ? Piwik_PDFReports::DISPLAY_FORMAT_TABLES_AND_GRAPHS : Piwik_PDFReports::DISPLAY_FORMAT_TABLES_ONLY)); // set-up sms report for one website Piwik_PDFReports_API::getInstance()->addReport($idSite, 'SMS Test report, one website', 'day', Piwik_MobileMessaging::MOBILE_TYPE, Piwik_MobileMessaging::SMS_FORMAT, array("MultiSites_getOne"), array("phoneNumbers" => array())); // set-up sms report for all websites Piwik_PDFReports_API::getInstance()->addReport($idSite, 'SMS Test report, all websites', 'day', Piwik_MobileMessaging::MOBILE_TYPE, Piwik_MobileMessaging::SMS_FORMAT, array("MultiSites_getAll"), array("phoneNumbers" => array())); }
/** * remove phone number * * @param string $phoneNumber * * @return bool true */ public function removePhoneNumber($phoneNumber) { Piwik::checkUserIsNotAnonymous(); $phoneNumbers = $this->retrievePhoneNumbers(); unset($phoneNumbers[$phoneNumber]); $this->savePhoneNumbers($phoneNumbers); // remove phone number from reports $pdfReportsAPIInstance = Piwik_PDFReports_API::getInstance(); $reports = $pdfReportsAPIInstance->getReports($idSite = false, $period = false, $idReport = false, $ifSuperUserReturnOnlySuperUserReports = $this->getDelegatedManagement()); foreach ($reports as $report) { if ($report['type'] == Piwik_MobileMessaging::MOBILE_TYPE) { $reportParameters = $report['parameters']; $reportPhoneNumbers = $reportParameters[Piwik_MobileMessaging::PHONE_NUMBERS_PARAMETER]; $updatedPhoneNumbers = array(); foreach ($reportPhoneNumbers as $reportPhoneNumber) { if ($reportPhoneNumber != $phoneNumber) { $updatedPhoneNumbers[] = $reportPhoneNumber; } } if (count($updatedPhoneNumbers) != count($reportPhoneNumbers)) { $reportParameters[Piwik_MobileMessaging::PHONE_NUMBERS_PARAMETER] = $updatedPhoneNumbers; // note: reports can end up without any recipients $pdfReportsAPIInstance->updateReport($report['idreport'], $report['idsite'], $report['description'], $report['period'], $report['type'], $report['format'], $report['reports'], $reportParameters); } } } return true; }
function _updateReport($idReport, $data) { //$idReport, $idSite, $description, $period, $reports, $emailMe = true, $additionalEmails = false) $idReport = Piwik_PDFReports_API::getInstance()->updateReport($idReport, $data['idsite'], $data['description'], $data['period'], $data['format'], $data['aggregate_reports_format'], $data['reports'], $data['email_me'], $data['additional_emails']); return $idReport; }
function deactivate() { // delete all mobile reports $pdfReportsAPIInstance = Piwik_PDFReports_API::getInstance(); $reports = $pdfReportsAPIInstance->getReports(); foreach ($reports as $report) { if ($report['type'] == Piwik_MobileMessaging::MOBILE_TYPE) { $pdfReportsAPIInstance->deleteReport($report['idreport']); } } }