mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
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:
@@ -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'
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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() !== ''))
|
||||
|
||||
Reference in New Issue
Block a user