From e488ec8c38753cd21bc80cd84e6dbf8e0130ec7e Mon Sep 17 00:00:00 2001 From: Molkobain Date: Tue, 4 May 2021 11:47:37 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B03914=20-=20Fix=20"toolkit"=20actions=20n?= =?UTF-8?q?ot=20being=20displayed=20in=20the=20menu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/displayblock.class.inc.php | 20 +++++++++++++---- application/utils.inc.php | 31 +++++++++++++------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index c365cc9c0..9382644b8 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -12,6 +12,7 @@ use Combodo\iTop\Application\UI\Base\Component\DataTable\DataTableUIBlockFactory use Combodo\iTop\Application\UI\Base\Component\Html\Html; use Combodo\iTop\Application\UI\Base\Component\Pill\PillFactory; use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenu; +use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenuItem\PopoverMenuItemFactory; use Combodo\iTop\Application\UI\Base\Component\Toolbar\Separator\ToolbarSeparatorUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory; use Combodo\iTop\Application\UI\Base\iUIBlock; @@ -1820,6 +1821,8 @@ class MenuBlock extends DisplayBlock $aRegularActions = []; /** @var array $aTransitionActions Only transitions */ $aTransitionActions = []; + /** @var array $aToolkitActions Any "legacy" toolkit menu item, which are now displayed in the same menu as the $aRegularActions, after them */ + $aToolkitActions = []; if ((!isset($aExtraParams['selection_mode']) || $aExtraParams['selection_mode'] == "") && $this->m_sStyle != 'listInObject') { $oAppContext = new ApplicationContext(); $sContext = $oAppContext->GetForLink(); @@ -2144,7 +2147,7 @@ class MenuBlock extends DisplayBlock $sLabel = Dict::S('UI:ConfigureThisList'); $aRegularActions['iTop::ConfigureList'] = ['label' => $sLabel, 'url' => '#', 'onclick' => "$('#datatable_dlg_datatable_{$sId}').dialog('open'); return false;"]; } - break; + break; case 'details': $oSet->Rewind(); @@ -2153,8 +2156,10 @@ class MenuBlock extends DisplayBlock break; } - $oPopupMenuItemsBlock = utils::GetPopupMenuItemsBlock($iMenuId, $param, $aRegularActions, $sId); - if($oPopupMenuItemsBlock->HasSubBlocks()) { + $oPopupMenuItemsBlock = new UIContentBlock(); + utils::GetPopupMenuItemsBlock($oPopupMenuItemsBlock, $iMenuId, $param, $aRegularActions, $sId); + utils::GetPopupMenuItemsBlock($oPopupMenuItemsBlock, iPopupMenuExtension::MENU_OBJLIST_TOOLKIT, $param, $aToolkitActions, $sId); + if ($oPopupMenuItemsBlock->HasSubBlocks()) { $oRenderBlock->AddSubBlock($oPopupMenuItemsBlock); } @@ -2287,7 +2292,7 @@ class MenuBlock extends DisplayBlock } // - Others - if (!empty($aRegularActions)) { + if (!empty($aRegularActions) || !empty($aToolkitActions)) { if (count($aFavoriteRegularActions) > 0) { $sName = 'UI:Menu:OtherActions'; } else { @@ -2302,6 +2307,13 @@ class MenuBlock extends DisplayBlock $oActionsToolbar->AddSubBlock($oActionButton) ->AddSubBlock($oRegularActionsMenu); + + // Toolkit actions + if (!empty($aToolkitActions)) { + foreach ($aToolkitActions as $sActionId => $aActionData) { + $oRegularActionsMenu->AddItem('toolkit-actions', PopoverMenuItemFactory::MakeFromDisplayBlockAction($sActionId, $aActionData)); + } + } } } diff --git a/application/utils.inc.php b/application/utils.inc.php index df00f64ef..9187fa2d1 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -17,6 +17,7 @@ * You should have received a copy of the GNU Affero General Public License */ +use Combodo\iTop\Application\UI\Base\iUIBlock; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; use ScssPhp\ScssPhp\Compiler; @@ -1310,12 +1311,15 @@ class utils */ public static function GetPopupMenuItems($oPage, $iMenuId, $param, &$aActions, $sTableId = null, $sDataTableId = null) { - $oPage->AddUiBlock(static::GetPopupMenuItemsBlock($iMenuId, $param, $aActions, $sDataTableId)); + $oBlock = new UIContentBlock(); + static::GetPopupMenuItemsBlock($oBlock, $iMenuId, $param, $aActions, $sDataTableId); + $oPage->AddUiBlock($oBlock); } /** * Merge standard menu items with plugin provided menus items * + * @param \Combodo\iTop\Application\UI\Base\iUIBlock $oContainerBlock The UIBlock containing the menu * @param int $iMenuId * @param \DBObjectSet $param * @param array $aActions @@ -1325,9 +1329,8 @@ class utils * @throws \ArchivedObjectException * @throws \CoreException */ - public static function GetPopupMenuItemsBlock($iMenuId, $param, &$aActions, $sDataTableId = null) + public static function GetPopupMenuItemsBlock(iUIBlock &$oContainerBlock, $iMenuId, $param, &$aActions, $sDataTableId = null) { - $oBlock = new UIContentBlock(); // 1st - add standard built-in menu items // switch($iMenuId) @@ -1341,9 +1344,9 @@ class utils $sOQL = addslashes($param->GetFilter()->ToOQL(true)); $sFilter = urlencode($param->GetFilter()->serialize()); $sUrl = utils::GetAbsoluteUrlAppRoot()."pages/$sUIPage?operation=search&filter=".$sFilter."&{$sContext}"; - $oBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); - $oBlock->AddJsFileRelPath('js/jquery.dragtable.js'); - $oBlock->AddCssFileRelPath('css/dragtable.css'); + $oContainerBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); + $oContainerBlock->AddJsFileRelPath('js/jquery.dragtable.js'); + $oContainerBlock->AddCssFileRelPath('css/dragtable.css'); $aResult = array(); if (strlen($sUrl) < SERVER_MAX_URL_LENGTH) @@ -1376,12 +1379,12 @@ class utils $oObj = $param; $sOQL = "SELECT ".get_class($oObj)." WHERE id=".$oObj->GetKey(); $sUrl = ApplicationContext::MakeObjectUrl(get_class($oObj), $oObj->GetKey()); - $oBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); - $oBlock->AddJsFileRelPath('js/jquery.dragtable.js'); - $oBlock->AddCssFileRelPath('css/dragtable.css'); - $oBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); - $oBlock->AddJsFileRelPath('js/jquery.dragtable.js'); - $oBlock->AddCssFileRelPath('css/dragtable.css'); + $oContainerBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); + $oContainerBlock->AddJsFileRelPath('js/jquery.dragtable.js'); + $oContainerBlock->AddCssFileRelPath('css/dragtable.css'); + $oContainerBlock->AddJsFileRelPath('js/tabularfieldsselector.js'); + $oContainerBlock->AddJsFileRelPath('js/jquery.dragtable.js'); + $oContainerBlock->AddCssFileRelPath('css/dragtable.css'); $aResult = array( new SeparatorPopupMenuItem(), @@ -1449,13 +1452,11 @@ class utils foreach($oMenuItem->GetLinkedScripts() as $sLinkedScript) { - $oBlock->AddJsFileRelPath($sLinkedScript); + $oContainerBlock->AddJsFileRelPath($sLinkedScript); } } } } - - return $oBlock; } /**