Files
OSJ/controllers/grid/settings/plugins/SettingsPluginGridHandler.php
CHIEFSOFT\ameye df3a033196 first commit
2024-06-08 17:09:23 -04:00

107 lines
3.2 KiB
PHP

<?php
/**
* @file controllers/grid/settings/plugins/SettingsPluginGridHandler.php
*
* Copyright (c) 2014-2021 Simon Fraser University
* Copyright (c) 2003-2021 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class SettingsPluginGridHandler
*
* @ingroup controllers_grid_settings_plugins
*
* @brief Handle plugin grid requests.
*/
namespace APP\controllers\grid\settings\plugins;
use APP\core\Application;
use PKP\controllers\grid\plugins\PluginGridHandler;
use PKP\controllers\grid\plugins\PluginGridRow;
use PKP\security\authorization\ContextAccessPolicy;
use PKP\security\authorization\PluginAccessPolicy;
use PKP\security\Role;
class SettingsPluginGridHandler extends PluginGridHandler
{
/**
* Constructor
*/
public function __construct()
{
$roles = [Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_MANAGER];
$this->addRoleAssignment($roles, ['manage']);
parent::__construct($roles);
}
//
// Extended methods from PluginGridHandler
//
/**
* @copydoc PluginGridHandler::loadCategoryData()
*
* @param null|mixed $filter
*/
public function loadCategoryData($request, &$categoryDataElement, $filter = null)
{
$plugins = parent::loadCategoryData($request, $categoryDataElement, $filter);
$userRoles = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES);
$showSitePlugins = false;
if (in_array(Role::ROLE_ID_SITE_ADMIN, $userRoles)) {
$showSitePlugins = true;
}
if ($showSitePlugins) {
return $plugins;
} else {
$contextLevelPlugins = [];
foreach ($plugins as $plugin) {
if (!$plugin->isSitePlugin()) {
$contextLevelPlugins[$plugin->getName()] = $plugin;
}
unset($plugin);
}
return $contextLevelPlugins;
}
}
//
// Overridden template methods.
//
/**
* @copydoc CategoryGridHandler::getCategoryRowInstance()
*/
protected function getRowInstance()
{
return new PluginGridRow($this->getAuthorizedContextObject(Application::ASSOC_TYPE_USER_ROLES));
}
/**
* @copydoc GridHandler::authorize()
*/
public function authorize($request, &$args, $roleAssignments)
{
$categoryName = $request->getUserVar('category');
$pluginName = $request->getUserVar('plugin');
if ($categoryName && $pluginName) {
switch ($request->getRequestedOp()) {
case 'enable':
case 'disable':
case 'manage':
$accessMode = PluginAccessPolicy::ACCESS_MODE_MANAGE;
break;
default:
$accessMode = PluginAccessPolicy::ACCESS_MODE_ADMIN;
break;
}
$this->addPolicy(new PluginAccessPolicy($request, $args, $roleAssignments, $accessMode));
} else {
$this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
}
return parent::authorize($request, $args, $roleAssignments);
}
}