. */ namespace SP\Modules\Web\Controllers\Plugin; use Exception; use JsonException; use SP\Core\Acl\Acl; use SP\Core\Application; use SP\Core\Events\Event; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\Http\Dtos\JsonMessage; use SP\Domain\Plugin\Models\Plugin; use SP\Domain\Plugin\Ports\PluginManagerService; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Modules\Web\Controllers\ControllerBase; use SP\Modules\Web\Controllers\Traits\JsonTrait; use SP\Mvc\Controller\WebControllerHelper; use SP\Plugin\PluginManager; /** * Class ViewController */ final class ViewController extends ControllerBase { use JsonTrait; private PluginManagerService $pluginService; private PluginManager $pluginManager; public function __construct( Application $application, WebControllerHelper $webControllerHelper, PluginManagerService $pluginService, PluginManager $pluginManager ) { parent::__construct($application, $webControllerHelper); $this->checkLoggedIn(); $this->pluginService = $pluginService; $this->pluginManager = $pluginManager; } /** * View action * * @param int $id * * @return bool * @throws JsonException */ public function viewAction(int $id): bool { try { if (!$this->acl->checkUserAccess(AclActionsInterface::PLUGIN_VIEW)) { return $this->returnJsonResponse( JsonMessage::JSON_ERROR, __u('You don\'t have permission to do this operation') ); } $this->view->assign('header', __('View Plugin')); $this->view->assign('isView', true); $this->setViewData($id); $this->eventDispatcher->notify('show.plugin', new Event($this)); return $this->returnJsonResponseData(['html' => $this->render()]); } catch (Exception $e) { processException($e); $this->eventDispatcher->notify('exception', new Event($e)); return $this->returnJsonResponseException($e); } } /** * Sets view data for displaying items's data * * @param int|null $pluginId * * @throws ConstraintException * @throws QueryException * @throws NoSuchItemException */ protected function setViewData(?int $pluginId = null): void { $this->view->addTemplate('plugin'); $pluginData = $pluginId ? $this->pluginService->getById($pluginId) : new Plugin(); $pluginInfo = $this->pluginManager->getPlugin($pluginData->getName()); $this->view->assign('plugin', $pluginData); $this->view->assign('pluginInfo', $pluginInfo); $this->view->assign('nextAction', Acl::getActionRoute(AclActionsInterface::ITEMS_MANAGE)); if ($this->view->isView === true) { $this->view->assign('disabled', 'disabled'); $this->view->assign('readonly', 'readonly'); } else { $this->view->assign('disabled', false); $this->view->assign('readonly', false); } } }