Koha/koha-tmpl/opac-tmpl/bootstrap/en/includes/columns_settings.inc
Owen Leonard 7ecd26e4bb Bug 27005: (follow-up) Enable the exclusion of columns from export
This patch copies code from the staff interface which allows us to add a
class to table columns which should not be included in print or export
operations. The hidden column which facilitates the "Checkouts" and
"On-site checkouts" tabs can now be hidden in prints and exports.

To test, apply the patch and follow the previous test plan. When testing
the export and print buttons, confirm that the column with
"standard_checkout" data is not included.

Signed-off-by: David Nind <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2021-02-08 17:09:32 +01:00

128 lines
4.2 KiB
PHP

[% USE TablesSettings %]
<script>
function KohaTable(selector, dt_parameters, columns_settings) {
var id = 0;
var hidden_ids = [];
var included_ids = [];
$(columns_settings).each( function() {
var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector+' th' );
var used_id = dt_parameters.bKohaColumnsUseNames ? named_id : id;
if ( used_id == -1 ) return;
if ( this['is_hidden'] == "1" ) {
hidden_ids.push( used_id );
}
if ( this['cannot_be_toggled'] == "0" ) {
included_ids.push( used_id );
}
id++;
});
// By default we include all visible columns in exports and print unless they have the "noExport" class
var exportColumns = ":visible:not(.noExport)";
if( dt_parameters.hasOwnProperty("exportColumns") ){
// A custom buttons configuration has been passed from the page
exportColumns = dt_parameters["exportColumns"];
}
// Data which has the "noExport" class should not appear in print or export
var export_format = {
body: function ( data, row, column, node ) {
var newnode = $(node);
if ( newnode.find(".noExport").length > 0 ) {
newnode = newnode.clone();
newnode.find(".noExport").remove();
}
return newnode.text().replace( /\n/g, ' ' ).trim();
}
}
// Add a "Clear filter" button to table filter form field
dt_parameters[ "buttons" ] = [
{
fade: 100,
className: "dt_button_clear_filter",
titleAttr: _("Clear filter"),
enabled: false,
text: '<i class="fa fa-lg fa-remove"></i> <span class="dt-button-text">' + _("Clear filter") + '</span>',
action: function ( e, dt, node, config ) {
dt.search( "" ).draw("page");
node.addClass("disabled");
}
},
{
extend: 'csvHtml5',
text: _("CSV"),
exportOptions: {
columns: exportColumns,
format: export_format
},
},
{
extend: 'copyHtml5',
text: _("Copy"),
exportOptions: {
columns: exportColumns,
format: export_format
},
},
{
extend: 'print',
text: _("Print"),
exportOptions: {
columns: exportColumns,
format: export_format
},
}
];
if( included_ids.length > 0 ){
dt_parameters[ "buttons" ].push(
{
extend: 'colvis',
fade: 100,
columns: included_ids,
className: "columns_controls",
titleAttr: _("Columns settings"),
text: '<i class="fa fa-lg fa-gear"></i> <span class="dt-button-text">' + _("Columns") + '</span>',
exportOptions: {
columns: exportColumns
}
}
);
}
var table = $(selector);
var new_parameters = {}
$.extend(true, new_parameters, dataTablesDefaults, dt_parameters);
var default_column_defs = [
{ "aTargets": ["title-string"], "sType": "title-string" },
{ "aTargets": ["string-sort"], "sType": "string" },
{ "aTargets": ["anti-the"], "sType": "anti-the" },
{ "aTargets": ["NoSort"], "bSortable": false, "bSearchable": false },
];
if (new_parameters["aoColumnDefs"] === undefined) {
new_parameters["aoColumnDefs"] = default_column_defs;
} else {
$.extend(true, new_parameters, default_column_defs);
}
table.dataTable(new_parameters);
table.DataTable().on("column-visibility.dt", function () {
if (typeof columnsInit == 'function') {
// This function can be created separately and used to trigger
// an event after the DataTable has loaded AND column visibility
// has been updated according to the table's configuration
columnsInit();
}
}).columns(hidden_ids).visible(false);
$(".dt_button_clear_filter, .columns_controls, .export_controls").tooltip();
return table;
}
</script>