%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/view/components/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/view/components/ThemeViews.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\ui\view\components;
use humhub\modules\file\libs\FileHelper;
use Yii;
use yii\base\Component;
/**
* ThemeViews component determines provided view files of a theme.
*
* @since 1.3
* @package humhub\modules\ui\view\components
*/
class ThemeViews extends Component
{
/**
* @var Theme
*/
public $theme;
/**
* Converts a file to a themed file if possible.
* If no view theme is available for the given view path null is returned.
*
* @param $path
* @return string|null the translated file name or null
*/
public function translate($path)
{
$translated = $this->legacyTranslate($path);
if ($translated !== null && is_file($translated)) {
return $translated;
}
$translated = $this->legacyTranslateResource($path);
if ($translated !== null) {
return $translated;
}
$translated = $this->genericTranslate($path);
if ($translated !== null && is_file($translated)) {
return $translated;
}
return null;
}
/**
* Generic automatic view path translation
*
* Module Examples (core or additional modules):
* protected/humhub/modules/admin/views/user/add.php -> themes/example/views/admin/views/user/add.php
* protected/humhub/modules/user/widgets/views/userListBox.php -> themes/example/views/user/widgets/views/userListBox.php
*
* Non Module Views (protected/humhub folder):
* protected/humhub/widgets/views/logo.php -> themes/example/views/humhub/widgets/views/logo.php
* protected/humhub/widgets/mails/views/mailHeadline.php -> themes/example/views/humhub/widgets/mails/views/mailHeadline.php
* protected/humhub/views/error/index.php -> themes/example/views/humhub/error/index.php
*
* @param $path string the original view path
* @return string the translated view path
*/
protected function genericTranslate($path)
{
if (strpos($path, Yii::getAlias('@humhub/modules')) === false) {
$path = str_replace(Yii::getAlias('@humhub'), '/humhub', $path);
}
foreach (Yii::$app->params['moduleAutoloadPaths'] as $stripPath) {
$path = str_replace(Yii::getAlias($stripPath), '', $path);
}
return $this->theme->getBasePath() . '/views/' . $path;
}
/**
* Tries to automatically maps the view file of a module to a themed one.
*
* Formats:
* .../moduleId/views/controllerId/viewName.php
* to:
* .../views/moduleId/controllerId/viewName.php
*
* .../moduleId/[widgets|activities|notifications]/views/viewName.php
* to:
* .../views/moduleId/[widgets|activities|notifications]/viewName.php
*
* @return string theme view path or null
* @deprecated since 1.3
*/
protected function legacyTranslate($path)
{
$sep = preg_quote(DIRECTORY_SEPARATOR);
$path = FileHelper::normalizePath($path);
// .../[moduleId]/views/[controllerId]/[viewName].php
if (preg_match('@.*' . $sep . '(.*?)' . $sep . 'views' . $sep . '(.*?)' . $sep . '(.*?)\.php$@', $path, $hits)) {
return $this->theme->getBasePath() . '/views/' . $hits[1] . '/' . $hits[2] . '/' . $hits[3] . '.php';
}
// /moduleId/[widgets|activities|notifications]/views/viewName.php
if (preg_match('@.*' . $sep . '(.*?)' . $sep . '(widgets|notifications|activities)' . $sep . 'views' . $sep . '(.*?)\.php$@', $path, $hits)) {
// Handle special case (protected/humhub/widgets/views/view.php => views/widgets/view.php
if ($hits[1] == 'humhub') {
return $this->theme->getBasePath() . '/views/' . $hits[2] . '/' . $hits[3] . '.php';
}
return $this->theme->getBasePath() . '/views/' . $hits[1] . '/' . $hits[2] . '/' . $hits[3] . '.php';
}
return null;
}
protected function legacyTranslateResource($path)
{
// Web Resource e.g. image
if (substr($path, 0, 5) === '@web/' || substr($path, 0, 12) === '@web-static/') {
$themedFile = str_replace(['@web/', '@web-static/'], [$this->theme->getBasePath(), $this->theme->getBasePath() . DIRECTORY_SEPARATOR . '/'], $path);
// Check if file exists in theme base dir
if (file_exists($themedFile)) {
return str_replace(['@web/', '@web-static/'], [$this->theme->getBaseUrl(), $this->theme->getBaseUrl() . DIRECTORY_SEPARATOR . '/'], $path);
}
return $path;
}
return null;
}
}