. */ namespace SP\Modules\Web\Controllers\CustomField; use SP\Core\Acl\Acl; use SP\Core\Acl\ActionsInterface; use SP\Core\Application; use SP\Core\Exceptions\ConstraintException; use SP\Core\Exceptions\QueryException; use SP\DataModel\CustomFieldDefinitionData; use SP\Domain\CustomField\Ports\CustomFieldTypeServiceInterface; use SP\Domain\CustomField\Services\CustomFieldDefService; 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 \SP\Domain\CustomField\Ports\CustomFieldDefServiceInterface $customFieldDefService; private CustomFieldTypeServiceInterface $customFieldTypeService; public function __construct( Application $application, WebControllerHelper $webControllerHelper, \SP\Domain\CustomField\Ports\CustomFieldDefServiceInterface $customFieldDefService, CustomFieldTypeServiceInterface $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 CustomFieldDefinitionData(); $this->view->assign('field', $customField); $this->view->assign( 'types', SelectItemAdapter::factory($this->customFieldTypeService->getAllBasic()) ->getItemsFromModelSelected([$customField->getTypeId()]) ); $this->view->assign( 'modules', SelectItemAdapter::factory(CustomFieldDefService::getFieldModules()) ->getItemsFromArraySelected([$customField->getModuleId()]) ); $this->view->assign('nextAction', Acl::getActionRoute(ActionsInterface::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); } } }