From 275daf3b0dd5c5b88f8e92f12b4c9fd2a5dfc80b Mon Sep 17 00:00:00 2001 From: acognet Date: Fri, 25 Jun 2021 10:11:34 +0200 Subject: [PATCH] =?UTF-8?q?N=C2=B04085=20-=20Polishing=20:=20bulk=20modify?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/cmdbabstract.class.inc.php | 45 ++++++++------- application/utils.inc.php | 8 +-- js/dataTables.main.js | 12 ++-- .../components/datatable/layout.ready.js.twig | 20 +++---- .../static/formtable/layout.ready.js.twig | 55 ++++++++++++++++--- .../datatable/static/layout.ready.js.twig | 8 +-- 6 files changed, 93 insertions(+), 55 deletions(-) diff --git a/application/cmdbabstract.class.inc.php b/application/cmdbabstract.class.inc.php index 7a0d33deb..b9f3b49a4 100644 --- a/application/cmdbabstract.class.inc.php +++ b/application/cmdbabstract.class.inc.php @@ -30,6 +30,7 @@ use Combodo\iTop\Application\UI\Base\Layout\MultiColumn\MultiColumn; use Combodo\iTop\Application\UI\Base\Layout\Object\ObjectFactory; use Combodo\iTop\Application\UI\Base\Layout\TabContainer\Tab\AjaxTab; use Combodo\iTop\Application\UI\Base\Layout\UIContentBlock; +use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory; use Combodo\iTop\Renderer\BlockRenderer; use Combodo\iTop\Renderer\Console\ConsoleFormRenderer; @@ -2180,6 +2181,7 @@ EOF break; // TODO 3.0.0: Isn't this part obsolete now that we have the activity panel or should we keep it for devs using it in custom extensions or maybe *transition forms* as a caselog can be MUST_PROMPT? + // used for bulk modify in 3.0 case 'CaseLog': $sInputType = self::ENUM_INPUT_TYPE_HTML_EDITOR; $aStyles = array(); @@ -4557,30 +4559,27 @@ HTML $sDisplayValue = $this->GetEditValue($sAttCode); $aArgs = array('this' => $this, 'formPrefix' => $sPrefix); - $sCommentAsHtml = ($sComment != '') ? ''.$sComment.'
' : ''; - $sFieldAsHtml = self::GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', $iFlags, $aArgs); - $sHTMLValue = << -
- $sCommentAsHtml - $sFieldAsHtml -
- -HTML; - $aFieldsMap[$sAttCode] = $sInputId; - $oPage->add(<< - {$sAttLabel} -
- {$sHTMLValue} -
- -HTML - ); + $oFieldset = FieldSetUIBlockFactory::MakeStandard($sAttLabel); + $oPage->AddSubBlock($oFieldset); + + $oDivField = FieldUIBlockFactory::MakeLarge(""); + // UIContentBlockUIBlockFactory::MakeStandard(null,["field_container field_large"]); + $oDivField->AddDataAttribute("attribute-type", $sAttDefClass); + $oDivField->AddDataAttribute("attribute-label", $sAttMetaDataLabel); + $oDivField->AddDataAttribute("attribute-flag-hidden", false); + $oDivField->AddDataAttribute("attribute-flag-read-only", false); + $oDivField->AddDataAttribute("attribute-flag-mandatory", $sAttMetaDataFlagMandatory); + $oDivField->AddDataAttribute("attribute-flag-must-change", $sAttMetaDataFlagMustChange); + $oDivField->AddDataAttribute("attribute-flag-must-prompt", $sAttMetaDataFlagMustPrompt); + $oDivField->AddDataAttribute("attribute-flag-slave", false); + $oFieldset->AddSubBlock($oDivField); + + $sCommentAsHtml = ($sComment != '') ? ''.$sComment.'
' : ''; + $sFieldAsHtml = self::GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', $iFlags, $aArgs); + $sHTMLValue = $sCommentAsHtml.$sFieldAsHtml; + $oDivField->AddSubBlock(new Html($sHTMLValue)); } } @@ -5176,7 +5175,7 @@ EOF $oFilter = new DBObjectSearch($sClass); $oFilter->AddCondition('id', $aKeys, 'IN'); $oSet = new CMDBobjectSet($oFilter); - $oDisplaySet = \Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory::MakeStandard("0"); + $oDisplaySet = UIContentBlockUIBlockFactory::MakeStandard("0"); $oP->AddSubBlock($oDisplaySet); $oDisplaySet->AddSubBlock(CMDBAbstractObject::GetDisplaySetBlock($oP, $oSet, array('display_limit' => false, 'menu' => false))); diff --git a/application/utils.inc.php b/application/utils.inc.php index 2852c8d20..a19f03583 100644 --- a/application/utils.inc.php +++ b/application/utils.inc.php @@ -538,14 +538,12 @@ class utils */ public static function ReadMultipleSelection($oFullSetFilter) { - $aSelectedObj = utils::ReadParam('selectObject', array()); + $aSelectedObj = utils::ReadParam('selectObject[]', array()); $sSelectionMode = utils::ReadParam('selectionMode', ''); - if ($sSelectionMode != '') - { + if ($sSelectionMode != '') { // Paginated selection $aExceptions = utils::ReadParam('storedSelection', array()); - if ($sSelectionMode == 'positive') - { + if ($sSelectionMode == 'positive') { // Only the explicitely listed items are selected $aSelectedObj = $aExceptions; } diff --git a/js/dataTables.main.js b/js/dataTables.main.js index 6f3761002..2685f4297 100644 --- a/js/dataTables.main.js +++ b/js/dataTables.main.js @@ -19,7 +19,7 @@ function checkAllDataTable(tableId, value, listId) { (value) ? currentLine.addClass("selected") : currentLine.removeClass("selected"); }); - tableSelector.parent().parent().find(':input[name=selectionMode]').val(selectionMode); + tableSelector.closest(".dataTables_wrapper").parent().find(':input[name=selectionMode]').val(selectionMode); // Reset the list of saved selection... $(':input[name^=storedSelection]').remove(); tableSelector.parent().find(':checkbox[name^=selectObj]').trigger("change"); @@ -29,25 +29,25 @@ function checkAllDataTable(tableId, value, listId) { } else { tableSelector.DataTable().rows({page: 'current'}).deselect(); } - updateDataTableSelection(listId); + updateDataTableSelection(listId, tableId); return true; } -function updateDataTableSelection(listId) { +function updateDataTableSelection(listId, tableId) { let selectionContainer = $('#'+listId+' [data-target="ibo-datatable--selection"]'); let selectionCount = $('#'+listId+' [name="selectionCount"]'); let selectionMode = $('#'+listId+' [name=selectionMode]').val(); selectionContainer.html(''); let currentSelection = window['oSelectedItems'+listId]; - for(let i in currentSelection) { + for (let i in currentSelection) { let value = currentSelection[i]; - selectionContainer.append(''); + selectionContainer.append(''); } if (selectionMode === 'negative') { - let total = $('#'+$aOptions.sListId).DataTable().page.info()["recordsTotal"]; + let total = $('#'+tableId).DataTable().page.info()["recordsTotal"]; selectionCount.val(total-currentSelection.length); } else { selectionCount.val(currentSelection.length); diff --git a/templates/base/components/datatable/layout.ready.js.twig b/templates/base/components/datatable/layout.ready.js.twig index 3bf7bfc35..cdf9f2fb8 100644 --- a/templates/base/components/datatable/layout.ready.js.twig +++ b/templates/base/components/datatable/layout.ready.js.twig @@ -42,8 +42,8 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ scrollX: true, {% if oUIBlock.GetOption('sMaxHeight') is not empty %} scrollY: "{{ oUIBlock.GetOption('sMaxHeight') }}", - scrollCollapse: true, {% endif %} + scrollCollapse: true, lengthMenu: [[ {{ iPageSize }}, {{ iPageSize*2 }}, {{ iPageSize*3 }}, {{ iPageSize*4 }}, -1], [ {{ iPageSize }}, {{ iPageSize*2 }}, {{ iPageSize*3 }}, {{ iPageSize*4 }}, "{{ 'UI:Datatables:Language:DisplayLength:All'|dict_s }}"]], dom: "<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>t<'ibo-datatable--toolbar'<'ibo-datatable--toolbar-left' pl><'ibo-datatable--toolbar-right' i>>", {% if( oUIBlock.GetOption("sort")[0] is defined ) %} @@ -113,7 +113,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ sortable: false, orderable: false, title: - {% if oUIBlock.GetOption("select_mode") != "single" %} + {% if oUIBlock.GetOption("select_mode") != "single" %} '' {% else %} '' @@ -182,9 +182,9 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ this.find('thead').unblock(); {% if oUIBlock.GetOption("select_mode") is not empty %} - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); {% if oUIBlock.GetOption("select_mode") != "single" %} - this.api().on('select', function (oEvent, dt, type, indexes) { + this.api().on('select', function (oEvent, dt, type, indexes) { if (bSelectAllowed{{ oUIBlock.GetId() }}) { let aData = oTable{{ sListIDForVarSuffix }}.rows(indexes).data().toArray(); @@ -199,7 +199,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } @@ -214,7 +214,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } @@ -236,7 +236,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } @@ -248,7 +248,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } @@ -268,7 +268,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) === -1) { oSelectedItems{{ sListId }}.push(iItemId); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } @@ -288,7 +288,7 @@ var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ if (oSelectedItems{{ sListId }}.indexOf(iItemId) > -1) { oSelectedItems{{ sListId }}.splice(oSelectedItems{{ sListId }}.indexOf(iItemId), 1); - updateDataTableSelection('{{ sListId }}'); + updateDataTableSelection('{{ sListId }}', '{{ oUIBlock.GetId() }}'); } } } diff --git a/templates/base/components/datatable/static/formtable/layout.ready.js.twig b/templates/base/components/datatable/static/formtable/layout.ready.js.twig index 1c9dafee9..993c80300 100644 --- a/templates/base/components/datatable/static/formtable/layout.ready.js.twig +++ b/templates/base/components/datatable/static/formtable/layout.ready.js.twig @@ -1,7 +1,7 @@ {% set sListId = oUIBlock.GetId() %} {% set sListIDForVarSuffix = ('' ~ sListId)|sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %} -var table{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ +var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ language: { emptyTable: "{{ 'UI:Message:EmptyList:UseAdd'|dict_s }}" }, @@ -44,17 +44,22 @@ var table{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ }); {% if (oUIBlock.GetOption('bFullscreen')) %} -var myheight = $("#ibo-main-content").height()-$("#ibo-main-content")[0].scrollHeight+$("#{{ oUIBlock.GetId() }}").height(); -if (myheight < 200) +var heightS{{ sListIDForVarSuffix }} = 0; +var heightD{{ sListIDForVarSuffix }} = 0; +if ($("#{{ oUIBlock.GetId() }}").height() > 0) { - myheight = 200; -}; -$("#{{ oUIBlock.GetId() }}_wrapper").find(".dataTables_scrollBody").height(myheight); + heightD{{ sListIDForVarSuffix }} = $("#ibo-main-content").height()-$("#ibo-main-content")[0].scrollHeight+$("#{{ oUIBlock.GetId() }}").height(); + heightS{{ sListIDForVarSuffix }} = $("#ibo-main-content").height(); + if (heightD{{ sListIDForVarSuffix }} > 200) + { + $("#{{ oUIBlock.GetId() }}_wrapper").find(".dataTables_scrollBody").height(heightD{{ sListIDForVarSuffix }}); + } +} {% endif %} if ($('#{{ oUIBlock.GetId() }}').find('thead').is(':visible')) { - table{{ sListIDForVarSuffix }}.columns.adjust().draw(); + oTable{{ sListIDForVarSuffix }}.columns.adjust().draw(); } if (window.ResizeObserver) @@ -67,4 +72,40 @@ if (window.ResizeObserver) }, 120); }); oFromTable{{ sListIDForVarSuffix }}Resize.observe($('#{{ oUIBlock.GetId() }}')[0]); + + {% if (oUIBlock.GetOption('bFullscreen')) %} + let heightScreen{{ sListIDForVarSuffix }} = heightS{{ sListIDForVarSuffix }}; + let heightDatatable{{ sListIDForVarSuffix }} = heightD{{ sListIDForVarSuffix }}; + let oFromScreen{{ sListIDForVarSuffix }}ResizeTimeout = null; + const oFromScreen{{ sListIDForVarSuffix }}Resize = new ResizeObserver(function () { + clearTimeout(oFromScreen{{ sListIDForVarSuffix }}ResizeTimeout); + oFromScreen{{ sListIDForVarSuffix }}ResizeTimeout = setTimeout(function () { + if ($("#{{ oUIBlock.GetId() }}_wrapper").height() > 0) + { + console.warn("$_wrapper).height()"+$("#{{ oUIBlock.GetId() }}_wrapper").height()); + if (heightDatatable{{ sListIDForVarSuffix }}> 0) + { + let calcul = $("#ibo-main-content").height()+heightDatatable{{ sListIDForVarSuffix }}-heightScreen{{ sListIDForVarSuffix }}; + if (calcul > 200) + { + $("#{{ oUIBlock.GetId() }}_wrapper").find(".dataTables_scrollBody").height(calcul); + } + } + else + { + heightDatatable{{ sListIDForVarSuffix }} = $("#ibo-main-content").height()-$("#ibo-main-content")[0].scrollHeight+$("#{{ oUIBlock.GetId() }}_wrapper").height(); + heightScreen{{ sListIDForVarSuffix }} = $("#ibo-main-content").height(); + if (heightDatatable{{ sListIDForVarSuffix }} > 200) + { + $("#{{ oUIBlock.GetId() }}_wrapper").find(".dataTables_scrollBody").height(heightDatatable{{ sListIDForVarSuffix }}); + } + } + + } + }, 120); + }); + oFromScreen{{ sListIDForVarSuffix }}Resize.observe($('#ibo-main-content')[0]); + + {% endif %} + } \ No newline at end of file diff --git a/templates/base/components/datatable/static/layout.ready.js.twig b/templates/base/components/datatable/static/layout.ready.js.twig index 49cc18a37..92bc6da4d 100644 --- a/templates/base/components/datatable/static/layout.ready.js.twig +++ b/templates/base/components/datatable/static/layout.ready.js.twig @@ -3,12 +3,12 @@ {% set sListId = oUIBlock.GetId() %} {% set sListIDForVarSuffix = ('' ~ sListId)|sanitize(constant('utils::ENUM_SANITIZATION_FILTER_VARIABLE_NAME')) %} {% if oUIBlock.GetOption("iPageSize") is not empty %} - {% set iPageSize = oUIBlock.GetOption("iPageSize") %} +{% set iPageSize = oUIBlock.GetOption("iPageSize") %} {% else %} - {% set iPageSize = 10 %} +{% set iPageSize = 10 %} {% endif %} -$('#{{ oUIBlock.GetId() }}').DataTable({ +var oTable{{ sListIDForVarSuffix }} = $('#{{ oUIBlock.GetId() }}').DataTable({ language: { processing: "{{ 'UI:Datatables:Language:Processing'|dict_s }}", search: "{{ 'UI:Datatables:Language:Search'|dict_s }}", @@ -32,8 +32,8 @@ $('#{{ oUIBlock.GetId() }}').DataTable({ scrollX: true, {% if oUIBlock.GetOption('sMaxHeight') is not empty %} scrollY: "{{ oUIBlock.GetOption('sMaxHeight') }}", - scrollCollapse: true, {% endif %} + scrollCollapse: true, order: [], autoWidth: false, rowId: "id",