%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/web/pwa/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/web/pwa/widgets/SiteIcon.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2019 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\modules\web\pwa\widgets; use humhub\modules\file\libs\FileHelper; use humhub\modules\ui\view\components\View; use Imagine\Image\Box; use Yii; use humhub\components\Widget; use yii\base\ErrorException; use yii\base\Exception; use yii\imagine\Image; use yii\web\UploadedFile; /** * Class SiteIcon handles icons of the installation. * Those icons will be used to represent the application in components such as mobile apps, bookmarks, etc. * * @since 1.4 * @package humhub\modules\ui\widgets */ class SiteIcon extends Widget { /** * Sets a new icon for the installation. * * @param UploadedFile|null $file */ public static function set(UploadedFile $file = null) { static::deleteFiles(); if ($file !== null) { try { FileHelper::createDirectory(Yii::getAlias('@webroot/uploads/icon/')); } catch (Exception $e) { } Image::getImagine()->open($file->tempName)->save(Yii::getAlias('@webroot/uploads/icon/icon.png')); } } /** * Returns the URL of the icon in desired size (width + height) * * @param int $size in px * @param bool $autoResize automatically resize to given size if not available yet * @return string|null */ public static function getUrl($size, $autoResize = true) { $manualUploadedFile = Yii::getAlias('@webroot/uploads/icon/' . static::buildFileName($size)); if(file_exists($manualUploadedFile)) { return Yii::getAlias('@web/uploads/icon/' . static::buildFileName($size)) . '?v=' . filemtime($manualUploadedFile); } $file = self::getFile($size); if (file_exists($file)) { return Yii::getAlias(Yii::$app->assetManager->baseUrl) . '/siteicons/' . static::buildFileName($size) . '?v=' . filemtime($file); } elseif ($autoResize) { $baseIcon = static::getOriginalFile(); if (!file_exists($baseIcon)) { $baseIcon = Yii::$app->getModule('web')->getBasePath() . '/pwa/resources/default_icon.png'; } try { FileHelper::createDirectory(Yii::getAlias(Yii::$app->assetManager->basePath . DIRECTORY_SEPARATOR . 'siteicons')); } catch (Exception $e) { // Directory already exists } try { Image::getImagine()->open($baseIcon)->resize(new Box($size, $size))->save($file); } catch (\Exception $ex) { Yii::error('Could not resize site icon: ' . $ex->getMessage()); } return static::getUrl($size, false); } return null; } public static function hasImage() { return file_exists(static::getOriginalFile()); } private static function getFile($size = null) { return Yii::getAlias(Yii::$app->assetManager->basePath . DIRECTORY_SEPARATOR . 'siteicons' . DIRECTORY_SEPARATOR . static::buildFileName($size)); } private static function buildFileName($size = null) { $fileName = ($size === null) ? 'icon.png' : $size . 'x' . $size . '.png'; return $fileName; } private static function getOriginalFile() { return Yii::getAlias('@webroot/uploads/icon/icon.png'); } private static function deleteFiles() { // Delete assets folder if exists try { FileHelper::removeDirectory(Yii::getAlias(Yii::$app->assetManager->basePath . DIRECTORY_SEPARATOR . 'siteicons')); } catch (ErrorException $e) { Yii::error($e, 'admin'); } // Delete uploads folder if exists try { FileHelper::removeDirectory(Yii::getAlias('@webroot/uploads/icon/')); } catch (ErrorException $e) { Yii::error($e, 'admin'); } } /** * @param View $view */ public static function registerMetaTags(View $view) { // Add Apple touch icons // https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/ConfiguringWebApplications/ConfiguringWebApplications.html $view->registerLinkTag(['rel' => 'apple-touch-icon', 'href' => static::getUrl(152), 'sizes' => '152x152']); $view->registerLinkTag(['rel' => 'apple-touch-icon', 'href' => static::getUrl(180), 'sizes' => '180x180']); $view->registerLinkTag(['rel' => 'apple-touch-icon', 'href' => static::getUrl(167), 'sizes' => '167x167']); // Chrome, Firefox & Co. $view->registerLinkTag(['rel' => 'icon', 'href' => static::getUrl(192), 'sizes' => '192x192']); $view->registerLinkTag(['rel' => 'icon', 'href' => static::getUrl(96), 'sizes' => '96x96']); $view->registerLinkTag(['rel' => 'icon', 'href' => static::getUrl(32), 'sizes' => '32x32']); } }