From 4bcac389cc22dae7e6ba832656cda8707b4e70c5 Mon Sep 17 00:00:00 2001 From: Anne-Cath Date: Mon, 2 Mar 2026 10:58:56 +0100 Subject: [PATCH] Fix rebase --- pages/UI.php | 96 --------- sources/Controller/UI.php | 199 +++++++++--------- .../AttributeObjectKey.php | 4 + synchro/replica.php | 10 +- 4 files changed, 104 insertions(+), 205 deletions(-) diff --git a/pages/UI.php b/pages/UI.php index 675ec5ba90..4a28cf0532 100644 --- a/pages/UI.php +++ b/pages/UI.php @@ -1355,99 +1355,3 @@ try { IssueLog::Debug('UI.php operation='.$sOperationToLog.', error='.$e->getMessage()."\n".$sErrorStackTrace, LogChannels::CONSOLE); } -class UI -{ - /** - * Operation select_for_modify_all - * - * @param iTopWebPage $oP - * - * @throws \ApplicationException - * @throws \ArchivedObjectException - * @throws \CoreException - * @throws \OQLException - */ - public static function OperationSelectForModifyAll(iTopWebPage $oP): void - { - $oP->DisableBreadCrumb(); - $oP->set_title(Dict::S('UI:ModifyAllPageTitle')); - $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); - if (empty($sFilter)) { - throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'filter')); - } - $oFilter = DBObjectSearch::unserialize($sFilter); //TODO : check that the filter is valid - // Add user filter - $oFilter->UpdateContextFromUser(); - $oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_MODIFY); - $sClass = $oFilter->GetClass(); - $sClassName = MetaModel::GetName($sClass); - - $aDisplayParams = [ - 'icon' => MetaModel::GetClassIcon($sClass, false), - 'title' => Dict::Format('UI:Modify_ObjectsOf_Class', $sClassName), - ]; - DisplayMultipleSelectionForm($oP, $oFilter, 'form_for_modify_all', $oChecker, [], $aDisplayParams); - } - - /** - * Operation form_for_modify_all - * - * @param iTopWebPage $oP - * @param \ApplicationContext $oAppContext - * - * @throws \ArchivedObjectException - * @throws \CoreException - * @throws \CoreUnexpectedValue - * @throws \MySQLException - * @throws \OQLException - */ - public static function OperationFormForModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void - { - $oP->DisableBreadCrumb(); - $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); - $sClass = utils::ReadParam('class', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS); - $oFullSetFilter = DBObjectSearch::unserialize($sFilter); - // Add user filter - $oFullSetFilter->UpdateContextFromUser(); - $aSelectedObj = utils::ReadMultipleSelection($oFullSetFilter); - $sCancelUrl = "./UI.php?operation=search&filter=".urlencode($sFilter).$oAppContext->GetForLink(true); - $aContext = ['filter' => utils::EscapeHtml($sFilter)]; - cmdbAbstractObject::DisplayBulkModifyForm($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $sCancelUrl, [], $aContext); - } - - /** - * Operation preview_or_modify_all - * - * @param iTopWebPage $oP - * @param \ApplicationContext $oAppContext - * - * @throws \ApplicationException - * @throws \ArchivedObjectException - * @throws \CoreCannotSaveObjectException - * @throws \CoreException - * @throws \DictExceptionMissingString - * @throws \OQLException - */ - public static function OperationPreviewOrModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void - { - $oP->DisableBreadCrumb(); - $sFilter = utils::ReadParam('filter', '', false, 'raw_data'); - $oFilter = DBObjectSearch::unserialize($sFilter); // TO DO : check that the filter is valid - // Add user filter - $oFilter->UpdateContextFromUser(); - - $sClass = utils::ReadParam('class', '', false, 'class'); - $bPreview = utils::ReadParam('preview_mode', ''); - $sSelectedObj = utils::ReadParam('selectObj', '', false, 'raw_data'); - if (empty($sClass) || empty($sSelectedObj)) { // TO DO: check that the class name is valid ! - throw new ApplicationException(Dict::Format('UI:Error:2ParametersMissing', 'class', 'selectObj')); - } - $aSelectedObj = explode(',', $sSelectedObj); - $sCancelUrl = "./UI.php?operation=search&filter=".urlencode($sFilter).$oAppContext->GetForLink(true); - $aContext = [ - 'filter' => utils::EscapeHtml($sFilter), - 'selectObj' => $sSelectedObj, - ]; - cmdbAbstractObject::DoBulkModify($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $bPreview, $sCancelUrl, $aContext); - } -} diff --git a/sources/Controller/UI.php b/sources/Controller/UI.php index 12edaea609..feda122319 100644 --- a/sources/Controller/UI.php +++ b/sources/Controller/UI.php @@ -9,64 +9,63 @@ use Combodo\iTop\Application\WebPage\WebPage; class UI { - - /** - * Operation select_for_modify_all - * - * @param iTopWebPage $oP - * - * @throws \ApplicationException - * @throws \ArchivedObjectException - * @throws \CoreException - * @throws \OQLException - */ + /** + * Operation select_for_modify_all + * + * @param iTopWebPage $oP + * + * @throws \ApplicationException + * @throws \ArchivedObjectException + * @throws \CoreException + * @throws \OQLException + */ public static function OperationSelectForModifyAll(iTopWebPage $oP, $sTitleTab = 'UI:ModifyAllPageTitle', $sTitleCode = 'UI:Modify_ObjectsOf_Class', $sNextOperation = 'form_for_modify_all'): void - { - $oP->DisableBreadCrumb(); + { + $oP->DisableBreadCrumb(); $oP->set_title(Dict::S($sTitleTab)); - $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); - if (empty($sFilter)) { - throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'filter')); - } - $oFilter = DBObjectSearch::unserialize($sFilter); //TODO : check that the filter is valid - // Add user filter - $oFilter->UpdateContextFromUser(); - $oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_MODIFY); - $sClass = $oFilter->GetClass(); - $sClassName = MetaModel::GetName($sClass); + $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); + if (empty($sFilter)) { + throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'filter')); + } + $oFilter = DBObjectSearch::unserialize($sFilter); //TODO : check that the filter is valid + // Add user filter + $oFilter->UpdateContextFromUser(); + $oChecker = new ActionChecker($oFilter, UR_ACTION_BULK_MODIFY); + $sClass = $oFilter->GetClass(); + $sClassName = MetaModel::GetName($sClass); - $aDisplayParams = [ - 'icon' => MetaModel::GetClassIcon($sClass, false), + $aDisplayParams = [ + 'icon' => MetaModel::GetClassIcon($sClass, false), 'title' => Dict::Format($sTitleCode, $sClassName), - ]; + ]; self::DisplayMultipleSelectionForm($oP, $oFilter, $sNextOperation, $oChecker, [], $aDisplayParams); - } + } - /** - * Operation form_for_modify_all - * - * @param iTopWebPage $oP - * @param \ApplicationContext $oAppContext - * - * @throws \ArchivedObjectException - * @throws \CoreException - * @throws \CoreUnexpectedValue - * @throws \MySQLException - * @throws \OQLException - */ - public static function OperationFormForModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void - { - $oP->DisableBreadCrumb(); - $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); - $sClass = utils::ReadParam('class', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS); - $oFullSetFilter = DBObjectSearch::unserialize($sFilter); - // Add user filter - $oFullSetFilter->UpdateContextFromUser(); - $aSelectedObj = utils::ReadMultipleSelection($oFullSetFilter); + /** + * Operation form_for_modify_all + * + * @param iTopWebPage $oP + * @param \ApplicationContext $oAppContext + * + * @throws \ArchivedObjectException + * @throws \CoreException + * @throws \CoreUnexpectedValue + * @throws \MySQLException + * @throws \OQLException + */ + public static function OperationFormForModifyAll(iTopWebPage $oP, ApplicationContext $oAppContext): void + { + $oP->DisableBreadCrumb(); + $sFilter = utils::ReadParam('filter', '', false, utils::ENUM_SANITIZATION_FILTER_RAW_DATA); + $sClass = utils::ReadParam('class', '', false, utils::ENUM_SANITIZATION_FILTER_CLASS); + $oFullSetFilter = DBObjectSearch::unserialize($sFilter); + // Add user filter + $oFullSetFilter->UpdateContextFromUser(); + $aSelectedObj = utils::ReadMultipleSelection($oFullSetFilter); $sCancelUrl = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&filter=' . urlencode($sFilter) . '&' . $oAppContext->GetForLink(); $aContext = array('filter' => utils::EscapeHtml($sFilter)); cmdbAbstractObject::DisplayBulkModifyForm($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $sCancelUrl, array(), $aContext); - } + } /** * Operation preview_or_modify_all @@ -104,64 +103,64 @@ class UI ); cmdbAbstractObject::DoBulkModify($oP, $sClass, $aSelectedObj, 'preview_or_modify_all', $bPreview, $sCancelUrl, $aContext); }/** - * Displays a form (checkboxes) to select the objects for which to apply a given action - * Only the objects for which the action is valid can be checked. By default all valid objects are checked - * - * @param WebPage $oP WebPage The page for output - * @param \DBSearch $oFilter DBSearch The filter that defines the list of objects - * @param string $sNextOperation string The next operation (code) to be executed when the form is submitted - * @param ActionChecker $oChecker ActionChecker The helper class/instance used to check for which object the action is valid - * @param array $aExtraFormParams - * @param array $aDisplayParams - * - * @throws \ApplicationException - * @throws \ArchivedObjectException - * @throws \CoreException + * Displays a form (checkboxes) to select the objects for which to apply a given action + * Only the objects for which the action is valid can be checked. By default all valid objects are checked + * + * @param WebPage $oP WebPage The page for output + * @param \DBSearch $oFilter DBSearch The filter that defines the list of objects + * @param string $sNextOperation string The next operation (code) to be executed when the form is submitted + * @param ActionChecker $oChecker ActionChecker The helper class/instance used to check for which object the action is valid + * @param array $aExtraFormParams + * @param array $aDisplayParams + * + * @throws \ApplicationException + * @throws \ArchivedObjectException + * @throws \CoreException *@since 3.0.0 $aDisplayParams parameter * - */ + */ public static function DisplayMultipleSelectionForm(WebPage $oP, DBSearch $oFilter, string $sNextOperation, ActionChecker $oChecker, array $aExtraFormParams = [], array $aDisplayParams = []) -{ - $oAppContext = new ApplicationContext(); - $iBulkActionAllowed = $oChecker->IsAllowed(); - $aExtraParams = array('selection_type' => 'multiple', 'selection_mode' => true, 'display_limit' => false, 'menu' => false); - if ($iBulkActionAllowed == UR_ALLOWED_DEPENDS) { - $aExtraParams['selection_enabled'] = $oChecker->GetAllowedIDs(); - } else { - if (UR_ALLOWED_NO) { - throw new ApplicationException(Dict::Format('UI:ActionNotAllowed')); + { + $oAppContext = new ApplicationContext(); + $iBulkActionAllowed = $oChecker->IsAllowed(); + $aExtraParams = ['selection_type' => 'multiple', 'selection_mode' => true, 'display_limit' => false, 'menu' => false]; + if ($iBulkActionAllowed == UR_ALLOWED_DEPENDS) { + $aExtraParams['selection_enabled'] = $oChecker->GetAllowedIDs(); + } else { + if (UR_ALLOWED_NO) { + throw new ApplicationException(Dict::Format('UI:ActionNotAllowed')); + } } - } - $oForm = new Form(); + $oForm = new Form(); $oForm->SetAction( utils::GetAbsoluteUrlAppRoot().'pages/UI.php'); - $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('operation', $sNextOperation)); - $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('class', $oFilter->GetClass())); - $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('filter', utils::HtmlEntities($oFilter->Serialize()))); - $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('transaction_id', utils::GetNewTransactionId())); - foreach ($aExtraFormParams as $sName => $sValue) { - $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden($sName, $sValue)); - } - $oForm->AddSubBlock($oAppContext->GetForFormBlock()); - $oDisplayBlock = new DisplayBlock($oFilter, 'list', false); - //by default all the elements are selected - $aExtraParams['selectionMode'] = 'negative'; - if (array_key_exists('icon', $aDisplayParams) || array_key_exists('title', $aDisplayParams)) { - $aExtraParams['surround_with_panel'] = true; - if (array_key_exists('icon', $aDisplayParams)) { - $aExtraParams['panel_icon'] = $aDisplayParams['icon']; + $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('operation', $sNextOperation)); + $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('class', $oFilter->GetClass())); + $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('filter', utils::HtmlEntities($oFilter->Serialize()))); + $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden('transaction_id', utils::GetNewTransactionId())); + foreach ($aExtraFormParams as $sName => $sValue) { + $oForm->AddSubBlock(InputUIBlockFactory::MakeForHidden($sName, $sValue)); } - if (array_key_exists('title', $aDisplayParams)) { - $aExtraParams['panel_title'] = $aDisplayParams['title']; + $oForm->AddSubBlock($oAppContext->GetForFormBlock()); + $oDisplayBlock = new DisplayBlock($oFilter, 'list', false); + //by default all the elements are selected + $aExtraParams['selectionMode'] = 'negative'; + if (array_key_exists('icon', $aDisplayParams) || array_key_exists('title', $aDisplayParams)) { + $aExtraParams['surround_with_panel'] = true; + if (array_key_exists('icon', $aDisplayParams)) { + $aExtraParams['panel_icon'] = $aDisplayParams['icon']; + } + if (array_key_exists('title', $aDisplayParams)) { + $aExtraParams['panel_title'] = $aDisplayParams['title']; + } } - } - $oForm->AddSubBlock($oDisplayBlock->GetDisplay($oP, 1, $aExtraParams)); - $oToolbarButtons = ToolbarUIBlockFactory::MakeStandard(null); - $oToolbarButtons->AddCSSClass('ibo-toolbar--button'); - $oForm->AddSubBlock($oToolbarButtons); - $oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForCancel(Dict::S('UI:Button:Cancel'), 'cancel')->SetOnClickJsCode('window.history.back()')); - $oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction(Dict::S('UI:Button:Next'), 'next', Dict::S('UI:Button:Next'), true)); + $oForm->AddSubBlock($oDisplayBlock->GetDisplay($oP, 1, $aExtraParams)); + $oToolbarButtons = ToolbarUIBlockFactory::MakeStandard(null); + $oToolbarButtons->AddCSSClass('ibo-toolbar--button'); + $oForm->AddSubBlock($oToolbarButtons); + $oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForCancel(Dict::S('UI:Button:Cancel'), 'cancel')->SetOnClickJsCode('window.history.back()')); + $oToolbarButtons->AddSubBlock(ButtonUIBlockFactory::MakeForPrimaryAction(Dict::S('UI:Button:Next'), 'next', Dict::S('UI:Button:Next'), true)); - $oP->AddUiBlock($oForm); -} + $oP->AddUiBlock($oForm); + } } \ No newline at end of file diff --git a/sources/Core/AttributeDefinition/AttributeObjectKey.php b/sources/Core/AttributeDefinition/AttributeObjectKey.php index 122c489093..1d62a61718 100644 --- a/sources/Core/AttributeDefinition/AttributeObjectKey.php +++ b/sources/Core/AttributeDefinition/AttributeObjectKey.php @@ -114,4 +114,8 @@ class AttributeObjectKey extends AttributeDBFieldVoid return (int)$proposedValue; } + public function GetTargetClass($iType = EXTKEY_RELATIVE) + { + return ''; + } } diff --git a/synchro/replica.php b/synchro/replica.php index 92a23d2f95..443123d2a7 100644 --- a/synchro/replica.php +++ b/synchro/replica.php @@ -65,16 +65,8 @@ try { throw new ApplicationException(Dict::Format('UI:Error:1ParametersMissing', 'oql')); } $oFilter = DBObjectSearch::FromOQL($sOQL); - $oBlock1 = new DisplayBlock($oFilter, 'search', false, ['menu' => false, 'table_id' => '1']); + $oBlock1 = new DisplayBlock($oFilter, 'search', false, ['menu' => true, 'table_id' => '1']); $oBlock1->Display($oP, 0); - $oP->add(''); - $iSourceId = utils::ReadParam('datasource', null); - if ($iSourceId != null) { - $oSource = MetaModel::GetObject('SynchroDataSource', $iSourceId); - $oP->p(Dict::Format('Core:SynchroReplica:BackToDataSource', $oSource->GetHyperlink()).''); - } - $oBlock = new DisplayBlock($oFilter, 'list', false, ['menu' => false]); - $oBlock->Display($oP, 1); break; case 'delete':