N°2060 [WIP] Initialisation of the portal application:

- Fix object_brick.yaml actions path (Double slashes)
- Add declaration for "security_helper" service
- Refactor ObjectFormManager and ObjectFormHandlerHelper for SF
This commit is contained in:
Molkobain
2019-07-04 17:06:58 +02:00
parent 260c15c6b6
commit aff9d8cbca
5 changed files with 60 additions and 62 deletions

View File

@@ -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'

View File

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

View File

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

View File

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

View File

@@ -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() !== ''))