%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/admin/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/humhub/modules/admin/widgets/AdminMenu.php |
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\modules\admin\widgets;
use humhub\components\Application;
use humhub\modules\marketplace\Module;
use humhub\modules\ui\menu\MenuEntry;
use Yii;
use humhub\modules\admin\permissions\ManageModules;
use humhub\modules\admin\permissions\ManageSpaces;
use humhub\modules\admin\permissions\SeeAdminInformation;
use humhub\modules\ui\menu\MenuLink;
use humhub\modules\ui\menu\widgets\LeftNavigation;
use humhub\modules\admin\permissions\ManageUsers;
use humhub\modules\admin\permissions\ManageSettings;
use humhub\modules\admin\permissions\ManageGroups;
use yii\caching\DummyCache;
/**
* AdminMenu implements the navigation in the administration section.
*
* Please note: Whenever there are entries visible for the current user, the "Administration" menu item
* is displayed in the UserAccountMenu.
*
* The visibility of module menu entries should always be made based on the 'ManageModules' permission.
* If a MenuEntry has no specified visibility, the permission `ManageModules` is automatically used.
*
* Example menu entry:
*
* ```php
* $adminMenuWidget->addEntry(new MenuLink([
* 'id' => 'modules',
* 'label' => Yii::t('ExampleModule.base', 'Your cool module'),
* 'url' => ['/example/module/admin'],
* 'icon' => 'rocket',
* 'sortOrder' => 500,
* 'isActive' => MenuLink::isActiveState('example', 'module'),
* 'isVisible' => Yii::$app->user->can(ManageModules::class)
* ]));
* ```
*
* @author luke
*/
class AdminMenu extends LeftNavigation
{
const SESSION_CAN_SEE_ADMIN_SECTION = 'user.canSeeAdminSection';
/**
* @inheritdoc
*/
public $id = "admin-menu";
/**
* @inheritdoc
*/
public function init()
{
$this->panelTitle = Yii::t('AdminModule.base', '<strong>Administration</strong> menu');
$this->addEntry(new MenuLink([
'id' => 'user',
'label' => Yii::t('AdminModule.base', 'Users'),
'url' => ['/admin/user'],
'icon' => 'user',
'sortOrder' => 200,
'isActive' => MenuLink::isActiveState('admin', ['user', 'group', 'approval', 'authentication', 'user-profile', 'pending-registrations', 'user-permissions', 'user-people']) ||
MenuLink::isActiveState('ldap', 'admin'),
'isVisible' => Yii::$app->user->can([
ManageUsers::class,
ManageSettings::class,
ManageGroups::class
])
]));
$this->addEntry(new MenuLink([
'id' => 'spaces',
'label' => Yii::t('AdminModule.base', 'Spaces'),
'url' => ['/admin/space'],
'icon' => 'inbox',
'sortOrder' => 400,
'isActive' => MenuLink::isActiveState('admin', 'space'),
'isVisible' => Yii::$app->user->can([
ManageSpaces::class,
ManageSettings::class
])
]));
$this->addEntry(new MenuLink([
'id' => 'modules',
'label' => Yii::t('AdminModule.base', 'Modules') . $this->getMarketplaceUpdatesBadge(),
'url' => ['/admin/module'],
'icon' => 'rocket',
'sortOrder' => 500,
'htmlOptions' => ['class' => 'modules'],
'isActive' => MenuLink::isActiveState('admin', 'module'),
'isVisible' => Yii::$app->user->can(ManageModules::class)
]));
$this->addEntry(new MenuLink([
'id' => 'settings',
'label' => Yii::t('AdminModule.base', 'Settings'),
'url' => ['/admin/setting'],
'icon' => 'gears',
'sortOrder' => 600,
'isActive' => MenuLink::isActiveState('admin', 'setting'),
'isVisible' => Yii::$app->user->can(ManageSettings::class)
]));
$this->addEntry(new MenuLink([
'id' => 'information',
'label' => Yii::t('AdminModule.base', 'Information'),
'url' => ['/admin/information'],
'icon' => 'info-circle',
'sortOrder' => 1000,
'isActive' => MenuLink::isActiveState('admin', 'information'),
'isVisible' => Yii::$app->user->can(SeeAdminInformation::class)
]));
parent::init();
}
/**
* Returns whether the current user can see the admin menu.
*
* @return bool
*/
public static function canAccess()
{
if (!(Yii::$app instanceof Application)) {
return false;
}
$canSeeAdminSection = Yii::$app->session->get(static::SESSION_CAN_SEE_ADMIN_SECTION);
if ($canSeeAdminSection == null) {
$canSeeAdminSection = Yii::$app->user->isAdmin() ?
true :
!empty((new self())->getEntries(null, true));
Yii::$app->session->set(static::SESSION_CAN_SEE_ADMIN_SECTION, $canSeeAdminSection);
}
return (bool)$canSeeAdminSection;
}
/**
* Resets the caching, if the current user can see the AdminMenu.
*/
public static function reset()
{
if (Yii::$app instanceof Application) {
Yii::$app->session->remove(static::SESSION_CAN_SEE_ADMIN_SECTION);
}
}
/**
* @inheritDoc
* @notice If the MenuEntry has not specified visibility, the Permission ManageModules is automatically used.
*/
public function addEntry(MenuEntry $entry)
{
if (!$entry->isVisibilitySet()) {
$entry->setIsVisible(Yii::$app->user->can(ManageModules::class));
}
parent::addEntry($entry);
}
/**
* @return string
*/
private function getMarketplaceUpdatesBadge()
{
/** @var Module $module */
$module = Yii::$app->getModule('marketplace');
if ($module === null || !$module->enabled) {
return '';
}
if (Yii::$app->cache instanceof DummyCache) {
return '';
}
try {
$updatesCount = count($module->onlineModuleManager->getModuleUpdates());
if ($updatesCount > 0) {
return ' <span class="label label-danger">' . $updatesCount . '</span>';
}
} catch (\Exception $ex) {
;
}
return '';
}
}