N°8031 - Make all portal bricks use custom templates for all templates (#691)

* N°8031 - Make all portal bricks use custom templates for all templates

* Rename parameter following code review

* Add const variables following code review

* Modify method name following code review
This commit is contained in:
Stephen Abello
2024-12-18 11:03:52 +01:00
parent 2dffab9ca0
commit bbff0b72d3
14 changed files with 241 additions and 85 deletions

View File

@@ -65,6 +65,10 @@ abstract class AbstractBrick
const DEFAULT_ALLOWED_PROFILES_OQL = '';
/** @var string DEFAULT_DENIED_PROFILES_OQL */
const DEFAULT_DENIED_PROFILES_OQL = '';
/** @var array $DEFAULT_TEMPLATES_PATH */
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
];
/** @var string $sId */
protected $sId;
@@ -112,7 +116,7 @@ abstract class AbstractBrick
$this->bActive = static::DEFAULT_ACTIVE;
$this->bVisible = static::DEFAULT_VISIBLE;
$this->fRank = static::DEFAULT_RANK;
$this->sPageTemplatePath = static::DEFAULT_PAGE_TEMPLATE_PATH;
$this->sPageTemplatePath = static::$DEFAULT_TEMPLATES_PATH['page'];
$this->sTitle = static::DEFAULT_TITLE;
$this->sDescription = static::DEFAULT_DESCRIPTION;
$this->sDataLoading = static::DEFAULT_DATA_LOADING;
@@ -572,6 +576,20 @@ abstract class AbstractBrick
return ($this->sDescription !== null && $this->sDescription !== '');
}
/**
* @param $sTemplateId
* @param $sTemplatePath
*
* @return void
* @since 3.2.1
*/
public static function SetDefaultTemplatePath($sTemplateId, $sTemplatePath)
{
if(array_key_exists($sTemplateId, static::$DEFAULT_TEMPLATES_PATH)) {
static::$DEFAULT_TEMPLATES_PATH[$sTemplateId] = $sTemplatePath;
}
}
/**
* Load the brick's data from the xml passed as a ModuleDesignElement.
* This is used to set all the brick attributes at once.
@@ -665,14 +683,13 @@ abstract class AbstractBrick
* @param $aPortalProperties
*
* @return void
* @throws \DOMFormatException
* @since 3.2.1
*/
public function LoadFromPortalProperties($aPortalProperties)
public static function LoadClassDefinitionFromPortalProperties($aPortalProperties)
{
// Get the bricks templates
$aBricksTemplates = $aPortalProperties['templates']['bricks'];
$sClassFQCN = get_class($this);
$sClassFQCN = static::class;
// Get the current brick templates
$aCurrentBricksTemplates = array_key_exists($sClassFQCN, $aBricksTemplates) ? $aBricksTemplates[$sClassFQCN] : [];
@@ -681,16 +698,7 @@ abstract class AbstractBrick
$sTemplateId = str_ireplace($sClassFQCN.':', '', $sTemplateKey);
// Call the set method for the template
$sSetTemplateMethodName = 'Set'.$sTemplateId.'TemplatePath';
if(method_exists($this, $sSetTemplateMethodName)) {
$this->{$sSetTemplateMethodName}($sTemplate);
}
else {
throw new DOMFormatException(
'Template "'.$sTemplateId.'" is not a valid template for brick ' . $sClassFQCN,
null, null);
}
static::SetDefaultTemplatePath($sTemplateId, $sTemplate);
}
}
}

View File

@@ -39,7 +39,10 @@ class AggregatePageBrick extends PortalBrick
const DEFAULT_DECORATION_CLASS_HOME = 'fas fa-tachometer-alt';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'fas fa-tachometer-alt fa-2x';
const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/aggregate-page/layout.html.twig';
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
];
// Overloaded variables
public static $sRouteName = 'p_aggregatepage_brick';

View File

@@ -62,7 +62,7 @@ class BrickCollection
* @throws \Exception
* @since 3.2.1 Added $aCombodoPortalInstanceConf parameter
*/
public function __construct(ModuleDesign $oModuleDesign, $aCombodoPortalInstanceConf)
public function __construct(ModuleDesign $oModuleDesign, array $aCombodoPortalInstanceConf)
{
$this->oModuleDesign = $oModuleDesign;
$this->aAllowedBricks = null;
@@ -202,11 +202,12 @@ class BrickCollection
{
if (class_exists($sBrickClass))
{
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oBrick */
$oBrick = new $sBrickClass();
// Load the portal properties that are common to all bricks of this type
$oBrick->LoadFromPortalProperties($this->aCombodoPortalInstanceConf['properties']);
$sBrickClass::LoadClassDefinitionFromPortalProperties($this->aCombodoPortalInstanceConf['properties']);
/** @var \Combodo\iTop\Portal\Brick\PortalBrick $oBrick */
$oBrick = new $sBrickClass();
// Load the brick specific properties from its XML definition
$oBrick->LoadFromXml($oBrickNode);

View File

@@ -32,6 +32,13 @@ use Combodo\iTop\DesignElement;
*/
class BrowseBrick extends PortalBrick
{
/** @var string DEFAULT_PAGE_TEMPLATE_PATH */
const DEFAULT_MODE_LIST_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/browse/mode_list.html.twig';
/** @var string DEFAULT_MODE_MOSAIC_TEMPLATE_PATH */
const DEFAULT_MODE_MOSAIC_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/browse/mode_mosaic.html.twig';
/** @var string DEFAULT_MODE_TREE_TEMPLATE_PATH */
const DEFAULT_MODE_TREE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/browse/mode_tree.html.twig';
/** @var string ENUM_BROWSE_MODE_LIST */
const ENUM_BROWSE_MODE_LIST = 'list';
/** @var string ENUM_BROWSE_MODE_TREE */
@@ -77,6 +84,13 @@ class BrowseBrick extends PortalBrick
const DEFAULT_ACTION_OPENING_TARGET = self::ENUM_OPENING_TARGET_MODAL;
/** @var int DEFAULT_LIST_LENGTH */
const DEFAULT_LIST_LENGTH = 20;
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
'mode-list'=> self::DEFAULT_MODE_LIST_TEMPLATE_PATH,
'mode-mosaic'=> self::DEFAULT_MODE_MOSAIC_TEMPLATE_PATH,
'mode-tree'=> self::DEFAULT_MODE_TREE_TEMPLATE_PATH,
];
// Overloaded variables
public static $sRouteName = 'p_browse_brick';
@@ -359,7 +373,7 @@ class BrowseBrick extends PortalBrick
}
else
{
$sTemplatePath = 'itop-portal-base/portal/templates/bricks/browse/mode_'.$sModeId.'.html.twig';
$sTemplatePath = static::$DEFAULT_TEMPLATES_PATH['mode-'.$sModeId];
}
$aModeData['template'] = $sTemplatePath;

View File

@@ -36,7 +36,10 @@ class CreateBrick extends PortalBrick
const DEFAULT_DECORATION_CLASS_HOME = 'fas fa-plus';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'fas fa-plus fa-2x';
const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/create/modal.html.twig';
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
];
/** @var string DEFAULT_CLASS */
const DEFAULT_CLASS = '';

View File

@@ -37,7 +37,10 @@ class FilterBrick extends PortalBrick
const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/filter/tile.html.twig';
const DEFAULT_DECORATION_CLASS_HOME = 'fas fa-search';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'fas fa-search fa-2x';
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
];
/** @var string DEFAULT_TARGET_BRICK_CLASS */
const DEFAULT_TARGET_BRICK_CLASS = 'Combodo\\iTop\\Portal\\Brick\\BrowseBrick';
/** @var string DEFAULT_SEARCH_PLACEHOLDER_VALUE */

View File

@@ -63,6 +63,14 @@ class ManageBrick extends PortalBrick
const DEFAULT_DATA_LOADING = self::ENUM_DATA_LOADING_LAZY;
const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-default.html.twig';
const DEFAULT_TILE_CONTROLLER_ACTION = 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController::TileAction';
const DEFAULT_LAYOUT_CHART_TEMPLATE_PATH = self::ENUM_PAGE_TEMPLATE_PATH_CHART;
const DEFAULT_LAYOUT_TABLE_TEMPLATE_PATH = self::ENUM_PAGE_TEMPLATE_PATH_TABLE;
const DEFAULT_LAYOUT_BADGE_TEMPLATE_PATH = self::ENUM_PAGE_TEMPLATE_PATH_TABLE;
const DEFAULT_TILE_CHART_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-chart.html.twig';
const DEFAULT_TILE_TOP_LIST_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-top-list.html.twig';
const DEFAULT_TILE_BADGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-badge.html.twig';
const DEFAULT_TILE_DEFAULT_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/tile-default.html.twig';
const DEFAULT_POPUP_EXPORT_EXCEL_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/popup-export-excel.html.twig';
/** @var string DEFAULT_OQL */
const DEFAULT_OQL = '';
@@ -83,6 +91,19 @@ class ManageBrick extends PortalBrick
/** @var bool DEFAULT_GROUP_SHOW_OTHERS */
const DEFAULT_GROUP_SHOW_OTHERS = true;
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
'layout-chart' => self::DEFAULT_LAYOUT_CHART_TEMPLATE_PATH,
'layout-table' => self::DEFAULT_LAYOUT_TABLE_TEMPLATE_PATH,
'layout-badge' => self::DEFAULT_LAYOUT_BADGE_TEMPLATE_PATH,
'tile-chart' => self::DEFAULT_TILE_CHART_TEMPLATE_PATH,
'tile-top-list' => self::DEFAULT_TILE_TOP_LIST_TEMPLATE_PATH,
'tile-badge' => self::DEFAULT_TILE_BADGE_TEMPLATE_PATH,
'tile-default' => self::DEFAULT_TILE_DEFAULT_TEMPLATE_PATH,
'popup-export-excel' => self::DEFAULT_POPUP_EXPORT_EXCEL_TEMPLATE_PATH,
];
/** @var array $aDisplayModes */
static $aDisplayModes = array(
self::ENUM_DISPLAY_MODE_LIST,
@@ -97,44 +118,13 @@ class ManageBrick extends PortalBrick
self::ENUM_TILE_MODE_BAR,
self::ENUM_TILE_MODE_TOP,
);
/** Initialized in its getter as we need DEFAULT_TEMPLATE static values to be accessible */
/** @var array $aDefaultPresentationData */
private static $aDefaultPresentationData = [];
/** Specific data for the current brick, including brick definition overloads */
/** @var array $aPresentationData */
public static $aPresentationData = array(
self::ENUM_TILE_MODE_BADGE => array(
'decorationCssClass' => 'fas fa-id-card fa-2x',
'tileTemplate' => 'itop-portal-base/portal/templates/bricks/manage/tile-badge.html.twig',
'layoutTemplate' => self::ENUM_PAGE_TEMPLATE_PATH_TABLE,
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
self::ENUM_TILE_MODE_TOP => array(
'decorationCssClass' => 'fas fa-signal fa-rotate-270 fa-2x',
'tileTemplate' => 'itop-portal-base/portal/templates/bricks/manage/tile-top-list.html.twig',
'layoutTemplate' => self::ENUM_PAGE_TEMPLATE_PATH_TABLE,
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
self::ENUM_TILE_MODE_PIE => array(
'decorationCssClass' => 'fas fa-chart-pie fa-2x',
'tileTemplate' => 'itop-portal-base/portal/templates/bricks/manage/tile-chart.html.twig',
'layoutTemplate' => self::ENUM_PAGE_TEMPLATE_PATH_CHART,
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_PIE,
'need_details' => false,
),
self::ENUM_TILE_MODE_BAR => array(
'decorationCssClass' => 'fas fa-chart-bar fa-2x',
'tileTemplate' => 'itop-portal-base/portal/templates/bricks/manage/tile-chart.html.twig',
'layoutTemplate' => self::ENUM_PAGE_TEMPLATE_PATH_CHART,
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_BAR,
'need_details' => false,
),
self::ENUM_TILE_MODE_TEXT => array(
'decorationCssClass' => 'fas fa-pen-square fa-2x',
'tileTemplate' => self::DEFAULT_TILE_TEMPLATE_PATH,
'layoutTemplate' => self::ENUM_PAGE_TEMPLATE_PATH_TABLE,
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
);
public $aPresentationData = [];
// Overloaded variables
public static $sRouteName = 'p_manage_brick';
@@ -163,6 +153,8 @@ class ManageBrick extends PortalBrick
protected $bGroupShowOthers;
/** @var int $iDefaultListLength */
protected $iDefaultListLength;
/** @var string $sPopupExportExcelTemplatePath */
protected $sPopupExportExcelTemplatePath;
/**
* Returns true if the $sDisplayMode need objects details for rendering.
@@ -174,7 +166,7 @@ class ManageBrick extends PortalBrick
static public function AreDetailsNeededForDisplayMode($sDisplayMode)
{
$bNeedDetails = false;
foreach (static::$aPresentationData as $aData)
foreach (static::GetDefaultPresentationData() as $aData)
{
if ($aData['layoutDisplayMode'] === $sDisplayMode)
{
@@ -195,8 +187,8 @@ class ManageBrick extends PortalBrick
*/
static public function GetPageTemplateFromDisplayMode($sDisplayMode)
{
$sTemplate = static::DEFAULT_PAGE_TEMPLATE_PATH;
foreach (static::$aPresentationData as $aData)
$sTemplate = static::$DEFAULT_TEMPLATES_PATH['page'];
foreach (static::GetDefaultPresentationData() as $aData)
{
if ($aData['layoutDisplayMode'] === $sDisplayMode)
{
@@ -227,6 +219,7 @@ class ManageBrick extends PortalBrick
$this->iGroupLimit = static::DEFAULT_GROUP_LIMIT;
$this->bGroupShowOthers = static::DEFAULT_GROUP_SHOW_OTHERS;
$this->iDefaultListLength = static::DEFAULT_LIST_LENGTH;
$this->sPopupExportExcelTemplatePath = static::$DEFAULT_TEMPLATES_PATH['popup-export-excel'];
// This is hardcoded for now, we might allow area grouping on another attribute in the future
$this->AddGrouping('areas', array('attribute' => 'finalclass'));
@@ -328,7 +321,7 @@ class ManageBrick extends PortalBrick
public function GetDecorationCssClass()
{
return static::$aPresentationData[$this->sTileMode]['decorationCssClass'];
return static::GetDefaultPresentationData()[$this->sTileMode]['decorationCssClass'];
}
/**
* Sets the tile mode (display)
@@ -344,6 +337,52 @@ class ManageBrick extends PortalBrick
return $this;
}
public static function GetDefaultPresentationData()
{
/** If the table isn't initialized yet, do it now */
if (count(static::$aDefaultPresentationData) === 0) {
static::$aDefaultPresentationData = array(
self::ENUM_TILE_MODE_BADGE => array(
'decorationCssClass' => 'fas fa-id-card fa-2x',
'tileTemplate' => static::$DEFAULT_TEMPLATES_PATH['tile-badge'],
'layoutTemplate' => static::$DEFAULT_TEMPLATES_PATH['layout-table'],
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
self::ENUM_TILE_MODE_TOP => array(
'decorationCssClass' => 'fas fa-signal fa-rotate-270 fa-2x',
'tileTemplate' => static::$DEFAULT_TEMPLATES_PATH['tile-top-list'],
'layoutTemplate' => static::$DEFAULT_TEMPLATES_PATH['layout-table'],
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
self::ENUM_TILE_MODE_PIE => array(
'decorationCssClass' => 'fas fa-chart-pie fa-2x',
'tileTemplate' => static::$DEFAULT_TEMPLATES_PATH['tile-chart'],
'layoutTemplate' => static::$DEFAULT_TEMPLATES_PATH['layout-chart'],
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_PIE,
'need_details' => false,
),
self::ENUM_TILE_MODE_BAR => array(
'decorationCssClass' => 'fas fa-chart-bar fa-2x',
'tileTemplate' => static::$DEFAULT_TEMPLATES_PATH['tile-chart'],
'layoutTemplate' => static::$DEFAULT_TEMPLATES_PATH['layout-chart'],
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_BAR,
'need_details' => false,
),
self::ENUM_TILE_MODE_TEXT => array(
'decorationCssClass' => 'fas fa-pen-square fa-2x',
'tileTemplate' => static::$DEFAULT_TEMPLATES_PATH['tile-default'],
'layoutTemplate' => static::$DEFAULT_TEMPLATES_PATH['layout-table'],
'layoutDisplayMode' => self::ENUM_DISPLAY_MODE_LIST,
'need_details' => true,
),
);
}
return static::$aDefaultPresentationData;
}
/**
* @param string $sTileMode
*
@@ -351,12 +390,12 @@ class ManageBrick extends PortalBrick
*/
public function GetPresentationDataForTileMode($sTileMode)
{
if (isset(static::$aPresentationData[$sTileMode]))
if (isset(static::GetDefaultPresentationData()[$sTileMode]))
{
return static::$aPresentationData[$sTileMode];
return static::GetDefaultPresentationData()[$sTileMode];
}
return static::$aPresentationData[static::DEFAULT_TILE_MODE];
return static::GetDefaultPresentationData()[static::DEFAULT_TILE_MODE];
}
/**
@@ -467,6 +506,15 @@ class ManageBrick extends PortalBrick
return $this;
}
public function GetPopupExportExcelTemplatePath() {
return $this->sPopupExportExcelTemplatePath;
}
public function SetPopupExportExcelTemplatePath($sPopupExportExcelTemplatePath) {
$this->sPopupExportExcelTemplatePath = $sPopupExportExcelTemplatePath;
return $this;
}
/**
* Adds a grouping.
*
@@ -965,10 +1013,10 @@ class ManageBrick extends PortalBrick
// Checking the navigation icon
$sDecorationClassNavigationMenu = $this->GetDecorationClassNavigationMenu();
if (empty($sDecorationClassNavigationMenu) && isset(static::$aPresentationData[$this->sTileMode]))
if (empty($sDecorationClassNavigationMenu) && isset(static::GetDefaultPresentationData()[$this->sTileMode]))
{
/** @var string $sDecorationClassNavigationMenu */
$sDecorationClassNavigationMenu = static::$aPresentationData[$this->sTileMode]['decorationCssClass'];
$sDecorationClassNavigationMenu = static::GetDefaultPresentationData()[$this->sTileMode]['decorationCssClass'];
if (!empty($sDecorationClassNavigationMenu))
{
$this->SetDecorationClassNavigationMenu($sDecorationClassNavigationMenu);

View File

@@ -0,0 +1,59 @@
<?php
namespace Combodo\iTop\Portal\Brick;
/**
* Description of ObjectBrick
*
* @package Combodo\iTop\Portal\Brick
* @since 3.2.1
* @author Stephen Abello <stephen.abello@combodo.com>
*/
abstract class ObjectBrick extends AbstractBrick
{
/** @var string DEFAULT_PAGE_TEMPLATE_PATH */
const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/object/layout.html.twig';
/** @var string DEFAULT_MODAL_TEMPLATE_PATH */
const DEFAULT_MODAL_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/object/modal.html.twig';
/** @var string DEFAULT_MODE_LOADER_TEMPLATE_PATH */
const DEFAULT_MODE_LOADER_TEMPLATE_PATH = 'itop-portal-base/portal/templates/modal/mode_loader.html.twig';
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'modal' => self::DEFAULT_MODAL_TEMPLATE_PATH,
'mode_loader' => self::DEFAULT_MODE_LOADER_TEMPLATE_PATH,
];
/**
* @param $aCombodoPortalInstanceConf
*
* @return void
*/
public static function InitializeSelf($aCombodoPortalInstanceConf): void
{
static::LoadClassDefinitionFromPortalProperties($aCombodoPortalInstanceConf['properties']);
}
/**
* @return string
*/
public static function GetPageDefaultTemplatePath(): string
{
return static::$DEFAULT_TEMPLATES_PATH['page'];
}
/**
* @return string
*/
public static function GetModalDefaultTemplatePath(): string
{
return static::$DEFAULT_TEMPLATES_PATH['modal'];
}
/**
* @return string
*/
public static function GetModeLoaderDefaultTemplatePath(): string
{
return static::$DEFAULT_TEMPLATES_PATH['mode_loader'];
}
}

View File

@@ -63,6 +63,11 @@ abstract class PortalBrick extends AbstractBrick
/** @var string DEFAULT_OPENING_TARGET */
const DEFAULT_OPENING_TARGET = self::ENUM_OPENING_TARGET_MODAL;
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
];
/** @var string|null $sRouteName */
static $sRouteName = null;
/** @var array $aOpeningTargets */
@@ -121,7 +126,7 @@ abstract class PortalBrick extends AbstractBrick
$this->bVisibleNavigationMenu = static::DEFAULT_VISIBLE_NAVIGATION_MENU;
$this->sDecorationClassHome = static::DEFAULT_DECORATION_CLASS_HOME;
$this->sDecorationClassNavigationMenu = static::DEFAULT_DECORATION_CLASS_NAVIGATION_MENU;
$this->sTileTemplatePath = static::DEFAULT_TILE_TEMPLATE_PATH;
$this->sTileTemplatePath = static::$DEFAULT_TEMPLATES_PATH['tile'];
$this->sTileControllerAction = static::DEFAULT_TILE_CONTROLLER_ACTION;
$this->sOpeningTarget = static::DEFAULT_OPENING_TARGET;
}

View File

@@ -39,7 +39,10 @@ class UserProfileBrick extends PortalBrick
const DEFAUT_TITLE = 'Brick:Portal:UserProfile:Title';
const DEFAULT_DECORATION_CLASS_HOME = 'glyphicon glyphicon-user';
const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'glyphicon glyphicon-user';
protected static $DEFAULT_TEMPLATES_PATH = [
'page' => self::DEFAULT_PAGE_TEMPLATE_PATH,
'tile' => self::DEFAULT_TILE_TEMPLATE_PATH,
];
/** @var bool DEFAULT_SHOW_PICTURE_FORM */
const DEFAULT_SHOW_PICTURE_FORM = true;
/** @var bool DEFAULT_SHOW_PREFERENCES_FORM */

View File

@@ -70,7 +70,9 @@ use utils;
*/
class ManageBrickController extends BrickController
{
/** @var string EXCEL_EXPORT_TEMPLATE_PATH */
/** @var string EXCEL_EXPORT_TEMPLATE_PATH
* @deprecated since 3.2.1
*/
const EXCEL_EXPORT_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/manage/popup-export-excel.html.twig';
/**
@@ -281,7 +283,7 @@ class ManageBrickController extends BrickController
'sWikiUrl' => 'https://www.itophub.io/wiki/page?id='.utils::GetItopVersionWikiSyntax().'%3Auser%3Alists#excel_export',
);
return $this->render(static::EXCEL_EXPORT_TEMPLATE_PATH, $aData);
return $this->render($oBrick->GetPopupExportExcelTemplatePath(), $aData);
}
/**

View File

@@ -29,6 +29,7 @@ use BinaryExpression;
use Combodo\iTop\Form\Field\DateTimeField;
use Combodo\iTop\Portal\Brick\BrickCollection;
use Combodo\iTop\Portal\Brick\CreateBrick;
use Combodo\iTop\Portal\Brick\ObjectBrick;
use Combodo\iTop\Portal\Helper\ApplicationHelper;
use Combodo\iTop\Portal\Helper\ContextManipulatorHelper;
use Combodo\iTop\Portal\Helper\NavigationRuleHelper;
@@ -82,8 +83,11 @@ class ObjectController extends BrickController
* @param \Combodo\iTop\Portal\Brick\BrickCollection $oBrickCollection
* @param \Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper $oObjectFormHandlerHelper
* @param \Combodo\iTop\Portal\Helper\NavigationRuleHelper $oNavigationRuleHelper
* @param \Combodo\iTop\Portal\Helper\ContextManipulatorHelper $oContextManipulatorHelper
* @param array $aCombodoPortalInstanceConf
*
* @since 3.2.0 N°6933
* @since 3.2.1 Added $aCombodoPortalInstanceConf parameter
*/
public function __construct(
protected SecurityHelper $oSecurityHelper,
@@ -93,10 +97,11 @@ class ObjectController extends BrickController
protected BrickCollection $oBrickCollection,
protected ObjectFormHandlerHelper $oObjectFormHandlerHelper,
protected NavigationRuleHelper $oNavigationRuleHelper,
protected ContextManipulatorHelper $oContextManipulatorHelper
protected ContextManipulatorHelper $oContextManipulatorHelper,
protected array $aCombodoPortalInstanceConf
)
{
ObjectBrick::InitializeSelf($this->aCombodoPortalInstanceConf);
}
/**
@@ -232,7 +237,7 @@ class ObjectController extends BrickController
if ($oRequest->isXmlHttpRequest()) {
// We have to check whether the 'operation' parameter is defined or not in order to know if the form is required via ajax (to be displayed as a modal dialog) or if it's a lifecycle call from a existing form.
if (empty($sOperation)) {
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/modal.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModalDefaultTemplatePath(), $aData);
} else {
$oResponse = new JsonResponse($aData);
}
@@ -246,7 +251,7 @@ class ObjectController extends BrickController
}
}
$aData['sPageTitle'] = $aData['form']['title'];
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/layout.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetPageDefaultTemplatePath(), $aData);
}
return $oResponse;
@@ -307,7 +312,7 @@ class ObjectController extends BrickController
// We have to check whether the 'operation' parameter is defined or not in order to know if the form is required via ajax (to be displayed as a modal dialog) or if it's a lifecycle call from a existing form.
if (empty($sOperation))
{
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/modal.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModalDefaultTemplatePath(), $aData);
}
else
{
@@ -327,7 +332,7 @@ class ObjectController extends BrickController
}
}
$aData['sPageTitle'] = $aData['form']['title'];
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/layout.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetPageDefaultTemplatePath(), $aData);
}
return $oResponse;
@@ -534,11 +539,11 @@ class ObjectController extends BrickController
// We have to check whether the 'operation' parameter is defined or not in order to know if the form is required via ajax (to be displayed as a modal dialog) or if it's a lifecycle call from a existing form.
if (empty($sOperation))
{
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/modal.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModalDefaultTemplatePath(), $aData);
}
elseif ($sOperation === 'redirect')
{
$oResponse = $this->render('itop-portal-base/portal/templates/modal/mode_loader.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModeLoaderDefaultTemplatePath(), $aData);
}
else
{
@@ -547,7 +552,7 @@ class ObjectController extends BrickController
}
else
{
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/layout.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetPageDefaultTemplatePath(), $aData);
}
return $oResponse;
@@ -1011,12 +1016,12 @@ class ObjectController extends BrickController
if ($oRequest->isXmlHttpRequest())
{
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/modal.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModalDefaultTemplatePath(), $aData);
}
else
{
//throw new HttpException(Response::HTTP_NOT_FOUND, Dict::S('UI:ObjectDoesNotExist'));
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/layout.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetPageDefaultTemplatePath(), $aData);
}
}
else
@@ -1597,7 +1602,7 @@ class ObjectController extends BrickController
// We have to check whether the 'operation' parameter is defined or not in order to know if the form is required via ajax (to be displayed as a modal dialog) or if it's a lifecycle call from a existing form.
if (empty($sOperation))
{
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/modal.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetModalDefaultTemplatePath(), $aData);
}
else
{
@@ -1617,7 +1622,7 @@ class ObjectController extends BrickController
}
}
$aData['sPageTitle'] = $aData['form']['title'];
$oResponse = $this->render('itop-portal-base/portal/templates/bricks/object/layout.html.twig', $aData);
$oResponse = $this->render(ObjectBrick::GetPageDefaultTemplatePath(), $aData);
}
return $oResponse;

View File

@@ -14,6 +14,7 @@ return array(
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => $baseDir . '/src/Brick/CreateBrick.php',
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => $baseDir . '/src/Brick/FilterBrick.php',
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => $baseDir . '/src/Brick/ManageBrick.php',
'Combodo\\iTop\\Portal\\Brick\\ObjectBrick' => $baseDir . '/src/Brick/ObjectBrick.php',
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => $baseDir . '/src/Brick/PortalBrick.php',
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => $baseDir . '/src/Brick/PropertyNotFoundException.php',
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => $baseDir . '/src/Brick/UserProfileBrick.php',

View File

@@ -34,6 +34,7 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b
'Combodo\\iTop\\Portal\\Brick\\CreateBrick' => __DIR__ . '/../..' . '/src/Brick/CreateBrick.php',
'Combodo\\iTop\\Portal\\Brick\\FilterBrick' => __DIR__ . '/../..' . '/src/Brick/FilterBrick.php',
'Combodo\\iTop\\Portal\\Brick\\ManageBrick' => __DIR__ . '/../..' . '/src/Brick/ManageBrick.php',
'Combodo\\iTop\\Portal\\Brick\\ObjectBrick' => __DIR__ . '/../..' . '/src/Brick/ObjectBrick.php',
'Combodo\\iTop\\Portal\\Brick\\PortalBrick' => __DIR__ . '/../..' . '/src/Brick/PortalBrick.php',
'Combodo\\iTop\\Portal\\Brick\\PropertyNotFoundException' => __DIR__ . '/../..' . '/src/Brick/PropertyNotFoundException.php',
'Combodo\\iTop\\Portal\\Brick\\UserProfileBrick' => __DIR__ . '/../..' . '/src/Brick/UserProfileBrick.php',