Пример #1
0
 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();
 }
Пример #2
0
 /**
  * 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);
 }
Пример #3
0
 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();
 }
Пример #4
0
 /**
  * Resets all caches and drops the database
  */
 public function tearDown()
 {
     parent::tearDown();
     try {
         $plugins = Piwik_PluginsManager::getInstance()->getLoadedPlugins();
         foreach ($plugins as $plugin) {
             $plugin->uninstall();
         }
         Piwik_PluginsManager::getInstance()->unloadPlugins();
     } catch (Exception $e) {
     }
     Piwik::dropDatabase();
     Piwik_DataTable_Manager::getInstance()->deleteAll();
     Piwik_Option::getInstance()->clearCache();
     Piwik_PDFReports_API::$cache = array();
     Piwik_Site::clearCache();
     Piwik_Common::deleteTrackerCache();
     Piwik_Config::getInstance()->clear();
     Piwik_TablePartitioning::$tablesAlreadyInstalled = null;
     Zend_Registry::_unsetInstance();
 }
Пример #5
0
 /**
  * Deletes a specific report
  * 
  * @param int $idReport
  */
 public function deleteReport($idReport)
 {
     $pdfReports = $this->getReports($idSite = false, $periodSearch = false, $idReport);
     $report = reset($pdfReports);
     Piwik::checkUserIsSuperUserOrTheUser($report['login']);
     Zend_Registry::get('db')->update(Piwik_Common::prefixTable('report'), array('deleted' => 1), "idreport = '{$idReport}'");
     self::$cache = array();
 }
Пример #6
0
 private function checkAggregateReportsFormat($format)
 {
     $availableAggregateReportsFormats = array_keys(Piwik_PDFReports_API::getAggregateReportsFormats());
     if (!in_array($format, $availableAggregateReportsFormats)) {
         throw new Exception(Piwik_TranslateException('General_ExceptionInvalidAggregateReportsFormat', array($format, implode(', ', $availableAggregateReportsFormats))));
     }
 }
Пример #7
0
 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']);
     }
 }
Пример #8
0
 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;
 }
Пример #9
0
 /**
  * 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()));
 }
Пример #10
0
 /**
  * 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;
 }
Пример #12
0
 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']);
         }
     }
 }