diff --git a/datamodels/2.x/itop-portal-base/portal/config/services.php b/datamodels/2.x/itop-portal-base/portal/config/services.php new file mode 100644 index 000000000..cd8bab085 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/config/services.php @@ -0,0 +1,48 @@ +services()->set($sController, $sController) + ->public() + ->tag('controller.service_arguments') + ->tag('container.service_suscriber') + ->autowire() + ->autoconfigure(); + } + +}; \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php index 0acdfd0be..301cc9f85 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/ObjectController.php @@ -589,6 +589,8 @@ class ObjectController extends BrickController $oSecurityHelper = $this->get('security_helper'); /** @var \Combodo\iTop\Portal\Helper\ScopeValidatorHelper $oScopeValidator */ $oScopeValidator = $this->get('scope_validator'); + /** @var \Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper $oFormHandlerHelper */ + $oFormHandlerHelper = $this->get('object_form_handler'); $aData = array( 'results' => array( @@ -640,16 +642,14 @@ class ObjectController extends BrickController // Updating host object with form data / values $sFormManagerClass = $aRequestContent['formmanager_class']; $sFormManagerData = $aRequestContent['formmanager_data']; - if (!empty($sFormManagerClass) && !empty($sFormManagerData)) - { + if (!empty($sFormManagerClass) && !empty($sFormManagerData)) { /** @var \Combodo\iTop\Portal\Form\ObjectFormManager $oFormManager */ $oFormManager = $sFormManagerClass::FromJSON($sFormManagerData); - $oFormManager->SetContainer($this->container); + $oFormManager->SetObjectFormHandlerHelper($oFormHandlerHelper); $oFormManager->SetObject($oHostObject); // Applying action rules if present - if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== '')) - { + if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== '')) { $aActionRules = ContextManipulatorHelper::DecodeRulesToken($oFormManager->GetActionRulesToken()); $oObj = $oFormManager->GetObject(); $oContextManipulator->PrepareObject($aActionRules, $oObj); @@ -769,13 +769,14 @@ class ObjectController extends BrickController $oSecurityHelper = $this->get('security_helper'); /** @var \Combodo\iTop\Portal\Helper\ScopeValidatorHelper $oScopeValidator */ $oScopeValidator = $this->get('scope_validator'); - + /** @var \Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper $oFormHandlerHelper */ + $oFormHandlerHelper = $this->get('object_form_handler'); $aData = array( - 'sMode' => 'search_regular', - 'sTargetAttCode' => $sTargetAttCode, - 'sHostObjectClass' => $sHostObjectClass, - 'sHostObjectId' => $sHostObjectId, + 'sMode' => 'search_regular', + 'sTargetAttCode' => $sTargetAttCode, + 'sHostObjectClass' => $sHostObjectClass, + 'sHostObjectId' => $sHostObjectId, 'sActionRulesToken' => $oRequestManipulator->ReadParam('ar_token', ''), ); @@ -807,16 +808,14 @@ class ObjectController extends BrickController // Updating host object with form data / values $sFormManagerClass = $oRequestManipulator->ReadParam('formmanager_class', '', FILTER_UNSAFE_RAW); $sFormManagerData = $oRequestManipulator->ReadParam('formmanager_data', '', FILTER_UNSAFE_RAW); - if (!empty($sFormManagerClass) && !empty($sFormManagerData)) - { + if (!empty($sFormManagerClass) && !empty($sFormManagerData)) { /** @var \Combodo\iTop\Portal\Form\ObjectFormManager $oFormManager */ $oFormManager = $sFormManagerClass::FromJSON($sFormManagerData); - $oFormManager->SetContainer($this->container); + $oFormManager->SetObjectFormHandlerHelper($oFormHandlerHelper); $oFormManager->SetObject($oHostObject); // Applying action rules if present - if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== '')) - { + if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== '')) { $aActionRules = ContextManipulatorHelper::DecodeRulesToken($oFormManager->GetActionRulesToken()); $oObj = $oFormManager->GetObject(); $oContextManipulator->PrepareObject($aActionRules, $oObj); diff --git a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php index bde7d0f60..57f1b3c1a 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php +++ b/datamodels/2.x/itop-portal-base/portal/src/EventListener/ExceptionListener.php @@ -117,11 +117,15 @@ class ExceptionListener implements ContainerAwareInterface $oResponse->setStatusCode($iStatusCode); // HttpExceptionInterface is a special type of exception that holds status code and header details - if ($oException instanceof HttpExceptionInterface) - { + if ($oException instanceof HttpExceptionInterface) { $oResponse->headers->replace($oException->getHeaders()); } + // display original error page when app debug is on + if (($_SERVER['APP_DEBUG'] == 1)) { + return; + } + // Send the modified response object to the event $oEvent->setResponse($oResponse); } 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 d1bd69106..3f811a29e 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 @@ -31,6 +31,7 @@ use Combodo\iTop\Form\Field\LabelField; use Combodo\iTop\Form\Form; use Combodo\iTop\Form\FormManager; use Combodo\iTop\Portal\Helper\ApplicationHelper; +use Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper; use DBObject; use DBObjectSearch; use DBObjectSet; @@ -42,7 +43,6 @@ use Exception; use InlineImage; use IssueLog; use MetaModel; -use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\HttpException; use UserRights; @@ -65,8 +65,6 @@ class ObjectFormManager extends FormManager /** @var string ENUM_MODE_APPLY_STIMULUS */ const ENUM_MODE_APPLY_STIMULUS = 'apply_stimulus'; - /** @var \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */ - protected $oContainer; /** @var \cmdbAbstractObject $oObject */ protected $oObject; /** @var string $sMode */ @@ -85,6 +83,13 @@ class ObjectFormManager extends FormManager */ protected $aHiddenFieldsId = array(); + /** + * @var ObjectFormHandlerHelper $oFormHandlerHelper + * @since 3.1.0 Replace container. Allow access to others applications services. + */ + private $oFormHandlerHelper; + + /** * @param string|array $formManagerData value of the formmanager_data portal parameter, either JSON or object * @@ -172,23 +177,15 @@ class ObjectFormManager extends FormManager } /** - * - * @return \Symfony\Component\DependencyInjection\ContainerInterface - */ - public function GetContainer() - { - return $this->oContainer; - } - - /** - * - * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer + * @param \Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper $oFormHandlerHelper * * @return $this + * @since 3.1.0 + * */ - public function SetContainer(ContainerInterface $oContainer) + public function SetObjectFormHandlerHelper(ObjectFormHandlerHelper $oFormHandlerHelper) { - $this->oContainer = $oContainer; + $this->oFormHandlerHelper = $oFormHandlerHelper; return $this; } @@ -429,28 +426,21 @@ class ObjectFormManager extends FormManager break; } // - The layout - if ($this->aFormProperties['layout'] !== null) - { + if ($this->aFormProperties['layout'] !== null) { // Checking if we need to render the template from twig to html in order to parse the fields - if ($this->aFormProperties['layout']['type'] === 'twig') - { - if ($this->oContainer !== null) - { + if ($this->aFormProperties['layout']['type'] === 'twig') { + + if ($this->oFormHandlerHelper !== null) { /** @var \Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper $oObjectFormHandler */ - $oObjectFormHandler = $this->oContainer->get('object_form_handler'); - $sRendered = $oObjectFormHandler->RenderFormFromTwig( + $sRendered = $this->oFormHandlerHelper->RenderFormFromTwig( $oForm->GetId(), $this->aFormProperties['layout']['content'], array('oRenderer' => $this->oRenderer, 'oObject' => $this->oObject) ); - } - else - { + } else { $sRendered = 'Form not rendered because of missing container'; } - } - else - { + } else { $sRendered = $this->aFormProperties['layout']['content']; } @@ -742,42 +732,36 @@ 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'))) - { + array('Combodo\\iTop\\Form\\Field\\SelectObjectField', 'Combodo\\iTop\\Form\\Field\\LinkedSetField'))) { /** @var \Combodo\iTop\Form\Field\SelectObjectField|\Combodo\iTop\Form\Field\LinkedSetField $oField */ - if ($this->oContainer !== null) - { - $sSearchEndpoint = $this->oContainer->get('url_generator')->generate('p_object_search_generic', array( - 'sTargetAttCode' => $oAttDef->GetCode(), + if ($this->oFormHandlerHelper !== null) { + $sSearchEndpoint = $this->oFormHandlerHelper->GetUrlGenerator()->generate('p_object_search_generic', array( + 'sTargetAttCode' => $oAttDef->GetCode(), 'sHostObjectClass' => get_class($this->oObject), - 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), - 'ar_token' => $this->GetActionRulesToken(), + 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), + 'ar_token' => $this->GetActionRulesToken(), )); $oField->SetSearchEndpoint($sSearchEndpoint); } } // - Field that require an information endpoint - if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\LinkedSetField'))) - { + if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\LinkedSetField'))) { /** @var \Combodo\iTop\Form\Field\LinkedSetField $oField */ - if ($this->oContainer !== null) - { - $oField->SetInformationEndpoint($this->oContainer->get('url_generator')->generate('p_object_get_information_json')); + if ($this->oFormHandlerHelper !== null) { + $oField->SetInformationEndpoint($this->oFormHandlerHelper->GetUrlGenerator()->generate('p_object_get_information_json')); } } // - Field that require to apply scope on its DM OQL if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\SelectObjectField'))) { /** @var \Combodo\iTop\Form\Field\SelectObjectField $oField */ - if ($this->oContainer !== null) - { + if ($this->oFormHandlerHelper !== null) { $oScopeOriginal = ($oField->GetSearch() !== null) ? $oField->GetSearch() : DBSearch::FromOQL($oAttDef->GetValuesDef()->GetFilterExpression()); /** @var \DBSearch $oScopeSearch */ - $oScopeSearch = $this->oContainer->get('scope_validator')->GetScopeFilterForProfiles(UserRights::ListProfiles(), + $oScopeSearch = $this->oFormHandlerHelper->GetScopeValidator()->GetScopeFilterForProfiles(UserRights::ListProfiles(), $oScopeOriginal->GetClass(), UR_ACTION_READ); - if ($oScopeSearch === null) - { + if ($oScopeSearch === null) { IssueLog::Info(__METHOD__.' at line '.__LINE__.' : User #'.UserRights::GetUserId().' has no scope query for '.$oScopeOriginal->GetClass().' class.'); throw new HttpException(Response::HTTP_NOT_FOUND, Dict::S('UI:ObjectDoesNotExist')); } @@ -817,15 +801,14 @@ class ObjectFormManager extends FormManager if (in_array(get_class($oCustomField), array('Combodo\\iTop\\Form\\Field\\SelectObjectField'))) { /** @var \Combodo\iTop\Form\Field\SelectObjectField $oCustomField */ - if ($this->oContainer !== null) - { + if ($this->oFormHandlerHelper->getUrlGenerator() !== null) { - $sSearchEndpoint = $this->oContainer->get('url_generator')->generate('p_object_search_generic', + $sSearchEndpoint = $this->oFormHandlerHelper->GetUrlGenerator()->generate('p_object_search_generic', array( - 'sTargetAttCode' => $oAttDef->GetCode(), + 'sTargetAttCode' => $oAttDef->GetCode(), 'sHostObjectClass' => get_class($this->oObject), - 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), - 'ar_token' => $this->GetActionRulesToken(), + 'sHostObjectId' => ($this->oObject->IsNew()) ? null : $this->oObject->GetKey(), + 'ar_token' => $this->GetActionRulesToken(), )); $oCustomField->SetSearchEndpoint($sSearchEndpoint); } @@ -860,15 +843,13 @@ class ObjectFormManager extends FormManager /** @var \Combodo\iTop\Form\Field\LinkedSetField $oField */ /** @var \AttributeLinkedSetIndirect $oAttDef */ // - Overriding attributes to display - if ($this->oContainer !== null) - { + if ($this->oFormHandlerHelper !== null) { // Note : This snippet is inspired from AttributeLinkedSet::MakeFormField() - $aAttCodesToDisplay = ApplicationHelper::GetLoadedListFromClass($this->oContainer->getParameter('combodo.portal.instance.conf')['lists'], + $aAttCodesToDisplay = ApplicationHelper::GetLoadedListFromClass($this->oFormHandlerHelper->getCombodoPortalConf()['lists'], $oField->GetTargetClass(), 'list'); // - Adding friendlyname attribute to the list is not already in it $sTitleAttCode = 'friendlyname'; - if (($sTitleAttCode !== null) && !in_array($sTitleAttCode, $aAttCodesToDisplay)) - { + if (($sTitleAttCode !== null) && !in_array($sTitleAttCode, $aAttCodesToDisplay)) { $aAttCodesToDisplay = array_merge(array($sTitleAttCode), $aAttCodesToDisplay); } // - Adding attribute labels @@ -881,25 +862,19 @@ class ObjectFormManager extends FormManager $oField->SetAttributesToDisplay($aAttributesToDisplay); } // - Filtering links regarding scopes - if ($this->oContainer !== null) - { + if ($this->oFormHandlerHelper !== null) { $aLimitedAccessItemIDs = array(); /** @var \ormLinkSet $oFieldOriginalSet */ $oFieldOriginalSet = $oField->GetCurrentValue(); - while ($oLink = $oFieldOriginalSet->Fetch()) - { - if ($oField->IsIndirect()) - { + while ($oLink = $oFieldOriginalSet->Fetch()) { + if ($oField->IsIndirect()) { $iRemoteKey = $oLink->Get($oAttDef->GetExtKeyToRemote()); - } - else - { + } else { $iRemoteKey = $oLink->GetKey(); } - if (!$this->oContainer->get('security_helper')->IsActionAllowed(UR_ACTION_READ, $oField->GetTargetClass(), $iRemoteKey)) - { + if (!$this->oFormHandlerHelper->getSecurityHelper()->IsActionAllowed(UR_ACTION_READ, $oField->GetTargetClass(), $iRemoteKey)) { $aLimitedAccessItemIDs[] = $iRemoteKey; } } @@ -921,23 +896,22 @@ class ObjectFormManager extends FormManager if (in_array(get_class($oField), array('Combodo\\iTop\\Form\\Field\\BlobField', 'Combodo\\iTop\\Form\\Field\\ImageField'))) { // - Overriding attributes to display - if ($this->oContainer !== null) - { + if ($this->oFormHandlerHelper !== null) { // Override hardcoded URLs in ormDocument pointing to back office console $oOrmDoc = $this->oObject->Get($sAttCode); - $sDisplayUrl = $this->oContainer->get('url_generator')->generate('p_object_document_display', [ + $sDisplayUrl = $this->oFormHandlerHelper->getUrlGenerator()->generate('p_object_document_display', [ 'sObjectClass' => get_class($this->oObject), - 'sObjectId' => $this->oObject->GetKey(), + 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, - 'cache' => 86400, - 's' => $oOrmDoc->GetSignature(), - ]); - $sDownloadUrl = $this->oContainer->get('url_generator')->generate('p_object_document_download', [ + 'cache' => 86400, + 's' => $oOrmDoc->GetSignature(), + ]); + $sDownloadUrl = $this->oFormHandlerHelper->getUrlGenerator()->generate('p_object_document_download', [ 'sObjectClass' => get_class($this->oObject), - 'sObjectId' => $this->oObject->GetKey(), + 'sObjectId' => $this->oObject->GetKey(), 'sObjectField' => $sAttCode, - 'cache' => 86400, - 's' => $oOrmDoc->GetSignature(), + 'cache' => 86400, + 's' => $oOrmDoc->GetSignature(), ]); /** @var \Combodo\iTop\Form\Field\BlobField $oField */ $oField->SetDisplayUrl($sDisplayUrl) @@ -1024,11 +998,11 @@ class ObjectFormManager extends FormManager // set id to a unique key - avoid collisions with another attribute that could exist with the name 'attachments' $oField = new FileUploadField('attachments_plugin'); $oField->SetLabel(Dict::S('Portal:Attachments')) - ->SetUploadEndpoint($this->oContainer->get('url_generator')->generate('p_object_attachment_add')) - ->SetDownloadEndpoint($this->oContainer->get('url_generator')->generate('p_object_attachment_download', + ->SetUploadEndpoint($this->oFormHandlerHelper->getUrlGenerator()->generate('p_object_attachment_add')) + ->SetDownloadEndpoint($this->oFormHandlerHelper->getUrlGenerator()->generate('p_object_attachment_download', array('sAttachmentId' => '-sAttachmentId-'))) ->SetTransactionId($oForm->GetTransactionId()) - ->SetAllowDelete($this->oContainer->getParameter('combodo.portal.instance.conf')['properties']['attachments']['allow_delete']) + ->SetAllowDelete($this->oFormHandlerHelper->getCombodoPortalConf()['properties']['attachments']['allow_delete']) ->SetObject($this->oObject); // Checking if we can edit attachments in the current state @@ -1148,7 +1122,7 @@ class ObjectFormManager extends FormManager $bActivateTriggers = (!$bIsNew && $bWasModified); // Forcing allowed writing on the object if necessary. This is used in some particular cases. - $bAllowWrite = $this->oContainer->get('security_helper')->IsActionAllowed($bIsNew ? UR_ACTION_CREATE : UR_ACTION_MODIFY, $sObjectClass, $this->oObject->GetKey()); + $bAllowWrite = $this->oFormHandlerHelper->getSecurityHelper()->IsActionAllowed($bIsNew ? UR_ACTION_CREATE : UR_ACTION_MODIFY, $sObjectClass, $this->oObject->GetKey()); if ($bAllowWrite) { $this->oObject->AllowWrite(true); } @@ -1181,7 +1155,7 @@ class ObjectFormManager extends FormManager // Activating triggers only on update if ($bActivateTriggers) { - $sTriggersQuery = $this->oContainer->getParameter('combodo.portal.instance.conf')['properties']['triggers_query']; + $sTriggersQuery = $this->oFormHandlerHelper->getCombodoPortalConf()['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 e7e3d063d..094e83c7b 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 @@ -81,8 +81,6 @@ class ObjectFormHandlerHelper private $sPortalId; /** @var \Combodo\iTop\Portal\Twig\AppExtension $oAppExtension */ private $oAppExtension; - /** @var \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */ - private $oContainer; /** * ObjectFormHandlerHelper constructor. @@ -96,9 +94,11 @@ class ObjectFormHandlerHelper * @param array $aCombodoPortalInstanceConf * @param string $sPortalId * @param \Combodo\iTop\Portal\Twig\AppExtension $oAppExtension - * @param \Symfony\Component\DependencyInjection\ContainerInterface $oContainer */ - public function __construct(RequestManipulatorHelper $oRequestManipulator, ContextManipulatorHelper $oContextManipulator, NavigationRuleHelper $oNavigationRuleHelper, ScopeValidatorHelper $oScopeValidator, SecurityHelper $oSecurityHelper, UrlGeneratorInterface $oUrlGenerator, $aCombodoPortalInstanceConf, $sPortalId, AppExtension $oAppExtension, ContainerInterface $oContainer) + public function __construct( + RequestManipulatorHelper $oRequestManipulator, ContextManipulatorHelper $oContextManipulator, NavigationRuleHelper $oNavigationRuleHelper, ScopeValidatorHelper $oScopeValidator, SecurityHelper $oSecurityHelper, UrlGeneratorInterface $oUrlGenerator, $aCombodoPortalInstanceConf, $sPortalId, + AppExtension $oAppExtension + ) { $this->oRequestManipulator = $oRequestManipulator; $this->oContextManipulator = $oContextManipulator; @@ -109,7 +109,6 @@ class ObjectFormHandlerHelper $this->aCombodoPortalInstanceConf = $aCombodoPortalInstanceConf; $this->sPortalId = $sPortalId; $this->oAppExtension = $oAppExtension; - $this->oContainer = $oContainer; } /** @@ -271,13 +270,13 @@ class ObjectFormHandlerHelper } $oFormRenderer = new BsFormRenderer(); - if($sFormEndpoint !== null) - { + if ($sFormEndpoint !== null) { $oFormRenderer->SetEndpoint($sFormEndpoint); } $oFormManager = new ObjectFormManager(); - $oFormManager->SetContainer($this->oContainer) + $oFormManager + ->SetObjectFormHandlerHelper($this) ->SetObject($oObject) ->SetMode($sMode) ->SetActionRulesToken($sActionRulesToken) @@ -301,7 +300,7 @@ class ObjectFormHandlerHelper $this->CheckReadFormDataAllowed($sFormManagerData); $oFormManager = $sFormManagerClass::FromJSON($sFormManagerData); - $oFormManager->SetContainer($this->oContainer); + $oFormManager->SetObjectFormHandlerHelper($this); // Applying action rules if present if (($oFormManager->GetActionRulesToken() !== null) && ($oFormManager->GetActionRulesToken() !== '')) { @@ -476,4 +475,44 @@ class ObjectFormHandlerHelper static::ENUM_MODE_CREATE, ); } + + /** + * @return \Combodo\iTop\Portal\Routing\UrlGenerator|\Symfony\Component\Routing\Generator\UrlGeneratorInterface + * @since 3.1 + * + */ + public function getUrlGenerator() + { + return $this->oUrlGenerator; + } + + /** + * @return \Combodo\iTop\Portal\Helper\SecurityHelper + * @since 3.1 + * + */ + public function getSecurityHelper(): SecurityHelper + { + return $this->oSecurityHelper; + } + + /** + * @return \Combodo\iTop\Portal\Helper\ScopeValidatorHelper + * @since 3.1.0 + * + */ + public function GetScopeValidator(): ScopeValidatorHelper + { + return $this->oScopeValidator; + } + + /** + * @return array + * @since 3.1.0 + * + */ + public function GetCombodoPortalConf(): array + { + return $this->aCombodoPortalInstanceConf; + } } \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php b/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php index 88070e3a6..35c759ac3 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php @@ -34,6 +34,12 @@ class ItopExtensionsExtraRoutes /** @var array $aRoutes */ static private $aRoutes = array(); + /** + * @var array $aControllersClasses + * @since 3.1.0 + */ + static private $aControllersClasses = array(); + /** * @param array $extraRoutes * @@ -41,8 +47,7 @@ class ItopExtensionsExtraRoutes */ public static function AddRoutes($extraRoutes) { - if (!is_array($extraRoutes)) - { + if (!is_array($extraRoutes)) { throw new Exception('Only array are allowed as parameter to '.__METHOD__); } @@ -56,4 +61,28 @@ class ItopExtensionsExtraRoutes { return self::$aRoutes; } + + /** + * @param array $extraControllersClasses + * + * @throws Exception + * @since 3.1.0 + */ + public static function AddControllersClasses($extraControllersClasses) + { + if (!is_array($extraControllersClasses)) { + throw new Exception('Only array are allowed as parameter to '.__METHOD__); + } + + self::$aControllersClasses = array_merge(self::$aControllersClasses, $extraControllersClasses); + } + + /** + * @return array + * @since 3.1.0 + */ + public static function GetControllersClasses() + { + return self::$aControllersClasses; + } } \ No newline at end of file