diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 30be7da5d..12a14e034 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -96,7 +96,16 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay { // Standard Header with name, actions menu and history block // - + + // Is there a message for this object ?? + $sMessageKey = get_class($this).'::'.$this->GetKey(); + if (array_key_exists('obj_messages', $_SESSION) && array_key_exists($sMessageKey, $_SESSION['obj_messages'])) + { + $sMsgClass = 'message_'.$_SESSION['obj_messages'][$sMessageKey]['severity']; + $oPage->add("
".$_SESSION['obj_messages'][$sMessageKey]['message']."
"); + unset($_SESSION['obj_messages'][$sMessageKey]); + } + // action menu $oSingletonFilter = new DBObjectSearch(get_class($this)); $oSingletonFilter->AddCondition('id', $this->GetKey(), '='); @@ -191,7 +200,11 @@ abstract class cmdbAbstractObject extends CMDBObject implements iDisplay } $oPage->add("

".$this->GetIcon()." \n"); - $oPage->add(MetaModel::GetName(get_class($this)).": ".$this->GetName()."$sSynchroIcon

\n"); + if ($_SERVER['REQUEST_METHOD'] == 'GET') + { + $sRefreshIcon = ' '; + } + $oPage->add(MetaModel::GetName(get_class($this)).": ".$this->GetName()."$sRefreshIcon $sSynchroIcon\n"); $oPage->add("
\n"); } diff --git a/css/light-grey.css b/css/light-grey.css index ed539ae15..326e121cd 100644 --- a/css/light-grey.css +++ b/css/light-grey.css @@ -1371,4 +1371,39 @@ a.summary, a.summary:hover { } .itop-deleted-object { text-decoration: line-through; +} +.header_message { + padding: 1em; + font-size: 10pt; + background: #fff; + border: 1px solid #999; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + margin-bottom: 10px; +} +.header_message { + padding: 1em; + font-size: 10pt; + background: #fff; + border: 1px solid #999; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + margin-bottom: 10px; +} +.message_info { + border: 1px solid #993; + background: url(../images/info-mini.png) 1em 1em no-repeat #ffc; + padding-left: 3em; +} +.message_ok { + border: 1px solid #393; + background: url(../images/ok.png) 1em 1em no-repeat #cfc; + padding-left: 3em; +} +.message_error { + border: 1px solid #933; + background: url(../images/error.png) 1em 1em no-repeat #fcc; + padding-left: 3em; } \ No newline at end of file diff --git a/images/info-mini.png b/images/info-mini.png new file mode 100644 index 000000000..de189bd8f Binary files /dev/null and b/images/info-mini.png differ diff --git a/images/ok.png b/images/ok.png new file mode 100644 index 000000000..46710a0cd Binary files /dev/null and b/images/ok.png differ diff --git a/pages/UI.php b/pages/UI.php index 430efad77..59e2e6b1f 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -376,8 +376,7 @@ function ApplyNextAction(Webpage $oP, CMDBObject $oObj, $sNextAction) { $oObj->DBUpdate(); } - $oObj->Reload(); - $oObj->DisplayDetails($oP); + ReloadAndDisplay($oP, $oObj); } else { @@ -388,6 +387,17 @@ function ApplyNextAction(Webpage $oP, CMDBObject $oObj, $sNextAction) $oP->add_header('Location: '.utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=stimulus&class='.get_class($oObj).'&stimulus='.$sNextAction.'&id='.$oObj->getKey().'&'.$oAppContext->GetForLink()); } } + +function ReloadAndDisplay($oPage, $oObj, $sMessage = '', $sSeverity) +{ + $oAppContext = new ApplicationContext(); + $sMessageKey = get_class($oObj).'::'.$oObj->GetKey(); + if ($sMessage != '') + { + $_SESSION['obj_messages'][$sMessageKey] = array('severity' => $sSeverity, 'message' => $sMessage); + } + $oPage->add_header('Location: '.utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=details&class='.get_class($oObj).'&id='.$oObj->getKey().'&'.$oAppContext->GetForLink()); +} /** * Displays the details of an object * @param $oP WebPage Page for the output @@ -1204,24 +1214,25 @@ EOF else { $oObj->UpdateObjectFromPostedForm(); + $sMessage = ''; + $sSeverity = 'ok'; if (!$oObj->IsModified()) { $oP->set_title(Dict::Format('UI:ModificationPageTitle_Object_Class', $oObj->GetRawName(), $sClassLabel)); // Set title will take care of the encoding - $oP->p(Dict::Format('UI:Class_Object_NotUpdated', MetaModel::GetName(get_class($oObj)), $oObj->GetName())); + $sMessage = Dict::Format('UI:Class_Object_NotUpdated', MetaModel::GetName(get_class($oObj)), $oObj->GetName()); + $sSeverity = 'info'; } else { list($bRes, $aIssues) = $oObj->CheckToWrite(); if ($bRes) { - $oP->set_title(Dict::Format('UI:ModificationPageTitle_Object_Class', $oObj->GetRawName(), $sClassLabel)); // Set title will take care of the encoding - $oP->add("

".Dict::Format('UI:ModificationTitle_Class_Object', $sClassLabel, $oObj->GetName())."

\n"); - $oObj->DBUpdate(); utils::RemoveTransaction($sTransactionId); - $oP->p(Dict::Format('UI:Class_Object_Updated', MetaModel::GetName(get_class($oObj)), $oObj->GetName())); + $sMessage = Dict::Format('UI:Class_Object_Updated', MetaModel::GetName(get_class($oObj)), $oObj->GetName()); + $sSeverity = 'ok'; } else { @@ -1251,7 +1262,7 @@ EOF else { // Nothing more to do - $oObj->DisplayDetails($oP); + ReloadAndDisplay($oP, $oObj, $sMessage, $sSeverity); } } break; @@ -1362,18 +1373,20 @@ EOF $oObj->DBInsert(); utils::RemoveTransaction($sTransactionId); $oP->set_title(Dict::S('UI:PageTitle:ObjectCreated')); - $oP->add("

".Dict::Format('UI:Title:Object_Of_Class_Created', $oObj->GetName(), $sClassLabel)."

\n"); + $sMessage = Dict::Format('UI:Title:Object_Of_Class_Created', $oObj->GetName(), $sClassLabel); + $oObj = MetaModel::GetObject(get_class($oObj), $oObj->GetKey()); //Workaround: reload the object so that the linkedset are displayed properly $sNextAction = utils::ReadPostedParam('next_action', ''); if (!empty($sNextAction)) { + $oP->add("

$sMessage

"); ApplyNextAction($oP, $oObj, $sNextAction); } else { // Nothing more to do - $oObj->DisplayDetails($oP); + ReloadAndDisplay($oP, $oObj, $sMessage, 'ok'); } } else @@ -1390,32 +1403,7 @@ EOF } } break; - - /////////////////////////////////////////////////////////////////////////////////////////// - - case 'wizard_apply_new': // no more used ??? - $sJson = utils::ReadPostedParam('json_obj', '', 'raw_data'); - $oWizardHelper = WizardHelper::FromJSON($sJson); - $sTransactionId = utils::ReadPostedParam('transaction_id', ''); - if (!utils::IsTransactionValid($sTransactionId)) - { - $oP->p(Dict::S('UI:Error:ObjectAlreadyCreated')); - } - else - { - $oObj = $oWizardHelper->GetTargetObject(true /* read uploaded files */); - if (is_object($oObj)) - { - $sClass = get_class($oObj); - $sClassLabel = MetaModel::GetName($sClass); - $oObj->DBInsert(); - $oP->set_title(Dict::S('UI:PageTitle:ObjectCreated')); - $oP->add("

".Dict::Format('UI:Title:Object_Of_Class_Created', $oObj->GetName(), $sClassLabel)."

\n"); - $oObj->DisplayDetails($oP); - } - } - break; - + /////////////////////////////////////////////////////////////////////////////////////////// case 'select_bulk_stimulus': // Form displayed when applying a stimulus to many objects @@ -1900,13 +1888,16 @@ EOF { $aTransitions = $oObj->EnumTransitions(); $aStimuli = MetaModel::EnumStimuli($sClass); + $sMessage = ''; + $sSeverity = 'ok'; if (!isset($aTransitions[$sStimulus])) { throw new ApplicationException(Dict::Format('UI:Error:Invalid_Stimulus_On_Object_In_State', $sStimulus, $oObj->GetName(), $oObj->GetStateLabel())); } if (!utils::IsTransactionValid($sTransactionId)) { - $oP->p(Dict::S('UI:Error:ObjectAlreadyUpdated')); + $sMessage = Dict::S('UI:Error:ObjectAlreadyUpdated'); + $sSeverity = 'info'; } else { @@ -1941,20 +1932,22 @@ EOF if ($oObj->ApplyStimulus($sStimulus)) { $oObj->DBUpdate(); - $oP->p(Dict::Format('UI:Class_Object_Updated', MetaModel::GetName(get_class($oObj)), $oObj->GetName())); + $sMessage = Dict::Format('UI:Class_Object_Updated', MetaModel::GetName(get_class($oObj)), $oObj->GetName()); + $sSeverity = 'ok'; } else { - $oP->p(Dict::S('UI:FailedToApplyStimuli')); + $sMessage = Dict::S('UI:FailedToApplyStimuli'); + $sSeverity = 'error'; } } else { - $oP->p(implode('

', $aErrors)); + $sMessage = implode('

', $aErrors); + $sSeverity = 'error'; } } - $oObj->Reload(); - $oObj->DisplayDetails($oP); + ReloadAndDisplay($oP, $oObj, $sMessage, $sSeverity); } else {