diff --git a/application/dashlet.class.inc.php b/application/dashlet.class.inc.php index 63a6834fd..d0ece5dc1 100644 --- a/application/dashlet.class.inc.php +++ b/application/dashlet.class.inc.php @@ -906,18 +906,22 @@ class DashletObjectList extends Dashlet $sShowMenu = $this->aProperties['menu'] ? '1' : '0'; $oFilter = $this->GetDBSearch($aExtraParams); $sClass = $oFilter->GetClass(); - $oPanel = PanelUIBlockFactory::MakeForClass($sClass, Dict::S($sTitle)) - ->AddCSSClass('ibo-datatable-panel'); + //$oPanel = PanelUIBlockFactory::MakeForClass($sClass, Dict::S($sTitle)) + // ->AddCSSClass('ibo-datatable-panel'); $oBlock = new DisplayBlock($oFilter, 'list'); $aParams = array( 'menu' => $sShowMenu, 'table_id' => self::APPUSERPREFERENCES_PREFIX.$this->sId, - 'surround_with_panel' => false, + 'surround_with_panel' => true, 'max_height' => '500px', + "panel_title" => Dict::S($sTitle), + "panel_class" => $sClass, ); $sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occurring in the same DOM) - $oBlock->DisplayIntoContentBlock($oPanel, $oPage, $sBlockId, array_merge($aExtraParams, $aParams)); + //$oBlock->DisplayIntoContentBlock($oPanel, $oPage, $sBlockId, array_merge($aExtraParams, $aParams)); + + $oPanel = $oBlock->GetDisplay($oPage, $sBlockId, array_merge($aExtraParams, $aParams)); return $oPanel; } @@ -1256,15 +1260,21 @@ abstract class DashletGroupBy extends Dashlet break; } - $oPanel = PanelUIBlockFactory::MakeForClass($sClass, Dict::S($sTitle)); + //$oPanel = \Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory::MakeStandard(); + //PanelUIBlockFactory::MakeForClass($sClass, Dict::S($sTitle)); $sBlockId = 'block_'.$this->sId.($bEditMode ? '_edit' : ''); // make a unique id (edition occurring in the same DOM) $oBlock = new DisplayBlock($oFilter, $sType); - $oBlock->DisplayIntoContentBlock($oPanel, $oPage, $sBlockId, array_merge($aExtraParams, $aParams)); + //$oBlock->DisplayIntoContentBlock($oPanel, $oPage, $sBlockId, array_merge($aExtraParams, $aParams)); + $aExtraParams["surround_with_panel"] = true; + $aExtraParams["panel_title"] = Dict::S($sTitle); + $aExtraParams["panel_class"] = $sClass; + $oPanel = $oBlock->GetDisplay($oPage, $sType, array_merge($aExtraParams, $aParams)); if ($bEditMode) { $oPanel->AddHtml('
'); } + return $oPanel; } diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index 3e322bd9a..680896a29 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -10,6 +10,7 @@ use Combodo\iTop\Application\UI\Base\Component\Button\ButtonUIBlockFactory; use Combodo\iTop\Application\UI\Base\Component\Dashlet\DashletFactory; 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\Panel\PanelUIBlockFactory; 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; @@ -17,6 +18,7 @@ use Combodo\iTop\Application\UI\Base\Component\Toolbar\Separator\ToolbarSeparato use Combodo\iTop\Application\UI\Base\Component\Toolbar\ToolbarUIBlockFactory; use Combodo\iTop\Application\UI\Base\iUIBlock; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockWithJSRefreshCallback; use Combodo\iTop\Application\UI\DisplayBlock\BlockChart\BlockChart; use Combodo\iTop\Application\UI\DisplayBlock\BlockChartAjaxBars\BlockChartAjaxBars; @@ -149,6 +151,12 @@ class DisplayBlock 'order_direction', /** string order direction 'asc' or 'desc' */ 'display_limit', + 'surround_with_panel', + /**bool true if list may be render in panel block*/ + 'panel_title', + /**string title of panel block*/ + 'panel_class', + /**string class for panel block style*/ ], 'csv' => [], 'join' => array_merge([ @@ -171,6 +179,12 @@ class DisplayBlock /**positive or negative*/ 'max_height', /** string Max. height of the list, if not specified will occupy all the available height no matter the pagination */ + 'surround_with_panel', + /**bool true if list may be render in panel block*/ + 'panel_title', + /**string title of panel block*/ + 'panel_class', + /**string class for panel block style*/ ], DataTableUIBlockFactory::GetAllowedParams()), 'list_search' => array_merge([ 'update_history', @@ -1173,11 +1187,20 @@ JS ), ); $sFormat = isset($aExtraParams['format']) ? $aExtraParams['format'] : 'UI:Pagination:HeaderNoSelection'; - $sTitle = Dict::Format($sFormat, $iTotalCount); $aExtraParams['query_params'] = $this->m_oFilter->GetInternalParams(); $aOption['dom'] = 'pl'; - $oBlock = DataTableUIBlockFactory::MakeForStaticData($sTitle, $aAttribs, $aData, null, $aExtraParams, $this->m_oFilter->ToOQL(), $aOption); + + if (isset($aExtraParams["surround_with_panel"]) && $aExtraParams["surround_with_panel"]) { + $sTitle = Dict::Format($sFormat, $iTotalCount); + $oBlock = PanelUIBlockFactory::MakeForClass($aExtraParams["panel_class"], $aExtraParams["panel_title"]); + $oBlock->AddSubTitleBlock(new Html($sTitle)); + $oDataTable = DataTableUIBlockFactory::MakeForStaticData("", $aAttribs, $aData, null, $aExtraParams, $this->m_oFilter->ToOQL(), $aOption); + $oBlock->AddSubBlock($oDataTable); + } else { + $sTitle = Dict::Format($sFormat, $iTotalCount); + $oBlock = DataTableUIBlockFactory::MakeForStaticData($sTitle, $aAttribs, $aData, null, $aExtraParams, $this->m_oFilter->ToOQL(), $aOption); + } } else { // Simply count the number of elements in the set @@ -1186,7 +1209,12 @@ JS if (isset($aExtraParams['format'])) { $sFormat = $aExtraParams['format']; } - $oBlock = new Html(''.Dict::Format($sFormat, $iCount).'
'); + if (isset($aExtraParams["surround_with_panel"]) && $aExtraParams["surround_with_panel"]) { + $oBlock = PanelUIBlockFactory::MakeForClass($aExtraParams["panel_class"], $aExtraParams["panel_title"]); + $oBlock->AddSubBlock(new Html(''.Dict::Format($sFormat, $iCount).'
')); + } else { + $oBlock = new Html(''.Dict::Format($sFormat, $iCount).'
'); + } } return $oBlock; @@ -1273,6 +1301,22 @@ JS $oBlock->bNotAuthorized = true; } } else { + if (isset($aExtraParams['update_history']) && true == $aExtraParams['update_history']) { + $sSearchFilter = $this->m_oSet->GetFilter()->serialize(); + // Limit the size of the URL (N°1585 - request uri too long) + if (strlen($sSearchFilter) < SERVER_MAX_URL_LENGTH) { + $oBlock->sEventAttachedData = json_encode(array( + 'filter' => $sSearchFilter, + 'breadcrumb_id' => "ui-search-".$this->m_oSet->GetClass(), + 'breadcrumb_label' => MetaModel::GetName($this->m_oSet->GetClass()), + 'breadcrumb_max_count' => utils::GetConfig()->Get('breadcrumb.max_count'), + 'breadcrumb_instance_id' => MetaModel::GetConfig()->GetItopInstanceid(), + 'breadcrumb_icon' => 'fas fa-search', + 'breadcrumb_icon_type' => iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES, + )); + } + } + // The list is made of only 1 class of objects, actions on the list are possible if (($this->m_oSet->CountWithLimit(1) > 0) && (UserRights::IsActionAllowed($this->m_oSet->GetClass(), UR_ACTION_READ, $this->m_oSet) == UR_ALLOWED_YES)) { $oBlock->AddSubBlock(cmdbAbstractObject::GetDisplaySetBlock($oPage, $this->m_oSet, $aExtraParams)); @@ -1299,25 +1343,16 @@ JS $oBlock->bCreateNew = true; } } - } - if (isset($aExtraParams['update_history']) && true == $aExtraParams['update_history']) { - $sSearchFilter = $this->m_oSet->GetFilter()->serialize(); - // Limit the size of the URL (N°1585 - request uri too long) - if (strlen($sSearchFilter) < SERVER_MAX_URL_LENGTH) { - $oBlock->sEventAttachedData = json_encode(array( - 'filter' => $sSearchFilter, - 'breadcrumb_id' => "ui-search-".$this->m_oSet->GetClass(), - 'breadcrumb_label' => MetaModel::GetName($this->m_oSet->GetClass()), - 'breadcrumb_max_count' => utils::GetConfig()->Get('breadcrumb.max_count'), - 'breadcrumb_instance_id' => MetaModel::GetConfig()->GetItopInstanceid(), - 'breadcrumb_icon' => 'fas fa-search', - 'breadcrumb_icon_type' => iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES, - )); + if (isset($aExtraParams["surround_with_panel"]) && $aExtraParams["surround_with_panel"]) { + $oPanel = PanelUIBlockFactory::MakeForClass($aExtraParams["panel_class"], $aExtraParams["panel_title"]); + $oPanel->AddSubBlock($oBlock); + + return $oPanel; } } - } + } return $oBlock; } diff --git a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php index 65a7ab6eb..deba6301b 100644 --- a/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php +++ b/sources/application/UI/Base/Component/DataTable/DataTableUIBlockFactory.php @@ -130,7 +130,8 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory if (!isset($aExtraParams['surround_with_panel']) || $aExtraParams['surround_with_panel']) { $iCount = $oSet->Count(); - $oContainer = PanelUIBlockFactory::MakeForClass($oSet->GetClass(), "")->AddCSSClass('ibo-datatable-panel'); + $sTitle = (isset($aExtraParams['panel_title'])) ? $aExtraParams['panel_title'] : ""; + $oContainer = PanelUIBlockFactory::MakeForClass($oSet->GetClass(), $sTitle)->AddCSSClass('ibo-datatable-panel'); $oContainer->SetSubTitle(Dict::Format("UI:Pagination:HeaderNoSelection", $iCount)); $oContainer->AddToolbarBlock($oBlockMenu); $oContainer->AddMainBlock($oDataTable); @@ -823,8 +824,10 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory public static function MakeForStaticData(string $sTitle, array $aColumns, array $aData, ?string $sId = null, array $aExtraParams = [], string $sFilter = "", array $aOptions = []) { $oBlock = new UIContentBlock(); - $oTitle = TitleUIBlockFactory::MakeNeutral($sTitle, 3); - $oBlock->AddSubBlock($oTitle); + if ($sTitle != "") { + $oTitle = TitleUIBlockFactory::MakeNeutral($sTitle, 3); + $oBlock->AddSubBlock($oTitle); + } $oTable = new StaticTable($sId, [], $aExtraParams); $oTable->SetColumns($aColumns); $oTable->SetData($aData);