예제 #1
0
 /**
  * Displays info/warning/error message in a friendly UI and exits.
  *
  * @param string $message Main message, must be html encoded before calling
  * @param bool|string $optionalTrace Backtrace; will be displayed in lighter color
  * @param bool $optionalLinks If true, will show links to the Piwik website for help
  * @param bool $optionalLinkBack If true, displays a link to go back
  */
 function Piwik_ExitWithMessage($message, $optionalTrace = false, $optionalLinks = false, $optionalLinkBack = false)
 {
     @header('Content-Type: text/html; charset=utf-8');
     @header('HTTP/1.1 500 Internal Server Error');
     if ($optionalTrace) {
         $optionalTrace = '<span class="exception-backtrace">Backtrace:<br /><pre>' . $optionalTrace . '</pre></span>';
     }
     $isCli = PHP_SAPI == 'cli';
     if ($optionalLinks) {
         $optionalLinks = '<ul>
                         <li><a target="_blank" href="http://piwik.org">Piwik.org homepage</a></li>
                         <li><a target="_blank" href="http://piwik.org/faq/">Piwik Frequently Asked Questions</a></li>
                         <li><a target="_blank" href="http://piwik.org/docs/">Piwik Documentation</a></li>
                         <li><a target="_blank" href="http://forum.piwik.org/">Piwik Forums</a></li>
                         <li><a target="_blank" href="http://demo.piwik.org">Piwik Online Demo</a></li>
                         </ul>';
     }
     if ($optionalLinkBack) {
         $optionalLinkBack = '<a href="javascript:window.history.back();">Go Back</a><br/>';
     }
     $headerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutHeader.tpl');
     $footerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutFooter.tpl');
     $headerPage = str_replace('{$HTML_TITLE}', PAGE_TITLE_WHEN_ERROR, $headerPage);
     $content = '<p>' . $message . '</p>
                 <p>' . $optionalLinkBack . '<a href="index.php">Go to Piwik</a><br/>
                    <a href="index.php?module=Login">Login</a>' . '</p>' . ' ' . (Piwik_ShouldPrintBackTraceWithMessage() ? $optionalTrace : '') . ' ' . $optionalLinks;
     $message = str_replace(array("<br />", "<br>", "<br/>", "</p>"), "\n", $message);
     $message = str_replace("\t", "", $message);
     $message = strip_tags($message);
     if ($isCli) {
         echo $message;
     } else {
         echo $headerPage . $content . $footerPage;
     }
     echo "\n";
     error_log(sprintf("Error in Piwik: %s", str_replace("\n", " ", $message)));
     exit(1);
 }
예제 #2
0
 private function formatExceptionMessage(Exception $exception)
 {
     $message = $exception->getMessage();
     if (\Piwik_ShouldPrintBackTraceWithMessage()) {
         $message .= "\n" . $exception->getTraceAsString();
     }
     return Renderer::formatValueXml($message);
 }
예제 #3
0
 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;
 }
예제 #4
0
 /**
  * @param Exception $e
  * @return Exception
  */
 protected function decorateExceptionWithDebugTrace(Exception $e)
 {
     // If we are in tests, show full backtrace
     if (defined('PIWIK_PATH_TEST_TO_ROOT')) {
         if (\Piwik_ShouldPrintBackTraceWithMessage()) {
             $message = $e->getMessage() . " in \n " . $e->getFile() . ":" . $e->getLine() . " \n " . $e->getTraceAsString();
         } else {
             $message = $e->getMessage() . "\n \n --> To temporarily debug this error further, set const PIWIK_PRINT_ERROR_BACKTRACE=true; in index.php";
         }
         return new Exception($message);
     }
     return $e;
 }
예제 #5
0
 /**
  * Displays info/warning/error message in a friendly UI and exits.
  *
  * Note: this method should not be called by anyone other than FrontController.
  *
  * @param string $message Main message, must be html encoded before calling
  * @param bool|string $optionalTrace Backtrace; will be displayed in lighter color
  * @param bool $optionalLinks If true, will show links to the Piwik website for help
  * @param bool $optionalLinkBack If true, displays a link to go back
  * @param bool|string $logoUrl The URL to the logo to use.
  * @param bool|string $faviconUrl The URL to the favicon to use.
  * @return string
  */
 function Piwik_GetErrorMessagePage($message, $optionalTrace = false, $optionalLinks = false, $optionalLinkBack = false, $logoUrl = false, $faviconUrl = false, $isCli = null)
 {
     if (!headers_sent()) {
         header('Content-Type: text/html; charset=utf-8');
         $isInternalServerError = preg_match('/(sql|database|mysql)/i', $message);
         if ($isInternalServerError) {
             header('HTTP/1.1 500 Internal Server Error');
         }
     }
     if (empty($logoUrl)) {
         $logoUrl = "plugins/Morpheus/images/logo-header.png";
     }
     if (empty($faviconUrl)) {
         $faviconUrl = "plugins/CoreHome/images/favicon.ico";
     }
     if ($optionalTrace) {
         $optionalTrace = '<h2>Stack trace</h2><pre>' . htmlentities($optionalTrace) . '</pre>';
     }
     if ($isCli === null) {
         $isCli = PHP_SAPI == 'cli';
     }
     if ($optionalLinks) {
         $optionalLinks = '<ul>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org">Piwik.org homepage</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org/faq/">Piwik Frequently Asked Questions</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org/docs/">Piwik Documentation</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://forum.piwik.org/">Piwik Forums</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://demo.piwik.org">Piwik Online Demo</a></li>
                         </ul>';
     }
     if ($optionalLinkBack) {
         $optionalLinkBack = '<a href="javascript:window.history.back();">Go Back</a>';
     }
     $headerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutHeader.tpl');
     $headerPage = str_replace('%logoUrl%', $logoUrl, $headerPage);
     $headerPage = str_replace('%faviconUrl%', $faviconUrl, $headerPage);
     $footerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutFooter.tpl');
     $headerPage = str_replace('{$HTML_TITLE}', PAGE_TITLE_WHEN_ERROR, $headerPage);
     $content = '<h2>' . $message . '</h2>
                 <p>' . $optionalLinkBack . ' | <a href="index.php">Go to Piwik</a> |
                    <a href="index.php?module=Login">Login</a>' . '</p>' . ' ' . (Piwik_ShouldPrintBackTraceWithMessage() ? $optionalTrace : '') . ' ' . $optionalLinks;
     $message = str_replace(array("<br />", "<br>", "<br/>", "</p>"), "\n", $message);
     $message = str_replace("\t", "", $message);
     $message = strip_tags($message);
     if (!$isCli) {
         $message = $headerPage . $content . $footerPage;
     }
     $message .= "\n";
     error_log(sprintf("Error in Piwik: %s", str_replace("\n", " ", $message)));
     return $message;
 }
예제 #6
0
 protected function getExceptionMessage()
 {
     $message = $this->exception->getMessage();
     if (\Piwik_ShouldPrintBackTraceWithMessage()) {
         $message .= "\n" . $this->exception->getTraceAsString();
     }
     return self::renderHtmlEntities($message);
 }
 /**
  * @param Exception $e
  * @return Exception
  */
 protected function decorateExceptionWithDebugTrace(Exception $e)
 {
     // If we are in tests, show full backtrace
     if (defined('PIWIK_PATH_TEST_TO_ROOT')) {
         if (self::DISPLAY_BACKTRACE_DEBUG || \Piwik_ShouldPrintBackTraceWithMessage()) {
             $message = $e->getMessage() . " in \n " . $e->getFile() . ":" . $e->getLine() . " \n " . $e->getTraceAsString();
         } else {
             $message = $e->getMessage() . "\n \n --> To temporarily debug this error further, set const DISPLAY_BACKTRACE_DEBUG=true; in " . basename(__FILE__);
         }
         return new Exception($message);
     }
     return $e;
 }
 /**
  * Displays info/warning/error message in a friendly UI and exits.
  *
  * Note: this method should not be called by anyone other than FrontController.
  *
  * @param string $message Main message, must be html encoded before calling
  * @param bool|string $optionalTrace Backtrace; will be displayed in lighter color
  * @param bool $optionalLinks If true, will show links to the Piwik website for help
  * @param bool $optionalLinkBack If true, displays a link to go back
  * @param bool|string $logoUrl The URL to the logo to use.
  * @param bool|string $faviconUrl The URL to the favicon to use.
  * @return string
  */
 function Piwik_GetErrorMessagePage($message, $optionalTrace = false, $optionalLinks = false, $optionalLinkBack = false, $logoUrl = false, $faviconUrl = false, $isCli = null)
 {
     error_log(sprintf("Error in Piwik: %s", str_replace("\n", " ", strip_tags($message))));
     if (!headers_sent()) {
         header('Content-Type: text/html; charset=utf-8');
         $isInternalServerError = preg_match('/(sql|database|mysql)/i', $message);
         if ($isInternalServerError) {
             header('HTTP/1.1 500 Internal Server Error');
         }
     }
     // We return only an HTML fragment for AJAX requests
     if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') {
         return "<div class='alert alert-danger'><strong>Error:</strong> {$message}</div>";
     }
     if (empty($logoUrl)) {
         $logoUrl = "plugins/Morpheus/images/logo-header.png";
     }
     if (empty($faviconUrl)) {
         $faviconUrl = "plugins/CoreHome/images/favicon.png";
     }
     if ($optionalTrace) {
         $optionalTrace = '<h2>Stack trace</h2><pre>' . htmlentities($optionalTrace) . '</pre>';
     }
     if ($isCli === null) {
         $isCli = PHP_SAPI == 'cli';
     }
     if ($optionalLinks) {
         $optionalLinks = '<ul>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org">Piwik.org homepage</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org/faq/">Piwik Frequently Asked Questions</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://piwik.org/docs/">Piwik Documentation</a></li>
                         <li><a rel="noreferrer" target="_blank" href="http://forum.piwik.org/">Piwik Forums</a></li>
                         <li><a rel="noreferrer" target="_blank" href="https://piwik.pro/contact/?pk_campaign=App_AnErrorOccured&pk_source=Piwik_App&pk_medium=ProfessionalServicesLink#contact-form">Professional help (Piwik PRO)</a></li>
                         </ul>';
     }
     if ($optionalLinkBack) {
         $optionalLinkBack = '<a href="javascript:window.history.back();">Go Back</a>';
     }
     $headerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutHeader.tpl');
     $headerPage = str_replace('%logoUrl%', $logoUrl, $headerPage);
     $headerPage = str_replace('%faviconUrl%', $faviconUrl, $headerPage);
     $footerPage = file_get_contents(PIWIK_INCLUDE_PATH . '/plugins/Morpheus/templates/simpleLayoutFooter.tpl');
     $headerPage = str_replace('{$HTML_TITLE}', PAGE_TITLE_WHEN_ERROR, $headerPage);
     $content = '<h2>' . $message . '</h2>
                 <p>' . $optionalLinkBack . ' | <a href="index.php">Go to Piwik</a>' . '</p>' . ' ' . (Piwik_ShouldPrintBackTraceWithMessage() ? $optionalTrace : '') . ' ' . $optionalLinks;
     $message = str_replace(array("<br />", "<br>", "<br/>", "</p>"), "\n", $message);
     $message = str_replace("\t", "", $message);
     $message = strip_tags($message);
     if (!$isCli) {
         $message = $headerPage . $content . $footerPage;
     }
     $message .= "\n";
     return $message;
 }