public function renderReport($processedReport) { $isGoalPluginEnabled = Common::isGoalPluginEnabled(); $prettyDate = $processedReport['prettyDate']; $reportData = $processedReport['reportData']; $evolutionMetrics = array(); $multiSitesAPIMetrics = API::getApiMetrics($enhanced = true); foreach ($multiSitesAPIMetrics as $metricSettings) { $evolutionMetrics[] = $metricSettings[API::METRIC_EVOLUTION_COL_NAME_KEY]; } $floatRegex = self::FLOAT_REGEXP; // no decimal for all metrics to shorten SMS content (keeps the monetary sign for revenue metrics) $reportData->filter('ColumnCallbackReplace', array(array_merge(array_keys($multiSitesAPIMetrics), $evolutionMetrics), function ($value) use($floatRegex) { return preg_replace_callback($floatRegex, function ($matches) { return round($matches[0]); }, $value); })); // evolution metrics formatting : // - remove monetary, percentage and white spaces to shorten SMS content // (this is also needed to be able to test $value != 0 and see if there is an evolution at all in SMSReport.twig) // - adds a plus sign $reportData->filter('ColumnCallbackReplace', array($evolutionMetrics, function ($value) use($floatRegex) { $matched = preg_match($floatRegex, $value, $matches); $formatted = $matched ? sprintf("%+d", $matches[0]) : $value; return \Piwik\NumberFormatter::getInstance()->formatPercentEvolution($formatted); })); $dataRows = $reportData->getRows(); $reportMetadata = $processedReport['reportMetadata']; $reportRowsMetadata = $reportMetadata->getRows(); $siteHasECommerce = array(); foreach ($reportRowsMetadata as $rowMetadata) { $idSite = $rowMetadata->getColumn('idsite'); $siteHasECommerce[$idSite] = Site::isEcommerceEnabledFor($idSite); } $view = new View('@MobileMessaging/SMSReport'); $view->assign("isGoalPluginEnabled", $isGoalPluginEnabled); $view->assign("reportRows", $dataRows); $view->assign("reportRowsMetadata", $reportRowsMetadata); $view->assign("prettyDate", $prettyDate); $view->assign("siteHasECommerce", $siteHasECommerce); $view->assign("displaySiteName", $processedReport['metadata']['action'] == 'getAll'); // segment $segment = $processedReport['segment']; $displaySegment = $segment != null; $view->assign("displaySegment", $displaySegment); if ($displaySegment) { $view->assign("segmentName", $segment['name']); } $this->rendering .= $view->render(); }
protected function buildView() { $this->overrideSomeConfigPropertiesIfNeeded(); try { $this->beforeLoadDataTable(); $this->loadDataTableFromAPI(); $this->postDataTableLoadedFromAPI(); $requestPropertiesAfterLoadDataTable = $this->requestConfig->getProperties(); $this->applyFilters(); $this->addVisualizationInfoFromMetricMetadata(); $this->afterAllFiltersAreApplied(); $this->beforeRender(); $this->logMessageIfRequestPropertiesHaveChanged($requestPropertiesAfterLoadDataTable); } catch (NoAccessException $e) { throw $e; } catch (\Exception $e) { Log::error("Failed to get data from API: " . $e->getMessage() . "\n" . $e->getTraceAsString()); $message = $e->getMessage(); if (\Piwik_ShouldPrintBackTraceWithMessage()) { $message .= "\n" . $e->getTraceAsString(); } $loadingError = array('message' => $message); } $view = new View("@CoreHome/_dataTable"); if (!empty($loadingError)) { $view->error = $loadingError; } $view->assign($this->templateVars); $view->visualization = $this; $view->visualizationTemplate = static::TEMPLATE_FILE; $view->visualizationCssClass = $this->getDefaultDataTableCssClass(); $view->reportMetdadata = $this->getReportMetadata(); if (null === $this->dataTable) { $view->dataTable = null; } else { $view->dataTableHasNoData = !$this->isThereDataToDisplay(); $view->dataTable = $this->dataTable; // if it's likely that the report data for this data table has been purged, // set whether we should display a message to that effect. $view->showReportDataWasPurgedMessage = $this->hasReportBeenPurged(); $view->deleteReportsOlderThan = Option::get('delete_reports_older_than'); } $view->idSubtable = $this->requestConfig->idSubtable; $view->clientSideParameters = $this->getClientSideParametersToSet(); $view->clientSideProperties = $this->getClientSidePropertiesToSet(); $view->properties = array_merge($this->requestConfig->getProperties(), $this->config->getProperties()); $view->reportLastUpdatedMessage = $this->reportLastUpdatedMessage; $view->footerIcons = $this->config->footer_icons; $view->isWidget = Common::getRequestVar('widget', 0, 'int'); return $view; }
private function assignCommonParameters(View $view) { $view->assign("reportFontFamily", ReportRenderer::DEFAULT_REPORT_FONT_FAMILY); $view->assign("reportTitleTextColor", ReportRenderer::REPORT_TITLE_TEXT_COLOR); $view->assign("reportTitleTextSize", self::REPORT_TITLE_TEXT_SIZE); $view->assign("reportTextColor", ReportRenderer::REPORT_TEXT_COLOR); $view->assign("tableHeaderBgColor", ReportRenderer::TABLE_HEADER_BG_COLOR); $view->assign("tableHeaderTextColor", ReportRenderer::TABLE_HEADER_TEXT_COLOR); $view->assign("tableCellBorderColor", ReportRenderer::TABLE_CELL_BORDER_COLOR); $view->assign("tableBgColor", ReportRenderer::TABLE_BG_COLOR); $view->assign("reportTableHeaderTextWeight", self::TABLE_HEADER_TEXT_WEIGHT); $view->assign("reportTableHeaderTextSize", self::REPORT_TABLE_HEADER_TEXT_SIZE); $view->assign("reportTableHeaderTextTransform", ReportRenderer::TABLE_HEADER_TEXT_TRANSFORM); $view->assign("reportTableRowTextSize", self::REPORT_TABLE_ROW_TEXT_SIZE); $view->assign("reportBackToTopTextSize", self::REPORT_BACK_TO_TOP_TEXT_SIZE); $view->assign("currentPath", SettingsPiwik::getPiwikUrl()); $view->assign("logoHeader", API::getInstance()->getHeaderLogoUrl()); }
/** * @param array $alerts * @param Mail $mail * @param string[] $recipient Email addresses * @param $period * @param $idSite */ protected function sendAlertsPerEmailToRecipient($alerts, Mail $mail, $recipient, $period, $idSite) { if (empty($recipient) || empty($alerts)) { return; } $prettyDate = $this->getPrettyDateForSite($period, $idSite); $websiteName = Site::getNameFor($idSite); $mail->setDefaultFromPiwik(); $mail->addTo($recipient); $mail->setSubject(Piwik::translate('CustomAlerts_MailAlertSubject', array($websiteName, $prettyDate))); $controller = new Controller(); $viewHtml = new View('@CustomAlerts/alertHtmlMail'); $viewHtml->assign('triggeredAlerts', $controller->formatAlerts($alerts, 'html')); $mail->setBodyHtml($viewHtml->render()); $viewText = new View('@CustomAlerts/alertTextMail'); $viewText->assign('triggeredAlerts', $controller->formatAlerts($alerts, 'text')); $viewText->setContentType('text/plain'); $mail->setBodyText($viewText->render()); $mail->send(); }
/** * Main method */ public function view() { /** List of available groups */ $groups = array(); $conf = self::conf(); $d = dir($conf['logPath']); /** Fix by Kowalikus: get the list of sites the current user has view access to */ $idSite = (int) Common::getRequestVar('idSite'); if (Piwik::isUserHasViewAccess($idSite) === false) { return false; } while (($dir = $d->read()) !== false) { if ($dir[0] === '.' || !is_dir($d->path . $dir)) { continue; } $pos = strpos($dir, ','); if ($pos === false) { continue; } $site = (int) substr($dir, 0, $pos); /** Fix by Kowalikus: check if current user has view access */ if ($site !== $idSite) { continue; } $groups[] = '<option value="' . $dir . '">' . ($pos === false ? $dir : substr($dir, $pos + 1)) . '</option>'; } $d->close(); /** Sort groups in alphabetical order */ sort($groups); $__selectGroups = implode("\n", $groups); /** Screen sizes */ $__selectScreens = ''; for ($i = 0; $i < count($conf['__screenSizes']); $i++) { $__selectScreens .= '<option value="' . $conf['__screenSizes'][$i] . '">' . ($conf['__screenSizes'][$i] === 0 ? Piwik::Translate('ClickHeat_LANG_ALL') : $conf['__screenSizes'][$i] . 'px') . '</option>'; } /** Browsers */ $__selectBrowsers = ''; foreach ($conf['__browsersList'] as $label => $name) { $__selectBrowsers .= '<option value="' . $label . '">' . ($label === 'all' ? Piwik::Translate('ClickHeat_LANG_ALL') : ($label === 'unknown' ? Piwik::Translate('ClickHeat_LANG_UNKNOWN') : $name)) . '</option>'; } /** Date */ $date = strtotime(Common::getRequestVar('date')); if ($date === false) { if ($conf['yesterday'] === true) { $date = mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')); } else { $date = time(); } } $__day = (int) date('d', $date); $__month = (int) date('m', $date); $__year = (int) date('Y', $date); $range = Common::getRequestVar('period'); $range = $range[0]; if (!in_array($range, array('d', 'm', 'w'))) { $range = 'd'; } if ($range === 'w') { $startDay = $conf['start'] === 'm' ? 1 : 0; while (date('w', $date) != $startDay) { $date = mktime(0, 0, 0, date('m', $date), date('d', $date) - 1, date('Y', $date)); } $__day = (int) date('d', $date); $__month = (int) date('m', $date); $__year = (int) date('Y', $date); } elseif ($range === 'm') { $__day = 1; } $view = new View('@ClickHeat/view'); $view->assign('clickheat_host', 'http://' . $_SERVER['SERVER_NAME']); $view->assign('clickheat_path', CLICKHEAT_PATH); $view->assign('clickheat_index', CLICKHEAT_INDEX_PATH); //$view->assign('clickheat_group', LANG_GROUP); $view->assign('clickheat_groups', $__selectGroups); //$view->assign('clickheat_browser', LANG_BROWSER); $view->assign('clickheat_browsers', $__selectBrowsers); //$view->assign('clickheat_screen', LANG_SCREENSIZE); $view->assign('clickheat_screens', $__selectScreens); //$view->assign('clickheat_heatmap', LANG_HEATMAP); $view->clickheat_loading = str_replace('\'', '\\\'', Piwik::Translate('ClickHeat_LANG_ERROR_LOADING')); $view->clickheat_cleaner = str_replace('\'', '\\\'', Piwik::Translate('ClickHeat_LANG_CLEANER_RUNNING')); $view->clickheat_admincookie = str_replace('\'', '\\\'', Piwik::Translate('ClickHeat_LANG_JAVASCRIPT_ADMIN_COOKIE')); $view->clickheat_alpha = $conf['alpha']; $view->clickheat_iframes = $conf['hideIframes'] === true ? 'true' : 'false'; $view->clickheat_flashes = $conf['hideFlashes'] === true ? 'true' : 'false'; $view->clickheat_force_heatmap = $conf['heatmap'] === true ? ' checked="checked"' : ''; $view->clickheat_jsokay = str_replace('\'', '\\\'', Piwik::Translate('ClickHeat_LANG_ERROR_JAVASCRIPT')); $view->clickheat_day = $__day; $view->clickheat_month = $__month; $view->clickheat_year = $__year; $view->clickheat_range = $range; $view->clickheat_menu = '<a href="#" onclick="adminCookie(); return false;">' . Piwik::Translate('ClickHeat_LANG_LOG_MY_CLICKS') . '</a><br /><a href="#" onclick="showJsCode(); return false;">Javascript</a>'; echo $view->render(); }