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(); }
function index() { $view = Piwik_View::factory('index'); $view->availableWidgets = Piwik_Common::json_encode(Piwik_GetWidgetsList()); $this->setGeneralVariablesView($view); echo $view->render(); }
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(); }
protected function renderTable($table) { $renderer = new Piwik_DataTable_Renderer_Php(); $renderer->setTable($table); $renderer->setRenderSubTables($this->isRenderSubtables()); $renderer->setSerialize(false); $renderer->setHideIdSubDatableFromResponse($this->hideIdSubDatatable); $array = $renderer->flatRender(); if (!is_array($array)) { $array = array('value' => $array); } // decode all entities $callback = create_function('&$value,$key', 'if(is_string($value)){$value = html_entity_decode($value, ENT_QUOTES, "UTF-8");}'); array_walk_recursive($array, $callback); $str = Piwik_Common::json_encode($array); return $this->jsonpWrap($str); }
static function update() { Piwik_Updater::updateDatabase(__FILE__, self::getSql()); if (!Piwik_PluginsManager::getInstance()->isPluginLoaded('PDFReports')) { return; } try { // Piwik_Common::prefixTable('pdf') has been heavily refactored to be more generic // The following actions are taken in this update script : // - create the new generic report table Piwik_Common::prefixTable('report') // - migrate previous reports, if any, from Piwik_Common::prefixTable('pdf') to Piwik_Common::prefixTable('report') // - delete Piwik_Common::prefixTable('pdf') $reports = Piwik_FetchAll('SELECT * FROM `' . Piwik_Common::prefixTable('pdf') . '`'); foreach ($reports as $report) { $idreport = $report['idreport']; $idsite = $report['idsite']; $login = $report['login']; $description = $report['description']; $period = $report['period']; $format = $report['format']; $display_format = $report['display_format']; $email_me = $report['email_me']; $additional_emails = $report['additional_emails']; $reports = $report['reports']; $ts_created = $report['ts_created']; $ts_last_sent = $report['ts_last_sent']; $deleted = $report['deleted']; $parameters = array(); if (!is_null($additional_emails)) { $parameters[Piwik_PDFReports::ADDITIONAL_EMAILS_PARAMETER] = preg_split('/,/', $additional_emails); } $parameters[Piwik_PDFReports::EMAIL_ME_PARAMETER] = is_null($email_me) ? Piwik_PDFReports::EMAIL_ME_PARAMETER_DEFAULT_VALUE : (bool) $email_me; $parameters[Piwik_PDFReports::DISPLAY_FORMAT_PARAMETER] = $display_format; Piwik_Query('INSERT INTO `' . Piwik_Common::prefixTable('report') . '` SET idreport = ?, idsite = ?, login = ?, description = ?, period = ?, type = ?, format = ?, reports = ?, parameters = ?, ts_created = ?, ts_last_sent = ?, deleted = ?', array($idreport, $idsite, $login, $description, is_null($period) ? Piwik_PDFReports::DEFAULT_PERIOD : $period, Piwik_PDFReports::EMAIL_TYPE, is_null($format) ? Piwik_PDFReports::DEFAULT_REPORT_FORMAT : $format, Piwik_Common::json_encode(preg_split('/,/', $reports)), Piwik_Common::json_encode($parameters), $ts_created, $ts_last_sent, $deleted)); } Piwik_Query('DROP TABLE `' . Piwik_Common::prefixTable('pdf') . '`'); } catch (Exception $e) { } }
/** * Echos an error message & other information, then exits. * * @param Exception $e * @param bool $authenticated */ protected function exitWithException($e, $authenticated) { if ($this->usingBulkTracking) { // when doing bulk tracking we return JSON so the caller will know how many succeeded $result = array('succeeded' => $this->countOfLoggedRequests); // send error when in debug mode or when authenticated (which happens when doing log importing, // for example) if (isset($GLOBALS['PIWIK_TRACKER_DEBUG']) && $GLOBALS['PIWIK_TRACKER_DEBUG'] || $authenticated) { $result['error'] = Piwik_Tracker_GetErrorMessage($e); } echo Piwik_Common::json_encode($result); exit; } else { Piwik_Tracker_ExitWithException($e, $authenticated); } }
private static function validateRequestedReports($idSite, $reportType, $requestedReports) { if (!self::allowMultipleReports($reportType)) { //sms can only contain one report, we silently discard all but the first $requestedReports = array_slice($requestedReports, 0, 1); } // retrieve available reports $availableReportMetadata = self::getReportMetadata($idSite, $reportType); $availableReportIds = array(); foreach ($availableReportMetadata as $reportMetadata) { $availableReportIds[] = $reportMetadata['uniqueId']; } foreach ($requestedReports as $report) { if (!in_array($report, $availableReportIds)) { throw new Exception("Report {$report} is unknown or not available for report type '{$reportType}'."); } } return Piwik_Common::json_encode($requestedReports); }
function getSitesForAutocompleter() { $pattern = Piwik_Common::getRequestVar('term'); $sites = Piwik_SitesManager_API::getInstance()->getPatternMatchSites($pattern); $pattern = str_replace('%', '', $pattern); if (!count($sites)) { $results[] = array('label' => Piwik_Translate('SitesManager_NotFound') . " <font class='autocompleteMatched'>{$pattern}</font>.", 'id' => '#'); } else { if (strpos($pattern, '/') !== false && strpos($pattern, '\\/') === false) { $pattern = str_replace('/', '\\/', $pattern); } foreach ($sites as $s) { $hl_name = $s['name']; if (strlen($pattern) > 0) { @preg_match_all("/{$pattern}+/i", $hl_name, $matches); if (is_array($matches[0]) && count($matches[0]) >= 1) { foreach ($matches[0] as $match) { $hl_name = str_replace($match, '<font class="autocompleteMatched">' . $match . '</font>', $s['name']); } } } $results[] = array('label' => $hl_name, 'id' => $s['idsite'], 'name' => $s['name']); } } print Piwik_Common::json_encode($results); }
protected function removeDisabledPluginFromLayout($layout) { $layout = str_replace("\n", "", $layout); // if the json decoding works (ie. new Json format) // we will only return the widgets that are from enabled plugins $layoutObject = Piwik_Common::json_decode($layout, $assoc = false); if (is_array($layoutObject)) { $layoutObject = (object) array('config' => array('layout' => '33-33-33'), 'columns' => $layoutObject); } if (empty($layoutObject) || empty($layoutObject->columns)) { $layoutObject = (object) array('config' => array('layout' => '33-33-33'), 'columns' => array()); } foreach ($layoutObject->columns as &$row) { if (!is_array($row)) { $row = array(); continue; } foreach ($row as $widgetId => $widget) { if (isset($widget->parameters->module)) { $controllerName = $widget->parameters->module; $controllerAction = $widget->parameters->action; if (!Piwik_IsWidgetDefined($controllerName, $controllerAction)) { unset($row[$widgetId]); } } else { unset($row[$widgetId]); } } } $layout = Piwik_Common::json_encode($layoutObject); return $layout; }
public function index() { $view = $this->getOverviewView(); $view->goalsJSON = Piwik_Common::json_encode($this->goals); $view->goalDimensions = Piwik_Goals::getReportsWithGoalMetrics(); $view->userCanEditGoals = Piwik::isUserHasAdminAccess($this->idSite); $view->ecommerceEnabled = $this->site->isEcommerceEnabled(); $view->displayFullReport = true; echo $view->render(); }
public function render() { Piwik::overrideCacheControlHeaders(); $data = array('params' => array('axes' => &$this->axes, 'series' => &$this->series, 'seriesColors' => &$this->seriesColors), 'data' => &$this->data, 'tooltip' => &$this->tooltip, 'seriesPicker' => &$this->seriesPicker); return Piwik_Common::json_encode($data); }
private function setUserSettings($user, $settings) { Piwik_SetOption($user . Piwik_MobileMessaging::USER_SETTINGS_POSTFIX_OPTION, Piwik_Common::json_encode($settings)); }
/** * Render a multidimensional array to Json * Handle Piwik_DataTable|Piwik_DataTable_Array elements in the first dimension only, following case does not work: * array( * array( * Piwik_DataTable, * 2 => array( * 1, * 2 * ), * ), * ); * * @param array $array can contain scalar, arrays, Piwik_DataTable and Piwik_DataTable_Array * @return string */ public static function convertMultiDimensionalArrayToJson($array) { // Naive but works for our current use cases $arrayKeys = array_keys($array); $isAssociative = !is_numeric($arrayKeys[0]); if ($isAssociative) { $json = "{"; } else { $json = "["; } foreach ($array as $key => $value) { if ($isAssociative) { $json .= "\"" . $key . "\":"; } switch (true) { // Case dimension is a PHP array case is_array($value): $json .= Piwik_Common::json_encode($value); break; // Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable // Case dimension is a Piwik_DataTable_Array or a Piwik_DataTable case $value instanceof Piwik_DataTable_Array || $value instanceof Piwik_DataTable: $XMLRenderer = new Piwik_DataTable_Renderer_Json(); $XMLRenderer->setTable($value); $renderedReport = $XMLRenderer->render(); $json .= $renderedReport; break; // Case scalar // Case scalar default: $json .= Piwik_Common::json_encode($value); break; } $json .= ","; } // Remove trailing "," $json = substr($json, 0, strlen($json) - 1); if ($isAssociative) { $json .= "}"; } else { $json .= "]"; } return $json; }
public function render() { Piwik::overrideCacheControlHeaders(); // See http://www.jqplot.com/docs/files/jqPlotOptions-txt.html $data = array('params' => array('axes' => &$this->axes, 'series' => &$this->series, 'seriesColors' => &$this->seriesColors), 'data' => &$this->data, 'tooltip' => &$this->tooltip, 'seriesPicker' => &$this->seriesPicker); Piwik_PostEvent('Visualization_Chart.render', $data); return Piwik_Common::json_encode($data); }