N°1386 - Advanced Search: Navigation in list - Browse this list - fix display

This commit is contained in:
acognet
2023-05-24 11:41:06 +02:00
parent 1df7c3d8f3
commit 9ebcbf2459
9 changed files with 44 additions and 33 deletions

View File

@@ -1116,29 +1116,25 @@ abstract class DBObject implements iDisplay
*
* @see \Combodo\iTop\Form\Field\Field for rendering in portal forms
*/
public function GetAsHTML($sAttCode, $bLocalize = true)
public function GetAsHTML($sAttCode, $bLocalize = true, $bInBasket = false)
{
$sClass = get_class($this);
$oAtt = MetaModel::GetAttributeDef($sClass, $sAttCode);
if ($oAtt->IsExternalKey(EXTKEY_ABSOLUTE))
{
if ($oAtt->IsExternalKey(EXTKEY_ABSOLUTE)) {
//return $this->Get($sAttCode.'_friendlyname');
/** @var \AttributeExternalKey $oAtt */
$sTargetClass = $oAtt->GetTargetClass(EXTKEY_ABSOLUTE);
$iTargetKey = $this->Get($sAttCode);
if ($iTargetKey < 0)
{
if ($iTargetKey < 0) {
// the key points to an object that exists only in memory... no hyperlink points to it yet
return '';
}
else
{
} else {
$sHtmlLabel = utils::EscapeHtml($this->Get($sAttCode.'_friendlyname'));
$bArchived = $this->IsArchived($sAttCode);
$bObsolete = $this->IsObsolete($sAttCode);
return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sHtmlLabel, null, true, $bArchived, $bObsolete);
return $this->MakeHyperLink($sTargetClass, $iTargetKey, $sHtmlLabel, null, true, $bArchived, $bObsolete, false, $bInBasket);
}
}

View File

@@ -438,7 +438,7 @@ try
//N°1386 - Advanced Search: Navigation in list - Browse this list
$sBackUrl = utils::ReadPostedParam('back_url', '', false, 'raw');
$sFilter = utils::ReadPostedParam('filter', null, false, 'raw');
$sList = utils::ReadPostedParam('listNavigation', null, false, 'string');
$sList = utils::ReadPostedParam('list_navigation', null, false, 'string');
$aList = [];
if ($sList != null) {
$aList = json_decode($sList);

View File

@@ -572,21 +572,32 @@ class DataTableUIBlockFactory extends AbstractUIBlockFactory
$aExtraParams['table_id'] = $sTableId;
$aExtraParams['list_id'] = $sListId;
$oFilter = $oSet->GetFilter();
$sBasketAliasClass = $oFilter->GetFirstJoinedClassAlias();
if ($sBasketAliasClass === 'Link') {
$sLinkToBasket = $sBasketAliasClass.'/'.$sTargetAttr;
$sBasketAliasClass = 'Remote';
} else {
$sLinkToBasket = $sBasketAliasClass;
}
$oDataTable->SetOptions($aOptions);
$oDataTable->SetAjaxUrl(utils::GetAbsoluteUrlAppRoot()."pages/ajax.render.php");
$oDataTable->SetAjaxData([
"operation" => 'search',
"filter" => $oSet->GetFilter()->serialize(),
"filter" => $oFilter->serialize(),
"columns" => $oCustomSettings->aColumns,
"extra_params" => $aExtraParams,
"class_aliases" => $aClassAliases,
"select_mode" => $sSelectMode,
"basket" => $sLinkToBasket,
]);
$oDataTable->SetDisplayColumns($aColumnDefinition);
$oDataTable->SetResultColumns($oCustomSettings->aColumns);
$oDataTable->SetFilter($oSet->GetFilter()->ToOQL(true));
$oDataTable->SetInitDisplayData(AjaxRenderController::GetDataForTable($oSet, $aClassAliases, $aColumnsToLoad, $sIdName, $aExtraParams, 1, true));
$oFilter->SetSelectedClasses([$sBasketAliasClass]);
$oDataTable->SetFilter($oFilter->ToOQL(true));
$oDataTable->SetInitDisplayData(AjaxRenderController::GetDataForTable($oSet, $aClassAliases, $aColumnsToLoad, $sIdName, $aExtraParams, 1, $sLinkToBasket));
// row actions
if (isset($aExtraParams['row_actions'])) {

View File

@@ -52,19 +52,22 @@ class PageContentFactory
* @see cmdbAbstractObject::ENUM_DISPLAY_MODE_XXX
*
* @param string $sMode Mode the object is being displayed (view, edit, create, ...), default is view.
* @param string $sBasketFilter filter to find list of objects in basket
* @param array $aBasketList list of id of objects in basket
* @param string $sBackUrl url to go back to list of ojects in basket
*
* @param \DBObject $oObject
*
* @return \Combodo\iTop\Application\UI\Base\Layout\PageContent\PageContentWithSideContent
* @throws \CoreException
*/
public static function MakeForObjectDetails(DBObject $oObject, string $sMode = cmdbAbstractObject::DEFAULT_DISPLAY_MODE, $sFilter = null, $aList = [], $sBackUrl = null)
public static function MakeForObjectDetails(DBObject $oObject, string $sMode = cmdbAbstractObject::DEFAULT_DISPLAY_MODE, $sBasketFilter = null, $aBasketList = [], $sBackUrl = null)
{
$oLayout = new PageContentWithSideContent();
if ($sFilter != null) {
$oNavigationBlock = NavigationUIBlockFactory::MakeStandard($oObject, $sFilter, $aList, $sBackUrl);
if ($sBasketFilter != null) {
$oNavigationBlock = NavigationUIBlockFactory::MakeStandard($oObject, $sBasketFilter, $aBasketList, $sBackUrl);
if ($oNavigationBlock != null) {
$oLayout->AddSubBlock($oNavigationBlock);
}

View File

@@ -120,8 +120,12 @@ class BlockIndirectLinkSetViewTable extends AbstractBlockLinkSetViewTable
$sAttributeLinkedSetIndirectAttCode = $oAttributeLinkedSetIndirectDefinition->GetCode();
$sAttributeLinkedSetIndirectLinkedClass = $oAttributeLinkedSetIndirectDefinition->GetTargetClass();
\IssueLog::Error('AttributeLinkedSetIndirectAttCode:'.$sAttributeLinkedSetIndirectAttCode);
\IssueLog::Error('AttributeLinkedSetIndirectLinkedClass:'.$sAttributeLinkedSetIndirectLinkedClass);
$aAttCodesToDisplay = MetaModel::GetAttributeLinkedSetIndirectDatatableAttCodesToDisplay($this->sObjectClass, $this->sAttCode, $sAttributeLinkedSetIndirectLinkedClass, $sAttributeLinkedSetIndirectAttCode);
/** @noinspection PhpUnnecessaryLocalVariableInspection *//** @noinspection OneTimeUseVariablesInspection */
/** @noinspection PhpUnnecessaryLocalVariableInspection */
/** @noinspection OneTimeUseVariablesInspection */
$sAttCodesToDisplay = implode(',', $aAttCodesToDisplay);
return $sAttCodesToDisplay;

View File

@@ -62,7 +62,7 @@ class AjaxRenderController
* @throws \MySQLException
* @throws \MySQLHasGoneAwayException
*/
public static function GetDataForTable(DBObjectSet $oSet, array $aClassAliases, array $aColumnsLoad, string $sIdName = "", array $aExtraParams = [], int $iDrawNumber = 1, bool $bInBasket = false)
public static function GetDataForTable(DBObjectSet $oSet, array $aClassAliases, array $aColumnsLoad, string $sIdName = "", array $aExtraParams = [], int $iDrawNumber = 1, string $sLinkToBasket = "")
{
if (isset($aExtraParams['show_obsolete_data'])) {
$bShowObsoleteData = $aExtraParams['show_obsolete_data'];
@@ -80,7 +80,7 @@ class AjaxRenderController
if (isset($aObject[$sAlias]) && !is_null($aObject[$sAlias])) {
$aObj[$sAlias."/_key_"] = $aObject[$sAlias]->GetKey();
$aObj[$sAlias."/_key_/raw"] = $aObject[$sAlias]->GetKey();
$aObj[$sAlias."/hyperlink"] = $aObject[$sAlias]->GetHyperlink(null, true, null, false, $bInBasket);
$aObj[$sAlias."/hyperlink"] = $aObject[$sAlias]->GetHyperlink(null, true, null, false, ($sLinkToBasket === $sAlias));
$aObj[$sAlias."/friendlyname"] = $aObject[$sAlias]->Get('friendlyname');
// N°5943 Protection against $aColumnsLoad having less class aliases than $aClassAliases, this is in case the method's consumer isn't passing data correctly
@@ -95,14 +95,13 @@ class AjaxRenderController
}
foreach ($aColumnsLoad[$sAlias] as $sAttCode) {
$aObj[$sAlias."/".$sAttCode] = $aObject[$sAlias]->GetAsHTML($sAttCode);
$aObj[$sAlias."/".$sAttCode] = $aObject[$sAlias]->GetAsHTML($sAttCode, true, ($sLinkToBasket === $sAlias."/".$sAttCode));
$bExcludeRawValue = false;
// Only retrieve raw (stored) value for simple fields
foreach (cmdbAbstractObject::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude)
{
foreach (cmdbAbstractObject::GetAttDefClassesToExcludeFromMarkupMetadataRawValue() as $sAttDefClassToExclude) {
$oAttDef = MetaModel::GetAttributeDef($sClass, $sAttCode);
if (is_a($oAttDef, $sAttDefClassToExclude, true))
{
if (is_a($oAttDef, $sAttDefClassToExclude, true)) {
$bExcludeRawValue = true;
break;
}
@@ -490,7 +489,9 @@ class AjaxRenderController
$oSet = new DBObjectSet($oFilter, $aOrderBy, $aQueryParams, null, $iEnd - $iStart, $iStart);
$oSet->OptimizeColumnLoad($aColumnsLoad);
return self::GetDataForTable($oSet, $aClassAliases, $aColumnsLoad, $sIdName, $aExtraParams, $iDrawNumber, true);
$sLinkToBasket = utils::ReadParam('basket', '', false, 'string');
return self::GetDataForTable($oSet, $aClassAliases, $aColumnsLoad, $sIdName, $aExtraParams, $iDrawNumber, $sLinkToBasket);
}
/**

View File

@@ -111,7 +111,6 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({
e.preventDefault();
});
{% else %}
$('#{{ oUIBlock.GetId() }}_wrapper').find('.object-in-basket').on('click',
function (event) {
event.preventDefault();
@@ -150,7 +149,6 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({
e.preventDefault();
});
{% else %}
$('#{{ oUIBlock.GetId() }}_wrapper').find('.object-in-basket').on('click',
function (event) {
event.preventDefault();
@@ -164,7 +162,6 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({
$('#basket{{ oUIBlock.GetId() }}').submit();
}
);
{% endif %}
},
{% endif %}
@@ -479,5 +476,4 @@ if (window.ResizeObserver)
{% if oUIBlock.HasRowActions() %}
{% include 'base/components/datatable/row-actions/handler.js.twig' %}
{% endif %}
console.warn('ici-lala');
{% endif %}

View File

@@ -4,9 +4,9 @@
class="{{ oUIBlock.GetBlocksInheritanceCSSClassesAsString() }} {{ oUIBlock.GetAdditionalCSSClassesAsString() }} {{ oUIBlock.GetCSSColorClass() }} {% if oUIBlock.IsHidden() %}ibo-is-hidden{% endif %} ibo-is-opened" data-role="ibo-navigation">
{% block iboNavigation %}
<form id="ibo-form-navigation" class="ibo-navigation-form" method="post">
<input type="hidden" name="listNavigation" value="{{ oUIBlock.GetList() }}"/>
<input type="hidden" name="list_navigation" value="{{ oUIBlock.GetList() }}"/>
<input type="hidden" name="filter" value="{{ oUIBlock.GetFilter() }}"/>
<input type="hidden" name="back-url" value="{{ oUIBlock.GetBackUrl()|raw }}"/>
<input type="hidden" name="back_url" value="{{ oUIBlock.GetBackUrl()|raw }}"/>
<div class="ibo-form-navigation--nav fas fa-angle-up" id="{{ oUIBlock.GetId() }}-back"></div>
{% if oUIBlock.HasPrec() %}
<div class="ibo-form-navigation--nav fas fa-angle-double-left" id="{{ oUIBlock.GetId() }}-first"></div>

View File

@@ -1,6 +1,6 @@
{# @copyright Copyright (C) 2010-2021 Combodo SARL #}
{# @license http://opensource.org/licenses/AGPL-3.0 #}
console.warn('ICI');
$('#{{ oUIBlock.GetId() }}-back').on('click', function () {
window.location = '{{ oUIBlock.GetBackUrl()|raw }}';
});