N°5281 - Portal: Add method to declare brick controller since Symfony 5.4 migration (#313)

* Add controllers declaration interface to ItopExtensionsExtraRoutes

* N°3390 - Upgrade from Symfony 3.4 to Symfony 5.4
Container setter issues

* Show Symfony original error page when app debug is on

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Helper/ObjectFormHandlerHelper.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Routing/ItopExtensionsExtraRoutes.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

* Update datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>

Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
This commit is contained in:
bdalsass
2022-07-25 14:19:47 +02:00
committed by GitHub
parent 9cf329c475
commit d93a0b698b
6 changed files with 207 additions and 114 deletions

View File

@@ -0,0 +1,48 @@
<?php
/**
* Copyright (C) 2013-2022 Combodo SARL
*
* This file is part of iTop.
*
* iTop is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* iTop is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
*/
namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Combodo\iTop\Portal\Routing\ItopExtensionsExtraRoutes;
/**
* Extensions controllers registration.
*
* @author Benjamin Dalsass
* @since 3.1.0
* @package Symfony\Component\DependencyInjection\Loader\Configurator
*/
return static function (ContainerConfigurator $oContainer) {
// retrieve extension controller classes
$aControllersClasses = ItopExtensionsExtraRoutes::GetControllersClasses();
// iterate throw extensions controller classes...
foreach ($aControllersClasses as $sController) {
// register as service
$oContainer->services()->set($sController, $sController)
->public()
->tag('controller.service_arguments')
->tag('container.service_suscriber')
->autowire()
->autoconfigure();
}
};

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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;
}
}

View File

@@ -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;
}
}