%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/menu/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/ui/menu/MenuEntry.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\menu;
use humhub\modules\ui\menu\widgets\Menu;
use Yii;
use yii\base\BaseObject;
use yii\bootstrap\Html;
/**
* Class MenuEntry
*
* An abstract menu entry class. Subclasses need to extend the [[render()]] function.
*
* @since 1.4
* @see Menu
*/
abstract class MenuEntry extends BaseObject
{
/**
* @var string menu entry identifier (optional)
*/
protected $id;
/**
* @var int the sort order. a value between 0 and 10000
*/
protected $sortOrder;
/**
* @var array additional html options for the link HTML tag
*/
protected $htmlOptions = [];
/**
* @var bool|null
*/
protected $isVisible = null;
/**
* @var bool mark this entry as active
*/
protected $isActive = false;
/**
* Renders the entry html, this template function should respect [[htmlOptions]] array by calling [[getHtmlOptions()]] and passing
* the $extraHtmlOptions array as for example:
*
* ```php
*
* return Html::a($label, $url, $this->getHtmlOptions($extraHtmlOptions));
*
* ```
*
* @param array $extraHtmlOptions
* @return string the Html link
*/
abstract protected function renderEntry($extraHtmlOptions = []);
/**
* Public accessible render function responsible for rendering this entry.
*
* @param array $extraHtmlOptions
* @return string
*/
public function render($extraHtmlOptions = [])
{
if (!$this->isVisible()) {
return '';
}
return $this->renderEntry($extraHtmlOptions);
}
/**
* @return boolean is active
*/
public function getIsActive()
{
if (is_callable($this->isActive)) {
call_user_func($this->isActive);
}
if ($this->isActive) {
return true;
}
return false;
}
/**
* @param $state boolean
* @return static
*/
public function setIsActive($state)
{
$this->isActive = $state;
return $this;
}
/**
* Activates this MenuEntry in case the given moduleId, controllerId and actionId matches the current request.
* @param string $moduleId controller module id
* @param array|string $controllerIds controller id
* @param array|string $actionIds action id
* @return static
*/
public function setIsActiveState($moduleId, $controllerIds = [], $actionIds = [])
{
$this->isActive = static::isActiveState($moduleId, $controllerIds, $actionIds);
return $this;
}
public static function isActiveState($moduleId = null, $controllerIds = [], $actionIds = [])
{
if ($moduleId && (!Yii::$app->controller->module || Yii::$app->controller->module->id !== $moduleId)) {
return false;
}
if (empty($controllerIds) && empty($actionIds)) {
return true;
}
if ($controllerIds && !is_array($controllerIds)) {
$controllerIds = [$controllerIds];
}
if (!empty($controllerIds) && !in_array(Yii::$app->controller->id, $controllerIds)) {
return false;
}
if ($actionIds && !is_array($actionIds)) {
$actionIds = [$actionIds];
}
if (!empty($actionIds) && !in_array(Yii::$app->controller->action->id, $actionIds)) {
return false;
}
return true;
}
/**
* @param $id string the id
* @return static
*/
public function setId($id)
{
$this->id = $id;
return $this;
}
/**
* @return string the id
*/
public function getId()
{
return $this->id;
}
/**
* Compares this entry with the given entry
* @param MenuEntry $entry
* @return bool
*/
public function compare(MenuEntry $entry)
{
return !empty($this->getId()) && $this->getId() === $entry->getId();
}
/**
* Returns the Html options for the menu entry link tag.
*
* @return array
*/
public function getHtmlOptions($extraOptions = [])
{
$options = $this->htmlOptions;
if (isset($extraOptions['class'])) {
Html::addCssClass($options, $extraOptions['class']);
}
if (isset($extraOptions['style'])) {
Html::addCssStyle($options, $extraOptions['style']);
}
if ($this->isActive) {
Html::addCssClass($options, 'active');
}
if ($this->getId()) {
$options['data-menu-id'] = $this->id;
}
return array_merge($extraOptions, $options);
}
/**
* @param array $htmlOptions
* @return static
*/
public function setHtmlOptions($htmlOptions)
{
$this->htmlOptions = $htmlOptions;
return $this;
}
/**
* @return bool
*/
public function isVisible()
{
return !($this->isVisible === false);
}
/**
* @param bool $isVisible
* @return static
*/
public function setIsVisible($isVisible)
{
$this->isVisible = $isVisible;
return $this;
}
/**
* Checks whether the visibility of the menu entry was explicitly set.
*
* @return bool
* @since 1.8
*/
public function isVisibilitySet()
{
return ($this->isVisible !== null);
}
/**
* @return int
*/
public function getSortOrder()
{
return $this->sortOrder;
}
/**
* @param int $sortOrder
* @return static
*/
public function setSortOrder($sortOrder)
{
$this->sortOrder = $sortOrder;
return $this;
}
/**
* @return string the class name of this entry can be used to identify the entry if no id is given
* @since 1.7
*/
public function getEntryClass()
{
return get_class($this);
}
}