diff options
author | mattab <matthieu.aubry@gmail.com> | 2014-01-08 07:24:57 +0400 |
---|---|---|
committer | mattab <matthieu.aubry@gmail.com> | 2014-01-08 07:24:57 +0400 |
commit | 659160cf8ef74cafda848fbd7ff83a0b1fe1d24d (patch) | |
tree | 793beefce3bc7c0f789079c02f6303facf0af571 /plugins/CoreAdminHome/CustomLogo.php | |
parent | 78e66bbae81ca3b53f73fb402c033c99ee837630 (diff) |
Refactoring Custom Logo code into its own class + improvements
Diffstat (limited to 'plugins/CoreAdminHome/CustomLogo.php')
-rw-r--r-- | plugins/CoreAdminHome/CustomLogo.php | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/plugins/CoreAdminHome/CustomLogo.php b/plugins/CoreAdminHome/CustomLogo.php new file mode 100644 index 0000000000..1ab773a3ea --- /dev/null +++ b/plugins/CoreAdminHome/CustomLogo.php @@ -0,0 +1,186 @@ +<?php +/** + * Piwik - Open source web analytics + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + * @category Piwik_Plugins + * @package Piwik_API + */ +namespace Piwik\Plugins\CoreAdminHome; + +use Piwik\Config; +use Piwik\Filesystem; +use Piwik\SettingsPiwik; + +class CustomLogo +{ + const LOGO_HEIGHT = 300; + const LOGO_SMALL_HEIGHT = 100; + + public function getLogoUrl($pathOnly = false) + { + $defaultLogo = 'plugins/Zeitgeist/images/logo.png'; + $themeLogo = 'plugins/%s/images/logo.png'; + $userLogo = CustomLogo::getPathUserLogo(); + return $this->getPathToLogo($pathOnly, $defaultLogo, $themeLogo, $userLogo); + } + + public function getHeaderLogoUrl($pathOnly = false) + { + $defaultLogo = 'plugins/Zeitgeist/images/logo-header.png'; + $themeLogo = 'plugins/%s/images/logo-header.png'; + $customLogo = CustomLogo::getPathUserLogoSmall(); + return $this->getPathToLogo($pathOnly, $defaultLogo, $themeLogo, $customLogo); + } + + public function getSVGLogoUrl($pathOnly = false) + { + $defaultLogo = 'plugins/Zeitgeist/images/logo.svg'; + $themeLogo = 'plugins/%s/images/logo.svg'; + $customLogo = CustomLogo::getPathUserSvgLogo(); + $svg = $this->getPathToLogo($pathOnly, $defaultLogo, $themeLogo, $customLogo); + return $svg; + } + + public function hasSVGLogo() + { + if (Config::getInstance()->branding['use_custom_logo'] == 0) { + /* We always have our application logo */ + return true; + } + + if (Config::getInstance()->branding['use_custom_logo'] == 1 + && file_exists(Filesystem::getPathToPiwikRoot() . '/' . CustomLogo::getPathUserSvgLogo()) + ) { + return true; + } + + return false; + } + + /** + * @return bool + */ + public function isCustomLogoWritable() + { + $pathUserLogo = $this->getPathUserLogo(); + + $directoryWritingTo = PIWIK_DOCUMENT_ROOT . '/' . dirname($pathUserLogo); + + // Create directory if not already created + Filesystem::mkdir($directoryWritingTo, $denyAccess = false); + + $directoryWritable = is_writable($directoryWritingTo); + $logoFilesWriteable = is_writeable(PIWIK_DOCUMENT_ROOT . '/' . $pathUserLogo) + && is_writeable(PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserSvgLogo()) + && is_writeable(PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserLogoSmall());; + + $serverUploadEnabled = ini_get('file_uploads') == 1; + $isCustomLogoWritable = ($logoFilesWriteable || $directoryWritable) && $serverUploadEnabled; + + return $isCustomLogoWritable; + } + + protected function getPathToLogo($pathOnly, $defaultLogo, $themeLogo, $customLogo) + { + $pathToPiwikRoot = Filesystem::getPathToPiwikRoot(); + + $logo = $defaultLogo; + + $themeName = \Piwik\Plugin\Manager::getInstance()->getThemeEnabled()->getPluginName(); + $themeLogo = sprintf($themeLogo, $themeName); + + if (file_exists($pathToPiwikRoot . '/' . $themeLogo)) { + $logo = $themeLogo; + } + if (Config::getInstance()->branding['use_custom_logo'] == 1 + && file_exists($pathToPiwikRoot . '/' . $customLogo) + ) { + $logo = $customLogo; + } + + if (!$pathOnly) { + return SettingsPiwik::getPiwikUrl() . $logo; + } + return $pathToPiwikRoot . '/' . $logo; + } + + public static function getPathUserLogo() + { + return self::rewritePath('misc/user/logo.png'); + } + + public static function getPathUserSvgLogo() + { + return self::rewritePath('misc/user/logo.svg'); + } + + public static function getPathUserLogoSmall() + { + return self::rewritePath('misc/user/logo-header.png'); + } + + protected static function rewritePath($path) + { + return SettingsPiwik::rewriteMiscUserPathWithHostname($path); + } + + public function copyUploadedLogoToFilesystem() + { + + if (empty($_FILES['customLogo']) + || !empty($_FILES['customLogo']['error']) + ) { + return false; + } + + $file = $_FILES['customLogo']['tmp_name']; + if (!file_exists($file)) { + return false; + } + + list($width, $height) = getimagesize($file); + switch ($_FILES['customLogo']['type']) { + case 'image/jpeg': + $image = imagecreatefromjpeg($file); + break; + case 'image/png': + $image = imagecreatefrompng($file); + break; + case 'image/gif': + $image = imagecreatefromgif($file); + break; + default: + return false; + } + + $widthExpected = round($width * self::LOGO_HEIGHT / $height); + $smallWidthExpected = round($width * self::LOGO_SMALL_HEIGHT / $height); + + $logo = imagecreatetruecolor($widthExpected, self::LOGO_HEIGHT); + $logoSmall = imagecreatetruecolor($smallWidthExpected, self::LOGO_SMALL_HEIGHT); + + // Handle transparency + $background = imagecolorallocate($logo, 0, 0, 0); + $backgroundSmall = imagecolorallocate($logoSmall, 0, 0, 0); + imagecolortransparent($logo, $background); + imagecolortransparent($logoSmall, $backgroundSmall); + + if ($_FILES['customLogo']['type'] == 'image/png') { + imagealphablending($logo, false); + imagealphablending($logoSmall, false); + imagesavealpha($logo, true); + imagesavealpha($logoSmall, true); + } + + imagecopyresized($logo, $image, 0, 0, 0, 0, $widthExpected, self::LOGO_HEIGHT, $width, $height); + imagecopyresized($logoSmall, $image, 0, 0, 0, 0, $smallWidthExpected, self::LOGO_SMALL_HEIGHT, $width, $height); + + imagepng($logo, PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserLogo(), 3); + imagepng($logoSmall, PIWIK_DOCUMENT_ROOT . '/' . $this->getPathUserLogoSmall(), 3); + return true; + } + +}
\ No newline at end of file |