diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index fa0d05cf0d..a797b5ff70 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -272,35 +272,7 @@ EOF } } $sMessageKey = get_class($this).'::'.$this->GetKey(); - if (array_key_exists('obj_messages', $_SESSION) && array_key_exists($sMessageKey, - $_SESSION['obj_messages'])) { - $aReadMessages = []; - foreach ($_SESSION['obj_messages'][$sMessageKey] as $sMessageId => $aMessageData) { - if (!in_array($aMessageData['message'], $aReadMessages)) { - $aReadMessages[] = $aMessageData['message']; - $aRanks[] = $aMessageData['rank']; - switch ($aMessageData['severity']) { - case 'info': - $aMessages[] = AlertUIBlockFactory::MakeForInformation('', $aMessageData['message']); - break; - case 'ok': - $aMessages[] = AlertUIBlockFactory::MakeForSuccess('', $aMessageData['message']); - break; - case 'warning': - $aMessages[] = AlertUIBlockFactory::MakeForWarning('', $aMessageData['message']); - break; - case 'error': - $aMessages[] = AlertUIBlockFactory::MakeForDanger('', $aMessageData['message']); - break; - } - } - } - unset($_SESSION['obj_messages'][$sMessageKey]); - } - array_multisort($aRanks, $aMessages); - foreach ($aMessages as $oMessage) { - $oPage->AddUiBlock($oMessage); - } + $oPage->AddSessionMessages($sMessageKey, $aRanks, $aMessages); } if (!$oPage->IsPrintableVersion() && ($sMode === static::ENUM_OBJECT_MODE_VIEW)) diff --git a/pages/UI.php b/pages/UI.php index 3cc16f19e3..59b945357f 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -22,12 +22,16 @@ use Combodo\iTop\Application\UI\Base\Component\Form\Form; use Combodo\iTop\Application\UI\Base\Component\GlobalSearch\GlobalSearchHelper; use Combodo\iTop\Application\UI\Base\Component\Input\InputUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\QuickCreate\QuickCreateHelper; +use Combodo\iTop\Application\UI\Base\Component\Title\Title; +use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory; use Combodo\iTop\Application\UI\Base\Layout\PageContent\PageContentFactory; /** * Displays a popup welcome message, once per session at maximum * until the user unchecks the "Display welcome at startup" + * * @param WebPage $oP The current web page for the display + * * @return void */ function DisplayWelcomePopup(WebPage $oP) @@ -156,25 +160,9 @@ function DisplayDetails($oP, $sClass, $oObj, $id) * @param string $sMessageKey * @param WebPage $oPage */ -function DisplayMessages($sMessageKey, WebPage $oPage) +function DisplayMessages(string $sMessageKey, WebPage $oPage) { - if (array_key_exists('obj_messages', $_SESSION) && array_key_exists($sMessageKey, $_SESSION['obj_messages'])) - { - $aMessages = array(); - $aRanks = array(); - foreach ($_SESSION['obj_messages'][$sMessageKey] as $sMessageId => $aMessageData) - { - $sMsgClass = 'message_'.$aMessageData['severity']; - $aMessages[] = "
".$aMessageData['message']."
"; - $aRanks[] = $aMessageData['rank']; - } - unset($_SESSION['obj_messages'][$sMessageKey]); - array_multisort($aRanks, $aMessages); - foreach ($aMessages as $sMessage) - { - $oPage->add($sMessage); - } - } + $oPage->AddSessionMessages($sMessageKey); } /** @@ -1250,28 +1238,22 @@ HTML $sMessage = Dict::Format('UI:Title:Object_Of_Class_Created', $sName, $sClassLabel); $sNextAction = utils::ReadPostedParam('next_action', ''); - if (!empty($sNextAction)) - { + if (!empty($sNextAction)) { $oP->add("

$sMessage

"); - try - { + try { ApplyNextAction($oP, $oObj, $sNextAction); } - catch (ApplicationException $e) - { + catch (ApplicationException $e) { $sMessage = $e->getMessage(); $sSeverity = 'info'; ReloadAndDisplay($oP, $oObj, 'create', $sMessage, $sSeverity); } - } - else - { + } else { // Nothing more to do ReloadAndDisplay($oP, $oObj, 'create', $sMessage, 'ok'); } } - catch (CoreCannotSaveObjectException $e) - { + catch (CoreCannotSaveObjectException $e) { // Found issues, explain and give the user a second chance // $aIssues = $e->getIssues(); @@ -1281,33 +1263,17 @@ HTML $sHeaderTitle = Dict::Format('UI:CreationTitle_Class', $sClassLabel); $oP->set_title(Dict::Format('UI:CreationPageTitle_Class', $sClassLabel)); - $oP->add(<< -
- - -
-HTML - ); + $oTitle = TitleUIBlockFactory::MakeForPageWithIcon($sHeaderTitle, $sClassIcon, Title::DEFAULT_ICON_COVER_METHOD, false); + $oP->AddUiBlock($oTitle); - - if (!empty($aIssues)) - { + if (!empty($aIssues)) { $oP->AddHeaderMessage($e->getHtmlMessage(), 'message_error'); } - if (!empty($aWarnings)) - { + if (!empty($aWarnings)) { $sWarnings = implode(', ', $aWarnings); - $oP->AddHeaderMessage($sWarnings, 'message_info'); + $oP->AddHeaderMessage($sWarnings, 'message_warning'); } cmdbAbstractObject::DisplayCreationForm($oP, $sClass, $oObj); - $oP->add(<< -
-HTML - ); } } break; diff --git a/sources/application/WebPage/WebPage.php b/sources/application/WebPage/WebPage.php index 538e3b98a0..acd7e0bd8c 100644 --- a/sources/application/WebPage/WebPage.php +++ b/sources/application/WebPage/WebPage.php @@ -18,6 +18,7 @@ */ use Combodo\iTop\Application\TwigBase\Twig\TwigHelper; +use Combodo\iTop\Application\UI\Base\Component\Alert\AlertUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Html\Html; use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenu; @@ -131,10 +132,50 @@ class WebPage implements Page ob_start(); // Start capturing the output } + /** + * @param string $sMessageKey + * @param array $aRanks + * @param array $aMessages + */ + public function AddSessionMessages(string $sMessageKey, array $aRanks = [], array $aMessages = []): void + { + if (array_key_exists('obj_messages', $_SESSION) && array_key_exists($sMessageKey, + $_SESSION['obj_messages'])) { + $aReadMessages = []; + foreach ($_SESSION['obj_messages'][$sMessageKey] as $sMessageId => $aMessageData) { + if (!in_array($aMessageData['message'], $aReadMessages)) { + $aReadMessages[] = $aMessageData['message']; + $aRanks[] = $aMessageData['rank']; + switch ($aMessageData['severity']) { + case 'ok': + $aMessages[] = AlertUIBlockFactory::MakeForSuccess('', $aMessageData['message']); + break; + case 'warning': + $aMessages[] = AlertUIBlockFactory::MakeForWarning('', $aMessageData['message']); + break; + case 'error': + $aMessages[] = AlertUIBlockFactory::MakeForDanger('', $aMessageData['message']); + break; + case 'info': + default: + $aMessages[] = AlertUIBlockFactory::MakeForInformation('', $aMessageData['message']); + break; + } + } + } + unset($_SESSION['obj_messages'][$sMessageKey]); + } + array_multisort($aRanks, $aMessages); + foreach ($aMessages as $oMessage) { + $this->AddUiBlock($oMessage); + } + } + /** * Change the title of the page after its creation * * @param string $s_title + * * @return void */ public function set_title($s_title) diff --git a/sources/application/WebPage/iTopWebPage.php b/sources/application/WebPage/iTopWebPage.php index dda0170099..e8bb06574c 100644 --- a/sources/application/WebPage/iTopWebPage.php +++ b/sources/application/WebPage/iTopWebPage.php @@ -1193,15 +1193,28 @@ EOF * @param string $sContent * @param string $sCssClasses CSS classes to add to the container * - * @throws \Exception * @since 2.6.0 */ - public function AddHeaderMessage($sContent, $sCssClasses = 'message_info') + public function AddHeaderMessage(string $sContent, string $sCssClasses = 'message_info') { - $this->add(<<$sContent
-EOF - ); + switch ($sCssClasses) { + case 'message_ok': + $oAlert = AlertUIBlockFactory::MakeForSuccess('', $sContent); + break; + case 'message_warning': + $oAlert = AlertUIBlockFactory::MakeForWarning('', $sContent); + break; + case 'message_error': + $oAlert = AlertUIBlockFactory::MakeForDanger('', $sContent); + break; + case 'message_info': + default: + $oAlert = AlertUIBlockFactory::MakeForInformation('', $sContent); + break; + + } + $oAlert->AddCSSClass($sCssClasses); + $this->AddUiBlock($oAlert); }