diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php
index c4c8ca9cd..0ce8caab7 100644
--- a/application/cmdbabstract.class.inc.php
+++ b/application/cmdbabstract.class.inc.php
@@ -443,7 +443,6 @@ EOF
$aExtraParams = array('query_params' => $this->ToArgsForQuery());
$oDashboard->Render($oPage, false, $aExtraParams);
$oPage->add('');
- $oDashboard->RenderEditionTools($oPage);
}
}
diff --git a/application/dashboard.class.inc.php b/application/dashboard.class.inc.php
index c34bd785f..03beb8653 100644
--- a/application/dashboard.class.inc.php
+++ b/application/dashboard.class.inc.php
@@ -356,35 +356,17 @@ abstract class Dashboard
$this->aCells[] = array($oDashlet);
}
- /**
- * @param \WebPage $oPage
- * @param bool $bEditMode
- * @param array $aExtraParams
- */
- public function Render($oPage, $bEditMode = false, $aExtraParams = array())
- {
- $oPage->add('
'.htmlentities(Dict::S($this->sTitle), ENT_QUOTES, 'UTF-8', false).'
');
- $oLayout = new $this->sLayoutClass;
- /** @var \DashboardLayoutMultiCol $oLayout */
- $oLayout->Render($oPage, $this->aCells, $bEditMode, $aExtraParams);
- if (!$bEditMode)
- {
- $oPage->add_linked_script('../js/dashlet.js');
- $oPage->add_linked_script('../js/dashboard.js');
- }
- }
-
/**
* @param \WebPage $oPage
*
* @throws \ReflectionException
*/
- public function RenderProperties($oPage)
+ public function RenderProperties($oPage, $aExtraParams = array())
{
// menu to pick a layout and edit other properties of the dashboard
$oPage->add('');
$sUrl = utils::GetAbsoluteUrlAppRoot();
-
+
$oPage->add('
'.Dict::S('UI:DashboardEdit:Layout').'
');
$oPage->add('
');
foreach( get_declared_classes() as $sLayoutClass)
@@ -402,7 +384,7 @@ abstract class Dashboard
}
}
$oPage->add('
');
-
+
$oForm = new DesignerForm();
$oField = new DesignerHiddenField('dashboard_id', '', $this->sId);
@@ -419,8 +401,8 @@ abstract class Dashboard
$oForm->AddField($oField);
- $this->SetFormParams($oForm);
- $oForm->RenderAsPropertySheet($oPage, false, '.itop-dashboard');
+ $this->SetFormParams($oForm, $aExtraParams);
+ $oForm->RenderAsPropertySheet($oPage, false, '.itop-dashboard');
$oPage->add('
');
@@ -464,7 +446,26 @@ abstract class Dashboard
EOF
);
}
-
+
+ /**
+ * @param \iTopWebPage $oPage
+ * @param bool $bEditMode
+ * @param array $aExtraParams
+ */
+ public function Render($oPage, $bEditMode = false, $aExtraParams = array())
+ {
+ $oPage->add(''.htmlentities(Dict::S($this->sTitle), ENT_QUOTES, 'UTF-8', false).'
');
+
+ $oLayout = new $this->sLayoutClass;
+ /** @var \DashboardLayoutMultiCol $oLayout */
+ $oLayout->Render($oPage, $this->aCells, $bEditMode, $aExtraParams);
+ if (!$bEditMode)
+ {
+ $oPage->add_linked_script('../js/dashlet.js');
+ $oPage->add_linked_script('../js/dashboard.js');
+ }
+ }
+
public function RenderDashletsSelection(WebPage $oPage)
{
// Toolbox/palette to drag and drop dashlets
@@ -483,7 +484,7 @@ EOF
$oPage->add_ready_script("$('.dashlet_icon').draggable({helper: 'clone', appendTo: 'body', zIndex: 10000, revert:'invalid'});");
}
- public function RenderDashletsProperties(WebPage $oPage)
+ public function RenderDashletsProperties(WebPage $oPage, $aExtraParams = array())
{
// Toolbox/palette to edit the properties of each dashlet
$oPage->add('');
@@ -499,7 +500,7 @@ EOF
{
$oPage->add('
');
$oForm = $oDashlet->GetForm();
- $this->SetFormParams($oForm);
+ $this->SetFormParams($oForm, $aExtraParams);
$oForm->RenderAsPropertySheet($oPage, false, '.itop-dashboard');
$oPage->add('
');
}
@@ -557,7 +558,7 @@ EOF
return $iNewId + 1;
}
- abstract protected function SetFormParams($oForm);
+ abstract protected function SetFormParams($oForm, $aExtraParams = array());
public static function GetDashletClassFromType($sType, $oFactory = null)
{
@@ -600,9 +601,9 @@ class RuntimeDashboard extends Dashboard
*
* @throws \Exception
*/
- protected function SetFormParams($oForm)
+ protected function SetFormParams($oForm, $aExtraParams = array())
{
- $oForm->SetSubmitParams(utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php', array('operation' => 'update_dashlet_property'));
+ $oForm->SetSubmitParams(utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php', array('operation' => 'update_dashlet_property', 'extra_params' => $aExtraParams));
}
public function Save()
@@ -662,17 +663,24 @@ class RuntimeDashboard extends Dashboard
{
$bCustomized = false;
- // Search for an eventual user defined dashboard
- $oUDSearch = new DBObjectSearch('UserDashboard');
- $oUDSearch->AddCondition('user_id', UserRights::GetUserId(), '=');
- $oUDSearch->AddCondition('menu_code', $sDashBoardCode, '=');
- $oUDSet = new DBObjectSet($oUDSearch);
- if ($oUDSet->Count() > 0)
+ if (!appUserPreferences::GetPref('display_original_dashboard_'.$sDashBoardCode, false))
{
- // Assuming there is at most one couple {user, menu}!
- $oUserDashboard = $oUDSet->Fetch();
- $sDashboardDefinition = $oUserDashboard->Get('contents');
- $bCustomized = true;
+ // Search for an eventual user defined dashboard
+ $oUDSearch = new DBObjectSearch('UserDashboard');
+ $oUDSearch->AddCondition('user_id', UserRights::GetUserId(), '=');
+ $oUDSearch->AddCondition('menu_code', $sDashBoardCode, '=');
+ $oUDSet = new DBObjectSet($oUDSearch);
+ if ($oUDSet->Count() > 0)
+ {
+ // Assuming there is at most one couple {user, menu}!
+ $oUserDashboard = $oUDSet->Fetch();
+ $sDashboardDefinition = $oUserDashboard->Get('contents');
+ $bCustomized = true;
+ }
+ else
+ {
+ $sDashboardDefinition = @file_get_contents($sDashboardFile);
+ }
}
else
{
@@ -693,7 +701,137 @@ class RuntimeDashboard extends Dashboard
return $oDashboard;
}
- public function RenderEditionTools(WebPage $oPage)
+ /**
+ * @param \iTopWebPage $oPage
+ * @param bool $bEditMode
+ * @param array $aExtraParams (class and id of the current object
+ *
+ * @throws \Exception
+ */
+ public function Render($oPage, $bEditMode = false, $aExtraParams = array())
+ {
+ if (!isset($aExtraParams['query_params']) && isset($aExtraParams['class']))
+ {
+ $oObj = MetaModel::GetObject($aExtraParams['class'], $aExtraParams['id']);
+ $aRenderParams = array('query_params' => $oObj->ToArgsForQuery());
+ }
+ else
+ {
+ $aRenderParams = $aExtraParams;
+ }
+
+ parent::Render($oPage, $bEditMode, $aRenderParams);
+
+ if (isset($aExtraParams['query_params']['this->object()']))
+ {
+ /** @var \DBObject $oObj */
+ $oObj = $aExtraParams['query_params']['this->object()'];
+ $aAjaxParams = array('class' => get_class($oObj), 'id' => $oObj->GetKey());
+ }
+ else
+ {
+ $aAjaxParams = $aExtraParams;
+ }
+ if (!$bEditMode)
+ {
+ if ($this->GetAutoReload())
+ {
+ $sId = $this->GetId();
+ $sDivId = preg_replace('/[^a-zA-Z0-9_]/', '', $sId);
+ $sFile = addslashes($this->GetDefinitionFile());
+ $sExtraParams = json_encode($aAjaxParams);
+ $iReloadInterval = 1000 * $this->GetAutoReloadInterval();
+ $oPage->add_script(
+<<
0))
+ {
+ $('.dashboard_contents#'+sDivId).block();
+ $.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php',
+ { operation: 'reload_dashboard', dashboard_id: '$sId', file: '$sFile', extra_params: $sExtraParams},
+ function(data){
+ $('.dashboard_contents#'+sDivId).html(data);
+ $('.dashboard_contents#'+sDivId).unblock();
+ }
+ );
+ }
+ }
+EOF
+ );
+ }
+ else
+ {
+ $oPage->add_script(
+<<RenderDashboardSelector($oPage);
+
+ $this->RenderEditionTools($oPage, $aAjaxParams);
+ }
+ }
+
+ /**
+ * @param \iTopWebPage $oPage
+ */
+ protected function RenderDashboardSelector($oPage)
+ {
+ $sSelectorHtml = '';
+ if ($this->HasCustomDashboard())
+ {
+
+ }
+ $sSelectorHtml .= '
';
+
+ $oPage->add_ready_script(
+<<AddCondition('user_id', UserRights::GetUserId(), '=');
+ $oUDSearch->AddCondition('menu_code', $this->GetId(), '=');
+ $oUDSet = new DBObjectSet($oUDSearch);
+
+ return ($oUDSet->Count() > 0);
+ }
+ catch (Exception $e)
+ {
+ return false;
+ }
+ }
+
+ /**
+ * @param \WebPage $oPage
+ * @param array $aExtraParams
+ *
+ * @throws \Exception
+ */
+ protected function RenderEditionTools(WebPage $oPage, $aExtraParams)
{
$oPage->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery.iframe-transport.js');
$oPage->add_linked_script(utils::GetAbsoluteUrlAppRoot().'js/jquery.fileupload.js');
@@ -701,7 +839,8 @@ class RuntimeDashboard extends Dashboard
$aActions = array();
$sFile = addslashes($this->sDefinitionFile);
- $oEdit = new JSPopupMenuItem('UI:Dashboard:Edit', Dict::S('UI:Dashboard:Edit'), "return EditDashboard('{$this->sId}', '$sFile')");
+ $sJSExtraParams = json_encode($aExtraParams);
+ $oEdit = new JSPopupMenuItem('UI:Dashboard:Edit', Dict::S('UI:Dashboard:Edit'), "return EditDashboard('{$this->sId}', '$sFile', $sJSExtraParams)");
$aActions[$oEdit->GetUID()] = $oEdit->GetMenuItem();
if ($this->bCustomized)
@@ -718,16 +857,16 @@ class RuntimeDashboard extends Dashboard
$oPage->add_ready_script(
<<ul').popupmenu();
EOF
);
$oPage->add_script(
<<add_ready_script(
<< $oObj->ToArgsForQuery());
+ }
+ else
+ {
+ $aRenderParams = $aExtraParams;
+ }
+ $sJSExtraParams = json_encode($aExtraParams);
$oPage->add('');
$oPage->add('
');
- $this->Render($oPage, true);
+ $this->Render($oPage, true, $aRenderParams);
$oPage->add('
');
$oPage->add('
');
- $this->RenderProperties($oPage);
+ $this->RenderProperties($oPage, $aExtraParams);
$this->RenderDashletsSelection($oPage);
- $this->RenderDashletsProperties($oPage);
+ $this->RenderDashletsProperties($oPage, $aExtraParams);
$oPage->add('
');
$oPage->add('
'); // For exchanging messages between the panes, same as in the designer
$oPage->add('
');
@@ -846,7 +999,7 @@ $('#dashboard_editor').dialog({
}
}
window.bLeavingOnUserAction = true;
- oDashboard.save();
+ oDashboard.save($(this));
} },
{ text: "$sCancelButtonLabel", click: function() {
var oDashboard = $('.itop-dashboard').data('itopRuntimedashboard');
@@ -868,8 +1021,8 @@ $('#dashboard_editor').dialog({
$('#dashboard_editor .ui-layout-center').runtimedashboard({
dashboard_id: '$sId', layout_class: '$sLayoutClass', title: '$sTitle',
auto_reload: $sAutoReload, auto_reload_sec: $sAutoReloadSec,
- submit_to: '$sUrl', submit_parameters: {operation: 'save_dashboard'},
- render_to: '$sUrl', render_parameters: {operation: 'render_dashboard'},
+ submit_to: '$sUrl', submit_parameters: {operation: 'save_dashboard', extra_params: $sJSExtraParams},
+ render_to: '$sUrl', render_parameters: {operation: 'render_dashboard', extra_params: $sJSExtraParams},
new_dashlet_parameters: {operation: 'new_dashlet'}
});
diff --git a/application/dashlet.class.inc.php b/application/dashlet.class.inc.php
index b1b3dc51c..d98be77aa 100644
--- a/application/dashlet.class.inc.php
+++ b/application/dashlet.class.inc.php
@@ -781,6 +781,11 @@ class DashletObjectList extends Dashlet
{
$aQueryParams = $aExtraParams['query_params'];
}
+ elseif (isset($aExtraParams['class']))
+ {
+ $oObj = MetaModel::GetObject($aExtraParams['class'], $aExtraParams['id']);
+ $aQueryParams = $oObj->ToArgsForQuery();
+ }
else
{
$aQueryParams = array();
@@ -1028,6 +1033,11 @@ abstract class DashletGroupBy extends Dashlet
{
$aQueryParams = $aExtraParams['query_params'];
}
+ elseif (isset($aExtraParams['class']))
+ {
+ $oObj = MetaModel::GetObject($aExtraParams['class'], $aExtraParams['id']);
+ $aQueryParams = $oObj->ToArgsForQuery();
+ }
else
{
$aQueryParams = array();
@@ -1827,6 +1837,11 @@ class DashletHeaderDynamic extends Dashlet
{
$aQueryParams = $aExtraParams['query_params'];
}
+ elseif (isset($aExtraParams['class']))
+ {
+ $oObj = MetaModel::GetObject($aExtraParams['class'], $aExtraParams['id']);
+ $aQueryParams = $oObj->ToArgsForQuery();
+ }
else
{
$aQueryParams = array();
diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php
index 1e8262f89..48a68c62d 100644
--- a/application/displayblock.class.inc.php
+++ b/application/displayblock.class.inc.php
@@ -220,9 +220,16 @@ class DisplayBlock
$aExtraParams['currentId'] = $sId;
$sExtraParams = addslashes(str_replace('"', "'", json_encode($aExtraParams))); // JSON encode, change the style of the quotes and escape them
+ if (isset($aExtraParams['query_params']))
+ {
+ $aQueryParams = $aExtraParams['query_params'];
+ }
+ else
+ {
+ $aQueryParams = array();
+ }
-
- $sFilter = $this->m_oFilter->serialize(); // Used either for asynchronous or auto_reload
+ $sFilter = $this->m_oFilter->serialize(false, $aQueryParams); // Used either for asynchronous or auto_reload
if (!$this->m_bAsynchronous)
{
// render now
@@ -457,7 +464,15 @@ class DisplayBlock
$oSubsetSearch = $this->m_oFilter->DeepClone();
$oCondition = new BinaryExpression($oGroupByExp, '=', new ScalarExpression($aValues[$iRow]));
$oSubsetSearch->AddConditionExpression($oCondition);
- $sFilter = urlencode($oSubsetSearch->serialize());
+ if (isset($aExtraParams['query_params']))
+ {
+ $aQueryParams = $aExtraParams['query_params'];
+ }
+ else
+ {
+ $aQueryParams = array();
+ }
+ $sFilter = urlencode($oSubsetSearch->serialize(false, $aQueryParams));
$aData[] = array ('group' => $aLabels[$iRow],
'value' => "$iCount"); // TO DO: add the context information
diff --git a/application/itopwebpage.class.inc.php b/application/itopwebpage.class.inc.php
index fe3a983b2..af9872b46 100644
--- a/application/itopwebpage.class.inc.php
+++ b/application/itopwebpage.class.inc.php
@@ -101,7 +101,8 @@ class iTopWebPage extends NiceWebPage implements iTabbedPage
$this->add_linked_script('../js/jquery.mousewheel.js');
$this->add_linked_script('../js/jquery.magnific-popup.min.js');
$this->add_linked_script('../js/breadcrumb.js');
- $this->add_linked_script('../js/moment.min.js');
+ $this->add_linked_script('../js/moment.min.js');
+ $this->add_linked_script('../js/round_checkbox.js');
$sSearchAny = addslashes(Dict::S('UI:SearchValue:Any'));
diff --git a/application/menunode.class.inc.php b/application/menunode.class.inc.php
index c67137b94..17657ab6d 100644
--- a/application/menunode.class.inc.php
+++ b/application/menunode.class.inc.php
@@ -1168,37 +1168,6 @@ class DashboardMenuNode extends MenuNode
$oPage->add('');
$oDashboard->Render($oPage, false, $aExtraParams);
$oPage->add('
');
- $oDashboard->RenderEditionTools($oPage);
-
- if ($oDashboard->GetAutoReload())
- {
- $sId = $this->sMenuId;
- $sFile = addslashes($oDashboard->GetDefinitionFile());
- $sExtraParams = json_encode($aExtraParams);
- $iReloadInterval = 1000 * $oDashboard->GetAutoReloadInterval();
- $oPage->add_script(
-<< 0))
- {
- $('.dashboard_contents#'+sDivId).block();
- $.post(GetAbsoluteUrlAppRoot()+'pages/ajax.render.php',
- { operation: 'reload_dashboard', dashboard_id: '$sId', file: '$sFile', extra_params: oExtraParams},
- function(data){
- $('.dashboard_contents#'+sDivId).html(data);
- $('.dashboard_contents#'+sDivId).unblock();
- }
- );
- }
- }
-EOF
- );
- }
$bEdit = utils::ReadParam('edit', false);
if ($bEdit)
diff --git a/core/dbsearch.class.php b/core/dbsearch.class.php
index 7e4a38741..81533993a 100644
--- a/core/dbsearch.class.php
+++ b/core/dbsearch.class.php
@@ -248,10 +248,35 @@ abstract class DBSearch
public function serialize($bDevelopParams = false, $aContextParams = null)
{
- $oSearch = $this->DeepClone();
- $oSearch->ApplyParameters(array());
- $sOql = $oSearch->ToOql($bDevelopParams, $aContextParams);
- return rawurlencode(base64_encode(serialize(array($sOql, array(), $this->m_aModifierProperties))));
+ $aQueryParams = $this->GetQueryParams();
+
+ foreach($aQueryParams as $sParam => $sValue)
+ {
+ if (isset($aContextParams[$sParam]))
+ {
+ $aQueryParams[$sParam] = $aContextParams[$sParam];
+ }
+ elseif (($iPos = strpos($sParam, '->')) !== false)
+ {
+ $sParamName = substr($sParam, 0, $iPos);
+ if (isset($aContextParams[$sParamName.'->object()']))
+ {
+ $sAttCode = substr($sParam, $iPos + 2);
+ $oObj = $aContextParams[$sParamName.'->object()'];
+ if ($sAttCode == 'id')
+ {
+ $aQueryParams[$sParam] = $oObj->GetKey();
+ }
+ else
+ {
+ $aQueryParams[$sParam] = $oObj->Get($sAttCode);
+ }
+ }
+ }
+ }
+
+ $sOql = $this->ToOql($bDevelopParams, $aContextParams);
+ return rawurlencode(base64_encode(serialize(array($sOql, $aQueryParams, $this->m_aModifierProperties))));
}
/**
diff --git a/js/dashboard.js b/js/dashboard.js
index 4f6db0371..ba8fed4bd 100644
--- a/js/dashboard.js
+++ b/js/dashboard.js
@@ -304,12 +304,17 @@ $(function()
{
$('#dashboard_editor .ui-layout-east .itop-property-field-modified').trigger('apply_changes');
},
- save: function()
+ save: function(dialog)
{
var oParams = this._get_state(this.options.submit_parameters);
var me = this;
$.post(this.options.submit_to, oParams, function(data){
me.ajax_div.html(data);
+ if(dialog)
+ {
+ dialog.dialog( "close" );
+ dialog.remove();
+ }
});
},
add_dashlet_ajax: function(options, sDashletId)
diff --git a/js/round_checkbox.js b/js/round_checkbox.js
new file mode 100644
index 000000000..b7f385f8f
--- /dev/null
+++ b/js/round_checkbox.js
@@ -0,0 +1,25 @@
+// Copyright (C) 2010-2018 Combodo SARL
+//
+// This file is part of iTop.
+//
+// iTop is free software; you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// iTop is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with iTop. If not, see
+
+$('.round-btn').click(function() {
+ var mainParent = $(this).parent('.round-checkbox');
+ if($(mainParent).find('input.round-btn').is(':checked')) {
+ $(mainParent).addClass('active');
+ } else {
+ $(mainParent).removeClass('active');
+ }
+});
\ No newline at end of file
diff --git a/pages/ajax.render.php b/pages/ajax.render.php
index 0e615fddb..dbee2e935 100644
--- a/pages/ajax.render.php
+++ b/pages/ajax.render.php
@@ -953,7 +953,7 @@ try
case 'reload_dashboard':
$oPage->SetContentType('text/html');
$sDashboardId = utils::ReadParam('dashboard_id', '', false, 'raw_data');
- $aExtraParams = utils::ReadParam('extra_params', '', false, 'raw_data');
+ $aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data');
$sDashboardFile = utils::ReadParam('file', '', false, 'raw_data');
$oDashboard = RuntimeDashboard::GetDashboard($sDashboardFile, $sDashboardId);
$aResult = array('error' => '');
@@ -964,13 +964,79 @@ try
$oPage->add_ready_script("$('.dashboard_contents table.listResults').tableHover(); $('.dashboard_contents table.listResults').tablesorter( { widgets: ['myZebra', 'truncatedList']} );");
break;
+ case 'save_dashboard':
+ $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'raw_data');
+ $aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data');
+ $sJSExtraParams = json_encode($aExtraParams);
+ $aParams = array();
+ $aParams['layout_class'] = utils::ReadParam('layout_class', '');
+ $aParams['title'] = utils::ReadParam('title', '', false, 'raw_data');
+ $aParams['auto_reload'] = utils::ReadParam('auto_reload', false);
+ $aParams['auto_reload_sec'] = utils::ReadParam('auto_reload_sec', 300);
+ $aParams['cells'] = utils::ReadParam('cells', array(), false, 'raw_data');
+ $oDashboard = new RuntimeDashboard($sDashboardId);
+ $oDashboard->FromParams($aParams);
+ $oDashboard->Save();
+ $sFile = $oDashboard->GetDefinitionFile();
+ $sDivId = preg_replace('/[^a-zA-Z0-9_]/', '', $sDashboardId);
+ // trigger a reload of the current page since the dashboard just changed
+ $oPage->add_script(
+<<Revert();
+ $sFile = $oDashboard->GetDefinitionFile();
+ $sDivId = preg_replace('/[^a-zA-Z0-9_]/', '', $sDashboardId);
+ // trigger a reload of the current page since the dashboard just changed
+ $oPage->add_script(
+<<FromParams($aParams);
+ $oDashboard->Render($oPage, true /* bEditMode */, $aExtraParams);
+ break;
+
case 'dashboard_editor':
$sId = utils::ReadParam('id', '', false, 'raw_data');
+ $aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data');
$sDashboardFile = utils::ReadParam('file', '', false, 'raw_data');
$oDashboard = RuntimeDashboard::GetDashboard($sDashboardFile, $sId);
if (!is_null($oDashboard))
{
- $oDashboard->RenderEditor($oPage);
+ $oDashboard->RenderEditor($oPage, $aExtraParams);
}
break;
@@ -1001,6 +1067,7 @@ try
case 'update_dashlet_property':
require_once(APPROOT.'application/forms.class.inc.php');
require_once(APPROOT.'application/dashlet.class.inc.php');
+ $aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data');
$aParams = utils::ReadParam('params', '', false, 'raw_data');
$sDashletClass = $aParams['attr_dashlet_class'];
$sDashletType = $aParams['attr_dashlet_type'];
@@ -1009,6 +1076,7 @@ try
$aPreviousValues = $aParams['previous_values']; // hash array: 'attr_xxx' => 'old_value'
if (is_subclass_of($sDashletClass, 'Dashlet'))
{
+ /** @var \Dashlet $oDashlet */
$oDashlet = new $sDashletClass(new ModelReflectionRuntime(), $sDashletId);
$oDashlet->SetDashletType($sDashletType);
$oForm = $oDashlet->GetForm();
@@ -1034,7 +1102,7 @@ try
if ($oDashlet->IsRedrawNeeded())
{
$offset = $oPage->start_capture();
- $oDashlet->DoRender($oPage, true /* bEditMode */, false /* bEnclosingDiv */);
+ $oDashlet->DoRender($oPage, true /* bEditMode */, false /* bEnclosingDiv */, $aExtraParams);
$sHtml = addslashes($oPage->end_capture($offset));
$sHtml = str_replace("\n", '', $sHtml);
$sHtml = str_replace("\r", '', $sHtml);
@@ -1045,7 +1113,7 @@ try
if ($oDashlet->IsFormRedrawNeeded())
{
$oForm = $oDashlet->GetForm(); // Rebuild the form since the values/content changed
- $oForm->SetSubmitParams(utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php', array('operation' => 'update_dashlet_property'));
+ $oForm->SetSubmitParams(utils::GetAbsoluteUrlAppRoot().'pages/ajax.render.php', array('operation' => 'update_dashlet_property', 'extra_params' => $aExtraParams));
$sHtml = addslashes($oForm->RenderAsPropertySheet($oPage, true /* bReturnHtml */, '.itop-dashboard'));
$sHtml = str_replace("\n", '', $sHtml);
$sHtml = str_replace("\r", '', $sHtml);
@@ -1055,43 +1123,6 @@ try
}
break;
- case 'save_dashboard':
- $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'raw_data');
- $aParams = array();
- $aParams['layout_class'] = utils::ReadParam('layout_class', '');
- $aParams['title'] = utils::ReadParam('title', '', false, 'raw_data');
- $aParams['auto_reload'] = utils::ReadParam('auto_reload', false);
- $aParams['auto_reload_sec'] = utils::ReadParam('auto_reload_sec', 300);
- $aParams['cells'] = utils::ReadParam('cells', array(), false, 'raw_data');
- $oDashboard = new RuntimeDashboard($sDashboardId);
- $oDashboard->FromParams($aParams);
- $oDashboard->Save();
- // trigger a reload of the current page since the dashboard just changed
- $oPage->add_ready_script("location.reload(true);");
- break;
-
- case 'revert_dashboard':
- $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'raw_data');
- $oDashboard = new RuntimeDashboard($sDashboardId);
- $oDashboard->Revert();
-
- // trigger a reload of the current page since the dashboard just changed
- $oPage->add_ready_script("location.reload(true);");
- break;
-
- case 'render_dashboard':
- $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'raw_data');
- $aParams = array();
- $aParams['layout_class'] = utils::ReadParam('layout_class', '');
- $aParams['title'] = utils::ReadParam('title', '', false, 'raw_data');
- $aParams['cells'] = utils::ReadParam('cells', array(), false, 'raw_data');
- $aParams['auto_reload'] = utils::ReadParam('auto_reload', false);
- $aParams['auto_reload_sec'] = utils::ReadParam('auto_reload_sec', 300);
- $oDashboard = new RuntimeDashboard($sDashboardId);
- $oDashboard->FromParams($aParams);
- $oDashboard->Render($oPage, true /* bEditMode */);
- break;
-
case 'dashlet_creation_dlg':
$sOQL = utils::ReadParam('oql', '', false, 'raw_data');
RuntimeDashboard::GetDashletCreationDlgFromOQL($oPage, $sOQL);