/** * Returns the url to header logo (~127x50px) * * @param bool $pathOnly If true, returns path relative to doc root. Otherwise, returns a URL. * @return string */ public function getHeaderLogoUrl($pathOnly = false) { $logo = 'themes/default/images/logo-header.png'; if (Piwik_Config::getInstance()->branding['use_custom_logo'] == 1 && file_exists(Piwik_Common::getPathToPiwikRoot() . '/themes/logo-header.png')) { $logo = 'themes/logo-header.png'; } if (!$pathOnly) { return Piwik::getPiwikUrl() . $logo; } return Piwik_Common::getPathToPiwikRoot() . '/' . $logo; }
private function paintReportTable() { //Color and font restoration $this->TCPDF->SetFillColor($this->tableBackgroundColor[0], $this->tableBackgroundColor[1], $this->tableBackgroundColor[2]); $this->TCPDF->SetTextColor($this->reportTextColor[0], $this->reportTextColor[1], $this->reportTextColor[2]); $this->TCPDF->SetFont(''); $fill = false; $url = false; $leftSpacesBeforeLogo = str_repeat(' ', $this->leftSpacesBeforeLogo); $logoWidth = $this->logoWidth; $logoHeight = $this->logoHeight; $rowsMetadata = $this->reportRowsMetadata->getRows(); // Draw a body of report table foreach ($this->report->getRows() as $rowId => $row) { $rowMetrics = $row->getColumns(); $rowMetadata = isset($rowsMetadata[$rowId]) ? $rowsMetadata[$rowId]->getColumns() : array(); if (isset($rowMetadata['url'])) { $url = $rowMetadata['url']; } foreach ($this->reportColumns as $columnId => $columnName) { // Label column if ($columnId == 'label') { $isLogoDisplayable = isset($rowMetadata['logo']); $text = ''; $posX = $this->TCPDF->GetX(); $posY = $this->TCPDF->GetY(); if (isset($rowMetrics[$columnId])) { $text = substr($rowMetrics[$columnId], 0, $this->truncateAfter); if ($isLogoDisplayable) { $text = $leftSpacesBeforeLogo . $text; } } $text = $this->formatText($text); $this->TCPDF->Cell($this->labelCellWidth, $this->cellHeight, $text, 'LR', 0, 'L', $fill, $url); if ($isLogoDisplayable) { if (isset($rowMetadata['logoWidth'])) { $logoWidth = $rowMetadata['logoWidth']; } if (isset($rowMetadata['logoHeight'])) { $logoHeight = $rowMetadata['logoHeight']; } $restoreY = $this->TCPDF->getY(); $restoreX = $this->TCPDF->getX(); $this->TCPDF->SetY($posY); $this->TCPDF->SetX($posX); $topMargin = 1.3; // Country flags are not very high, force a bigger top margin if ($logoHeight < 16) { $topMargin = 2; } $path = Piwik_Common::getPathToPiwikRoot() . "/" . $rowMetadata['logo']; if (file_exists($path)) { $this->TCPDF->Image($path, $posX + ($leftMargin = 2), $posY + $topMargin, $logoWidth / 4); } $this->TCPDF->SetXY($restoreX, $restoreY); } } else { // No value means 0 if (empty($rowMetrics[$columnId])) { $rowMetrics[$columnId] = 0; } $this->TCPDF->Cell($this->cellWidth, $this->cellHeight, $rowMetrics[$columnId], 'LR', 0, 'L', $fill); } } $this->TCPDF->Ln(); // Top/Bottom grey border for all cells $this->TCPDF->SetDrawColor($this->rowTopBottomBorder[0], $this->rowTopBottomBorder[1], $this->rowTopBottomBorder[2]); $this->TCPDF->Cell($this->totalWidth, 0, '', 'T'); $this->setBorderColor(); $this->TCPDF->Ln(0.2); $fill = !$fill; } }
/** * Copy individual file from $source to $target. * * @param string $source eg. './tmp/latest/index.php' * @param string $target eg. './index.php' * @param bool $excludePhp * @return bool */ public static function copy($source, $dest, $excludePhp = false) { static $phpExtensions = array('php', 'tpl'); if ($excludePhp) { $path_parts = pathinfo($source); if (in_array($path_parts['extension'], $phpExtensions)) { return true; } } if (!@copy($source, $dest)) { @chmod($dest, 0755); if (!@copy($source, $dest)) { throw new Exception("\n\t\t\t\tError while copying file to <code>{$dest}</code>. <br />\n\t\t\t\tPlease check that the web server has enough permission to overwrite this file. <br/>\n\t\t\t\tFor example, on a linux server, if your apache user is www-data you can try to execute:<br>\n\t\t\t\t<code>chown -R www-data:www-data " . Piwik_Common::getPathToPiwikRoot() . "</code><br>\n\t\t\t\t<code>chmod -R 0755 " . Piwik_Common::getPathToPiwikRoot() . "</code><br>\n\t\t\t\t\t"); } } return true; }
/** * Copy individual file from $source to $target. * * @param string $source eg. './tmp/latest/index.php' * @param string $target eg. './index.php' * @param bool $excludePhp * @return bool */ public static function copy($source, $dest, $excludePhp = false) { static $phpExtensions = array('php', 'tpl'); if ($excludePhp) { $path_parts = pathinfo($source); if (in_array($path_parts['extension'], $phpExtensions)) { return true; } } if (!@copy($source, $dest)) { @chmod($dest, 0755); if (!@copy($source, $dest)) { $message = "Error while creating/copying file to <code>{$dest}</code>. <br />" . self::getErrorMessageMissingPermissions(Piwik_Common::getPathToPiwikRoot()); throw new Exception($message); } } return true; }
public static function getDefaultDefaultConfigPath() { return Piwik_Common::getPathToPiwikRoot() . '/config/global.ini.php'; }
private function doWelcomeUpdates($view, $componentsWithUpdateFile) { $view->new_piwik_version = Piwik_Version::VERSION; $view->commandUpgradePiwik = "<br /><code>php " . Piwik_Common::getPathToPiwikRoot() . "/index.php -- \"module=CoreUpdater\" </code>"; $pluginNamesToUpdate = array(); $coreToUpdate = false; // handle case of existing database with no tables if (!Piwik::isInstalled()) { $this->errorMessages[] = Piwik_Translate('CoreUpdater_EmptyDatabaseError', Zend_Registry::get('config')->database->dbname); $this->coreError = true; $currentVersion = 'N/A'; } else { $this->errorMessages = array(); try { $currentVersion = Piwik_GetOption('version_core'); } catch (Exception $e) { $currentVersion = '<= 0.2.9'; } foreach ($componentsWithUpdateFile as $name => $filenames) { if ($name == 'core') { $coreToUpdate = true; } else { $pluginNamesToUpdate[] = $name; } } } // check file integrity $integrityInfo = Piwik::getFileIntegrityInformation(); if (isset($integrityInfo[1])) { if ($integrityInfo[0] == false) { $this->warningMessages[] = '<b>' . Piwik_Translate('General_FileIntegrityWarningExplanation') . '</b>'; } $this->warningMessages = array_merge($this->warningMessages, array_slice($integrityInfo, 1)); } Piwik::deleteAllCacheOnUpdate(); $view->coreError = $this->coreError; $view->warningMessages = $this->warningMessages; $view->errorMessages = $this->errorMessages; $view->current_piwik_version = $currentVersion; $view->pluginNamesToUpdate = $pluginNamesToUpdate; $view->coreToUpdate = $coreToUpdate; echo $view->render(); }
/** * Returns the url to header logo (~127x50px) * * @param bool $pathOnly If true, returns path relative to doc root. Otherwise, returns a URL. * @return string */ public function getHeaderLogoUrl($pathOnly = false) { $logo = 'themes/default/images/logo-header.png'; if (Zend_Registry::get('config')->branding->use_custom_logo == 1 && file_exists(Piwik_Common::getPathToPiwikRoot() . '/themes/logo-header.png')) { $logo = 'themes/logo-header.png'; } if (!$pathOnly) { return Piwik::getPiwikUrl() . $logo; } return Piwik_Common::getPathToPiwikRoot() . '/' . $logo; }
/** * Returns relative path to the application logo * * @return string Absolute path to application logo */ public function getLogoPath() { return Piwik_Common::getPathToPiwikRoot() . '/themes/default/images/logo.png'; }
/** * Start the session * * @param array|bool $options An array of configuration options; the auto-start (bool) setting is ignored * @return void */ public static function start($options = false) { if (Piwik_Common::isPhpCliMode() || self::$sessionStarted || defined('PIWIK_ENABLE_SESSION_START') && !PIWIK_ENABLE_SESSION_START) { return; } self::$sessionStarted = true; // use cookies to store session id on the client side @ini_set('session.use_cookies', '1'); // prevent attacks involving session ids passed in URLs @ini_set('session.use_only_cookies', '1'); // advise browser that session cookie should only be sent over secure connection if (Piwik::isHttps()) { @ini_set('session.cookie_secure', '1'); } // advise browser that session cookie should only be accessible through the HTTP protocol (i.e., not JavaScript) @ini_set('session.cookie_httponly', '1'); // don't use the default: PHPSESSID $sessionName = defined('PIWIK_SESSION_NAME') ? PIWIK_SESSION_NAME : 'PIWIK_SESSID'; @ini_set('session.name', $sessionName); // proxies may cause the referer check to fail and // incorrectly invalidate the session @ini_set('session.referer_check', ''); $currentSaveHandler = ini_get('session.save_handler'); $config = Piwik_Config::getInstance(); if (self::isFileBasedSessions()) { // Note: this handler doesn't work well in load-balanced environments and may have a concurrency issue with locked session files // for "files", use our own folder to prevent local session file hijacking $sessionPath = PIWIK_USER_PATH . '/tmp/sessions'; // We always call mkdir since it also chmods the directory which might help when permissions were reverted for some reasons Piwik_Common::mkdir($sessionPath); @ini_set('session.save_handler', 'files'); @ini_set('session.save_path', $sessionPath); } else { if ($config->General['session_save_handler'] === 'dbtable' || in_array($currentSaveHandler, array('user', 'mm'))) { // We consider these to be misconfigurations, in that: // - user - we can't verify that user-defined session handler functions have already been set via session_set_save_handler() // - mm - this handler is not recommended, unsupported, not available for Windows, and has a potential concurrency issue $db = Zend_Registry::get('db'); $config = array('name' => Piwik_Common::prefixTable('session'), 'primary' => 'id', 'modifiedColumn' => 'modified', 'dataColumn' => 'data', 'lifetimeColumn' => 'lifetime', 'db' => $db); $saveHandler = new Piwik_Session_SaveHandler_DbTable($config); if ($saveHandler) { self::setSaveHandler($saveHandler); } } } // garbage collection may disabled by default (e.g., Debian) if (ini_get('session.gc_probability') == 0) { @ini_set('session.gc_probability', 1); } try { Zend_Session::start(); register_shutdown_function(array('Zend_Session', 'writeClose'), true); } catch (Exception $e) { Piwik::log('Unable to start session: ' . $e->getMessage()); $enableDbSessions = ''; if (Piwik::isInstalled()) { $enableDbSessions = "<br/>If you still experience issues after trying these changes, \n\t\t\t \t\t\twe recommend that you <a href='http://piwik.org/faq/how-to-install/#faq_133' target='_blank'>enable database session storage</a>."; } $message = 'Error: ' . Piwik_Translate('General_ExceptionUnableToStartSession') . ' ' . Piwik::getErrorMessageMissingPermissions(Piwik_Common::getPathToPiwikRoot() . '/tmp/sessions/') . $enableDbSessions . "\n<pre>Debug: the original error was \n" . $e->getMessage() . "</pre>"; Piwik_ExitWithMessage($message); } }
public static function copy($source, $dest) { if (!@copy($source, $dest)) { @chmod($dest, 0755); if (!@copy($source, $dest)) { throw new Exception("\n\t\t\t\tError while copying file to <code>{$dest}</code>. <br />\n\t\t\t\tPlease check that the web server has enough permission to overwrite this file. <br/>\n\t\t\t\tFor example, on a linux server, if your apache user is www-data you can try to execute:<br>\n\t\t\t\t<code>chown -R www-data:www-data " . Piwik_Common::getPathToPiwikRoot() . "</code><br>\n\t\t\t\t<code>chmod -R 0755 " . Piwik_Common::getPathToPiwikRoot() . "</code><br>\n\t\t\t\t\t"); } } return true; }
/** * Copy individual file from $source to $target. * * @param string $source eg. './tmp/latest/index.php' * @param string $target eg. './index.php' * @param bool $excludePhp * @return bool */ static public function copy($source, $dest, $excludePhp=false) { static $phpExtensions = array('php', 'tpl'); if($excludePhp) { $path_parts = pathinfo($source); if(in_array($path_parts['extension'], $phpExtensions)) { return true; } } if(!@copy( $source, $dest )) { @chmod($dest, 0755); if(!@copy( $source, $dest )) { $message = "Error while copying file to <code>$dest</code>. <br />" . "Please check that the web server has enough permission to overwrite this file. <br />"; if(Piwik_Common::isWindows()) { $message .= "On Windows, you can try to execute:<br />" . "<code>cacls ".Piwik_Common::getPathToPiwikRoot()." /t /g ".get_current_user().":f</code><br />"; } else { $message = "For example, on a Linux server, if your Apache httpd user is www-data you can try to execute:<br />" . "<code>chown -R www-data:www-data ".Piwik_Common::getPathToPiwikRoot()."</code><br />" . "<code>chmod -R 0755 ".Piwik_Common::getPathToPiwikRoot()."</code><br />"; } throw new Exception($message); } } return true; }
private function doWelcomeUpdates($view, $componentsWithUpdateFile) { $view->new_piwik_version = Piwik_Version::VERSION; $view->commandUpgradePiwik = "<br/><code>php ".Piwik_Common::getPathToPiwikRoot()."/index.php </code>"; $pluginNamesToUpdate = array(); $coreToUpdate = false; // handle case of existing database with no tables $tablesInstalled = Piwik::getTablesInstalled(); if(count($tablesInstalled) == 0) { $this->errorMessages[] = Piwik_Translate('CoreUpdater_EmptyDatabaseError', Zend_Registry::get('config')->database->dbname); $this->coreError = true; $currentVersion = 'N/A'; } else { $this->errorMessages = array(); try { $currentVersion = Piwik_GetOption('version_core'); } catch( Exception $e) { $currentVersion = '<= 0.2.9'; } foreach($componentsWithUpdateFile as $name => $filenames) { if($name == 'core') { $coreToUpdate = true; } else { $pluginNamesToUpdate[] = $name; } } } $view->coreError = $this->coreError; $view->errorMessages = $this->errorMessages; $view->current_piwik_version = $currentVersion; $view->pluginNamesToUpdate = $pluginNamesToUpdate; $view->coreToUpdate = $coreToUpdate; $view->clearCompiledTemplates(); echo $view->render(); }