diff --git a/datamodels/2.x/itop-portal-base/portal/src/Brick/UserProfileBrick.php b/datamodels/2.x/itop-portal-base/portal/src/Brick/UserProfileBrick.php index ac5716533..6b4fdb691 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Brick/UserProfileBrick.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Brick/UserProfileBrick.php @@ -19,33 +19,33 @@ namespace Combodo\iTop\Portal\Brick; -use DOMFormatException; use Combodo\iTop\DesignElement; +use DOMFormatException; /** * Description of UserProfileBrick - * - * @package Combodo\iTop\Portal\Brick - * @since 2.7.0 + * * @author Guillaume Lajarige + * @since 2.7.0 + * @package Combodo\iTop\Portal\Brick */ class UserProfileBrick extends PortalBrick { // Overloaded constants - const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig'; - const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/user-profile/tile.html.twig'; - const DEFAULT_VISIBLE_NAVIGATION_MENU = false; - const DEFAULT_VISIBLE_HOME = false; - const DEFAUT_TITLE = 'Brick:Portal:UserProfile:Title'; - const DEFAULT_DECORATION_CLASS_HOME = 'glyphicon glyphicon-user'; + const DEFAULT_PAGE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig'; + const DEFAULT_TILE_TEMPLATE_PATH = 'itop-portal-base/portal/templates/bricks/user-profile/tile.html.twig'; + const DEFAULT_VISIBLE_NAVIGATION_MENU = false; + const DEFAULT_VISIBLE_HOME = false; + const DEFAUT_TITLE = 'Brick:Portal:UserProfile:Title'; + const DEFAULT_DECORATION_CLASS_HOME = 'glyphicon glyphicon-user'; const DEFAULT_DECORATION_CLASS_NAVIGATION_MENU = 'glyphicon glyphicon-user'; /** @var bool DEFAULT_SHOW_PICTURE_FORM */ const DEFAULT_SHOW_PICTURE_FORM = true; /** @var bool DEFAULT_SHOW_PREFERENCES_FORM */ - const DEFAULT_SHOW_PREFERENCES_FORM = true; - /** @var bool DEFAULT_SHOW_PASSWORD_FORM */ - const DEFAULT_SHOW_PASSWORD_FORM = true; + const DEFAULT_SHOW_PREFERENCES_FORM = true; + /** @var bool DEFAULT_SHOW_PASSWORD_FORM */ + const DEFAULT_SHOW_PASSWORD_FORM = true; // Overloaded variables static $sRouteName = 'p_user_profile_brick'; @@ -67,8 +67,8 @@ class UserProfileBrick extends PortalBrick parent::__construct(); $this->aForm = array( - 'id' => 'default-user-profile', - 'type' => 'zlist', + 'id' => 'default-user-profile', + 'type' => 'zlist', 'fields' => 'details', 'layout' => null, ); @@ -89,67 +89,75 @@ class UserProfileBrick extends PortalBrick /** * * @param array $aForm + * * @return \Combodo\iTop\Portal\Brick\UserProfileBrick */ public function SetForm($aForm) { $this->aForm = $aForm; + return $this; } - /** - * @return bool - */ - public function GetShowPictureForm() - { - return $this->bShowPictureForm; - } + /** + * @return bool + */ + public function GetShowPictureForm() + { + return $this->bShowPictureForm; + } - /** - * @param $bShowPictureForm - * @return \Combodo\iTop\Portal\Brick\UserProfileBrick - */ - public function SetShowPictureForm($bShowPictureForm) - { - $this->bShowPictureForm = $bShowPictureForm; - return $this; - } + /** + * @param $bShowPictureForm + * + * @return \Combodo\iTop\Portal\Brick\UserProfileBrick + */ + public function SetShowPictureForm($bShowPictureForm) + { + $this->bShowPictureForm = $bShowPictureForm; - /** - * @return bool - */ - public function GetShowPreferencesForm() - { - return $this->bShowPreferencesForm; - } + return $this; + } - /** - * @param $bShowPreferencesForm - * @return \Combodo\iTop\Portal\Brick\UserProfileBrick - */ - public function SetShowPreferencesForm($bShowPreferencesForm) - { - $this->bShowPreferencesForm = $bShowPreferencesForm; - return $this; - } + /** + * @return bool + */ + public function GetShowPreferencesForm() + { + return $this->bShowPreferencesForm; + } - /** - * @return bool - */ - public function GetShowPasswordForm() - { - return $this->bShowPasswordForm; - } + /** + * @param $bShowPreferencesForm + * + * @return \Combodo\iTop\Portal\Brick\UserProfileBrick + */ + public function SetShowPreferencesForm($bShowPreferencesForm) + { + $this->bShowPreferencesForm = $bShowPreferencesForm; - /** - * @param $bShowPasswordForm - * @return \Combodo\iTop\Portal\Brick\UserProfileBrick - */ - public function SetShowPasswordForm($bShowPasswordForm) - { - $this->bShowPasswordForm = $bShowPasswordForm; - return $this; - } + return $this; + } + + /** + * @return bool + */ + public function GetShowPasswordForm() + { + return $this->bShowPasswordForm; + } + + /** + * @param $bShowPasswordForm + * + * @return \Combodo\iTop\Portal\Brick\UserProfileBrick + */ + public function SetShowPasswordForm($bShowPasswordForm) + { + $this->bShowPasswordForm = $bShowPasswordForm; + + return $this; + } /** * Load the brick's data from the xml passed as a ModuleDesignElement. @@ -167,50 +175,39 @@ class UserProfileBrick extends PortalBrick // Checking specific elements /** @var \Combodo\iTop\DesignElement $oBrickSubNode */ - foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode) - { - switch ($oBrickSubNode->nodeName) - { + foreach ($oMDElement->GetNodes('./*') as $oBrickSubNode) { + switch ($oBrickSubNode->nodeName) { case 'form': // Note : This is inspired by Combodo\iTop\Portal\Helper\ApplicationHelper::LoadFormsConfiguration() // Enumerating fields - if ($oBrickSubNode->GetOptionalElement('fields') !== null) - { + if ($oBrickSubNode->GetOptionalElement('fields') !== null) { $this->aForm['type'] = 'custom_list'; $this->aForm['fields'] = array(); /** @var \Combodo\iTop\DesignElement $oFieldNode */ - foreach ($oBrickSubNode->GetOptionalElement('fields')->GetNodes('field') as $oFieldNode) - { + foreach ($oBrickSubNode->GetOptionalElement('fields')->GetNodes('field') as $oFieldNode) { $sFieldId = $oFieldNode->getAttribute('id'); - if ($sFieldId !== '') - { + if ($sFieldId !== '') { $aField = array(); // Parsing field options like read_only, hidden and mandatory - if ($oFieldNode->GetOptionalElement('read_only')) - { + if ($oFieldNode->GetOptionalElement('read_only')) { $aField['readonly'] = ($oFieldNode->GetOptionalElement('read_only')->GetText('true') === 'true') ? true : false; } - if ($oFieldNode->GetOptionalElement('mandatory')) - { + if ($oFieldNode->GetOptionalElement('mandatory')) { $aField['mandatory'] = ($oFieldNode->GetOptionalElement('mandatory')->GetText('true') === 'true') ? true : false; } - if ($oFieldNode->GetOptionalElement('hidden')) - { + if ($oFieldNode->GetOptionalElement('hidden')) { $aField['hidden'] = ($oFieldNode->GetOptionalElement('hidden')->GetText('true') === 'true') ? true : false; } $this->aForm['fields'][$sFieldId] = $aField; - } - else - { + } else { throw new DOMFormatException('Field tag must have an id attribute', null, null, $oFieldNode); } } } // Parsing presentation - if ($oBrickSubNode->GetOptionalElement('twig') !== null) - { + if ($oBrickSubNode->GetOptionalElement('twig') !== null) { // Extracting the twig template and removing the first and last lines (twig tags) $sXml = $oBrickSubNode->GetOptionalElement('twig')->Dump(true); //$sXml = $oMDElement->saveXML($oBrickSubNode->GetOptionalElement('twig')); @@ -218,25 +215,24 @@ class UserProfileBrick extends PortalBrick $sXml = preg_replace('/\n.+$/', '', $sXml); $this->aForm['layout'] = array( - 'type' => (preg_match('/\{\{|\{\#|\{\%/', $sXml) === 1) ? 'twig' : 'xhtml', + 'type' => (preg_match('/\{\{|\{\#|\{\%/', $sXml) === 1) ? 'twig' : 'xhtml', 'content' => $sXml, ); } break; - case 'show_picture_form': - case 'show_preferences_form': - case 'show_password_form': - $sConstName = 'DEFAULT_'.strtoupper($oBrickSubNode->nodeName); - $sSetterName = 'Set'.str_replace('_', '', ucwords($oBrickSubNode->nodeName, '_')); + case 'show_picture_form': + case 'show_preferences_form': + case 'show_password_form': + $sConstName = 'DEFAULT_'.strtoupper($oBrickSubNode->nodeName); + $sSetterName = 'Set'.str_replace('_', '', ucwords($oBrickSubNode->nodeName, '_')); - $bNodeValue = ($oBrickSubNode->GetText(constant('static::'.$sConstName)) === 'true') ? true : false; - $this->$sSetterName($bNodeValue); - break; + $bNodeValue = ($oBrickSubNode->GetText(constant('static::'.$sConstName)) === 'true') ? true : false; + $this->$sSetterName($bNodeValue); + break; } } return $this; } - } diff --git a/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php b/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php index 75055eb2a..3d5e3ca23 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Controller/UserProfileBrickController.php @@ -24,8 +24,13 @@ use Combodo\iTop\Portal\Brick\BrickCollection; use Combodo\iTop\Portal\Brick\UserProfileBrick; use Combodo\iTop\Portal\Form\PasswordFormManager; use Combodo\iTop\Portal\Form\PreferencesFormManager; +use Combodo\iTop\Portal\Helper\ExtensibilityHelper; use Combodo\iTop\Portal\Helper\ObjectFormHandlerHelper; use Combodo\iTop\Portal\Helper\RequestManipulatorHelper; +use Combodo\iTop\Portal\Hook\iAbstractPortalTabContentExtension; +use Combodo\iTop\Portal\Hook\iAbstractPortalTabExtension; +use Combodo\iTop\Portal\Hook\iUserProfileTabContentExtension; +use Combodo\iTop\Portal\Hook\iUserProfileTabExtension; use Combodo\iTop\Portal\Routing\UrlGenerator; use Combodo\iTop\Renderer\Bootstrap\BsFormRenderer; use Exception; @@ -106,56 +111,60 @@ class UserProfileBrickController extends BrickController $oBrick = $this->oBrickCollection->GetBrickById($sBrickId); } - $aData = array(); + $aData = []; // Setting form mode regarding the demo mode parameter $bDemoMode = MetaModel::GetConfig()->Get('demo_mode'); $sFormMode = ($bDemoMode) ? ObjectFormHandlerHelper::ENUM_MODE_VIEW : ObjectFormHandlerHelper::ENUM_MODE_EDIT; + $sTab = $this->oRequestManipulatorHelper->ReadParam('sTab', 'user-info', FILTER_UNSAFE_RAW, FILTER_FLAG_EMPTY_STRING_NULL); + // If this is ajax call, we are just submitting preferences or password forms if ($oRequest->isXmlHttpRequest()) { - $aCurrentValues = $this->oRequestManipulatorHelper->ReadParam('current_values', array(), FILTER_UNSAFE_RAW, FILTER_REQUIRE_ARRAY); - $sFormType = $aCurrentValues['form_type']; - if ($sFormType === PreferencesFormManager::FORM_TYPE) - { - $aData['form'] = $this->HandlePreferencesForm($oRequest, $sFormMode); - } - elseif ($sFormType === PasswordFormManager::FORM_TYPE) - { - $aData['form'] = $this->HandlePasswordForm($oRequest, $sFormMode); - } - elseif ($sFormType === static::ENUM_FORM_TYPE_PICTURE) - { - $aData['form'] = $this->HandlePictureForm($oRequest); - } - else - { - throw new Exception('Unknown form type.'); + if ($sTab === "user-info") { + $aCurrentValues = $this->oRequestManipulatorHelper->ReadParam('current_values', array(), FILTER_UNSAFE_RAW, + FILTER_REQUIRE_ARRAY); + $sFormType = $aCurrentValues['form_type']; + if ($sFormType === PreferencesFormManager::FORM_TYPE) { + $aData['form'] = $this->HandlePreferencesForm($oRequest, $sFormMode); + } elseif ($sFormType === PasswordFormManager::FORM_TYPE) { + $aData['form'] = $this->HandlePasswordForm($oRequest, $sFormMode); + } elseif ($sFormType === static::ENUM_FORM_TYPE_PICTURE) { + $aData['form'] = $this->HandlePictureForm($oRequest); + } else { + throw new Exception('Unknown form type.'); + } } + $oResponse = new JsonResponse($aData); } // Else, we are displaying page for first time else { - // Retrieving current contact - /** @var \DBObject $oCurContact */ - $oCurContact = UserRights::GetContactObject(); - $sCurContactClass = get_class($oCurContact); - $sCurContactId = $oCurContact->GetKey(); + if ($sTab === "user-info") { + // Retrieving current contact + /** @var \DBObject $oCurContact */ + $oCurContact = UserRights::GetContactObject(); + $sCurContactClass = get_class($oCurContact); + $sCurContactId = $oCurContact->GetKey(); - // Preparing forms - $aData['forms']['contact'] = $this->ObjectFormHandlerHelper->HandleForm($oRequest, $sFormMode, $sCurContactClass, $sCurContactId, - $oBrick->GetForm()); - $aData['forms']['preferences'] = $this->HandlePreferencesForm($oRequest, $sFormMode); - // - If user can change password, we display the form - $aData['forms']['password'] = (UserRights::CanChangePassword()) ? $this->HandlePasswordForm($oRequest, $sFormMode) : null; + // Preparing forms + $aData['forms']['contact'] = $this->ObjectFormHandlerHelper->HandleForm($oRequest, $sFormMode, $sCurContactClass, + $sCurContactId, + $oBrick->GetForm()); + $aData['forms']['preferences'] = $this->HandlePreferencesForm($oRequest, $sFormMode); + // - If user can change password, we display the form + $aData['forms']['password'] = (UserRights::CanChangePassword()) ? $this->HandlePasswordForm($oRequest, $sFormMode) : null; + } - $aData = $aData + array( + $aData = $aData + [ 'oBrick' => $oBrick, 'sFormMode' => $sFormMode, 'bDemoMode' => $bDemoMode, - ); + ]; + + $this->ManageUserProfileBrickExtensibility($sTab, $aData); $oResponse = $this->render($oBrick->GetPageTemplatePath(), $aData); } @@ -163,6 +172,46 @@ class UserProfileBrickController extends BrickController return $oResponse; } + + private function ManageUserProfileBrickExtensibility(string $sTab, array &$aData): void + { + $aData['sTab'] = $sTab; + + // Read the tabs From iPortalTabExtension + $aTabExtensions = ExtensibilityHelper::GetInstance()->GetPortalTabExtensions(iUserProfileTabExtension::class); + + /** @var iAbstractPortalTabExtension $oPortalTabExtension */ + foreach ($aTabExtensions as $oPortalTabExtension) { + $aData['aTabsValues'][] = [ + 'code' => $oPortalTabExtension->GetTabCode(), + 'label' => $oPortalTabExtension->GetTabLabel(), + ]; + } + + // Read the current tab content From iPortalTabSectionExtension + $aTabSectionExtensions = ExtensibilityHelper::GetInstance()->GetPortalTabContentExtensions(iUserProfileTabContentExtension::class, $sTab); + if (count($aTabSectionExtensions) !== 0 && count($_POST) !== 0){ + $sTransactionId = utils::ReadPostedParam('transaction_id', null, utils::ENUM_SANITIZATION_FILTER_TRANSACTION_ID); + IssueLog::Debug(__FUNCTION__.": transaction [$sTransactionId]"); + if (utils::IsNullOrEmptyString($sTransactionId) || !utils::IsTransactionValid($sTransactionId, false)) { + throw new Exception(\Dict::S('iTopUpdate:Error:InvalidToken')); + } + } + + $aData['sTransactionId'] = utils::GetNewTransactionId(); + + /** @var iAbstractPortalTabContentExtension $oPortalTabSectionExtension */ + foreach ($aTabSectionExtensions as $oPortalTabSectionExtension) { + $oPortalTabSectionExtension->HandlePortalForm($aData); + } + + $aData['aPluginFormData'] = []; + foreach ($aTabSectionExtensions as $oPortalTabSectionExtension) { + $aData['aPluginFormData'][] = $oPortalTabSectionExtension->GetPortalTabContentTwigs(); + } + } + + /** * @param \Symfony\Component\HttpFoundation\Request $oRequest * @param string $sFormMode @@ -173,8 +222,6 @@ class UserProfileBrickController extends BrickController */ public function HandlePreferencesForm(Request $oRequest, $sFormMode) { - - $aFormData = array(); // Handling form @@ -393,5 +440,4 @@ class UserProfileBrickController extends BrickController return $aFormData; } - } diff --git a/datamodels/2.x/itop-portal-base/portal/src/Helper/ExtensibilityHelper.php b/datamodels/2.x/itop-portal-base/portal/src/Helper/ExtensibilityHelper.php new file mode 100644 index 000000000..dc32ad9fc --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/Helper/ExtensibilityHelper.php @@ -0,0 +1,96 @@ +FindItopClasses($sPortalTabExtensionInterface) as $sPortalTabExtension) { + $oPortalTabExtension = new $sPortalTabExtension(); + if ($oPortalTabExtension->IsTabPresent()) { + $aTabExtensions[] = $oPortalTabExtension; + } + } + usort($aTabExtensions, function (iAbstractPortalTabExtension $a, iAbstractPortalTabExtension $b) { + return $a->GetTabRank() - $b->GetTabRank(); + }); + + return $aTabExtensions; + } + + /** + * Instantiate all the classes implementing the given interface for the given tab + * + * @param string $sPortalTabSectionExtensionInterface Extensibility interface to search for (derived from iAbstractPortalTabContentExtension) + * @param string $sTab Tab code + * + * @return array[iPortalTabContentExtension] array of objects implementing the given interface + */ + public function GetPortalTabContentExtensions(string $sPortalTabSectionExtensionInterface, string $sTab): array + { + $aTabSectionExtensions = []; + foreach (InterfaceDiscovery::GetInstance()->FindItopClasses($sPortalTabSectionExtensionInterface) as $sPortalTabSectionExtension) { + $oPortalTabSectionExtension = new $sPortalTabSectionExtension(); + if (!$oPortalTabSectionExtension->IsActive()) { + continue; + } + + if ($oPortalTabSectionExtension->GetTabCode() !== $sTab) { + continue; + } + $aTabSectionExtensions[] = $oPortalTabSectionExtension; + } + + usort($aTabSectionExtensions, function (iAbstractPortalTabContentExtension $a, iAbstractPortalTabContentExtension $b) { + return $a->GetSectionRank() - $b->GetSectionRank(); + }); + + return $aTabSectionExtensions; + } +} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/src/Hook/iAbstractPortalTabContentExtension.php b/datamodels/2.x/itop-portal-base/portal/src/Hook/iAbstractPortalTabContentExtension.php new file mode 100644 index 000000000..8fa7027e1 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/Hook/iAbstractPortalTabContentExtension.php @@ -0,0 +1,73 @@ +sTwig = $sTwig; + $this->aData = $aData; + } + + /** + * Used by twig templates to get the name of the template to render. + * + * @return string twig template to render + * + * @api + * + * @since iTop 3.2.1 + */ + public function GetTwig(): string + { + return $this->sTwig; + } + + /** + * Used by twig templates to get the data for the template to render. + * + * @return array Data used to render the template + * + * @api + * + * @since iTop 3.2.1 + */ + public function GetData(): array + { + $this->aData['sTransactionId'] = utils::GetNewTransactionId(); + return $this->aData; + } +} diff --git a/datamodels/2.x/itop-portal-base/portal/src/Twig/PortalTwigContext.php b/datamodels/2.x/itop-portal-base/portal/src/Twig/PortalTwigContext.php new file mode 100644 index 000000000..978a12166 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/src/Twig/PortalTwigContext.php @@ -0,0 +1,61 @@ +aBlockExtension = []; + } + + /** + * Add a Twig block extension. + * This method is used by extensions to provide templates. + * + * @api + * + * @param PortalBlockExtension $oBlockExtension Entity containing a twig template and associated data + * @param string $sBlockName Name of the block where to add the twig + * + * @since iTop 3.2.1 + */ + function AddBlockExtension(string $sBlockName, PortalBlockExtension $oBlockExtension): void + { + $this->aBlockExtension[$sBlockName] = $oBlockExtension; + } + + /** + * Get all the templates to render for a given block. + * This method is used by twig templates to render extensions. + * + * @api + * + * @param string $sBlockName Name of the block currently rendered + * + * @return \Combodo\iTop\Portal\Twig\PortalBlockExtension|null + * + * @since iTop 3.2.1 + */ + public function GetBlockExtension(string $sBlockName): ?PortalBlockExtension + { + /** @var PortalBlockExtension $oBlockExtension */ + $oBlockExtension = $this->aBlockExtension[$sBlockName] ?? null; + return $oBlockExtension; + } +} \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig index e482db0b6..f27c5d559 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/layout.html.twig @@ -2,9 +2,9 @@ {# User profile brick base layout #} {% extends 'itop-portal-base/portal/templates/bricks/layout.html.twig' %} -{% set oContactForm = forms.contact %} -{% set oPreferencesForm = forms.preferences %} -{% set oPasswordForm = forms.password %} +{% if sTab == "" %} + {% set sTab = "user-info" %} +{% endif %} {% block pPageBodyClass %}{{ parent() }} page_user-profile_brick{% endblock %} @@ -20,228 +20,82 @@ {% endif %} -
- {% block pUserProfileWrapper %} -
-
-
-
-

{{ 'Brick:Portal:UserProfile:PersonalInformations:Title'|dict_s }}

-
-
-
- -
- - - -
-
- {{ oContactForm.renderer.GetBaseLayout()|raw }} -
-
-
-
-
-
- {% if oBrick.GetShowPictureForm() %} - {% block pUserProfilePictureFormContainer %} - - {% endblock %} - {% endif %} +
+ {% if sMessage is defined %} + + {% else %} + + {% endif %} - {% if oBrick.GetShowPreferencesForm() %} - {% block pUserProfilePreferencesFormContainer %} -
-
-

{{ 'Class:appUserPreferences/Attribute:preferences'|dict_s }}

-
-
-
-
- - - -
-
- {{ oPreferencesForm.renderer.GetBaseLayout()|raw }} -
-
-
-
- {% endblock %} - {% endif %} + {% if sError is defined %} + + {% else %} + + {% endif %} +
+ + + + {% if sTab == "user-info" %} + {% set oContactForm = forms.contact %} + {% set oPreferencesForm = forms.preferences %} + {% set oPasswordForm = forms.password %} + {% include 'itop-portal-base/portal/templates/bricks/user-profile/user_info.html.twig' %} + {% else %} +
+
+ {% import "itop-portal-base/portal/templates/helpers/macros.twig" as Macro %} + {{ Macro.BlockExtension(aPluginFormData, 'html', oBrick) }} +
+
+ {% endif %} - {% if oBrick.GetShowPasswordForm() %} - {% block pUserProfilePasswordFormContainer %} -
-
-

{{ 'Brick:Portal:UserProfile:Password:Title'|dict_s }}

-
-
- {% if oPasswordForm is not null %} -
-
- - - -
-
- {{ oPasswordForm.renderer.GetBaseLayout()|raw }} -
-
- {% else %} - {{ 'Brick:Portal:UserProfile:Password:CantChangeContactAdministrator'|dict_format(constant('ITOP_APPLICATION_SHORT')) }} - {% endif %} -
-
- {% endblock %} - {% endif %} -
-
-
- {% block pUserProfileFormButtons %} -
- {% if sFormMode == constant('\\Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper::ENUM_MODE_EDIT') %} - - {% endif %} -
- {% endblock %} -
- {% endblock %} -
{% endblock %} {% block pPageReadyScripts %} {{ parent() }} + {% import "itop-portal-base/portal/templates/helpers/macros.twig" as Macro %} + {{ Macro.BlockExtension(aPluginFormData, 'ready_script', oBrick) }} - // Personal informations form - var oContactFormFieldSet = $('#{{ oContactForm.id }} > .form_fields').field_set({{ oContactForm.fieldset|json_encode()|raw }}); - $('#{{ oContactForm.id }}').portal_form_handler({ - formmanager_class: "{{ oContactForm.formmanager_class|escape('js') }}", - formmanager_data: {{ oContactForm.formmanager_data|json_encode()|raw }}, - field_set: oContactFormFieldSet, - endpoint: "{{ oContactForm.renderer.GetEndpoint()|raw }}" - }); - - // Preferences form - var oPreferencesFormFieldSet = $('#{{ oPreferencesForm.id }} > .form_fields').field_set({{ oPreferencesForm.fieldset|json_encode()|raw }}); - $('#{{ oPreferencesForm.id }}').portal_form_handler({ - formmanager_class: "{{ oPreferencesForm.formmanager_class|escape('js') }}", - formmanager_data: {{ oPreferencesForm.formmanager_data|json_encode()|raw }}, - field_set: oPreferencesFormFieldSet, - endpoint: "{{ oPreferencesForm.renderer.GetEndpoint()|raw }}" - }); - - {% if oPasswordForm is not null %} - // Password form - var oPasswordFormFieldSet = $('#{{ oPasswordForm.id }} > .form_fields').field_set({{ oPasswordForm.fieldset|json_encode()|raw }}); - $('#{{ oPasswordForm.id }}').portal_form_handler({ - formmanager_class: "{{ oPasswordForm.formmanager_class|escape('js') }}", - formmanager_data: {{ oPasswordForm.formmanager_data|json_encode()|raw }}, - field_set: oPasswordFormFieldSet, - endpoint: "{{ oPasswordForm.renderer.GetEndpoint()|raw }}" - }); + {% if sTab == "" %} + {% set sTab = "user-info" %} {% endif %} - // Picture form - // - JQuery upload widget - $('#picture-form #picture').fileupload({ - dataType: 'json', - acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, - disableImageResize: /Android(?!.*Chrome)|Opera/.test(window.navigator.userAgent) - }) - .on('fileuploadsend', function(oEvent, oData){ - $('.user_profile_picture .form_alerts .alert-error').hide() - $('#page_overlay .overlay_content .content_loader').clone().prependTo('.user_profile_picture .panel-body'); - }) - .on('fileuploadalways', function(oEvent, oData){ - $('.user_profile_picture .content_loader').remove(); - }) - .on('fileuploaddone', function(oEvent, oData){ - if( (oData._response.result.form !== undefined) && (oData._response.result.form.validation.valid === true) ) - { - // Retrieving picture url - var sPictureUrl = oData._response.result.form.picture_url; - // Replacing form preview image - $('#picture-form .preview img').attr('src', sPictureUrl); - // Replacing menu image - $('#topbar .user_photo, #sidebar .user_photo').css('background-image', 'url("' + sPictureUrl + '")'); - } - }) - .on('fileuploadfail', function(oEvent, oData){ - if( (oData._response.jqXHR.responseJSON !== undefined) && (oData._response.jqXHR.responseJSON.error_message !== undefined) ) - { - $('.user_profile_picture .form_alerts .alert-error').show().text(oData._response.jqXHR.responseJSON.error_message); - } - }); - // - Undo button - /*$('#user-profile-wrapper .actions .btn_undo').on('click', function(oEvent){ - //console.log('Picture undo trigger'); - });*/ - // - Reset button - $('#user-profile-wrapper .actions .btn_reset').on('click', function(oEvent){ - //console.log('Picture reset trigger'); - }); + {% if sTab == "user-info" %} + {% set oContactForm = forms.contact %} + {% set oPreferencesForm = forms.preferences %} + {% set oPasswordForm = forms.password %} + {% include 'itop-portal-base/portal/templates/bricks/user-profile/user_info.ready.js.twig' %} + {% endif %} +{% endblock %} - // Submit button - $('#user-profile-wrapper .form_buttons .form_btn_submit').off('click').on('click', function(oEvent){ - oEvent.preventDefault(); +{% block pPageLiveScriptHelpers %} + {{ parent() }} + {% import "itop-portal-base/portal/templates/helpers/macros.twig" as Macro %} + {{ Macro.BlockExtension(aPluginFormData, 'script', oBrick) }} +{% endblock %} - // Resetting feedback - $('#user-profile-wrapper .form_alerts .alert').hide(); - $('#user-profile-wrapper .form_alerts .alert > p').remove(); - $('#user-profile-wrapper .form_field').removeClass('has-error'); - $('#user-profile-wrapper .form_field .help-block > p').remove(); - - // Submiting contact form through AJAX - $('#{{ oContactForm.id }}').portal_form_handler('submit', oEvent); - - // Submiting preferences form through AJAX - $('#{{ oPreferencesForm.id }}').portal_form_handler('submit', oEvent); - - {% if oPasswordForm is not null %} - // Submiting password form through AJAX - // Only if fields are filled - $('#{{ oPasswordForm.id }} :password').each(function(iIndex, oElem){ - if($(oElem).val() !== '') - { - $('#{{ oPasswordForm.id }}').portal_form_handler('submit', oEvent); - return false; - } - }); - {% endif %} - }); -{% endblock %} \ No newline at end of file +{% block pStyleinline %} + {{ parent() }} + +{% endblock %} diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.html.twig new file mode 100644 index 000000000..93c530265 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.html.twig @@ -0,0 +1,119 @@ +{# @copyright Copyright (C) 2010-2024 Combodo SARL #} +{# @license http://opensource.org/licenses/AGPL-3.0 #} + +
+ {% block pUserProfileWrapper %} +
+
+
+
+

{{ 'Brick:Portal:UserProfile:PersonalInformations:Title'|dict_s }}

+
+
+
+ +
+ + + +
+
+ {{ oContactForm.renderer.GetBaseLayout()|raw }} +
+
+
+
+
+
+ {% if oBrick.GetShowPictureForm() %} + {% block pUserProfilePictureFormContainer %} + + {% endblock %} + {% endif %} + + {% if oBrick.GetShowPreferencesForm() %} + {% block pUserProfilePreferencesFormContainer %} +
+
+

{{ 'Class:appUserPreferences/Attribute:preferences'|dict_s }}

+
+
+
+
+ + + +
+
+ {{ oPreferencesForm.renderer.GetBaseLayout()|raw }} +
+
+
+
+ {% endblock %} + {% endif %} + + {% if oBrick.GetShowPasswordForm() %} + {% block pUserProfilePasswordFormContainer %} +
+
+

{{ 'Brick:Portal:UserProfile:Password:Title'|dict_s }}

+
+
+ {% if oPasswordForm is not null %} +
+
+ + + +
+
+ {{ oPasswordForm.renderer.GetBaseLayout()|raw }} +
+
+ {% else %} + {{ 'Brick:Portal:UserProfile:Password:CantChangeContactAdministrator'|dict_format(constant('ITOP_APPLICATION_SHORT')) }} + {% endif %} +
+
+ {% endblock %} + {% endif %} +
+
+
+ {% block pUserProfileFormButtons %} +
+ {% if sFormMode == constant('\\Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper::ENUM_MODE_EDIT') %} + + {% endif %} +
+ {% endblock %} +
+ {% endblock %} +
diff --git a/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.ready.js.twig b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.ready.js.twig new file mode 100644 index 000000000..dcc0d32d0 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/templates/bricks/user-profile/user_info.ready.js.twig @@ -0,0 +1,100 @@ +{# @copyright Copyright (C) 2010-2024 Combodo SARL #} +{# @license http://opensource.org/licenses/AGPL-3.0 #} + +// Personal informations form +var oContactFormFieldSet = $('#{{ oContactForm.id }} > .form_fields').field_set({{ oContactForm.fieldset|json_encode()|raw }}); +$('#{{ oContactForm.id }}').portal_form_handler({ + formmanager_class: "{{ oContactForm.formmanager_class|escape('js') }}", + formmanager_data: {{ oContactForm.formmanager_data|json_encode()|raw }}, + field_set: oContactFormFieldSet, + endpoint: "{{ oContactForm.renderer.GetEndpoint()|raw }}" +}); + +// Preferences form +var oPreferencesFormFieldSet = $('#{{ oPreferencesForm.id }} > .form_fields').field_set({{ oPreferencesForm.fieldset|json_encode()|raw }}); +$('#{{ oPreferencesForm.id }}').portal_form_handler({ + formmanager_class: "{{ oPreferencesForm.formmanager_class|escape('js') }}", + formmanager_data: {{ oPreferencesForm.formmanager_data|json_encode()|raw }}, + field_set: oPreferencesFormFieldSet, + endpoint: "{{ oPreferencesForm.renderer.GetEndpoint()|raw }}" +}); + +{% if oPasswordForm is not null %} +// Password form +var oPasswordFormFieldSet = $('#{{ oPasswordForm.id }} > .form_fields').field_set({{ oPasswordForm.fieldset|json_encode()|raw }}); +$('#{{ oPasswordForm.id }}').portal_form_handler({ + formmanager_class: "{{ oPasswordForm.formmanager_class|escape('js') }}", + formmanager_data: {{ oPasswordForm.formmanager_data|json_encode()|raw }}, + field_set: oPasswordFormFieldSet, + endpoint: "{{ oPasswordForm.renderer.GetEndpoint()|raw }}" +}); +{% endif %} + +// Picture form +// - JQuery upload widget +$('#picture-form #picture').fileupload({ + dataType: 'json', + acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, + disableImageResize: /Android(?!.*Chrome)|Opera/.test(window.navigator.userAgent) + }) + .on('fileuploadsend', function(oEvent, oData){ + $('.user_profile_picture .form_alerts .alert-error').hide() + $('#page_overlay .overlay_content .content_loader').clone().prependTo('.user_profile_picture .panel-body'); + }) + .on('fileuploadalways', function(oEvent, oData){ + $('.user_profile_picture .content_loader').remove(); + }) + .on('fileuploaddone', function(oEvent, oData){ + if( (oData._response.result.form !== undefined) && (oData._response.result.form.validation.valid === true) ) + { + // Retrieving picture url + var sPictureUrl = oData._response.result.form.picture_url; + // Replacing form preview image + $('#picture-form .preview img').attr('src', sPictureUrl); + // Replacing menu image + $('#topbar .user_photo, #sidebar .user_photo').css('background-image', 'url("' + sPictureUrl + '")'); + } + }) + .on('fileuploadfail', function(oEvent, oData){ + if( (oData._response.jqXHR.responseJSON !== undefined) && (oData._response.jqXHR.responseJSON.error_message !== undefined) ) + { + $('.user_profile_picture .form_alerts .alert-error').show().text(oData._response.jqXHR.responseJSON.error_message); + } + }); +// - Undo button +/*$('#user-profile-wrapper .actions .btn_undo').on('click', function(oEvent){ + //console.log('Picture undo trigger'); +});*/ +// - Reset button +$('#user-profile-wrapper .actions .btn_reset').on('click', function(oEvent){ + //console.log('Picture reset trigger'); +}); + +// Submit button +$('#user-profile-wrapper .form_buttons .form_btn_submit').off('click').on('click', function(oEvent){ + oEvent.preventDefault(); + + // Resetting feedback + $('#user-profile-wrapper .form_alerts .alert').hide(); + $('#user-profile-wrapper .form_alerts .alert > p').remove(); + $('#user-profile-wrapper .form_field').removeClass('has-error'); + $('#user-profile-wrapper .form_field .help-block > p').remove(); + + // Submiting contact form through AJAX + $('#{{ oContactForm.id }}').portal_form_handler('submit', oEvent); + + // Submiting preferences form through AJAX + $('#{{ oPreferencesForm.id }}').portal_form_handler('submit', oEvent); + + {% if oPasswordForm is not null %} + // Submiting password form through AJAX + // Only if fields are filled + $('#{{ oPasswordForm.id }} :password').each(function(iIndex, oElem){ + if($(oElem).val() !== '') + { + $('#{{ oPasswordForm.id }}').portal_form_handler('submit', oEvent); + return false; + } + }); + {% endif %} +}); \ No newline at end of file diff --git a/datamodels/2.x/itop-portal-base/portal/templates/helpers/macros.twig b/datamodels/2.x/itop-portal-base/portal/templates/helpers/macros.twig new file mode 100644 index 000000000..92b91fe67 --- /dev/null +++ b/datamodels/2.x/itop-portal-base/portal/templates/helpers/macros.twig @@ -0,0 +1,13 @@ +{# @copyright Copyright (C) 2010-2024 Combodo SAS #} +{# @license http://opensource.org/licenses/AGPL-3.0 #} + +{% macro BlockExtension(aPluginFormData, sBlockName, oBrick) %} + {% for oPortalData in aPluginFormData %} + {% if (oPortalData is defined and oPortalData.GetBlockExtension(sBlockName)) %} + {% set oBlockExtension = oPortalData.GetBlockExtension(sBlockName) %} + {% set sTwig = oBlockExtension.GetTwig() %} + {% set aData = oBlockExtension.GetData() %} + {% include sTwig ignore missing %} + {% endif %} + {% endfor %} +{% endmacro %} diff --git a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig index 0414c4cb1..12bae2f56 100644 --- a/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig +++ b/datamodels/2.x/itop-portal-base/portal/templates/layout.html.twig @@ -78,9 +78,9 @@ {% block pStyleinline %} {# UI Extensions inline CSS #} {% if app['ui_extensions_helper'].css_inline is not null %} - + {% endif %} {% endblock %} diff --git a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_classmap.php b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_classmap.php index 0fb0a2c19..127eefa4a 100644 --- a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_classmap.php +++ b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_classmap.php @@ -6,5 +6,70 @@ $vendorDir = dirname(__DIR__); $baseDir = dirname($vendorDir); return array( + 'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => $baseDir . '/src/Brick/AbstractBrick.php', + 'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => $baseDir . '/src/Brick/AggregatePageBrick.php', + 'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => $baseDir . '/src/Brick/BrickCollection.php', + 'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => $baseDir . '/src/Brick/BrickNotFoundException.php', + 'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => $baseDir . '/src/Brick/BrowseBrick.php', + '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\\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', + 'Combodo\\iTop\\Portal\\Controller\\AbstractController' => $baseDir . '/src/Controller/AbstractController.php', + 'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => $baseDir . '/src/Controller/AggregatePageBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\BrickController' => $baseDir . '/src/Controller/BrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => $baseDir . '/src/Controller/BrowseBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => $baseDir . '/src/Controller/CreateBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\DefaultController' => $baseDir . '/src/Controller/DefaultController.php', + 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => $baseDir . '/src/Controller/ManageBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\ObjectController' => $baseDir . '/src/Controller/ObjectController.php', + 'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => $baseDir . '/src/Controller/SessionMessageController.php', + 'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => $baseDir . '/src/Controller/UserProfileBrickController.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => $baseDir . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php', + 'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => $baseDir . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php', + 'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => $baseDir . '/src/EventListener/ApplicationContextSetUrlMakerClass.php', + 'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => $baseDir . '/src/EventListener/CssFromSassCompiler.php', + 'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => $baseDir . '/src/EventListener/ExceptionListener.php', + 'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => $baseDir . '/src/EventListener/UserProvider.php', + 'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => $baseDir . '/src/Form/ObjectFormManager.php', + 'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => $baseDir . '/src/Form/PasswordFormManager.php', + 'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => $baseDir . '/src/Form/PreferencesFormManager.php', + 'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => $baseDir . '/src/Helper/ApplicationHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => $baseDir . '/src/Helper/BrickControllerHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => $baseDir . '/src/Helper/BrowseBrickHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => $baseDir . '/src/Helper/ContextManipulatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ExtensibilityHelper' => $baseDir . '/src/Helper/ExtensibilityHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => $baseDir . '/src/Helper/LifecycleValidatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => $baseDir . '/src/Helper/NavigationRuleHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => $baseDir . '/src/Helper/ObjectFormHandlerHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => $baseDir . '/src/Helper/RequestManipulatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => $baseDir . '/src/Helper/ScopeValidatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => $baseDir . '/src/Helper/SecurityHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => $baseDir . '/src/Helper/SessionMessageHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => $baseDir . '/src/Helper/UIExtensionsHelper.php', + 'Combodo\\iTop\\Portal\\Hook\\iAbstractPortalTabContentExtension' => $baseDir . '/src/Hook/iAbstractPortalTabContentExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iAbstractPortalTabExtension' => $baseDir . '/src/Hook/iAbstractPortalTabExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iUserProfileTabContentExtension' => $baseDir . '/src/Hook/iUserProfileTabContentExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iUserProfileTabExtension' => $baseDir . '/src/Hook/iUserProfileTabExtension.php', + 'Combodo\\iTop\\Portal\\Kernel' => $baseDir . '/src/Kernel.php', + 'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => $baseDir . '/src/Routing/ItopExtensionsExtraRoutes.php', + 'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => $baseDir . '/src/Routing/UrlGenerator.php', + 'Combodo\\iTop\\Portal\\Twig\\AppExtension' => $baseDir . '/src/Twig/AppExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\AppGlobal' => $baseDir . '/src/Twig/AppGlobal.php', + 'Combodo\\iTop\\Portal\\Twig\\AppVariable' => $baseDir . '/src/Twig/AppVariable.php', + 'Combodo\\iTop\\Portal\\Twig\\CKEditorExtension' => $baseDir . '/src/Twig/CKEditorExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\CurrentUserAccessor' => $baseDir . '/src/Twig/CurrentUserAccessor.php', + 'Combodo\\iTop\\Portal\\Twig\\PortalBlockExtension' => $baseDir . '/src/Twig/PortalBlockExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\PortalTwigContext' => $baseDir . '/src/Twig/PortalTwigContext.php', + 'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => $baseDir . '/src/UrlMaker/AbstractPortalUrlMaker.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => $baseDir . '/src/VariableAccessor/AbstractStringVariableAccessor.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => $baseDir . '/src/VariableAccessor/AbstractVariableAccessor.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => $baseDir . '/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => $baseDir . '/src/VariableAccessor/CombodoPortalInstanceConf.php', 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', ); diff --git a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_real.php b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_real.php index 0bd9d0feb..be4042c68 100644 --- a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_real.php +++ b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_real.php @@ -29,6 +29,7 @@ class ComposerAutoloaderInitdf408f3f8ea034d298269cdf7647358b require __DIR__ . '/autoload_static.php'; call_user_func(\Composer\Autoload\ComposerStaticInitdf408f3f8ea034d298269cdf7647358b::getInitializer($loader)); + $loader->setClassMapAuthoritative(true); $loader->register(true); return $loader; diff --git a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_static.php b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_static.php index 5655fafc7..b9c0d723d 100644 --- a/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_static.php +++ b/datamodels/2.x/itop-portal-base/portal/vendor/composer/autoload_static.php @@ -26,6 +26,71 @@ class ComposerStaticInitdf408f3f8ea034d298269cdf7647358b ); public static $classMap = array ( + 'Combodo\\iTop\\Portal\\Brick\\AbstractBrick' => __DIR__ . '/../..' . '/src/Brick/AbstractBrick.php', + 'Combodo\\iTop\\Portal\\Brick\\AggregatePageBrick' => __DIR__ . '/../..' . '/src/Brick/AggregatePageBrick.php', + 'Combodo\\iTop\\Portal\\Brick\\BrickCollection' => __DIR__ . '/../..' . '/src/Brick/BrickCollection.php', + 'Combodo\\iTop\\Portal\\Brick\\BrickNotFoundException' => __DIR__ . '/../..' . '/src/Brick/BrickNotFoundException.php', + 'Combodo\\iTop\\Portal\\Brick\\BrowseBrick' => __DIR__ . '/../..' . '/src/Brick/BrowseBrick.php', + '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\\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', + 'Combodo\\iTop\\Portal\\Controller\\AbstractController' => __DIR__ . '/../..' . '/src/Controller/AbstractController.php', + 'Combodo\\iTop\\Portal\\Controller\\AggregatePageBrickController' => __DIR__ . '/../..' . '/src/Controller/AggregatePageBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\BrickController' => __DIR__ . '/../..' . '/src/Controller/BrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\BrowseBrickController' => __DIR__ . '/../..' . '/src/Controller/BrowseBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\CreateBrickController' => __DIR__ . '/../..' . '/src/Controller/CreateBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\DefaultController' => __DIR__ . '/../..' . '/src/Controller/DefaultController.php', + 'Combodo\\iTop\\Portal\\Controller\\ManageBrickController' => __DIR__ . '/../..' . '/src/Controller/ManageBrickController.php', + 'Combodo\\iTop\\Portal\\Controller\\ObjectController' => __DIR__ . '/../..' . '/src/Controller/ObjectController.php', + 'Combodo\\iTop\\Portal\\Controller\\SessionMessageController' => __DIR__ . '/../..' . '/src/Controller/SessionMessageController.php', + 'Combodo\\iTop\\Portal\\Controller\\UserProfileBrickController' => __DIR__ . '/../..' . '/src/Controller/UserProfileBrickController.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\AbstractConfiguration' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/AbstractConfiguration.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Basic' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Basic.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Forms' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Forms.php', + 'Combodo\\iTop\\Portal\\DependencyInjection\\SilexCompatBootstrap\\PortalXmlConfiguration\\Lists' => __DIR__ . '/../..' . '/src/DependencyInjection/SilexCompatBootstrap/PortalXmlConfiguration/Lists.php', + 'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetPluginPropertyClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetPluginPropertyClass.php', + 'Combodo\\iTop\\Portal\\EventListener\\ApplicationContextSetUrlMakerClass' => __DIR__ . '/../..' . '/src/EventListener/ApplicationContextSetUrlMakerClass.php', + 'Combodo\\iTop\\Portal\\EventListener\\CssFromSassCompiler' => __DIR__ . '/../..' . '/src/EventListener/CssFromSassCompiler.php', + 'Combodo\\iTop\\Portal\\EventListener\\ExceptionListener' => __DIR__ . '/../..' . '/src/EventListener/ExceptionListener.php', + 'Combodo\\iTop\\Portal\\EventListener\\UserProvider' => __DIR__ . '/../..' . '/src/EventListener/UserProvider.php', + 'Combodo\\iTop\\Portal\\Form\\ObjectFormManager' => __DIR__ . '/../..' . '/src/Form/ObjectFormManager.php', + 'Combodo\\iTop\\Portal\\Form\\PasswordFormManager' => __DIR__ . '/../..' . '/src/Form/PasswordFormManager.php', + 'Combodo\\iTop\\Portal\\Form\\PreferencesFormManager' => __DIR__ . '/../..' . '/src/Form/PreferencesFormManager.php', + 'Combodo\\iTop\\Portal\\Helper\\ApplicationHelper' => __DIR__ . '/../..' . '/src/Helper/ApplicationHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\BrickControllerHelper' => __DIR__ . '/../..' . '/src/Helper/BrickControllerHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\BrowseBrickHelper' => __DIR__ . '/../..' . '/src/Helper/BrowseBrickHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ContextManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/ContextManipulatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ExtensibilityHelper' => __DIR__ . '/../..' . '/src/Helper/ExtensibilityHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\LifecycleValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/LifecycleValidatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\NavigationRuleHelper' => __DIR__ . '/../..' . '/src/Helper/NavigationRuleHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ObjectFormHandlerHelper' => __DIR__ . '/../..' . '/src/Helper/ObjectFormHandlerHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\RequestManipulatorHelper' => __DIR__ . '/../..' . '/src/Helper/RequestManipulatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\ScopeValidatorHelper' => __DIR__ . '/../..' . '/src/Helper/ScopeValidatorHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\SecurityHelper' => __DIR__ . '/../..' . '/src/Helper/SecurityHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\SessionMessageHelper' => __DIR__ . '/../..' . '/src/Helper/SessionMessageHelper.php', + 'Combodo\\iTop\\Portal\\Helper\\UIExtensionsHelper' => __DIR__ . '/../..' . '/src/Helper/UIExtensionsHelper.php', + 'Combodo\\iTop\\Portal\\Hook\\iAbstractPortalTabContentExtension' => __DIR__ . '/../..' . '/src/Hook/iAbstractPortalTabContentExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iAbstractPortalTabExtension' => __DIR__ . '/../..' . '/src/Hook/iAbstractPortalTabExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iUserProfileTabContentExtension' => __DIR__ . '/../..' . '/src/Hook/iUserProfileTabContentExtension.php', + 'Combodo\\iTop\\Portal\\Hook\\iUserProfileTabExtension' => __DIR__ . '/../..' . '/src/Hook/iUserProfileTabExtension.php', + 'Combodo\\iTop\\Portal\\Kernel' => __DIR__ . '/../..' . '/src/Kernel.php', + 'Combodo\\iTop\\Portal\\Routing\\ItopExtensionsExtraRoutes' => __DIR__ . '/../..' . '/src/Routing/ItopExtensionsExtraRoutes.php', + 'Combodo\\iTop\\Portal\\Routing\\UrlGenerator' => __DIR__ . '/../..' . '/src/Routing/UrlGenerator.php', + 'Combodo\\iTop\\Portal\\Twig\\AppExtension' => __DIR__ . '/../..' . '/src/Twig/AppExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\AppGlobal' => __DIR__ . '/../..' . '/src/Twig/AppGlobal.php', + 'Combodo\\iTop\\Portal\\Twig\\AppVariable' => __DIR__ . '/../..' . '/src/Twig/AppVariable.php', + 'Combodo\\iTop\\Portal\\Twig\\CKEditorExtension' => __DIR__ . '/../..' . '/src/Twig/CKEditorExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\CurrentUserAccessor' => __DIR__ . '/../..' . '/src/Twig/CurrentUserAccessor.php', + 'Combodo\\iTop\\Portal\\Twig\\PortalBlockExtension' => __DIR__ . '/../..' . '/src/Twig/PortalBlockExtension.php', + 'Combodo\\iTop\\Portal\\Twig\\PortalTwigContext' => __DIR__ . '/../..' . '/src/Twig/PortalTwigContext.php', + 'Combodo\\iTop\\Portal\\UrlMaker\\AbstractPortalUrlMaker' => __DIR__ . '/../..' . '/src/UrlMaker/AbstractPortalUrlMaker.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractStringVariableAccessor' => __DIR__ . '/../..' . '/src/VariableAccessor/AbstractStringVariableAccessor.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\AbstractVariableAccessor' => __DIR__ . '/../..' . '/src/VariableAccessor/AbstractVariableAccessor.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoCurrentContactPhotoUrl' => __DIR__ . '/../..' . '/src/VariableAccessor/CombodoCurrentContactPhotoUrl.php', + 'Combodo\\iTop\\Portal\\VariableAccessor\\CombodoPortalInstanceConf' => __DIR__ . '/../..' . '/src/VariableAccessor/CombodoPortalInstanceConf.php', 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', );