unless ($yaml) {
$yaml = eval { YAML::LoadFile($yml_path) };
- warn "ERROR: the yaml file for DT::TablesSettings is not correctly formated: $@"
+ warn "ERROR: the yaml file for DT::TablesSettings is not correctly formatted: $@"
if $@;
$cache->set_in_cache( 'TablesSettingsYaml', $yaml, { expiry => 3600 } );
}
while ( my $c = $rs->next ) {
my $column = first { $c->columnname eq $_->{columnname} }
- @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename } };
+ @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename }{ columns } };
$column->{is_hidden} = $c->is_hidden;
$column->{cannot_be_toggled} = $c->cannot_be_toggled;
}
- my $columns = $list->{modules}{$module}{$page}{$tablename} || [];
+ my $columns = $list->{modules}{$module}{$page}{$tablename}{columns} || [];
# Assign default value if does not exist
$columns = [ map {
return $columns;
}
+sub get_table_settings {
+ my ( $module, $page, $tablename ) = @_;
+ my $list = get_yaml;
+
+ my $schema = Koha::Database->new->schema;
+
+ my $rs = $schema->resultset('TablesSetting')->search(
+ {
+ module => $module,
+ page => $page,
+ tablename => $tablename,
+ }
+ )->next;
+ return $rs ? $rs : $list->{modules}{$module}{$page}{$tablename};
+}
+
sub get_modules {
my $list = get_yaml;
while ( my $c = $rs->next ) {
my $column = first { $c->columnname eq $_->{columnname} }
- @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename } };
+ @{ $list->{modules}{ $c->module }{ $c->page }{ $c->tablename }{columns} };
$column->{is_hidden} = $c->is_hidden;
$column->{cannot_be_toggled} = $c->cannot_be_toggled;
$column->{cannot_be_modified} = 0
}
}
+=head3 update_table_settings
+
+C4::Utils::DataTables::TablesSettings::update_table_settings(
+ {
+ module => $module,
+ pag => $page,
+ tablename => $tablename,
+ default_display_length => $default_display_length,
+ default_sort_order => $default_sort_order
+ }
+);
+
+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 $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,
+ }
+ );
+}
+
1;
=cut
+=head3 GetColumns
+
+var columns_settings = [% TablesSettings.GetColumns( module, page, table 'json' ) | $raw%]
+
+This method is usually be used to retrieve the columns settings for a DataTable init.
+
+So the 'json' format will be provided and the columns_settings JS var will be
+passed as argument of the constructor.
+
+=cut
+
sub GetColumns {
my ( $self, $module, $page, $table, $format ) = @_;
$format //= q{};
return 0;
}
+=head3 GetTableSettings
+
+[% SET table_settings = GetTableSettings( module, page, table ) %]
+
+This method is used to retrieve the tables settings (like table_settings.default_display_length and
+table_settings.default_sort_order).
+They can be passed to the DataTable constructor (for iDisplayLength and order parameters)
+
+=cut
+
+sub GetTableSettings {
+ my ( $self, $module, $page, $table, $format ) = @_;
+ $format //= q{};
+
+ my $settings = C4::Utils::DataTables::TablesSettings::get_table_settings( $module, $page, $table );
+
+ return $format eq 'json'
+ ? to_json( $settings || {} )
+ : $settings
+}
+
1;
}
);
+ 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' );
+ if ( $default_display_length && $default_sort_order ) {
+ 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,
+ }
+ );
+ }
+ }
+
$action = 'list';
}
[% END %]
<script>
var columns_settings = [% TablesSettings.GetColumns( 'acqui', 'basket', 'orders', 'json' ) | $raw %];
+ [% SET table_settings = TablesSettings.GetTableSettings( 'acqui', 'basket', 'orders' ) %];
$(document).ready(function() {
KohaTable("orders", {
[% IF ( active ) %]
[% END %]
"sPaginationType": "full",
"autoWidth": false,
- "exportColumns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13]
+ "exportColumns": [0,1,2,3,4,5,6,7,8,9,10,11,12,13],
+ "iDisplayLength": [% table_settings.default_display_length | html %],
+ "order": [[ [% table_settings.default_sort_order | html %], 'asc']],
}, columns_settings);
var cancelledorderst = $("#cancelledorderst").dataTable($.extend(true, {}, dataTablesDefaults, {
[% USE raw %]
[% USE Asset %]
+[% USE TablesSettings %]
[% SET footerjs = 1 %]
[% SET panel_id = 0 %]
+[% USE Dumper %]
[% BLOCK pagelist %]
[% IF module.keys and module.keys.size > 0 %]
Jump to:
[% SET tables = module %]
[% IF tables.$pagename.keys and tables.$pagename.keys.size > 0 %]
[% FOR tablename IN tables.$pagename.keys.sort %]
- [% IF pagename == 'additem' AND tablename == 'itemst' %]
- <div class="alert">Changes made below will only apply to item subfields that are mapped to the 'items' table. <a href="/cgi-bin/koha/admin/koha2marclinks.pl?tablename=items">Go to Koha to MARC mapping</a></div>
- [% END %]
- <table>
- <caption>
- [% IF tablename == 'currencies-table' %]
- Currency
- [% ELSIF pagename == 'additem' AND tablename == 'itemst' %]
- Items Editor
- [% ELSE %]
- Table id: [% tablename | html %]
- [% END %]
- </caption>
- <thead>
- <tr>
- <th>Column name</th>
- <th>Is hidden by default</th>
- <th>Cannot be toggled</th>
- </tr>
- </thead>
- <tbody>
- [% FOR column IN tables.$pagename.$tablename %]
- [% SET value = pagename _ '#' _ tablename _ '#' _ column.columnname %]
+ [% SET table_id = pagename _ '#' _ tablename %]
+ <div class="datatable_config" id="[% table_id | html %]" style="border:1px solid #7EA6B2; padding: 1em;">
+ <input type="hidden" name="table_id" value="[% table_id| html %]" />
+ [% IF pagename == 'additem' AND tablename == 'itemst' %]
+ <div class="alert">Changes made below will only apply to item subfields that are mapped to the 'items' table. <a href="/cgi-bin/koha/admin/koha2marclinks.pl?tablename=items">Go to Koha to MARC mapping</a></div>
+ [% END %]
+ <table>
+ <caption>
+ [% IF tablename == 'currencies-table' %]
+ Currency
+ [% ELSIF pagename == 'additem' AND tablename == 'itemst' %]
+ Items Editor
+ [% ELSE %]
+ Table id: [% tablename | html %]
+ [% END %]
+ </caption>
+ <thead>
<tr>
- <td>
- [% column.columnname | html %]
- <input type="hidden" name="columnid" value="[% value | html %]" />
- </td>
- <td>
- [% IF column.is_hidden %]
- [% IF column.cannot_be_modified %]
- <input type="checkbox" name="[% value | html %]_hidden" value="1" checked="checked" disabled="disabled" />
- <input type="hidden" name="[% value | html %]_hidden" value="1" />
- [% ELSE %]
- <input type="checkbox" name="[% value | html %]_hidden" value="1" checked="checked" />
- [% END %]
- [% ELSE %]
- [% IF column.cannot_be_modified %]
- <input type="checkbox" name="[% value | html %]_hidden" value="1" disabled="disabled" />
- <input type="hidden" name="[% value | html %]_hidden" value="0" />
+ <th>Column name</th>
+ <th>Is hidden by default</th>
+ <th>Cannot be toggled</th>
+ </tr>
+ </thead>
+ <tbody>
+ [% FOR column IN tables.$pagename.$tablename.columns %]
+ [% SET value = pagename _ '#' _ tablename _ '#' _ column.columnname %]
+ <tr>
+ <td>
+ [% column.columnname | html %]
+ <input type="hidden" name="columnid" value="[% value | html %]" />
+ </td>
+ <td>
+ [% IF column.is_hidden %]
+ [% IF column.cannot_be_modified %]
+ <input type="checkbox" name="[% value | html %]_hidden" value="1" checked="checked" disabled="disabled" />
+ <input type="hidden" name="[% value | html %]_hidden" value="1" />
+ [% ELSE %]
+ <input type="checkbox" name="[% value | html %]_hidden" value="1" checked="checked" />
+ [% END %]
[% ELSE %]
- <input type="checkbox" name="[% value | html %]_hidden" value="1" />
+ [% IF column.cannot_be_modified %]
+ <input type="checkbox" name="[% value | html %]_hidden" value="1" disabled="disabled" />
+ <input type="hidden" name="[% value | html %]_hidden" value="0" />
+ [% ELSE %]
+ <input type="checkbox" name="[% value | html %]_hidden" value="1" />
+ [% END %]
[% END %]
- [% END %]
- </td>
- <td>
- [% IF column.cannot_be_toggled %]
- [% IF column.cannot_be_modified %]
- <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" checked="checked" disabled="disabled" />
- <input type="hidden" name="[% value | html %]_cannot_be_toggled" value="1" />
+ </td>
+ <td>
+ [% IF column.cannot_be_toggled %]
+ [% IF column.cannot_be_modified %]
+ <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" checked="checked" disabled="disabled" />
+ <input type="hidden" name="[% value | html %]_cannot_be_toggled" value="1" />
+ [% ELSE %]
+ <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" checked="checked" />
+ [% END %]
[% ELSE %]
- <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" checked="checked" />
+ [% IF column.cannot_be_modified %]
+ <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" disabled="disabled" />
+ <input type="hidden" name="[% value | html %]_cannot_be_toggled" value="0" />
+ [% ELSE %]
+ <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" />
+ [% END %]
[% END %]
+ </td>
+ </tr>
+ [% END %]
+ </tbody>
+ </table>
+ [% SET table_settings = TablesSettings.GetTableSettings( modulename, pagename, tablename ) %]
+ [% IF table_settings.default_display_length %]
+ <p>
+ Default display length:
+ <select name="[% table_id | html %]_default_display_length">
+ [% IF table_settings.default_display_length == 10 %]
+ <option value="10" selected="selected">10</option>
+ [% ELSE %]
+ [% END %]
+ [% IF table_settings.default_display_length == 20 %]
+ <option value="20" selected="selected">20</option>
+ [% ELSE %]
+ <option value="20">20</option>
+ [% END %]
+ [% IF table_settings.default_display_length == 50 %]
+ <option value="50" selected="selected">50</option>
+ [% ELSE %]
+ <option value="50">50</option>
+ [% END %]
+ [% IF table_settings.default_display_length == 100 %]
+ <option value="100" selected="selected">100</option>
+ [% ELSE %]
+ <option value="100">100</option>
+ [% END %]
+ [% IF table_settings.default_display_length == -1 %]
+ <option value="-1" selected="selected">All</option>
+ [% ELSE %]
+ <option value="-1">All</option>
+ [% END %]
+ </select>
+ </p>
+ [% END %]
+ [% IF table_settings.default_sort_order.defined %]
+ <p>
+ Default sort order:
+ <select name="[% pagename | html %]#[% tablename | html %]_default_sort_order">
+ [% FOR column IN tables.$pagename.$tablename.columns %]
+ [% IF table_settings.default_sort_order == loop.count - 1 %]
+ <option value="[% loop.count - 1 %]" selected="selected">[% column.columnname | html %]</option>
[% ELSE %]
- [% IF column.cannot_be_modified %]
- <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" disabled="disabled" />
- <input type="hidden" name="[% value | html %]_cannot_be_toggled" value="0" />
- [% ELSE %]
- <input type="checkbox" name="[% value | html %]_cannot_be_toggled" value="1" />
- [% END %]
+ <option value="[% loop.count - 1 %]">[% column.columnname | html %]</option>
[% END %]
- </td>
- </tr>
- [% END %]
- </tbody>
- </table>
+ [% END %]
+ </select>
+ </p>
+ [% END %]
+
+ </div>
[% END %]
<fieldset class="action">
<input type="submit" value="Save" />
#!/usr/bin/perl;
use Modern::Perl;
-use Test::More tests => 2;
+use Test::More tests => 3;
use Test::MockModule;
use C4::Context;
modules => {
admin => {
currency => {
- 'currencies-table' => [
- {
- columnname => 'currency',
- cannot_be_toggled => '1',
- cannot_be_modified => '1'
- },
- {
- columnname => 'rate',
- cannot_be_toggled => '1',
- cannot_be_modified => '1'
- },
- {
- columnname => 'symbol'
- },
- {
- is_hidden => '1',
- columnname => 'iso_code'
- },
- {
- columnname => 'last_updated'
- },
- {
- columnname => 'active'
- },
- {
- columnname => 'actions'
- }
- ]
+ 'currencies-table' => {
+ default_display_length => 20,
+ default_sort_order => 1,
+ columns => [
+ {
+ columnname => 'currency',
+ cannot_be_toggled => '1',
+ cannot_be_modified => '1'
+ },
+ {
+ columnname => 'rate',
+ cannot_be_toggled => '1',
+ cannot_be_modified => '1'
+ },
+ {
+ columnname => 'symbol'
+ },
+ {
+ is_hidden => '1',
+ columnname => 'iso_code'
+ },
+ {
+ columnname => 'last_updated'
+ },
+ {
+ columnname => 'active'
+ },
+ {
+ columnname => 'actions'
+ }
+ ]
+ }
}
- }
- }
-
+ },
+ }
};
}
);
my $modules_expected = {
'admin' => {
'currency' => {
- 'currencies-table' => [
- {
- columnname => 'currency',
- cannot_be_toggled => 1,
- cannot_be_modified => 1,
- is_hidden => 0,
- },
- {
- columnname => 'rate',
- cannot_be_toggled => 1,
- cannot_be_modified => 1,
- is_hidden => 0,
- },
- {
- columnname => 'symbol',
- cannot_be_toggled => 0,
- cannot_be_modified => 0,
- is_hidden => 0,
- },
- {
- columnname => 'iso_code',
- cannot_be_toggled => 0,
- cannot_be_modified => 0,
- is_hidden => 0,
- },
- {
- columnname => 'last_updated',
- cannot_be_toggled => 0,
- cannot_be_modified => 0,
- is_hidden => 0,
- },
- {
- columnname => 'active',
- cannot_be_toggled => 0,
- cannot_be_modified => 0,
- is_hidden => 1,
- },
- {
- columnname => 'actions',
- cannot_be_toggled => 1,
- cannot_be_modified => 0,
- is_hidden => 0,
- },
- ]
+ 'currencies-table' => {
+ default_display_length => 20,
+ default_sort_order => 1,
+ columns => [
+ {
+ columnname => 'currency',
+ cannot_be_toggled => 1,
+ cannot_be_modified => 1,
+ is_hidden => 0,
+ },
+ {
+ columnname => 'rate',
+ cannot_be_toggled => 1,
+ cannot_be_modified => 1,
+ is_hidden => 0,
+ },
+ {
+ columnname => 'symbol',
+ cannot_be_toggled => 0,
+ cannot_be_modified => 0,
+ is_hidden => 0,
+ },
+ {
+ columnname => 'iso_code',
+ cannot_be_toggled => 0,
+ cannot_be_modified => 0,
+ is_hidden => 0,
+ },
+ {
+ columnname => 'last_updated',
+ cannot_be_toggled => 0,
+ cannot_be_modified => 0,
+ is_hidden => 0,
+ },
+ {
+ columnname => 'active',
+ cannot_be_toggled => 0,
+ cannot_be_modified => 0,
+ is_hidden => 1,
+ },
+ {
+ columnname => 'actions',
+ cannot_be_toggled => 1,
+ cannot_be_modified => 0,
+ is_hidden => 0,
+ },
+ ]
+ }
}
}
};
C4::Utils::DataTables::TablesSettings::get_columns( $m, $p, $t );
is_deeply(
$columns,
- $modules->{$m}{$p}{$t},
+ $modules->{$m}{$p}{$t}{columns},
"columns for $m>$p>$t"
);
+ my $table_settings =
+ C4::Utils::DataTables::TablesSettings::get_table_settings( $m, $p, $t );
+ is_deeply(
+ {
+ default_display_length => $table_settings->{default_display_length},
+ default_sort_order => $table_settings->{default_sort_order}
+ },
+ {
+ default_display_length => $modules->{$m}{$p}{$t}{default_display_length},
+ default_sort_order => $modules->{$m}{$p}{$t}{default_sort_order},
+ }
+ );
}
}
}