Bug 33484: Clearly separate search and configuration
We want to make distinguish the search terms and the configuration/option of the table (number of entries, column visibility, etc.) Signed-off-by: Pedro Amorim <pedro.amorim@ptfs-europe.com> Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
parent
9107c0dd5a
commit
9060d4a305
|
|
@ -60,11 +60,16 @@ sub get_columns {
|
|||
$columns = [
|
||||
map {
|
||||
{
|
||||
cannot_be_toggled => exists $_->{cannot_be_toggled} ? $_->{cannot_be_toggled} : 0,
|
||||
cannot_be_modified => exists $_->{cannot_be_modified} ? $_->{cannot_be_modified} : 0,
|
||||
is_hidden => exists $_->{is_hidden} ? $_->{is_hidden} : 0,
|
||||
default_save_state => exists $_->{default_save_state} ? $_->{default_save_state} : 1,
|
||||
columnname => $_->{columnname},
|
||||
cannot_be_toggled => exists $_->{cannot_be_toggled} ? $_->{cannot_be_toggled} : 0,
|
||||
cannot_be_modified => exists $_->{cannot_be_modified} ? $_->{cannot_be_modified} : 0,
|
||||
is_hidden => exists $_->{is_hidden} ? $_->{is_hidden} : 0,
|
||||
default_save_state => exists $_->{default_save_state} ? $_->{default_save_state} : 1,
|
||||
default_save_state_search => exists $_->{default_save_state_search}
|
||||
&& exists $_->{default_save_state}
|
||||
&& $_->{default_save_state} # We need default_save_state
|
||||
? $_->{default_save_state_search}
|
||||
: 0,
|
||||
columnname => $_->{columnname},
|
||||
}
|
||||
} @$columns
|
||||
];
|
||||
|
|
@ -112,6 +117,9 @@ sub get_table_settings {
|
|||
default_save_state => $rs
|
||||
? $rs->default_save_state
|
||||
: 1,
|
||||
default_save_state_search => $rs
|
||||
? $rs->default_save_state_search
|
||||
: $list->{modules}{$module}{$page}{$tablename}{default_save_state_search},
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -158,40 +166,43 @@ sub update_columns {
|
|||
|
||||
=head3 update_table_settings
|
||||
|
||||
C4::Utils::DataTables::TablesSettings::update_table_settings(
|
||||
C4::Utils::DataTables::TablesSettings::update_table_settings(
|
||||
{
|
||||
module => $module,
|
||||
page => $page,
|
||||
tablename => $tablename,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
module => $module,
|
||||
page => $page,
|
||||
tablename => $tablename,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
default_save_state_search => $default_save_state_search,
|
||||
}
|
||||
);
|
||||
);
|
||||
|
||||
Will update the default_display_length and default_sort_order for the given table.
|
||||
|
||||
=cut
|
||||
|
||||
sub update_table_settings {
|
||||
my ($params) = @_;
|
||||
my $module = $params->{module};
|
||||
my $page = $params->{page};
|
||||
my $tablename = $params->{tablename};
|
||||
my $default_display_length = $params->{default_display_length};
|
||||
my $default_sort_order = $params->{default_sort_order};
|
||||
my $default_save_state = $params->{default_save_state};
|
||||
my ($params) = @_;
|
||||
my $module = $params->{module};
|
||||
my $page = $params->{page};
|
||||
my $tablename = $params->{tablename};
|
||||
my $default_display_length = $params->{default_display_length};
|
||||
my $default_sort_order = $params->{default_sort_order};
|
||||
my $default_save_state = $params->{default_save_state};
|
||||
my $default_save_state_search = $params->{default_save_state_search};
|
||||
|
||||
my $schema = Koha::Database->new->schema;
|
||||
|
||||
$schema->resultset('TablesSetting')->update_or_create(
|
||||
{
|
||||
module => $module,
|
||||
page => $page,
|
||||
tablename => $tablename,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
module => $module,
|
||||
page => $page,
|
||||
tablename => $tablename,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
default_save_state_search => $default_save_state_search,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,24 +48,27 @@ if ( $op eq 'cud-save' ) {
|
|||
my @table_ids = $input->multi_param('table_id');
|
||||
for my $table_id (@table_ids) {
|
||||
next unless $table_id =~ m{^([^\|]*)\|(.*)$};
|
||||
my $default_display_length = $input->param( $table_id . '_default_display_length' );
|
||||
my $default_sort_order = $input->param( $table_id . '_default_sort_order' );
|
||||
my $default_save_state = $input->param( $table_id . '_default_save_state' );
|
||||
my $default_display_length = $input->param( $table_id . '_default_display_length' );
|
||||
my $default_sort_order = $input->param( $table_id . '_default_sort_order' );
|
||||
my $default_save_state = $input->param( $table_id . '_default_save_state' );
|
||||
my $default_save_state_search = $input->param( $table_id . '_default_save_state_search' );
|
||||
|
||||
undef $default_display_length if defined $default_display_length && $default_display_length eq "";
|
||||
undef $default_sort_order if defined $default_sort_order && $default_sort_order eq "";
|
||||
$default_save_state = 0 if !defined($default_save_state);
|
||||
undef $default_sort_order if defined $default_sort_order && $default_sort_order eq "";
|
||||
$default_save_state //= 0;
|
||||
$default_save_state_search //= 0;
|
||||
|
||||
if ( defined $default_display_length || defined $default_sort_order || defined $default_save_state )
|
||||
{
|
||||
C4::Utils::DataTables::TablesSettings::update_table_settings(
|
||||
{
|
||||
module => $module,
|
||||
page => $1,
|
||||
tablename => $2,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
module => $module,
|
||||
page => $1,
|
||||
tablename => $2,
|
||||
default_display_length => $default_display_length,
|
||||
default_sort_order => $default_sort_order,
|
||||
default_save_state => $default_save_state,
|
||||
default_save_state_search => $default_save_state_search,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,25 +12,34 @@ function KohaTable(id_selector, dt_parameters, table_settings, add_filters) {
|
|||
|
||||
if ( table_settings ) {
|
||||
|
||||
var table_key =
|
||||
'DataTables_' +
|
||||
table_settings['module'] +'_' +
|
||||
table_settings['page'] +'_' +
|
||||
table_settings['table'];
|
||||
let columns_settings = table_settings["columns"];
|
||||
|
||||
// enable stateSave
|
||||
dt_parameters['stateSave'] = true;
|
||||
dt_parameters['stateSaveCallback'] = function( settings, data ) {
|
||||
localStorage.setItem( table_key, JSON.stringify(data) )
|
||||
}
|
||||
dt_parameters['stateLoadCallback'] = function(settings) {
|
||||
return JSON.parse( localStorage.getItem(table_key) )
|
||||
let table_key = 'DataTables_%s_%s_%s'.format(
|
||||
table_settings["module"],
|
||||
table_settings["page"],
|
||||
table_settings["table"]);
|
||||
|
||||
let default_save_state = table_settings.default_save_state;
|
||||
let default_save_state_search = table_settings.default_save_state_search;
|
||||
|
||||
if ( default_save_state ) {
|
||||
dt_parameters["stateSave"] = true;
|
||||
dt_parameters["stateSaveCallback"] = function( settings, data ) {
|
||||
if (!default_save_state_search ) {
|
||||
delete data.search;
|
||||
data.columns.forEach(c => delete c.search );
|
||||
}
|
||||
localStorage.setItem( table_key, JSON.stringify(data) )
|
||||
}
|
||||
dt_parameters["stateLoadCallback"] = function(settings) {
|
||||
return JSON.parse( localStorage.getItem(table_key) )
|
||||
}
|
||||
let local_settings = localStorage.getItem(table_key);
|
||||
columns_settings = get_columns_saved_state(local_settings, columns_settings);
|
||||
} else {
|
||||
localStorage.removeItem(table_key);
|
||||
}
|
||||
|
||||
// merge stateSave for column settings
|
||||
var local_settings = localStorage.getItem(table_key);
|
||||
var system_settings = table_settings['columns'];
|
||||
var columns_settings = get_columns_saved_state(local_settings, system_settings);
|
||||
|
||||
$(columns_settings).each( function() {
|
||||
var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
|
||||
|
|
|
|||
|
|
@ -148,16 +148,26 @@
|
|||
</select>
|
||||
</p>
|
||||
[% END %]
|
||||
[% IF table_settings.default_save_state.defined %]
|
||||
<p>
|
||||
Save state on page change:
|
||||
[%- IF table_settings.default_save_state -%]
|
||||
<input type="checkbox" name="[% pagename | html %]#[% tablename | html %]_default_save_state" value="1" checked="checked" />
|
||||
[%- ELSE -%]
|
||||
<input type="checkbox" name="[% pagename | html %]#[% tablename | html %]_default_save_state" value="1" />
|
||||
[%- END -%]
|
||||
</p>
|
||||
[% END %]
|
||||
|
||||
<p>
|
||||
[% SET option_name = pagename _ "|" _ tablename _ "_default_save_state" %]
|
||||
<label for="[% option_name | html %]" title="Save the column visibility, length of the table and order in session">Save configuration state on page change:</label>
|
||||
[%- IF table_settings.default_save_state -%]
|
||||
<input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" checked="checked" />
|
||||
[%- ELSE -%]
|
||||
<input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" />
|
||||
[%- END -%]
|
||||
</p>
|
||||
|
||||
<p>
|
||||
[% SET option_name = pagename _ "|" _ tablename _ "_default_save_state_search" %]
|
||||
<label for="[% option_name | html %]" title="Save the search and filtering in session">Save search state on page change:</label>
|
||||
[%- IF table_settings.default_save_state_search -%]
|
||||
<input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" checked="checked" />
|
||||
[%- ELSE -%]
|
||||
<input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" />
|
||||
[%- END -%]
|
||||
</p>
|
||||
|
||||
</div>
|
||||
[% END %]
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ var dataTablesDefaults = {
|
|||
initComplete: function( settings ) {
|
||||
var tableId = settings.nTable.id
|
||||
var state = settings.oLoadedState;
|
||||
state && toggledClearFilter(state.search.search, tableId);
|
||||
state && state.search && toggledClearFilter(state.search.search, tableId);
|
||||
|
||||
if (settings.ajax) {
|
||||
let table_node = $("#" + tableId);
|
||||
|
|
@ -1012,22 +1012,32 @@ function _dt_get_saved_state( localstorage_config, columns_settings ){
|
|||
|
||||
if ( table_settings ) {
|
||||
|
||||
var table_key =
|
||||
'DataTables_' +
|
||||
table_settings['module'] +'_' +
|
||||
table_settings['page'] +'_' +
|
||||
table_settings['table'];
|
||||
let columns_settings = table_settings["columns"];
|
||||
let table_key = 'DataTables_%s_%s_%s'.format(
|
||||
table_settings["module"],
|
||||
table_settings["page"],
|
||||
table_settings["table"]);
|
||||
|
||||
settings["stateSave"] = true;
|
||||
settings["stateSaveCallback"] = function( settings, data ) {
|
||||
localStorage.setItem( table_key, JSON.stringify(data) )
|
||||
let default_save_state = table_settings.default_save_state;
|
||||
let default_save_state_search = table_settings.default_save_state_search;
|
||||
|
||||
if ( default_save_state ) {
|
||||
settings["stateSave"] = true;
|
||||
settings["stateSaveCallback"] = function( settings, data ) {
|
||||
if (!default_save_state_search ) {
|
||||
delete data.search;
|
||||
data.columns.forEach(c => delete c.search );
|
||||
}
|
||||
localStorage.setItem( table_key, JSON.stringify(data) )
|
||||
}
|
||||
settings["stateLoadCallback"] = function(settings) {
|
||||
return JSON.parse( localStorage.getItem(table_key) )
|
||||
}
|
||||
let local_settings = localStorage.getItem(table_key);
|
||||
columns_settings = _dt_get_saved_state(local_settings, columns_settings);
|
||||
} else {
|
||||
localStorage.removeItem(table_key);
|
||||
}
|
||||
settings["stateLoadCallback"] = function(settings) {
|
||||
return JSON.parse( localStorage.getItem(table_key) )
|
||||
}
|
||||
var local_settings = localStorage.getItem(table_key);
|
||||
var system_settings = table_settings["columns"];
|
||||
var columns_settings = _dt_get_saved_state(local_settings, system_settings);
|
||||
|
||||
if ( table_settings.hasOwnProperty('default_display_length') && table_settings['default_display_length'] != null ) {
|
||||
settings["pageLength"] = table_settings['default_display_length'];
|
||||
|
|
@ -1035,9 +1045,6 @@ function _dt_get_saved_state( localstorage_config, columns_settings ){
|
|||
if ( table_settings.hasOwnProperty('default_sort_order') && table_settings['default_sort_order'] != null ) {
|
||||
settings["order"] = [[ table_settings['default_sort_order'], 'asc' ]];
|
||||
}
|
||||
if ( table_settings.hasOwnProperty('default_save_state') && table_settings['default_save_state'] === 0 ) {
|
||||
localStorage.removeItem(table_key);
|
||||
}
|
||||
}
|
||||
|
||||
var table = $(this).dataTable(settings);
|
||||
|
|
|
|||
Loading…
Reference in New Issue