diff --git a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php index 8c96b0b74e..4741b70b95 100644 --- a/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/cs.dict.itop-portal-base.php @@ -118,4 +118,5 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', array( // CreateBrick brick Dict::Add('CS CZ', 'Czech', 'Čeština', array( 'Brick:Portal:Create:Name' => 'Rychlé vytvoření', + 'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~', )); diff --git a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php index b01430280d..fb517734a0 100644 --- a/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/de.dict.itop-portal-base.php @@ -113,5 +113,5 @@ Dict::Add('DE DE', 'German', 'Deutsch', array( // CreateBrick brick Dict::Add('DE DE', 'German', 'Deutsch', array( 'Brick:Portal:Create:Name' => 'Schnelles Erstellen', + 'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~', )); -?> diff --git a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php index e5a7a674e0..4bda26d8d2 100644 --- a/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/en.dict.itop-portal-base.php @@ -114,5 +114,5 @@ Dict::Add('EN US', 'English', 'English', array( // CreateBrick brick Dict::Add('EN US', 'English', 'English', array( 'Brick:Portal:Create:Name' => 'Quick creation', + 'Brick:Portal:Create:ChooseType' => 'Please, choose a type', )); -?> diff --git a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php index 3e543966f3..b73f8031cd 100644 --- a/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/es_cr.dict.itop-portal-base.php @@ -114,5 +114,5 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array( // CreateBrick brick Dict::Add('ES CR', 'Spanish', 'Español, Castellano', array( 'Brick:Portal:Create:Name' => 'Creación rápida', + 'Brick:Portal:Create:ChooseType' => 'Please, choose a type~~', )); -?> diff --git a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php index 88f1ab18a3..1d6afff1ef 100644 --- a/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php +++ b/datamodels/2.x/itop-portal-base/fr.dict.itop-portal-base.php @@ -114,5 +114,6 @@ Dict::Add('FR FR', 'French', 'Français', array( // CreateBrick brick Dict::Add('FR FR', 'French', 'Français', array( 'Brick:Portal:Create:Name' => 'Création rapide', + 'Brick:Portal:Create:ChooseType' => 'Veuillez choisir le type', )); -?> + diff --git a/datamodels/2.x/itop-portal-base/portal/src/controllers/createbrickcontroller.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/controllers/createbrickcontroller.class.inc.php index d5e3144f99..20de715a3d 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/controllers/createbrickcontroller.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/controllers/createbrickcontroller.class.inc.php @@ -22,8 +22,10 @@ namespace Combodo\iTop\Portal\Controller; use \Silex\Application; use \Symfony\Component\HttpFoundation\Request; use \Symfony\Component\HttpKernel\HttpKernelInterface; +use \MetaModel; use \Combodo\iTop\Portal\Helper\ApplicationHelper; use \Combodo\iTop\Portal\Helper\ContextManipulatorHelper; +use \Combodo\iTop\Portal\Helper\SecurityHelper; class CreateBrickController extends BrickController { @@ -31,28 +33,62 @@ class CreateBrickController extends BrickController public function DisplayAction(Request $oRequest, Application $oApp, $sBrickId) { $oBrick = ApplicationHelper::GetLoadedBrickFromId($oApp, $sBrickId); + $sObjectClass = $oBrick->GetClass(); $aRouteParams = array( 'sObjectClass' => $oBrick->GetClass() ); - // Preparing redirection route - // - Checking for action rules - $aRules = $oBrick->GetRules(); - if (!empty($aRules)) - { - $aRouteParams['ar_token'] = ContextManipulatorHelper::EncodeRulesToken($aRules); - } - // - Adding brick id to the params - $aRouteParams['sBrickId'] = $sBrickId; - // - Generating route - $sRedirectRoute = $oApp['url_generator']->generate('p_object_create', $aRouteParams); - // - Request - $oSubRequest = Request::create($sRedirectRoute, 'GET', $oRequest->query->all(), $oRequest->cookies->all(), array(), $oRequest->server->all()); - - return $oApp->handle($oSubRequest, HttpKernelInterface::SUB_REQUEST, true); + // Checking for actions rules + $aRules = $oBrick->GetRules(); + if (!empty($aRules)) + { + $aRouteParams['ar_token'] = ContextManipulatorHelper::EncodeRulesToken($aRules); + } + + // Checking if the target object class is asbtract or not + // - If is not abstract, we redirect to object creation form + if (!MetaModel::IsAbstract($sObjectClass)) + { + // Preparing redirection route + // - Adding brick id to the params + $aRouteParams['sBrickId'] = $sBrickId; + // - Generating route + $sRedirectRoute = $oApp['url_generator']->generate('p_object_create', $aRouteParams); + // - Request + $oSubRequest = Request::create($sRedirectRoute, 'GET', $oRequest->query->all(), $oRequest->cookies->all(), array(), $oRequest->server->all()); + + $oResponse = $oApp->handle($oSubRequest, HttpKernelInterface::SUB_REQUEST, true); + } + // - Else, we list the leaf classes as an intermediate step + else + { + $aData = array( + 'oBrick' => $oBrick, + 'sBrickId' => $sBrickId, + 'aLeafClasses' => array(), + 'ar_token' => $aRouteParams['ar_token'] + ); + + $aLeafClasses = array(); + $aChildClasses = MetaModel::EnumChildClasses($sObjectClass); + foreach ($aChildClasses as $sChildClass) + { + if (!MetaModel::IsAbstract($sChildClass) && SecurityHelper::IsActionAllowed($oApp, UR_ACTION_CREATE, $sChildClass)) + { + $aLeafClasses[] = array( + 'id' => $sChildClass, + 'name' => MetaModel::GetName($sChildClass) + ); + } + } + $aData['aLeafClasses'] = $aLeafClasses; + + $oResponse = $oApp['twig']->render($oBrick->GetPageTemplatePath(), $aData); + } + + return $oResponse; } } -?> \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php index cbbe2d5f5a..62bcb3a21d 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/entities/createbrick.class.inc.php @@ -32,6 +32,7 @@ class CreateBrick extends PortalBrick { const DEFAULT_HOME_ICON_CLASS = 'fa fa-plus'; const DEFAULT_NAVIGATION_MENU_ICON_CLASS = 'fa fa-plus fa-2x'; + const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/src/views/bricks/create/modal.html.twig'; const DEFAULT_CLASS = ''; static $sRouteName = 'p_create_brick'; @@ -131,5 +132,3 @@ class CreateBrick extends PortalBrick } } - -?> \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/routers/createbrickrouter.class.inc.php b/datamodels/2.x/itop-portal-base/portal/src/routers/createbrickrouter.class.inc.php index df61c7b5f1..6df68230ee 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/routers/createbrickrouter.class.inc.php +++ b/datamodels/2.x/itop-portal-base/portal/src/routers/createbrickrouter.class.inc.php @@ -30,5 +30,3 @@ class CreateBrickRouter extends AbstractRouter ); } - -?> \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig new file mode 100644 index 0000000000..c7d8f68540 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/views/bricks/create/modal.html.twig @@ -0,0 +1,47 @@ +{# itop-portal-base/portal/src/views/bricks/create/layout.html.twig #} +{# Create brick base layout #} +{% extends 'itop-portal-base/portal/src/views/modal/layout.html.twig' %} + +{% block pModalTitle %} + {{ oBrick.GetTitle()|dict_s }} +{% endblock %} + +{% block pModalBody %} +
{{ 'Brick:Portal:Create:ChooseType'|dict_s }}
+