%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/MenuLink.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\icon\widgets\Icon;
use humhub\modules\ui\menu\widgets\Menu;
use humhub\widgets\Button;
/**
* Class MenuLink
*
* Used to render menu link entries.
*
* @since 1.4
* @property $icon
* @see Menu
*/
class MenuLink extends MenuEntry
{
/**
* @var string|array the url or route
*/
protected $url;
/**
* @var Button
*/
protected $link;
/**
* @return Button
*/
public function getLink()
{
if (!$this->link) {
$this->link = Button::none();
}
return $this->link;
}
/**
* Renders the link tag for this menu entry
*
* @param array $extraHtmlOptions
* @return string the Html link
*/
public function renderEntry($extraHtmlOptions = [])
{
// Set default html options and merge with extraoptions
$this->getHtmlOptions($extraHtmlOptions);
return $this->getLink()->asString();
}
public function getHtmlOptions($extraOptions = [])
{
if ($this->isActive) {
$this->getLink()->cssClass('active');
}
if ($this->getId()) {
$this->getLink()->options(['data-menu-id' => $this->getId()]);
}
$this->getLink()->options($extraOptions);
// Add sort order for better debugging
$this->getLink()->options(['data-sort-order' => $this->getSortOrder()]);
return $this->getLink()->htmlOptions;
}
public function compare(MenuEntry $entry)
{
return parent::compare($entry) || ($entry instanceof self && $this->getUrl() === $entry->getUrl());
}
/**
* @param $label string the label
* @return static
*/
public function setLabel($label)
{
$this->getLink()->setText($label);
return $this;
}
/**
* @param Button $link Button the label
* @return static
*/
public function setLink(Button $link)
{
$this->link = $link;
return $this;
}
/**
* @return string the label
*/
public function getLabel()
{
return $this->getLink()->text;
}
/**
* @return Icon the icon
*/
public function getIcon()
{
return $this->getLink()->_icon;
}
/**
* @param $icon Icon|string the icon instance or icon name
* * @return static
* @throws \Exception
*/
public function setIcon($icon, $right = false, $raw = false)
{
$this->getLink()->icon($icon, $right, $raw);
return $this;
}
/**
* Sets the URL
*
* @param $url array|string
* @return static
*/
public function setUrl($url)
{
// we save the raw url
$this->url = $url;
$this->getLink()->link($url);
return $this;
}
/**
* Returns the URL
*
* @param bool $asString return the URL as string
* @return array|string
*/
public function getUrl($asString = true)
{
if ($asString) {
return $this->getLink()->getHref();
}
return $this->url;
}
/**
* @return bool
*/
public function isPjaxEnabled()
{
return $this->getLink()->isPjaxEnabled();
}
/**
* @param bool $pjaxEnabled
* @return static
*/
public function setPjaxEnabled($pjaxEnabled)
{
$this->getLink()->pjax($pjaxEnabled);
return $this;
}
/**
* Creates MenuEntry by old and deprecated array structure
*
* > Note: In the array icons must be provided in legacy html format.
*
* @param $item
* @return MenuLink
* @deprecated since 1.4
*/
public static function createByArray($item)
{
$entry = new static;
if (isset($item['id'])) {
$entry->id = $item['id'];
}
if (isset($item['label'])) {
$entry->setLabel($item['label']);
}
if (isset($item['icon'])) {
$entry->setIcon($item['icon'], false, true);
}
if (isset($item['url'])) {
$entry->setUrl($item['url']);
}
if (isset($item['sortOrder'])) {
$entry->sortOrder = $item['sortOrder'];
}
if (isset($item['isActive'])) {
$entry->isActive = $item['isActive'];
}
if (isset($item['isVisible'])) {
$entry->isVisible = $item['isVisible'];
}
if (isset($item['htmlOptions'])) {
$entry->setHtmlOptions($item['htmlOptions']);
}
return $entry;
}
/**
* @param array $htmlOptions
* @return static
*/
public function setHtmlOptions($htmlOptions)
{
$this->getLink()->options($htmlOptions);
return $this;
}
/**
* Returns the MenuEntry as array structure
*
* @return array the menu entry array representation
* @deprecated since 1.4
*/
public function toArray()
{
if (!isset($this->htmlOptions['class'])) {
$this->htmlOptions['class'] = '';
}
return [
'label' => $this->getLabel(),
'id' => $this->getId(),
'icon' => $this->getIcon(),
'url' => $this->getUrl(),
'sortOrder' => $this->sortOrder,
'isActive' => $this->isActive,
'htmlOptions' => $this->getHtmlOptions()
];
}
}