mirror of
https://github.com/Combodo/iTop.git
synced 2026-04-21 09:38:48 +02:00
303 lines
14 KiB
Twig
303 lines
14 KiB
Twig
function checkAllDataTable(table, value) {
|
|
// Set the 'selectionMode' for the future objects to load
|
|
var selectionMode = 'positive';
|
|
if (value) {
|
|
selectionMode = 'negative';
|
|
}
|
|
|
|
// Mark all the displayed items as check or unchecked depending on the value
|
|
$(table).find(':checkbox[name^=selectObj]:not([disabled])').each(function () {
|
|
var $currentCheckbox = $(this);
|
|
$currentCheckbox.prop('checked', value);
|
|
$currentLine = $currentCheckbox.closest("tr");
|
|
(value) ? $currentLine.addClass("selected") : $currentLine.removeClass("selected");
|
|
});
|
|
|
|
$(table).parent().parent().find(':input[name=selectionMode]').val(selectionMode);
|
|
// Reset the list of saved selection...
|
|
$(':input[name^=storedSelection]').remove();
|
|
$(table).parent().find(':checkbox[name^=selectObj]').trigger("change");
|
|
|
|
if (value) {
|
|
$(table).DataTable().rows().select();
|
|
} else {
|
|
$(table).DataTable().rows({page: 'current'}).deselect();
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
$('#{{ oUIBlock.GetId() }}').closest("[role=dialog]").on("dialogbeforeclose", function () {
|
|
$('#{{ oUIBlock.GetId() }}').DataTable().clear();
|
|
});
|
|
|
|
{% if oUIBlock.GetOption("select_mode") is defined %}
|
|
var oSelectedItems{{ oUIBlock.GetOption('sListId') }} = [];
|
|
{% endif %}
|
|
|
|
if ($.fn.dataTable.isDataTable('#{{ oUIBlock.GetId() }}')) {
|
|
$('#{{ oUIBlock.GetId() }}').DataTable().destroy(false);
|
|
}
|
|
|
|
var oTable{{ oUIBlock.GetId() }} = $('#{{ oUIBlock.GetId() }}').DataTable({
|
|
language: {
|
|
processing: "{{ 'UI:Datatables:Language:Processing'|dict_s }}",
|
|
search: "{{ 'UI:Datatables:Language:Search'|dict_s }}",
|
|
lengthMenu: "{{ 'UI:Datatables:Language:LengthMenu'|dict_s }}",
|
|
zeroRecords: "{{ 'UI:Datatables:Language:ZeroRecords'|dict_s }}",
|
|
info: "{{ 'UI:Datatables:Language:Info'|dict_s }}",
|
|
infoEmpty: "{{ 'UI:Datatables:Language:InfoEmpty'|dict_s }}",
|
|
infoFiltered: "({{ 'UI:Datatables:Language:InfoFiltered'|dict_s }})",
|
|
emptyTable: "{{ 'UI:Datatables:Language:EmptyTable'|dict_s }}",
|
|
paginate: {
|
|
first: "<<",
|
|
previous: "<i class=\"fas fa-angle-left\"></i>",
|
|
next: "<i class=\"fas fa-angle-right\"></i>",
|
|
last: ">>"
|
|
},
|
|
aria: {
|
|
sortAscending: ": {{ 'UI:Datatables:Language:Sort:Ascending'|dict_s }}",
|
|
sortDescending: ": {{ 'UI:Datatables:Language:Sort:Descending'|dict_s }}"
|
|
}
|
|
},
|
|
lengthMenu: [[ {{ oUIBlock.GetOptions()["iPageSize"] }}, {{ oUIBlock.GetOptions()["iPageSize"]*2 }}, {{ oUIBlock.GetOptions()["iPageSize"]*3 }}, {{ oUIBlock.GetOptions()["iPageSize"]*4 }}, -1], [ {{ oUIBlock.GetOptions()["iPageSize"] }}, {{ oUIBlock.GetOptions()["iPageSize"]*2 }}, {{ oUIBlock.GetOptions()["iPageSize"]*3 }}, {{ oUIBlock.GetOptions()["iPageSize"]*4 }}, "{{ 'Portal:Datatables:Language:DisplayLength:All'|dict_s }}"]],
|
|
dom: "<'ibo-datatable-toolbar'pil>t<'ibo-datatable-toolbar'pil>",
|
|
{% if( oUIBlock.GetOptions()["sort"][0] is defined ) %}
|
|
order: [[{{ oUIBlock.GetOptions()["sort"][0] }}, '{{ oUIBlock.GetOptions()["sort"][1] }}']],
|
|
{% else %}
|
|
order: [],
|
|
{% endif %}
|
|
ordering: true,
|
|
{% if oUIBlock.GetOption("select_mode") is defined %}
|
|
select: {
|
|
style: "{{ oUIBlock.GetOption("select_mode") }}"
|
|
},
|
|
rowCallback: function (oRow, oData) {
|
|
// Hiding pagination if only one page
|
|
if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]') === "negative") {
|
|
if (!oData.id in oSelectedItems{{ oUIBlock.GetOption('sListId') }}) {
|
|
$(oRow).select();
|
|
$(oRow).find('td:first-child input').prop('checked', true);
|
|
}
|
|
} else {
|
|
if (oData.id in oSelectedItems{{ oUIBlock.GetOption('sListId') }}) {
|
|
$(oRow).select();
|
|
$(oRow).find('td:first-child input').prop('checked', true);
|
|
}
|
|
}
|
|
},
|
|
drawCallback: function () {
|
|
// Hiding pagination if only one page
|
|
if ($(this).closest('.ibo-panel--body').find('[name=selectionMode]') === "negative") {
|
|
$(this).find('[name=selectAll]').checked();
|
|
$(table).DataTable().rows({page: 'current'}).select();
|
|
} else {
|
|
$(this).closest('.dataTables_wrapper').find('.dataTables_paginate, .dataTables_info').show();
|
|
}
|
|
},
|
|
{% endif %}
|
|
rowId: "id",
|
|
filter: false,
|
|
retrieve: true,
|
|
destroy: true,
|
|
processing: true,
|
|
serverSide: true,
|
|
columns: [
|
|
{% if oUIBlock.GetOption("select_mode") is not empty %}
|
|
{
|
|
width: "auto",
|
|
searchable: false,
|
|
sortable: false,
|
|
title:
|
|
{% if oUIBlock.GetOption("select_mode") != "single" %}
|
|
'<span class="row_input"><input type="checkbox" onclick="checkAllDataTable(\'#{{ oUIBlock.GetId() }}\',this.checked);" 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);" 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>'
|
|
{% endif %},
|
|
type: "html",
|
|
data: "",
|
|
render: function (data, type, row) {
|
|
var oCheckboxElem =
|
|
{% if oUIBlock.GetOption("select_mode") != "single" %}
|
|
$('<span class="row_input"><input type="checkbox" class="selectList{{ oUIBlock.GetId() }}" name="selectObject[]" /></span>');
|
|
{% else %}
|
|
$('<span class="row_input"><input type="radio" class="selectList{{ oUIBlock.GetId() }}" name="selectObject[]" /></span>');
|
|
{% endif %}
|
|
if (row.limited_access) {
|
|
oCheckboxElem.html('-');
|
|
} else {
|
|
oCheckboxElem.find(':input').attr('data-object-id', row.id).attr('data-target-object-id', row.target_id);
|
|
}
|
|
return oCheckboxElem.prop('outerHTML');
|
|
}
|
|
},
|
|
{% endif %}
|
|
{% for aColumn in oUIBlock.GetDisplayColumns() %}
|
|
{
|
|
width: "auto",
|
|
searchable: false,
|
|
sortable: true,
|
|
title: "{{ aColumn["attribute_label"] }}",
|
|
defaultContent: "",
|
|
type: "html",
|
|
metadata: {
|
|
object_class: "{{ aColumn["object_class"] }}",
|
|
attribute_code: "{{ aColumn["attribute_code"] }}",
|
|
attribute_type: "{{ aColumn["attribute_type"] }}",
|
|
attribute_label: "{{ aColumn["attribute_label"] }}"
|
|
},
|
|
data: "{{ aColumn["class_alias"] }}/{{ aColumn["attribute_code"] }}",
|
|
render: {
|
|
display: function (data, type, row) { {{ aColumn["render"]|raw }}},
|
|
_: "{{ aColumn["class_alias"] }}/{{ aColumn["attribute_code"] }}"
|
|
}
|
|
},
|
|
{% endfor %}
|
|
],
|
|
ajax: $.fn.dataTable.pipeline({
|
|
url: "{{ oUIBlock.GetAjaxUrl() }}",
|
|
data: {{ oUIBlock.GetAjaxData() |raw }},
|
|
method: "post",
|
|
pages: 5 // number of pages to cache
|
|
}),
|
|
initComplete: function () {
|
|
if (this.api().page.info().pages === 1) {
|
|
$('.dataTables_paginate').hide();
|
|
$('.dataTables_length').hide();
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
|
|
{% if oUIBlock.GetOption("select_mode") is not empty %}
|
|
{% if oUIBlock.GetOption("select_mode") != "single" %}
|
|
oTable{{ oUIBlock.GetId() }}.off('select').on('select', function (oEvent, dt, type, indexes) {
|
|
var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray();
|
|
// Checking input
|
|
$('#{{ oUIBlock.GetId() }} tr[role="row"].selected td:first-child input').prop('checked', true);
|
|
// Saving values in temp array
|
|
for (var i in aData) {
|
|
var iItemId = aData[i].id;
|
|
if (oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId) === -1) {
|
|
oSelectedItems{{ oUIBlock.GetOption('sListId') }}.push(iItemId);
|
|
}
|
|
}
|
|
if ((oSelectedItems{{ oUIBlock.GetOption('sListId') }}.length === oTable{{ oUIBlock.GetId() }}.page.info()["recordsTotal"] && $(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative")) {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', true);
|
|
} else {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false);
|
|
}
|
|
});
|
|
|
|
oTable{{ oUIBlock.GetId() }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) {
|
|
var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray();
|
|
|
|
// Checking input
|
|
$('#{{ oUIBlock.GetId() }} tr[role="row"]:not(.selected) td:first-child input').prop('checked', false);
|
|
// Saving values in temp array
|
|
for (var i in aData) {
|
|
var iItemId = aData[i].id;
|
|
if (oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId) > -1) {
|
|
oSelectedItems{{ oUIBlock.GetOption('sListId') }}.splice(oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId), 1);
|
|
}
|
|
}
|
|
if ((oSelectedItems{{ oUIBlock.GetOption('sListId') }}.length === 0 && $(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "positive")) {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', true);
|
|
} else {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sTableId') }}').prop('disabled', false);
|
|
}
|
|
});
|
|
{% else %}
|
|
oTable{{ oUIBlock.GetId() }}.off('select').on('select', function (oEvent, dt, type, indexes) {
|
|
var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray();
|
|
// Checking input
|
|
$('#{{ oUIBlock.GetId() }} tr[role="row"].selected td:first-child input').prop('checked', true);
|
|
// Saving values in temp array
|
|
for (var i in aData) {
|
|
var iItemId = aData[i].id;
|
|
if (oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId) === -1) {
|
|
oSelectedItems{{ oUIBlock.GetOption('sListId') }}.push(iItemId);
|
|
}
|
|
}
|
|
if ((oSelectedItems{{ oUIBlock.GetOption('sListId') }}.length === oTable{{ oUIBlock.GetId() }}.page.info()["recordsTotal"] && $(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "negative")) {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sListId') }}').prop('disabled', true);
|
|
} else {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sListId') }}').prop('disabled', false);
|
|
}
|
|
});
|
|
|
|
oTable{{ oUIBlock.GetId() }}.off('deselect').on('deselect', function (oEvent, dt, type, indexes) {
|
|
var aData = oTable{{ oUIBlock.GetId() }}.rows(indexes).data().toArray();
|
|
|
|
// Checking input
|
|
$('#{{ oUIBlock.GetId() }} tr[role="row"]:not(.selected) td:first-child input').prop('checked', false);
|
|
// Saving values in temp array
|
|
for (var i in aData) {
|
|
var iItemId = aData[i].id;
|
|
if (oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId) > -1) {
|
|
oSelectedItems{{ oUIBlock.GetOption('sListId') }}.splice(oSelectedItems{{ oUIBlock.GetOption('sListId') }}.indexOf(iItemId), 1);
|
|
}
|
|
}
|
|
if ((oSelectedItems{{ oUIBlock.GetOption('sListId') }}.length === 0 && $(this).closest('.ibo-panel--body').find('[name=selectionMode]').val() === "positive")) {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sListId') }}').prop('disabled', true);
|
|
} else {
|
|
$('#btn_ok_{{ oUIBlock.GetOption('sListId') }}').prop('disabled', false);
|
|
}
|
|
});
|
|
{% endif %}
|
|
{% endif %}
|
|
|
|
// Handles submit button
|
|
//$('#form_{{ oUIBlock.GetId() }} .form_buttons .form_btn_submit').off('click').on('click', function(oEvent){
|
|
// Extracting value(s) to be send back to the source form
|
|
{% if bMultipleSelect %}
|
|
//var oData = {values: oSelectedItems};
|
|
{% else %}
|
|
/*var oData = {value: {}};
|
|
var sItemId = Object.keys(oSelectedItems)[0];
|
|
var sItemName = oSelectedItems[sItemId];
|
|
|
|
oData.value[sItemId] = sItemName;*/
|
|
{% endif %}
|
|
|
|
// Triggering value setting on the source field
|
|
//$('[data-form-path="{{ aSource.sFormPath }}"][data-field-id="{{ aSource.sFieldId }}"]').triggerHandler('set_current_value', oData);
|
|
|
|
// Closing the modal
|
|
{% if tIsModal is defined and tIsModal == true %}
|
|
//$('#{{ sFormId }}').closest('.modal').modal('hide');
|
|
{% endif %}
|
|
//});
|
|
|
|
$('#datatable_dlg_{{ oUIBlock.GetId() }}').dialog(
|
|
{
|
|
autoOpen: false,
|
|
title: "{{ 'UI:ListConfigurationTitle'|dict_s }}",
|
|
width: 500,
|
|
open: function(){
|
|
$('#datatable_dlg_{{ oUIBlock.GetId() }}').find('[name=action]').val("none");
|
|
},
|
|
close: function (event, ui) { //save data and refresh
|
|
if( $('#datatable_dlg_{{ oUIBlock.GetId() }}').find('[name=action]').val() == "none") {
|
|
$('#datatable_dlg_{{ oUIBlock.GetId() }}').DataTableSettings('onDlgCancel');
|
|
}
|
|
}
|
|
});
|
|
|
|
$aOptions = {
|
|
sListId: '{{ oUIBlock.GetId() }}',
|
|
oColumns: {{ oUIBlock.GetResultColumnsAsJson()|raw }},
|
|
sSelectMode: "{{ oUIBlock.GetOption("select_mode") }}",
|
|
sViewLink: '{{ oUIBlock.GetOption("bViewLink") }}',
|
|
iPageSize: '{{ oUIBlock.GetOption("iPageSize") }}',
|
|
oClassAliases: JSON.parse('{{ oUIBlock.GetOption("oClassAliases") |raw }}'),
|
|
sTableId: '{{ oUIBlock.GetOption("sTableId") }}',
|
|
//oExtraParams
|
|
sRenderUrl: "{{ oUIBlock.GetAjaxUrl() }}",
|
|
oData: {{ oUIBlock.GetAjaxData() |raw }},//ttt
|
|
oDefaultSettings: {{ oUIBlock.GetOption("oDefaultSettings")|raw }},
|
|
oLabels: {moveup: "{{ 'UI:Button:MoveUp'|dict_s }}", movedown: "{{ 'UI:Button:MoveDown'|dict_s }}"},
|
|
};
|
|
|
|
$('#datatable_dlg_{{ oUIBlock.GetId() }}').DataTableSettings($aOptions); |