diff --git a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php index 15a0a36a63..bb09ae089e 100644 --- a/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php +++ b/datamodels/2.x/itop-portal-base/portal/src/Form/ObjectFormManager.php @@ -79,11 +79,28 @@ class ObjectFormManager extends FormManager protected $aCallbackUrls = array(); /** * List of hidden fields, used for form update (eg. remove them from the form regarding they dependencies) + * * @var array $aHiddenFieldsId * @since 2.7.5 */ protected $aHiddenFieldsId = array(); + /** + * @param string|array $formManagerData value of the formmanager_data portal parameter, either JSON or object + * + * @return array formmanager_data as a PHP array + * + * @since 2.7.6 3.0.0 N°4384 method creation : factorize as this is used twice now + */ + protected static function DecodeFormManagerData($formManagerData) + { + if (is_array($formManagerData)) { + return $formManagerData; + } + + return json_decode($formManagerData, true); + } + /** * @param string $sJson JSON data that must contain at least : * - formobject_class : The class of the object that is being edited/viewed @@ -101,11 +118,7 @@ class ObjectFormManager extends FormManager */ public static function FromJSON($sJson, $bTrustContent = false) { - if (is_array($sJson)) { - $aJson = $sJson; - } else { - $aJson = json_decode($sJson, true); - } + $aJson = static::DecodeFormManagerData($sJson); $oConfig = utils::GetConfig(); $bIsContentCheckEnabled = $oConfig->GetModuleSetting(PORTAL_ID, 'enable_formmanager_content_check', true); @@ -180,7 +193,7 @@ class ObjectFormManager extends FormManager */ public static function CanTrustFormLayoutContent($sPostedFormManagerData, $aOriginalFormProperties) { - $aPostedFormManagerData = json_decode($sPostedFormManagerData, true); + $aPostedFormManagerData = static::DecodeFormManagerData($sPostedFormManagerData); $sPostedFormLayoutType = (isset($aPostedFormManagerData['formproperties']['layout']['type'])) ? $aPostedFormManagerData['formproperties']['layout']['type'] : ''; if ($sPostedFormLayoutType === 'xhtml') { diff --git a/pages/ajax.render.php b/pages/ajax.render.php index 84e3cffb65..5585f0005a 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -965,7 +965,7 @@ try break; case 'save_dashboard': - $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'element_identifier'); + $sDashboardId = utils::ReadParam('dashboard_id', '', false, 'context_param'); $aExtraParams = utils::ReadParam('extra_params', array(), false, 'raw_data'); $sReloadURL = utils::ReadParam('reload_url', '', false, 'raw_data'); appUserPreferences::SetPref('display_original_dashboard_'.$sDashboardId, false); @@ -976,22 +976,26 @@ try $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(); + $sDashboardFile = addslashes(utils::ReadParam('file', '', false, 'string')); + $sDashboardDivId = preg_replace('/[^a-zA-Z0-9_]/', '', $sDashboardId); + // trigger a reload of the current page since the dashboard just changed $oPage->add_script( -<<