From 4efa2cb3c074eb27883988bb698eaa41a843ea22 Mon Sep 17 00:00:00 2001
From: Denis Flaven
Date: Sat, 20 Oct 2012 17:16:46 +0000
Subject: [PATCH] Added a refresh button (and creation /modification messages)
on the details of an object
SVN:trunk[2311]
---
application/cmdbabstract.class.inc.php | 17 +++++-
css/light-grey.css | 35 +++++++++++
images/info-mini.png | Bin 0 -> 850 bytes
images/ok.png | Bin 0 -> 643 bytes
pages/UI.php | 77 +++++++++++--------------
5 files changed, 85 insertions(+), 44 deletions(-)
create mode 100644 images/info-mini.png
create mode 100644 images/ok.png
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("");
+ 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("\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 0000000000000000000000000000000000000000..de189bd8f1d27929df17df2780d814fe9df19c6d
GIT binary patch
literal 850
zcmV-Y1FigtP)8&>#E9BH
zy93X2&f@tU!2`M|8Gr4h-EBSRyVgh?w`;-n);xdwT%dYw{r_(DpXuzU&z~4MK5^lN
zqc1*_?>(ILOyX3tv9lN7EDSII@cq%Lc<%F0fbfC4&bbdK-?_4w+*q#a!fK#@UAeFC
zZZ-Ao^}3#2sp&$op}(Hl)o0(ndK+(W>>wurtkJh7KbXAq@hi{vh#*X;G$IaXEk*`>
zdVG_)wFZ@XglDFlKQq*~=8jz~PG9>5_I4%S@sn>%T%I~N+$}1Nn05*Y2Bm5nOKKKN
zO*VprSVO&?vKMw38a(3O+A)Wke_sE}$ew!r&5^-=u^B`J5!53=ts`)J7iB7J*Cy1G
zAQIF&P-$tRxXtPDmtMx~A61$D{8RNPMH--lfoVu$42H8dLwyeY?UdP4Ogl|T6HOGS
zL{W_D$|-UKPpU*nIa6#gkTV$Qwa6M0p%fh<0foc)HXr7-*AFpE4B#Q&HOIFq5QE7t_giUbh(0JqfJ#SOiK~Q
zpoM{}By%&1+?jfRf>w1_0_gJWPb>F~al3E$*y!V39LWhD%?O_8v+#XMl;Pr);5U-bo;dSrEUH4$zs(O@aG+km2hzVo
cjfa{30tr4@$0SIS761SM07*qoM6N<$f?;f*O#lD@
literal 0
HcmV?d00001
diff --git a/images/ok.png b/images/ok.png
new file mode 100644
index 0000000000000000000000000000000000000000..46710a0cd2620abd4bb3412ccf5e8b6e19012750
GIT binary patch
literal 643
zcmV-}0(||6P)9mM0wGMsnpFjV@
z5B_sPa>bIHmZMAW0_v!Ba*6p$kGETS;_6i5OU+jS?O)@R1F>~?CR!CwU_$ZEdz5Bp
zgQD3bT>SY){C<@~(8}V}HEMsyX=R2BXR1y*GGf*+>K`H~OT2J*BO8^iY5>zt?eW9M
zO6z3xcUtG$r0I6*BRKtt?p#IX!P8c~o$KUR&Ox{OhD0SL8
z8=OHUhDnS`A~8oOBKvF3j^ZulDLNazpqDAh!@%4#-hFtF>pBh601iMF5y-S`lnSP`
zF5ICZe2NQ=K~Y(=Oslnm25)GD(coL$;X%B^GdLTh+J%0q02x4B{LIVnJZUR)b=g8(
zh;M?Qu-cDNh(#}|QK@7MIyDOu0)3Z!muLH^j$i;02nB}e3NFgFth|KvdXtJI?K12!
zS)?26EH`E_;|kDm*4a4KBUk>4BL@INekWZ)Nm`X#U|*YRvSHP&V4W$K@h@XEoqE{f
zc`Tg(!hhOJ+=g=f{bu)G<&Atp>F}Oc?8VyX76+IM9mdWU*B)h4nc)_oj|N9dvgA_%
d#QqD8svmTf-+uGGFAe|z002ovPDHLkV1h1LEeiku
literal 0
HcmV?d00001
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
{