FromNormalizedParams($aValues); $oDashletBlock = $oDashlet->DoRender($oPage, true /* bEditMode */, false /* bEnclosingDiv */); if ($oDashletBlock instanceof iUIBlock) { // Wrap the dashlet // TODO 3.3 Re-normalize Dashlet's values instead of using user input $oDashletWrapper = new DashletWrapper($oDashletBlock, $sDashletClass, $oDashlet->GetID(), $aValues); $oPage->AddUiBlock($oDashletWrapper); } } return $oPage; } public function OperationGetDashletForm() { $sDashletClass = utils::ReadParam('dashlet_class', '', false, utils::ENUM_SANITIZATION_FILTER_PHP_CLASS); // TODO 3.3 Do we want to use a readparam here or SF internal mechanism ? $sValues = utils::ReadParam('values', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); $aValues = !empty($sValues) ? json_decode($sValues, true) : []; $oPage = new AjaxPage(''); $oUIBlock = TurboFormUIBlockFactory::MakeForDashletConfiguration($sDashletClass, $aValues); $oUIBlock->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction('Confirm', 'dashboard_submit', 'dashboard_submit', true)); $oUIBlock->AddSubBlock(ButtonUIBlockFactory::MakeForSecondaryAction('Cancel', 'dashboard_cancel')); $oPage->AddUiBlock($oUIBlock); return $oPage; } }