View | Details | Raw Unified | Return to bug 33484
Collapse All | Expand All

(-)a/C4/Utils/DataTables/TablesSettings.pm (-26 / +37 lines)
Lines 60-70 sub get_columns { Link Here
60
    $columns = [
60
    $columns = [
61
        map {
61
        map {
62
            {
62
            {
63
                cannot_be_toggled  => exists $_->{cannot_be_toggled}  ? $_->{cannot_be_toggled}  : 0,
63
                cannot_be_toggled         => exists $_->{cannot_be_toggled}  ? $_->{cannot_be_toggled}  : 0,
64
                cannot_be_modified => exists $_->{cannot_be_modified} ? $_->{cannot_be_modified} : 0,
64
                cannot_be_modified        => exists $_->{cannot_be_modified} ? $_->{cannot_be_modified} : 0,
65
                is_hidden          => exists $_->{is_hidden}          ? $_->{is_hidden}          : 0,
65
                is_hidden                 => exists $_->{is_hidden}          ? $_->{is_hidden}          : 0,
66
                default_save_state => exists $_->{default_save_state} ? $_->{default_save_state} : 1,
66
                default_save_state        => exists $_->{default_save_state} ? $_->{default_save_state} : 1,
67
                columnname         => $_->{columnname},
67
                default_save_state_search => exists $_->{default_save_state_search}
68
                    && exists $_->{default_save_state}
69
                    && $_->{default_save_state}    # We need default_save_state
70
                ? $_->{default_save_state_search}
71
                : 0,
72
                columnname => $_->{columnname},
68
            }
73
            }
69
        } @$columns
74
        } @$columns
70
    ];
75
    ];
Lines 112-117 sub get_table_settings { Link Here
112
        default_save_state => $rs
117
        default_save_state => $rs
113
            ? $rs->default_save_state
118
            ? $rs->default_save_state
114
            : 1,
119
            : 1,
120
        default_save_state_search => $rs
121
            ? $rs->default_save_state_search
122
            : $list->{modules}{$module}{$page}{$tablename}{default_save_state_search},
115
    };
123
    };
116
}
124
}
117
125
Lines 158-197 sub update_columns { Link Here
158
166
159
=head3 update_table_settings
167
=head3 update_table_settings
160
168
161
  C4::Utils::DataTables::TablesSettings::update_table_settings(
169
C4::Utils::DataTables::TablesSettings::update_table_settings(
162
    {
170
    {
163
        module                 => $module,
171
        module                    => $module,
164
        page                   => $page,
172
        page                      => $page,
165
        tablename              => $tablename,
173
        tablename                 => $tablename,
166
        default_display_length => $default_display_length,
174
        default_display_length    => $default_display_length,
167
        default_sort_order     => $default_sort_order,
175
        default_sort_order        => $default_sort_order,
168
        default_save_state     => $default_save_state,
176
        default_save_state        => $default_save_state,
177
        default_save_state_search => $default_save_state_search,
169
    }
178
    }
170
  );
179
);
171
180
172
Will update the default_display_length and default_sort_order for the given table.
181
Will update the default_display_length and default_sort_order for the given table.
173
182
174
=cut
183
=cut
175
184
176
sub update_table_settings {
185
sub update_table_settings {
177
    my ($params)               = @_;
186
    my ($params)                  = @_;
178
    my $module                 = $params->{module};
187
    my $module                    = $params->{module};
179
    my $page                   = $params->{page};
188
    my $page                      = $params->{page};
180
    my $tablename              = $params->{tablename};
189
    my $tablename                 = $params->{tablename};
181
    my $default_display_length = $params->{default_display_length};
190
    my $default_display_length    = $params->{default_display_length};
182
    my $default_sort_order     = $params->{default_sort_order};
191
    my $default_sort_order        = $params->{default_sort_order};
183
    my $default_save_state     = $params->{default_save_state};
192
    my $default_save_state        = $params->{default_save_state};
193
    my $default_save_state_search = $params->{default_save_state_search};
184
194
185
    my $schema = Koha::Database->new->schema;
195
    my $schema = Koha::Database->new->schema;
186
196
187
    $schema->resultset('TablesSetting')->update_or_create(
197
    $schema->resultset('TablesSetting')->update_or_create(
188
        {
198
        {
189
            module                 => $module,
199
            module                    => $module,
190
            page                   => $page,
200
            page                      => $page,
191
            tablename              => $tablename,
201
            tablename                 => $tablename,
192
            default_display_length => $default_display_length,
202
            default_display_length    => $default_display_length,
193
            default_sort_order     => $default_sort_order,
203
            default_sort_order        => $default_sort_order,
194
            default_save_state     => $default_save_state,
204
            default_save_state        => $default_save_state,
205
            default_save_state_search => $default_save_state_search,
195
        }
206
        }
196
    );
207
    );
197
}
208
}
(-)a/admin/columns_settings.pl (-11 / +14 lines)
Lines 48-71 if ( $op eq 'cud-save' ) { Link Here
48
    my @table_ids = $input->multi_param('table_id');
48
    my @table_ids = $input->multi_param('table_id');
49
    for my $table_id (@table_ids) {
49
    for my $table_id (@table_ids) {
50
        next unless $table_id =~ m{^([^\|]*)\|(.*)$};
50
        next unless $table_id =~ m{^([^\|]*)\|(.*)$};
51
        my $default_display_length = $input->param( $table_id . '_default_display_length' );
51
        my $default_display_length    = $input->param( $table_id . '_default_display_length' );
52
        my $default_sort_order     = $input->param( $table_id . '_default_sort_order' );
52
        my $default_sort_order        = $input->param( $table_id . '_default_sort_order' );
53
        my $default_save_state     = $input->param( $table_id . '_default_save_state' );
53
        my $default_save_state        = $input->param( $table_id . '_default_save_state' );
54
        my $default_save_state_search = $input->param( $table_id . '_default_save_state_search' );
54
55
55
        undef $default_display_length if defined $default_display_length && $default_display_length eq "";
56
        undef $default_display_length if defined $default_display_length && $default_display_length eq "";
56
        undef $default_sort_order if defined $default_sort_order && $default_sort_order eq "";
57
        undef $default_sort_order     if defined $default_sort_order     && $default_sort_order eq "";
57
        $default_save_state = 0 if !defined($default_save_state);
58
        $default_save_state        //= 0;
59
        $default_save_state_search //= 0;
58
60
59
        if ( defined $default_display_length || defined $default_sort_order || defined $default_save_state )
61
        if ( defined $default_display_length || defined $default_sort_order || defined $default_save_state )
60
        {
62
        {
61
            C4::Utils::DataTables::TablesSettings::update_table_settings(
63
            C4::Utils::DataTables::TablesSettings::update_table_settings(
62
                {
64
                {
63
                    module                 => $module,
65
                    module                    => $module,
64
                    page                   => $1,
66
                    page                      => $1,
65
                    tablename              => $2,
67
                    tablename                 => $2,
66
                    default_display_length => $default_display_length,
68
                    default_display_length    => $default_display_length,
67
                    default_sort_order     => $default_sort_order,
69
                    default_sort_order        => $default_sort_order,
68
                    default_save_state     => $default_save_state,
70
                    default_save_state        => $default_save_state,
71
                    default_save_state_search => $default_save_state_search,
69
                }
72
                }
70
            );
73
            );
71
        }
74
        }
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc (-17 / +26 lines)
Lines 12-36 function KohaTable(id_selector, dt_parameters, table_settings, add_filters) { Link Here
12
12
13
    if ( table_settings ) {
13
    if ( table_settings ) {
14
14
15
        var table_key =
15
        let columns_settings = table_settings["columns"];
16
          'DataTables_' +
16
17
          table_settings['module'] +'_' +
17
        let table_key = 'DataTables_%s_%s_%s'.format(
18
          table_settings['page'] +'_' +
18
            table_settings["module"],
19
          table_settings['table'];
19
            table_settings["page"],
20
20
            table_settings["table"]);
21
        // enable stateSave
21
22
        dt_parameters['stateSave']         = true;
22
        let default_save_state        = table_settings.default_save_state;
23
        dt_parameters['stateSaveCallback'] = function( settings, data ) {
23
        let default_save_state_search = table_settings.default_save_state_search;
24
            localStorage.setItem( table_key, JSON.stringify(data) )
24
25
        }
25
        if ( default_save_state ) {
26
        dt_parameters['stateLoadCallback'] = function(settings) {
26
            dt_parameters["stateSave"] = true;
27
            return JSON.parse( localStorage.getItem(table_key) )
27
            dt_parameters["stateSaveCallback"] = function( settings, data ) {
28
                if (!default_save_state_search ) {
29
                    delete data.search;
30
                    data.columns.forEach(c => delete c.search );
31
                }
32
                localStorage.setItem( table_key, JSON.stringify(data) )
33
            }
34
            dt_parameters["stateLoadCallback"] = function(settings) {
35
                return JSON.parse( localStorage.getItem(table_key) )
36
            }
37
            let local_settings = localStorage.getItem(table_key);
38
            columns_settings = get_columns_saved_state(local_settings, columns_settings);
39
        } else {
40
            localStorage.removeItem(table_key);
28
        }
41
        }
29
42
30
        // merge stateSave for column settings
31
        var local_settings = localStorage.getItem(table_key);
32
        var system_settings = table_settings['columns'];
33
        var columns_settings = get_columns_saved_state(local_settings, system_settings);
34
43
35
        $(columns_settings).each( function() {
44
        $(columns_settings).each( function() {
36
            var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
45
            var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( selector + ' th' );
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/columns_settings.tt (-10 / +20 lines)
Lines 148-163 Link Here
148
                                        </select>
148
                                        </select>
149
                                    </p>
149
                                    </p>
150
                                [% END %]
150
                                [% END %]
151
                                [% IF table_settings.default_save_state.defined %]
151
152
                                    <p>
152
                                <p>
153
                                        Save state on page change: 
153
                                    [% SET option_name = pagename _ "|" _ tablename _ "_default_save_state" %]
154
                                        [%- IF table_settings.default_save_state -%]
154
                                    <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>
155
                                            <input type="checkbox" name="[% pagename | html %]#[% tablename | html %]_default_save_state" value="1" checked="checked" />
155
                                    [%- IF table_settings.default_save_state -%]
156
                                        [%- ELSE -%]
156
                                        <input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" checked="checked" />
157
                                            <input type="checkbox" name="[% pagename | html %]#[% tablename | html %]_default_save_state" value="1" />
157
                                    [%- ELSE -%]
158
                                        [%- END -%]
158
                                        <input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" />
159
                                    </p>
159
                                    [%- END -%]
160
                                [% END %]
160
                                </p>
161
162
                                <p>
163
                                    [% SET option_name = pagename _ "|" _ tablename _ "_default_save_state_search" %]
164
                                    <label for="[% option_name | html %]" title="Save the search and filtering in session">Save search state on page change:</label>
165
                                    [%- IF table_settings.default_save_state_search -%]
166
                                        <input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" checked="checked" />
167
                                    [%- ELSE -%]
168
                                        <input type="checkbox" id="[% option_name | html %]" name="[% option_name | html %]" value="1" />
169
                                    [%- END -%]
170
                                </p>
161
171
162
                            </div>
172
                            </div>
163
                        [% END %]
173
                        [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/datatables.js (-20 / +26 lines)
Lines 58-64 var dataTablesDefaults = { Link Here
58
    initComplete: function( settings ) {
58
    initComplete: function( settings ) {
59
        var tableId = settings.nTable.id
59
        var tableId = settings.nTable.id
60
        var state =  settings.oLoadedState;
60
        var state =  settings.oLoadedState;
61
        state && toggledClearFilter(state.search.search, tableId);
61
        state && state.search && toggledClearFilter(state.search.search, tableId);
62
62
63
        if (settings.ajax) {
63
        if (settings.ajax) {
64
            let table_node = $("#" + tableId);
64
            let table_node = $("#" + tableId);
Lines 1012-1033 function _dt_get_saved_state( localstorage_config, columns_settings ){ Link Here
1012
1012
1013
        if ( table_settings ) {
1013
        if ( table_settings ) {
1014
1014
1015
            var table_key =
1015
            let columns_settings = table_settings["columns"];
1016
                'DataTables_' +
1016
            let table_key = 'DataTables_%s_%s_%s'.format(
1017
                table_settings['module'] +'_' +
1017
                table_settings["module"],
1018
                table_settings['page'] +'_' +
1018
                table_settings["page"],
1019
                table_settings['table'];
1019
                table_settings["table"]);
1020
1020
1021
            settings["stateSave"] = true;
1021
            let default_save_state        = table_settings.default_save_state;
1022
            settings["stateSaveCallback"] = function( settings, data ) {
1022
            let default_save_state_search = table_settings.default_save_state_search;
1023
                localStorage.setItem( table_key, JSON.stringify(data) )
1023
1024
            }
1024
            if ( default_save_state ) {
1025
            settings["stateLoadCallback"] = function(settings) {
1025
                settings["stateSave"] = true;
1026
                return JSON.parse( localStorage.getItem(table_key) )
1026
                settings["stateSaveCallback"] = function( settings, data ) {
1027
                    if (!default_save_state_search ) {
1028
                        delete data.search;
1029
                        data.columns.forEach(c => delete c.search );
1030
                    }
1031
                    localStorage.setItem( table_key, JSON.stringify(data) )
1032
                }
1033
                settings["stateLoadCallback"] = function(settings) {
1034
                    return JSON.parse( localStorage.getItem(table_key) )
1035
                }
1036
                let local_settings = localStorage.getItem(table_key);
1037
                columns_settings = _dt_get_saved_state(local_settings, columns_settings);
1038
            } else {
1039
                localStorage.removeItem(table_key);
1027
            }
1040
            }
1028
            var local_settings = localStorage.getItem(table_key);
1029
            var system_settings = table_settings["columns"];
1030
            var columns_settings = _dt_get_saved_state(local_settings, system_settings);
1031
1041
1032
            if ( table_settings.hasOwnProperty('default_display_length') && table_settings['default_display_length'] != null ) {
1042
            if ( table_settings.hasOwnProperty('default_display_length') && table_settings['default_display_length'] != null ) {
1033
                settings["pageLength"] = table_settings['default_display_length'];
1043
                settings["pageLength"] = table_settings['default_display_length'];
Lines 1035-1043 function _dt_get_saved_state( localstorage_config, columns_settings ){ Link Here
1035
            if ( table_settings.hasOwnProperty('default_sort_order') && table_settings['default_sort_order'] != null ) {
1045
            if ( table_settings.hasOwnProperty('default_sort_order') && table_settings['default_sort_order'] != null ) {
1036
                settings["order"] = [[ table_settings['default_sort_order'], 'asc' ]];
1046
                settings["order"] = [[ table_settings['default_sort_order'], 'asc' ]];
1037
            }
1047
            }
1038
            if ( table_settings.hasOwnProperty('default_save_state') && table_settings['default_save_state'] === 0 ) {
1039
                localStorage.removeItem(table_key);
1040
            }
1041
        }
1048
        }
1042
1049
1043
        var table = $(this).dataTable(settings);
1050
        var table = $(this).dataTable(settings);
1044
- 

Return to bug 33484