. */ namespace SP\Modules\Web\Controllers\CustomField; use SP\Core\Acl\Acl; use SP\Core\Application; use SP\Domain\Core\Acl\AclActionsInterface; use SP\Domain\Core\Exceptions\ConstraintException; use SP\Domain\Core\Exceptions\QueryException; use SP\Domain\CustomField\Models\CustomFieldDefinition; use SP\Domain\CustomField\Ports\CustomFieldDefinitionService; use SP\Domain\CustomField\Ports\CustomFieldTypeService; use SP\Domain\CustomField\Services\CustomFieldDefinition; use SP\Infrastructure\Common\Repositories\NoSuchItemException; use SP\Modules\Web\Controllers\ControllerBase; use SP\Mvc\Controller\WebControllerHelper; use SP\Mvc\View\Components\SelectItemAdapter; abstract class CustomFieldViewBase extends ControllerBase { private CustomFieldDefinitionService $customFieldDefService; private CustomFieldTypeService $customFieldTypeService; public function __construct( Application $application, WebControllerHelper $webControllerHelper, CustomFieldDefinitionService $customFieldDefService, CustomFieldTypeService $customFieldTypeService ) { parent::__construct($application, $webControllerHelper); $this->checkLoggedIn(); $this->customFieldDefService = $customFieldDefService; $this->customFieldTypeService = $customFieldTypeService; } /** * Sets view data for displaying custom field's data * * @param int|null $customFieldId * * @throws ConstraintException * @throws QueryException * @throws NoSuchItemException */ protected function setViewData(?int $customFieldId = null): void { $this->view->addTemplate('custom_field', 'itemshow'); $customField = $customFieldId ? $this->customFieldDefService->getById($customFieldId) : new CustomFieldDefinition(); $this->view->assign('field', $customField); $this->view->assign( 'types', SelectItemAdapter::factory($this->customFieldTypeService->getAll()) ->getItemsFromModelSelected([$customField->getTypeId()]) ); $this->view->assign( 'modules', SelectItemAdapter::factory(CustomFieldDefinition::getFieldModules()) ->getItemsFromArraySelected([$customField->getModuleId()]) ); $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); } } }