%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/widgets/Tabs.php |
<?php /** * @link https://www.humhub.org/ * @copyright Copyright (c) 2018 HumHub GmbH & Co. KG * @license https://www.humhub.com/licences * */ namespace humhub\widgets; use Yii; /** * Extends `\yii\bootstrap\Tabs` by providing providing view based tab items. * * View based tabs usage: * * <?= * Tabs::widget([ * 'viewPath' => '@myModule/views/common', * 'params' => $_params_, * 'items' => [ * [ * 'label' => 'One', * 'view' => 'example', * 'active' => true * ], * [ * 'label' => 'Two', * 'view' => '@myModule/views/example', * 'params' => ['model' => new SomeModel()] * ], * ] * ]); * ?> * * @since 1.2.2 * @see \yii\bootstrap\Tabs * @package humhub\widgets */ class Tabs extends \yii\bootstrap\Tabs { /** * @var string contains the viewPath */ public $viewPath; /** * @var array global view parameter will be used for all view based items without own params setting */ public $params; /** * @inheritdoc */ public $navType = 'nav-tabs tab-menu'; /** * @inheritdoc */ public function beforeRun() { if (!parent::beforeRun()) { return false; } $this->sortItems(); return true; } /** * Returns the params for the given $item, if the $item does not provide own parameter settigns we use the global * params or an empty array if no params are provided at all. * * @param $item * @return array */ private function getParams($item) { if (isset($item['params'])) { return $item['params']; } return !empty($this->params) ? $this->params : []; } /** * Checks if the current route contains the given route parts $modelId, $controllerId, §actionId * @param null $moduleId * @param null $controller * @param null $action * @return bool */ public function isCurrentRoute($moduleId = null, $controllerId = null, $actionId = null) { if ($moduleId && !(Yii::$app->controller->module && Yii::$app->controller->module->id == $moduleId)) { return false; } if ($controllerId && !(Yii::$app->controller->id == $controllerId)) { return false; } if ($actionId && !(Yii::$app->controller->action->id == $actionId)) { return false; } return true; } public function addItem($item) { $this->items[] = $item; } /** * Before sorts the items */ protected function beforeSortItems() { $index = 0; foreach ($this->items as $key => $item) { if (isset($item['view'])) { $view = $item['view']; if ($this->viewPath && strpos($view, '@') === false) { $view = $this->viewPath . '/'.$item['view']; } $this->items[$key]['content'] = $this->render($view, $this->getParams($item)); unset($item['view']); unset($item['params']); } if (!isset($item['sortOrder'])) { // keep stable sorting by adding counter (otherwise equal sorOrders will destroy index ordering) $this->items[$key]['sortOrder'] = 1000 + ($index * 10); } $index++; } } /** * Sorts the item attribute by sortOrder */ private function sortItems() { $this->beforeSortItems(); usort($this->items, function ($a, $b) { if ($a['sortOrder'] == $b['sortOrder']) { return 0; } elseif ($a['sortOrder'] < $b['sortOrder']) { return - 1; } else { return 1; } }); } }