@@ -, +, @@ items table - apply this BZ, - launch perl installer/data/mysql/updatedatabase.pl - launch perl misc/devel/update_dbix_class_files.pl - go to the items tab on cgi-bin/koha/catalogue/MARCdetail.pl page you should be able to hide/show each columns. - leave this page and come back with the same koha account: You should have the same columns shown/hidden as when you left. --- C4/Utils/DataTables/ColumnsSettings.pm | 21 ++++ C4/Utils/DataTables/DynamicColumnsSettings.pm | 49 ++++++++ Koha/Template/Plugin/ColumnsSettings.pm | 13 +++ catalogue/MARCdetail.pl | 5 +- .../add-table-users_columns_settings.sql | 11 ++ installer/data/mysql/kohastructure.sql | 16 +++ .../prog/en/includes/columns_settings.inc | 2 +- .../prog/en/modules/catalogue/MARCdetail.tt | 49 +++++++- svc/users_columns_settings | 51 ++++++++ t/db_dependent/ColumnsSettings.t | 129 ++++++++++++++++++++- 10 files changed, 339 insertions(+), 7 deletions(-) create mode 100644 C4/Utils/DataTables/DynamicColumnsSettings.pm create mode 100644 installer/data/mysql/atomicupdate/add-table-users_columns_settings.sql create mode 100755 svc/users_columns_settings --- a/C4/Utils/DataTables/ColumnsSettings.pm +++ a/C4/Utils/DataTables/ColumnsSettings.pm @@ -100,4 +100,25 @@ sub update_columns { } } +sub update_user_columns { + my ($params) = @_; + my $columns = $params->{columns}; + + my $schema = Koha::Database->new->schema; + + foreach my $colname (keys %$columns) { + $schema->resultset('UsersColumnsSetting')->update_or_create( + { + borrowernumber => $params->{borrowernumber}, + module => $params->{module}, + page => $params->{page}, + tablename => $params->{tablename}, + additional_param => $params->{additional_param}, + columnname => $colname, + is_hidden => $columns->{$colname}, + } + ); + } +} + 1; --- a/C4/Utils/DataTables/DynamicColumnsSettings.pm +++ a/C4/Utils/DataTables/DynamicColumnsSettings.pm @@ -0,0 +1,49 @@ +package C4::Utils::DataTables::DynamicColumnsSettings; + +use Modern::Perl; + +use C4::Biblio; +use Koha::Database; + +sub catalogue_marcdetail_itemst { + my ($frameworkcode) = @_; + + my $schema = Koha::Database->new->schema; + my $borrowernumber = C4::Context::userenv->{number}; + + my $columns; + my $tagslib = C4::Biblio::GetMarcStructure( 1, $frameworkcode ); + my ($itemfield) = C4::Biblio::GetMarcFromKohaField( 'items.itemnumber', $frameworkcode ); + foreach my $subfield ( keys %{ $tagslib->{$itemfield} } ) { + next unless $subfield =~ /^\w$/; + next if ( $tagslib->{$itemfield}->{$subfield}->{tab} ne 10 ); + next if ( $tagslib->{$itemfield}->{$subfield}->{hidden} =~ /-7|-4|-3|-2|2|3|5|8/ ); + + my $user_column; + if (my @rs = $schema->resultset('UsersColumnsSetting')->search( + { + borrowernumber => $borrowernumber, + module => 'catalogue', + page => 'marcdetail', + tablename => 'itemst', + additional_param => $frameworkcode, + columnname => $subfield + } + )) { + $user_column = $rs[0]; + } + + if ( $tagslib->{$itemfield}{$subfield}{hidden} eq "0" ) { + push @$columns, + { + columnname => $subfield, + is_hidden => $user_column ? $user_column->is_hidden : 0, + cannot_be_modified => 0, + cannot_be_toggled => 0 + }; + } + } + return $columns; +} + +1; --- a/Koha/Template/Plugin/ColumnsSettings.pm +++ a/Koha/Template/Plugin/ColumnsSettings.pm @@ -27,6 +27,7 @@ use JSON qw( to_json ); use C4::Context qw( config ); use C4::Utils::DataTables::ColumnsSettings; +use C4::Utils::DataTables::DynamicColumnsSettings; =pod @@ -52,4 +53,16 @@ sub GetColumns { : $columns } +sub GetDynamicColumns { + my ($self, $module, $page, $tablename, $param) = @_; + + my $sub = $module . '_' . $page . '_' . $tablename; + my $columns = []; + if (my $s = C4::Utils::DataTables::DynamicColumnsSettings->can($sub)) { + $columns = $s->($param); + } + + return to_json($columns); +} + 1; --- a/catalogue/MARCdetail.pl +++ a/catalogue/MARCdetail.pl @@ -82,6 +82,9 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( debug => 1, } ); +$template->param( + frameworkcode => $frameworkcode +); my $record = GetMarcBiblio($biblionumber, 1); $template->param( ocoins => GetCOinSBiblio($record) ); @@ -288,7 +291,7 @@ my ($holdingbrtagf,$holdingbrtagsubf) = &GetMarcFromKohaField("items.holdingbran # fill item info my @item_header_loop; for my $subfield_code ( @item_subfield_codes ) { - push @item_header_loop, $witness{$subfield_code}; + push @item_header_loop, { colname => $subfield_code, label => $witness{$subfield_code} }; for my $item_data ( @item_loop ) { $item_data->{$subfield_code} ||= " " } --- a/installer/data/mysql/atomicupdate/add-table-users_columns_settings.sql +++ a/installer/data/mysql/atomicupdate/add-table-users_columns_settings.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS users_columns_settings ( + borrowernumber int(11) NOT NULL, + module varchar(50) NOT NULL, + page varchar(50) NOT NULL, + tablename varchar(50) NOT NULL, + additional_param varchar(255) NOT NULL, + columnname varchar(50) NOT NULL, + is_hidden int(1) NOT NULL DEFAULT 0, + PRIMARY KEY(borrowernumber, module, page, tablename, columnname, additional_param), + CONSTRAINT borrower_columns_settings_ibfk1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; --- a/installer/data/mysql/kohastructure.sql +++ a/installer/data/mysql/kohastructure.sql @@ -3557,6 +3557,22 @@ CREATE TABLE IF NOT EXISTS columns_settings ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- +-- Table structure for table `users_columns_settings` +-- + +CREATE TABLE IF NOT EXISTS users_columns_settings ( + borrowernumber int(11) NOT NULL, + module varchar(50) NOT NULL, + page varchar(50) NOT NULL, + tablename varchar(50) NOT NULL, + additional_param varchar(255) NOT NULL, + columnname varchar(50) NOT NULL, + is_hidden int(1) NOT NULL DEFAULT 0, + PRIMARY KEY(borrowernumber, module, page, tablename, columnname, additional_param), + CONSTRAINT borrower_columns_settings_ibfk1 FOREIGN KEY (borrowernumber) REFERENCES borrowers (borrowernumber) ON DELETE CASCADE ON UPDATE CASCADE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; + +-- -- Table structure for table 'items_search_fields' -- --- a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/columns_settings.inc @@ -6,7 +6,7 @@ function KohaTable(selector, dt_parameters, columns_settings) { var hidden_ids = []; var included_ids = []; $(columns_settings).each( function() { - var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index( 'th' ); + var named_id = $( 'thead th[data-colname="' + this.columnname + '"]', selector ).index(); var used_id = dt_parameters.bKohaColumnsUseNames ? named_id : id; if ( used_id == -1 ) return; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/MARCdetail.tt @@ -1,3 +1,4 @@ +[% USE ColumnsSettings %] [% INCLUDE 'doc-head-open.inc' %]
[% header %] | +[% header.label %] | [% END %]
---|---|