mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-13 07:24:13 +01:00
N°4085 - Polishing : bulk modify
This commit is contained in:
@@ -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 != '') ? '<span>'.$sComment.'</span><br/>' : '';
|
||||
$sFieldAsHtml = self::GetFormElementForField($oPage, $sClass, $sAttCode, $oAttDef, $sValue, $sDisplayValue, $sInputId, '', $iFlags, $aArgs);
|
||||
$sHTMLValue = <<<HTML
|
||||
<div class="field_data">
|
||||
<div class="field_value">
|
||||
$sCommentAsHtml
|
||||
$sFieldAsHtml
|
||||
</div>
|
||||
</div>
|
||||
HTML;
|
||||
|
||||
$aFieldsMap[$sAttCode] = $sInputId;
|
||||
|
||||
$oPage->add(<<<HTML
|
||||
<fieldset>
|
||||
<legend>{$sAttLabel}</legend>
|
||||
<div class="field_container field_large" data-attribute-code="{$sAttCode}" data-attribute-type="{$sAttDefClass}" data-attribute-label="{$sAttMetaDataLabel}"
|
||||
data-attribute-flag-hidden="false" data-attribute-flag-read-only="false" data-attribute-flag-mandatory="{$sAttMetaDataFlagMandatory}"
|
||||
data-attribute-flag-must-change="{$sAttMetaDataFlagMustChange}" data-attribute-flag-must-prompt="{$sAttMetaDataFlagMustPrompt}" data-attribute-flag-slave="false">
|
||||
{$sHTMLValue}
|
||||
</div>
|
||||
</fieldset>
|
||||
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 != '') ? '<span>'.$sComment.'</span><br/>' : '';
|
||||
$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)));
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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('<input type="hidden" name="storedSelection[]" value="' + value + '">');
|
||||
selectionContainer.append('<input type="hidden" name="storedSelection[]" value="'+value+'">');
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
@@ -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" %}
|
||||
'<span class="row_input"><input type="checkbox" onclick="checkAllDataTable(\'{{ oUIBlock.GetId() }}\',this.checked,\'{{ oUIBlock.GetOption("sListId") }}\');" class="checkAll" id="field_{{ oUIBlock.GetId() }}_check_all" name="field_{{ oUIBlock.GetId() }}_check_all" title="{{ 'UI:SearchValue:CheckAll'|dict_s }} / {{ 'UI:SearchValue:UncheckAll'|dict_s }}"/></span>'
|
||||
{% else %}
|
||||
'<span class="row_input"><input type="checkbox" style="display: none;" onclick="checkAllDataTable(\'{{ oUIBlock.GetId() }}\',this.checked,\'{{ oUIBlock.GetOption("sListId") }}\');" class="checkAll" id="field_{{ oUIBlock.GetId() }}_check_all" name="field_{{ oUIBlock.GetId() }}_check_all" title="{{ 'UI:SearchValue:CheckAll'|dict_s }} / {{ 'UI:SearchValue:UncheckAll'|dict_s }}"/></span>'
|
||||
@@ -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() }}');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user