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('
'.Dict::S('UI:DashboardEdit:Properties').'
'); $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('
'.Dict::S('UI:DashboardEdit:DashletProperties').'
'); @@ -499,7 +500,7 @@ EOF { $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);