diff --git a/application/displayblock.class.inc.php b/application/displayblock.class.inc.php index 04d39fa2f7..aed0053ca7 100644 --- a/application/displayblock.class.inc.php +++ b/application/displayblock.class.inc.php @@ -27,6 +27,7 @@ use Combodo\iTop\Application\UI\Component\Html\Html; use Combodo\iTop\Application\UI\Component\Toolbar\Toolbar; use Combodo\iTop\Application\UI\iUIBlock; use Combodo\iTop\Application\UI\Layout\UIContentBlock; +use Combodo\iTop\Application\UI\Specific\DisplayBlock\BlockList\BlockList; require_once(APPROOT.'/application/utils.inc.php'); @@ -453,15 +454,6 @@ HTML; $oBlock = $this->RenderSummary($aExtraParams); break; - case 'csv': - $oBlock = $this->RenderCSV($oAppContext, $oPage); - break; - - case 'details': - case 'modify': - $oBlock = new Html('Not supported'); - break; - case 'search': $oBlock = $this->RenderSearch($oPage, $sId, $aExtraParams); break; @@ -1163,8 +1155,16 @@ JS { $aClasses = $this->m_oSet->GetSelectedClasses(); $aAuthorizedClasses = []; - $oBlock = null; - $oHtml = new Html(); + $oBlock = new BlockList(); + $bEmptySet = false; + $bNotAuthorized = false; + $bCreateNew = false; + $sLinkTarget = ''; + $sClass = ''; + $sParams = ''; + $sDefault = ''; + $sEventAttachedData = ''; + if (count($aClasses) > 1) { // Check the classes that can be read (i.e authorized) by this user... foreach ($aClasses as $sAlias => $sClassName) { @@ -1179,21 +1179,21 @@ JS } else { $iListId = $aExtraParams['currentId']; } - $oBlock = DataTableFactory::MakeForObject($oPage, $iListId, $this->m_oSet, $aExtraParams); + $oBlock->AddSubBlock(DataTableFactory::MakeForObject($oPage, $iListId, $this->m_oSet, $aExtraParams)); } else { // Empty set - $oHtml->AddHtml('

'.Dict::S('UI:NoObjectToDisplay').'

'); + $bEmptySet = true; } } else { // Not authorized - $oHtml->AddHtml('

'.Dict::S('UI:NoObjectToDisplay').'

'); + $bNotAuthorized = true; } } else { // 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 = cmdbAbstractObject::GetDisplaySetBlock($oPage, $this->m_oSet, $aExtraParams); + $oBlock->AddSubBlock(cmdbAbstractObject::GetDisplaySetBlock($oPage, $this->m_oSet, $aExtraParams)); } else { - $oHtml->AddHtml('

'.Dict::S('UI:NoObjectToDisplay').'

'); + $bEmptySet = true; $sClass = $this->m_oFilter->GetClass(); $bDisplayMenu = isset($aExtraParams['menu']) ? ($aExtraParams['menu'] == true) : true; if ($bDisplayMenu) { @@ -1212,8 +1212,7 @@ JS $sDefault .= "&default[$sKey]=$sValue"; } } - - $oHtml->AddHtml('

'."".Dict::Format('UI:ClickToCreateNew', Metamodel::GetName($sClass))."

\n"); + $bCreateNew = true; } } } @@ -1222,7 +1221,7 @@ JS $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) { - $seventAttachedData = json_encode(array( + $sEventAttachedData = json_encode(array( 'filter' => $sSearchFilter, 'breadcrumb_id' => "ui-search-".$this->m_oSet->GetClass(), 'breadcrumb_label' => MetaModel::GetName($this->m_oSet->GetClass()), @@ -1231,14 +1230,23 @@ JS 'breadcrumb_icon' => 'fas fa-search', 'breadcrumb_icon_type' => iTopWebPage::ENUM_BREADCRUMB_ENTRY_ICON_TYPE_CSS_CLASSES, )); - - $oPage->add_ready_script("$('body').trigger('update_history.itop', [$seventAttachedData])"); } } } - if (is_null($oBlock)) { - return $oHtml; + + $oBlock->AddParameter('bEmptySet', $bEmptySet); + $oBlock->AddParameter('bNotAuthorized', $bNotAuthorized); + $oBlock->AddParameter('bCreateNew', $bCreateNew); + $oBlock->AddParameter('sLinkTarget', $sLinkTarget); + $oBlock->AddParameter('sAbsoluteUrlAppRoot', utils::GetAbsoluteUrlAppRoot()); + $oBlock->AddParameter('sClass', $sClass); + $oBlock->AddParameter('sParams', $sParams); + if (!empty($sClass)) { + $oBlock->AddParameter('sClassName', Metamodel::GetName($sClass)); } + $oBlock->AddParameter('sDefault', $sDefault); + $oBlock->AddParameter('sEventAttachedData', $sEventAttachedData); + return $oBlock; } @@ -1254,10 +1262,6 @@ JS * @throws \DictExceptionMissingString * @throws \MySQLException * @throws \OQLException - * @throws \ReflectionException - * @throws \Twig\Error\LoaderError - * @throws \Twig\Error\RuntimeError - * @throws \Twig\Error\SyntaxError */ protected function RenderJoin(array $aExtraParams, WebPage $oPage) { @@ -1390,61 +1394,6 @@ JS return $oBlock; } - /** - * @param \ApplicationContext $oAppContext - * @param string $sHtml - * @param \WebPage $oPage - * - * @throws \ArchivedObjectException - * @throws \CoreException - */ - protected function RenderCSV(ApplicationContext $oAppContext, WebPage $oPage) - { - $bAdvancedMode = utils::ReadParam('advanced', false); - - $sCsvFile = strtolower($this->m_oFilter->GetClass()).'.csv'; - $sDownloadLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php?expression='.urlencode($this->m_oFilter->ToOQL(true)).'&format=csv&filename='.urlencode($sCsvFile); - $sLinkToToggle = utils::GetAbsoluteUrlAppRoot().'pages/UI.php?operation=search&'.$oAppContext->GetForLink().'&filter='.rawurlencode($this->m_oFilter->serialize()).'&format=csv'; - // Pass the parameters via POST, since expression may be very long - $aParamsToPost = array( - 'expression' => $this->m_oFilter->ToOQL(true), - 'format' => 'csv', - 'filename' => $sCsvFile, - 'charset' => 'UTF-8', - ); - if ($bAdvancedMode) { - $sDownloadLink .= '&fields_advanced=1'; - $aParamsToPost['fields_advance'] = 1; - $sChecked = 'CHECKED'; - } else { - $sLinkToToggle = $sLinkToToggle.'&advanced=1'; - $sChecked = ''; - } - $sAjaxLink = utils::GetAbsoluteUrlAppRoot().'webservices/export.php'; - - $sCharsetNotice = false; - $oHtml = new Html(); - $oHtml->AddHtml("
"); - $oHtml->AddHtml(''); - $oHtml->AddHtml(''); - $oHtml->AddHtml(''); - $oHtml->AddHtml(''); - $oHtml->AddHtml(''); - $oHtml->AddHtml('
'.Dict::Format('UI:Download-CSV', $sCsvFile).''.$sCharsetNotice.' '.Dict::S('UI:CSVExport:AdvancedMode').'
'); - if ($bAdvancedMode) { - $oHtml->AddHtml("

"); - $oHtml->AddHtml(htmlentities(Dict::S('UI:CSVExport:AdvancedMode+'), ENT_QUOTES, 'UTF-8')); - $oHtml->AddHtml("

"); - } - $oHtml->AddHtml("
"); - - $oHtml->AddHtml("
".Dict::S('UI:Loading')."
\n"); - $sJsonParams = json_encode($aParamsToPost); - $oPage->add_ready_script("$.post('$sAjaxLink', $sJsonParams, function(data) { $('#csv_content').html(data); $('#csv_content_loading').hide(); $('#csv_content').show();} );"); - return $oHtml; - } - } /**