getEnabled($mainContextId)) { // Ensure that there is a context (journal or press) if ($request = Application::get()->getRequest()) { if ($mainContextId) { $contextId = $mainContextId; } else { $context = $request->getContext(); $contextId = $context?->getId() ?? \PKP\core\PKPApplication::CONTEXT_SITE; } // Load the custom blocks we have created $blocks = $this->getSetting($contextId, 'blocks'); if (!is_array($blocks)) { $blocks = []; } // Loop through each custom block and register it $i = 0; foreach ($blocks as $block) { PluginRegistry::register( 'blocks', new CustomBlockPlugin($block, $this), $this->getPluginPath() ); } } // This hook is used to register the components this plugin implements to // permit administration of custom block plugins. Hook::add('LoadComponentHandler', [$this, 'setupGridHandler']); } return true; } return false; } /** * Permit requests to the custom block grid handler * * @param string $hookName The name of the hook being invoked */ public function setupGridHandler($hookName, $params) { $component = & $params[0]; if ($component == 'plugins.generic.customBlockManager.controllers.grid.CustomBlockGridHandler') { define('CUSTOMBLOCKMANAGER_PLUGIN_NAME', $this->getName()); return true; } return false; } /** * @copydoc Plugin::getActions() */ public function getActions($request, $actionArgs): array { $actions = parent::getActions($request, $actionArgs); if (!$this->getEnabled()) { return $actions; } $router = $request->getRouter(); $ajaxModal = new AjaxModal( $router->url(request: $request, op: 'manage', params: [ 'plugin' => $this->getName(), 'category' => $this->getCategory(), 'action' => 'index' ]), $this->getDisplayName() ); return array_merge([new LinkAction('settings', $ajaxModal, __('plugins.generic.customBlockManager.manage'))], $actions); } /** * @copydoc Plugin::manage() */ public function manage($args, $request): JSONMessage { $templateMgr = TemplateManager::getManager($request); $dispatcher = $request->getDispatcher(); return $templateMgr->fetchAjax( 'customBlockGridUrlGridContainer', $dispatcher->url( $request, Application::ROUTE_COMPONENT, null, 'plugins.generic.customBlockManager.controllers.grid.CustomBlockGridHandler', 'fetchGrid' ) ); } /** * This plugin can be used site-wide or in a specific context. The * isSitePlugin check is used to grant access to different users, so this * plugin must return true only if the user is currently in the site-wide * context. * * @see PluginGridRow::_canEdit() * * @return bool */ public function isSitePlugin(): bool { return !Application::get()->getRequest()->getContext(); } } if (!PKP_STRICT_MODE) { class_alias('\APP\plugins\generic\customBlockManager\CustomBlockManagerPlugin', '\CustomBlockManagerPlugin'); }