%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/rendering/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/components/rendering/ViewPathRenderer.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2017 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences */ namespace humhub\components\rendering; use Yii; /** * A ViewPathRenderer is a simple Renderer implementation for rendering Viewables by searching for a matching viewFile relative * to the Viewables class path or relative to a given $viewPath. * * If a $viewPath is given the renderer will search for the view within this path directly. * * If no $viewPath is given, the ViewPathRenderer will determine the view path relative to the Viewable as following: * * - In case $parent = false the renderer will search directly in the class path subdirectory views: * * `viewableClassPath/views` * * - in case $parent = true the renderer will search in the parents views folder (e.g. in the modules main view folder): * * `viewableClassPath/../views` * * - in case $subPath is given the subPath will be appended to the view path e.g: * * For a subPath 'mail' and $parent = false the search path will be: `viewableClassPath/views/mail` * * @author buddha * @since 1.2 */ class ViewPathRenderer extends \yii\base\BaseObject implements Renderer { /** * Can be used to search the parent's view folder (e.g. the modules base view folder) for the view file. * Otherwise this renderer searches for a direct views subdirectory. * * This field is ignored if $viewPath is given. * @var boolean if set to true the renderer will search in the parents view directory for the view. */ public $parent = false; /** * @var string a subpath within the view folder used for searching the view e.g mails. This will only be used if $viewPath is not given. */ public $subPath; /** * @var string view path */ public $viewPath; /** * Renders the viewable by searching the viewable's viewName within the given viewPath. * * If no viewPath is given this function uses '../views/viewName' as view file path. * * @param \humhub\components\rendering\Viewable $viewable * @return string * @throws ViewNotFoundException if the view file does not exist */ public function render(Viewable $viewable, $params = []) { return $this->renderView($viewable, $viewable->getViewParams($params)); } /** * Helper function for rendering a Viewable with the given viewParams. * * @param \humhub\components\rendering\Viewable $viewable * @param type $viewParams * @return type */ public function renderView(Viewable $viewable, $viewParams) { $viewFile = $this->getViewFile($viewable); return Yii::$app->getView()->renderFile($viewFile, $viewParams, $viewable); } /** * Returnes the viewFile of the given Viewable. * * @param \humhub\components\rendering\Viewable $viewable * @return string|null the view filename or null when not exists */ public function getViewFile(Viewable $viewable) { $viewFileName = $this->suffix($viewable->getViewName()); $viewPath = $this->getViewPath($viewable); if (file_exists($viewPath . DIRECTORY_SEPARATOR . $viewFileName)) { return $viewPath . DIRECTORY_SEPARATOR . $viewFileName; } elseif (!empty($this->subPath)) { // Fallback to original file without subPath return $this->getViewPath($viewable, false) . DIRECTORY_SEPARATOR . $viewFileName; } return null; } /** * Checks if the given $viewName has a file suffix or not. * If the viewName does not have a suffix we assume a php file and append '.php'. * * @param string $viewName * @return string vieName with suffix. */ protected function suffix($viewName) { // If no suffix is given, we assume a php file. if (!strpos($viewName, '.')) { return $viewName . '.php'; } else { return $viewName; } } /** * Returns the directory containing the view files for this event. * The default implementation returns the 'views' subdirectory under the directory containing the notification class file. * * @param Viewable $viewable The viewable * @param boolean $useSubPath use the subpath if provided * @return string the directory containing the view files for this notification. */ public function getViewPath(Viewable $viewable, $useSubPath = true) { if ($this->viewPath) { return Yii::getAlias($this->viewPath); } $class = new \ReflectionClass($viewable); $dir = ($this->parent) ? dirname(dirname($class->getFileName())) . '/' . 'views' : dirname($class->getFileName()) . '/' . 'views'; if (!empty($this->subPath) && $useSubPath) { $dir .= DIRECTORY_SEPARATOR . $this->subPath; } return $dir; } }