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",