diff --git a/datamodels/2.x/itop-portal-base/portal/config/routes/object_brick.yaml b/datamodels/2.x/itop-portal-base/portal/config/routes/object_brick.yaml index ed1350ed5..1e6297277 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/routes/object_brick.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/routes/object_brick.yaml @@ -18,44 +18,44 @@ p_object_create: path: '/object/create/{sObjectClass}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::CreateAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::CreateAction' p_object_create_from_factory: path: '/object/create-from-factory/{sObjectClass}/{sObjectId}/{sEncodedMethodName}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::CreateFromFactoryAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::CreateFromFactoryAction' p_object_edit: path: '/object/edit/{sObjectClass}/{sObjectId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::EditAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::EditAction' p_object_view: path: '/object/view/{sObjectClass}/{sObjectId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::ViewAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::ViewAction' p_object_apply_stimulus: path: '/object/apply-stimulus/{sStimulusCode}/{sObjectClass}/{sObjectId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::ApplyStimulusAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::ApplyStimulusAction' p_object_search_regular: path: '/object/search' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchRegularAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::SearchRegularAction' p_object_search_from_attribute: path: '/object/search/from-attribute/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchFromAttributeAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::SearchFromAttributeAction' sHostObjectClass: ~ sHostObjectId: ~ p_object_search_autocomplete: path: '/object/search' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchAutocompleteAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::SearchAutocompleteAction' sHostObjectClass: ~ sHostObjectId: ~ @@ -63,7 +63,7 @@ p_object_search_autocomplete: p_object_search_generic: path: '/object/search/{sMode}/{sTargetAttCode}/{sHostObjectClass}/{sHostObjectId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::SearchAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::SearchAction' sMode: '-sMode-' sHostObjectClass: ~ sHostObjectId: ~ @@ -71,27 +71,27 @@ p_object_search_generic: p_object_get_informations_json: path: '/object/get-informations/json' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::GetInformationsAsJsonAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::GetInformationsAsJsonAction' p_object_document_display: path: '/object/document/display/{sObjectClass}/{sObjectId}/{sObjectField}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::DocumentAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::DocumentAction' sOperation: 'display' p_object_document_download: path: '/object/document/download/{sObjectClass}/{sObjectId}/{sObjectField}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::DocumentAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::DocumentAction' sOperation: 'download' p_object_attachment_add: path: '/object/attachment/add' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::AttachmentAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::AttachmentAction' p_object_attachment_download: path: '/object/attachment/download/{sAttachmentId}' defaults: - _controller: 'Combodo\\iTop\\Portal\\Controller\\ObjectController::AttachmentAction' + _controller: 'Combodo\iTop\Portal\Controller\ObjectController::AttachmentAction' sOperation: 'download' diff --git a/datamodels/2.x/itop-portal-base/portal/config/services.yaml b/datamodels/2.x/itop-portal-base/portal/config/services.yaml index 929b50afe..56e443b13 100644 --- a/datamodels/2.x/itop-portal-base/portal/config/services.yaml +++ b/datamodels/2.x/itop-portal-base/portal/config/services.yaml @@ -49,7 +49,8 @@ services: $bDebug: '%kernel.debug%' $sPortalCachePath: !php/const PORTAL_CACHE_PATH $sPortalId: !php/const PORTAL_ID - $sCombodoPortalInstanceAbsoluteUrl: !php/const COMBODO_PORTAL_INSTANCE_ABSOLUTE_URL + $aCombodoPortalInstanceConf: '%combodo.portal.instance.conf%' + $sCombodoPortalInstanceAbsoluteUrl: !php/const COMBODO_PORTAL_INSTANCE_ABSOLUTE_URL # Makes classes in src/ available to be used as services # This creates a service per class whose id is the fully-qualified class name @@ -75,11 +76,6 @@ services: # Add more service definitions when explicit configuration is needed # Please note that last definitions always *replace* previous ones - # VariableAccessor: When a service require a parameter, you have to fully declare it: let's create intermediate (& simple) services and have them auto-wired - Combodo\iTop\Portal\VariableAccessor\CombodoPortalInstanceConf: - arguments: - - '%combodo.portal.instance.conf%' - # Legacy code as a service: since it is not in the auto-wiring path, it needs to be explicitly declared ModuleDesign: public: true @@ -117,6 +113,9 @@ services: scope_validator: alias: Combodo\iTop\Portal\Helper\ScopeValidatorHelper public: true + security_helper: + alias: Combodo\iTop\Portal\Helper\SecurityHelper + public: true context_manipulator: alias: Combodo\iTop\Portal\Helper\ContextManipulatorHelper public: true diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php index 58d991bff..82ad2cb37 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ApplicationContextSetUrlMakerClass.php @@ -27,8 +27,6 @@ namespace Combodo\iTop\Portal\EventListener; - -use Combodo\iTop\Portal\VariableAccessor\CombodoPortalInstanceConf; use Symfony\Component\HttpKernel\Event\GetResponseEvent; class ApplicationContextSetUrlMakerClass @@ -39,11 +37,11 @@ class ApplicationContextSetUrlMakerClass private $aCombodoPortalInstanceConf; /** - * @param string $oCombodoPortalInstanceConf + * @param array $aCombodoPortalInstanceConf */ - public function __construct(CombodoPortalInstanceConf $oCombodoPortalInstanceConf) + public function __construct($aCombodoPortalInstanceConf) { - $this->aCombodoPortalInstanceConf = $oCombodoPortalInstanceConf->getVariable(); + $this->aCombodoPortalInstanceConf = $aCombodoPortalInstanceConf; } public function onKernelRequest(GetResponseEvent $oGetResponseEvent) diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index ae338b71c..0cba283d5 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -43,7 +43,9 @@ use InlineImage; use IssueLog; use MetaModel; use ormTagSet; -use Silex\Application; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\HttpException; use UserRights; use utils; @@ -60,8 +62,8 @@ class ObjectFormManager extends FormManager const ENUM_MODE_CREATE = 'create'; const ENUM_MODE_APPLY_STIMULUS = 'apply_stimulus'; - /** @var \Silex\Application $oApp */ - protected $oApp; + /** @var \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */ + protected $oContainer; /** @var \DBObject $oObject */ protected $oObject; protected $sMode; @@ -150,21 +152,22 @@ class ObjectFormManager extends FormManager /** * - * @return \Silex\Application + * @return \Symfony\Component\DependencyInjection\ContainerInterface */ - public function GetApplication() + public function GetContainer() { - return $this->oApp; + return $this->oContainer; } /** * - * @param \Silex\Application $oApp + * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer + * * @return \Combodo\iTop\Portal\Form\ObjectFormManager */ - public function SetApplication($oApp) + public function SetContainer(ContainerInterface $oContainer) { - $this->oApp = $oApp; + $this->oContainer = $oContainer; return $this; } @@ -687,10 +690,9 @@ class ObjectFormManager extends FormManager // - Field that require a search endpoint if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\SelectObjectField', 'Combodo\\iTop\\Form\\Field\\LinkedSetField'))) { - if ($this->oApp !== null) + if ($this->oContainer !== null) { - - $sSearchEndpoint = $this->oApp['url_generator']->generate('p_object_search_generic', array( + $sSearchEndpoint = $this->oContainer->get('url_generator')->generate('p_object_search_generic', array( 'sTargetAttCode' => $oAttDef->GetCode(), 'sHostObjectClass' => get_class($this->oObject), 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), @@ -702,23 +704,23 @@ class ObjectFormManager extends FormManager // - Field that require an information endpoint if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\LinkedSetField'))) { - if ($this->oApp !== null) + if ($this->oContainer !== null) { - $oField->SetInformationEndpoint($this->oApp['url_generator']->generate('p_object_get_informations_json')); + $oField->SetInformationEndpoint($this->oContainer->get('url_generator')->generate('p_object_get_informations_json')); } } // - Field that require to apply scope on its DM OQL if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\SelectObjectField'))) { - if ($this->oApp !== null) + if ($this->oContainer !== null) { $oScopeOriginal = ($oField->GetSearch() !== null) ? $oField->GetSearch() : DBSearch::FromOQL($oAttDef->GetValuesDef()->GetFilterExpression()); - $oScopeSearch = $this->oApp['scope_validator']->GetScopeFilterForProfiles(UserRights::ListProfiles(), $oScopeOriginal->GetClass(), UR_ACTION_READ); + $oScopeSearch = $this->oContainer->get('scope_validator')->GetScopeFilterForProfiles(UserRights::ListProfiles(), $oScopeOriginal->GetClass(), UR_ACTION_READ); if ($oScopeSearch === null) { IssueLog::Info(__METHOD__ . ' at line ' . __LINE__ . ' : User #' . UserRights::GetUserId() . ' has no scope query for ' . $oScopeOriginal->GetClass() . ' class.'); - $this->oApp->abort(404, Dict::S('UI:ObjectDoesNotExist')); + throw new HttpException(Response::HTTP_NOT_FOUND, Dict::S('UI:ObjectDoesNotExist')); } $oScopeOriginal = $oScopeOriginal->Intersect($oScopeSearch); // Note : This is to skip the silo restriction on the final query @@ -753,10 +755,10 @@ class ObjectFormManager extends FormManager // - Field that require a search endpoint (OQL based dropdown list fields) if (in_array(get_class($oCustomField), array('Combodo\\iTop\\Form\\Field\\SelectObjectField'))) { - if ($this->oApp !== null) + if ($this->oContainer !== null) { - $sSearchEndpoint = $this->oApp['url_generator']->generate('p_object_search_generic', array( + $sSearchEndpoint = $this->oContainer->get('url_generator')->generate('p_object_search_generic', array( 'sTargetAttCode' => $oAttDef->GetCode(), 'sHostObjectClass' => get_class($this->oObject), 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), @@ -792,10 +794,10 @@ class ObjectFormManager extends FormManager if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\LinkedSetField'))) { // - Overriding attributes to display - if ($this->oApp !== null) + if ($this->oContainer !== null) { // Note : This snippet is inspired from AttributeLinkedSet::MakeFormField() - $aAttCodesToDisplay = ApplicationHelper::GetLoadedListFromClass($this->oApp, $oField->GetTargetClass(), 'list'); + $aAttCodesToDisplay = ApplicationHelper::GetLoadedListFromClass($this->oContainer->getParameter('combodo.portal.instance.conf'), $oField->GetTargetClass(), 'list'); // - Adding friendlyname attribute to the list is not already in it $sTitleAttCode = 'friendlyname'; if (($sTitleAttCode !== null) && !in_array($sTitleAttCode, $aAttCodesToDisplay)) @@ -873,10 +875,10 @@ class ObjectFormManager extends FormManager { $oField = new FileUploadField('attachments_for_form_' . $oForm->GetId()); $oField->SetLabel(Dict::S('Portal:Attachments')) - ->SetUploadEndpoint($this->oApp['url_generator']->generate('p_object_attachment_add')) - ->SetDownloadEndpoint($this->oApp['url_generator']->generate('p_object_attachment_download', array('sAttachmentId' => '-sAttachmentId-'))) + ->SetUploadEndpoint($this->oContainer->get('url_generator')->generate('p_object_attachment_add')) + ->SetDownloadEndpoint($this->oContainer->get('url_generator')->generate('p_object_attachment_download', array('sAttachmentId' => '-sAttachmentId-'))) ->SetTransactionId($oForm->GetTransactionId()) - ->SetAllowDelete($this->oApp['combodo.portal.instance.conf']['properties']['attachments']['allow_delete']) + ->SetAllowDelete($this->oContainer->getParameter('combodo.portal.instance.conf')['properties']['attachments']['allow_delete']) ->SetObject($this->oObject); // Checking if we can edit attachments in the current state @@ -1008,7 +1010,7 @@ class ObjectFormManager extends FormManager // Activating triggers only on update if ($bActivateTriggers) { - $sTriggersQuery = $this->oApp['combodo.portal.instance.conf']['properties']['triggers_query']; + $sTriggersQuery = $this->oContainer->getParameter('combodo.portal.instance.conf')['properties']['triggers_query']; if ($sTriggersQuery !== null) { $aParentClasses = MetaModel::EnumParentClasses($sObjectClass, ENUM_PARENT_CLASSES_ALL); diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php index 9e9abd96f..15595d463 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php @@ -24,8 +24,6 @@ namespace Combodo\iTop\Portal\Helper; use Combodo\iTop\Portal\Form\ObjectFormManager; -use Combodo\iTop\Portal\Routing\UrlGenerator; -use Combodo\iTop\Portal\VariableAccessor\CombodoPortalInstanceConf; use Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; use DBObjectSet; use Dict; @@ -33,6 +31,7 @@ use iPopupMenuExtension; use IssueLog; use JSButtonItem; use MetaModel; +use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; @@ -63,10 +62,12 @@ class ObjectFormHandlerHelper private $oSecurityHelper; /** @var \Combodo\iTop\Portal\Routing\UrlGenerator */ private $oUrlGenerator; - /** @var \Combodo\iTop\Portal\VariableAccessor\CombodoPortalInstanceConf */ + /** @var array */ private $aCombodoPortalInstanceConf; /** @var string $sPortalId */ private $sPortalId; + /** @var \Symfony\Component\DependencyInjection\ContainerInterface */ + private $oContainer; /** * ObjectFormHandlerHelper constructor. @@ -75,11 +76,12 @@ class ObjectFormHandlerHelper * @param \Combodo\iTop\Portal\Helper\ContextManipulatorHelper $oContextManipulator * @param \Combodo\iTop\Portal\Helper\ScopeValidatorHelper $oScopeValidator * @param \Combodo\iTop\Portal\Helper\SecurityHelper $oSecurityHelper - * @param \Combodo\iTop\Portal\Routing\UrlGenerator $oUrlGenerator - * @param \Combodo\iTop\Portal\VariableAccessor\CombodoPortalInstanceConf $aCombodoPortalInstanceConf + * @param \Symfony\Component\Routing\Generator\UrlGeneratorInterface $oUrlGenerator + * @param array $aCombodoPortalInstanceConf * @param string $sPortalId + * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */ - public function __construct(RequestManipulatorHelper $oRequestManipulator, ContextManipulatorHelper $oContextManipulator, ScopeValidatorHelper $oScopeValidator, SecurityHelper $oSecurityHelper, UrlGeneratorInterface $oUrlGenerator, CombodoPortalInstanceConf $aCombodoPortalInstanceConf, $sPortalId) + public function __construct(RequestManipulatorHelper $oRequestManipulator, ContextManipulatorHelper $oContextManipulator, ScopeValidatorHelper $oScopeValidator, SecurityHelper $oSecurityHelper, UrlGeneratorInterface $oUrlGenerator, $aCombodoPortalInstanceConf, $sPortalId, ContainerInterface $oContainer) { $this->oRequestManipulator = $oRequestManipulator; $this->oContextManipulator = $oContextManipulator; @@ -88,6 +90,7 @@ class ObjectFormHandlerHelper $this->oUrlGenerator = $oUrlGenerator; $this->aCombodoPortalInstanceConf = $aCombodoPortalInstanceConf; $this->sPortalId = $sPortalId; + $this->oContainer = $oContainer; } /** @@ -224,10 +227,8 @@ class ObjectFormHandlerHelper $oFormRenderer = new BsFormRenderer(); $oFormRenderer->SetEndpoint($sFormEndpoint); - // TODO: Remove this when ObjectFormManager fixed. - $oApp = null; $oFormManager = new ObjectFormManager(); - $oFormManager->SetApplication($oApp) + $oFormManager->SetContainer($this->oContainer) ->SetObject($oObject) ->SetMode($sMode) ->SetActionRulesToken($sActionRulesToken) @@ -250,11 +251,9 @@ class ObjectFormHandlerHelper throw new HttpException(Response::HTTP_INTERNAL_SERVER_ERROR, 'Parameters formmanager_class and formmanager_data must be defined.'); } - // TODO: Remove this when ObjectFormManager fixed. - $oApp = null; /** @var \Combodo\iTop\Portal\Form\ObjectFormManager $oFormManager */ $oFormManager = $sFormManagerClass::FromJSON($sFormManagerData); - $oFormManager->SetApplication($oApp); + $oFormManager->SetContainer($this->oContainer); // Applying action rules if present if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== ''))