123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- <?php
- namespace Grav\Plugin;
- use Grav\Common\Plugin;
- use RocketTheme\Toolbox\Event\Event;
- use \Grav\Common\Utils;
- use \Grav\Common\User\User;
- use Grav\Common\File\CompiledYamlFile;
- use AdminAddonUserManager\Users\Manager as UsersManager;
- use AdminAddonUserManager\Groups\Manager as GroupsManager;
- use AdminAddonUserManager\Users\ExpertManager as UsersExpertManager;
- class AdminAddonUserManagerPlugin extends Plugin {
- /**
- * Returns the plugin's configuration key
- *
- * @param String $key
- * @return String
- */
- public function getPluginConfigKey($key = null) {
- $pluginKey = 'plugins.' . $this->name;
- return ($key !== null) ? $pluginKey . '.' . $key : $pluginKey;
- }
- public function getPluginConfigValue($key = null, $default = null) {
- return $this->config->get($this->getPluginConfigKey($key), $default);
- }
- public function getConfigValue($key, $default = null) {
- return $this->config->get($key, $default);
- }
- public function getPreviousUrl() {
- return $this->grav['session']->{$this->name . '.previous_url'};
- }
- public function getModalsConfiguration() {
- return CompiledYamlFile::instance(__DIR__ . DS . 'modals.yaml')->content();
- }
- public static function getSubscribedEvents() {
- return [
- 'onPluginsInitialized' => ['onPluginsInitialized', 0],
- 'onAdminRegisterPermissions' => ['onAdminRegisterPermissions', 1000]
- ];
- }
- public function onPluginsInitialized() {
- if (!$this->isAdmin() || !$this->grav['user']->authenticated) {
- return;
- }
- $this->grav['locator']->addPath('blueprints', '', __DIR__ . DS . 'blueprints');
- include __DIR__ . DS . 'vendor' . DS . 'autoload.php';
- $this->managers[] = new UsersManager($this->grav, $this);
- $this->managers[] = new GroupsManager($this->grav, $this);
- $this->managers[] = new UsersExpertManager($this->grav, $this);
- $this->enable([
- 'onAdminTwigTemplatePaths' => ['onAdminTwigTemplatePaths', -10],
- 'onTwigSiteVariables' => ['onTwigSiteVariables', 0],
- 'onAdminMenu' => ['onAdminMenu', 0],
- 'onAssetsInitialized' => ['onAssetsInitialized', 0],
- 'onAdminTaskExecute' => ['onAdminTaskExecute', 0],
- ]);
- $this->registerPermissions();
- }
- public function onAssetsInitialized() {
- $assets = $this->grav['assets'];
- foreach ($this->managers as $manager) {
- $manager->initializeAssets($assets);
- }
- }
- public function onAdminMenu() {
- $twig = $this->grav['twig'];
- $twig->plugins_hooked_nav = (isset($twig->plugins_hooked_nav)) ? $twig->plugins_hooked_nav : [];
- foreach ($this->managers as $manager) {
- $nav = $manager->getNav();
- if ($nav) {
- $twig->plugins_hooked_nav[$nav['label']] = $nav;
- }
- }
- }
- public function onAdminTwigTemplatePaths($e) {
- $paths = $e['paths'];
- $paths[] = __DIR__ . DS . 'templates';
- $e['paths'] = $paths;
- }
- public function onTwigSiteVariables() {
- $page = $this->grav['page'];
- $twig = $this->grav['twig'];
- $session = $this->grav['session'];
- $uri = $this->grav['uri'];
- foreach ($this->managers as $manager) {
- if ($page->slug() === $manager->getLocation() && $this->grav['admin']->authorize(['admin.super', $manager->getRequiredPermission()])) {
- $session->{$this->name . '.previous_url'} = $uri->route() . $uri->params();
- $page = $this->grav['admin']->page(true);
- $page->id('aaum-' . implode('/', $uri->paths()));
- $twig->twig_vars['context'] = $page;
- $vars = $manager->handleRequest();
- $twig->twig_vars = array_merge($twig->twig_vars, $vars);
- return true;
- }
- }
- }
- public function onAdminTaskExecute($e) {
- foreach ($this->managers as $manager) {
- if ($this->grav['admin']->authorize(['admin.super', $manager->getRequiredPermission()])) {
- $result = $manager->handleTask($e);
- if ($result) {
- return true;
- }
- }
- }
- return false;
- }
- public function registerPermissions() {
- foreach ($this->managers as $manager) {
- $this->grav['admin']->addPermissions([$manager->getRequiredPermission() => 'boolean']);
- }
- // Custom permissions
- $customPermissions = $this->getPluginConfigValue('custom_permissions', []);
- foreach ($customPermissions as $permission) {
- $this->grav['admin']->addPermissions([$permission => 'boolean']);
- }
- }
- public function onAdminRegisterPermissions() {
- if (!$this->isAdmin() || !$this->grav['user']->authenticated) {
- return;
- }
- $this->grav['admin']->addPermissions(['site.login' => 'boolean']);
- }
- }
|