@@ -, +, @@ --- C4/Output.pm | 16 +- C4/Utils/DataTables/VirtualShelves.pm | 7 +- C4/VirtualShelves/Page.pm | 19 -- Koha/Virtualshelf.pm | 56 +++ .../prog/en/includes/virtualshelves-toolbar.inc | 24 +- .../prog/en/modules/catalogue/detail.tt | 4 +- .../en/modules/virtualshelves/downloadshelf.tt | 16 + .../prog/en/modules/virtualshelves/shelves.tt | 375 ++++++++++----------- .../virtualshelves/tables/shelves_results.tt | 15 +- t/db_dependent/Virtualshelves.t | 107 +++++- virtualshelves/addbybiblionumber.pl | 7 +- virtualshelves/downloadshelf.pl | 69 ++-- virtualshelves/shelves.pl | 258 +++++++++++++- 13 files changed, 696 insertions(+), 277 deletions(-) --- a/C4/Output.pm +++ a/C4/Output.pm @@ -89,6 +89,7 @@ sub pagination_bar { my $nb_pages = (@_) ? shift : 1; my $current_page = (@_) ? shift : undef; # delay default until later my $startfrom_name = (@_) ? shift : 'page'; + my $additional_parameters = shift || {}; # how many pages to show before and after the current page? my $pages_around = 2; @@ -105,6 +106,10 @@ sub pagination_bar { $base_url =~ s/$delim$//; # remove trailing delim my $url = $base_url . (($base_url =~ m/$delim/ or $base_url =~ m/\?/) ? '&' : '?' ) . $startfrom_name . '='; + my $url_suffix; + while ( my ( $k, $v ) = each %$additional_parameters ) { + $url_suffix .= '&' . $k . '=' . $v; + } my $pagination_bar = ''; # navigation bar useful only if more than one page to display ! @@ -116,7 +121,9 @@ sub pagination_bar { "\n" . ' ' . '' + . '1' + . $url_suffix + . '"rel="start">' . '<<' . ''; } else { @@ -133,6 +140,7 @@ sub pagination_bar { . '' . '<' . ''; } else { @@ -171,7 +179,9 @@ sub pagination_bar { "\n" . ' ' . '' + . $page_number + . $url_suffix + . '">' . $page_number . ''; } $last_displayed_page = $page_number; @@ -186,6 +196,7 @@ sub pagination_bar { . ' ' . '>' . ''; } else { @@ -199,6 +210,7 @@ sub pagination_bar { . ' ' . '>>' . ''; } --- a/C4/Utils/DataTables/VirtualShelves.pm +++ a/C4/Utils/DataTables/VirtualShelves.pm @@ -5,7 +5,7 @@ use C4::Branch qw/onlymine/; use C4::Context; use C4::Members qw/GetMemberIssuesAndFines/; use C4::Utils::DataTables; -use C4::VirtualShelves; +use Koha::Virtualshelves; sub search { my ( $params ) = @_; @@ -121,8 +121,9 @@ sub search { ( $iTotalRecords ) = $dbh->selectrow_array( $query, undef, @args ); for my $shelf ( @$shelves ) { - $shelf->{can_manage_shelf} = C4::VirtualShelves::ShelfPossibleAction( $loggedinuser, $shelf->{shelfnumber}, 'manage' ); - $shelf->{can_delete_shelf} = C4::VirtualShelves::ShelfPossibleAction( $loggedinuser, $shelf->{shelfnumber}, 'delete_shelf' ); + my $s = Koha::Virtualshelves->find( $shelf->{shelfnumber} ); + $shelf->{can_manage_shelf} = $s->can_be_managed( $loggedinuser ); + $shelf->{can_delete_shelf} = $s->can_be_deleted( $loggedinuser ); } return { iTotalRecords => $iTotalRecords, --- a/C4/VirtualShelves/Page.pm +++ a/C4/VirtualShelves/Page.pm @@ -68,7 +68,6 @@ sub shelfpage { loggedinuser => $loggedinuser, OpacAllowPublicListCreation => C4::Context->preference('OpacAllowPublicListCreation'), ); - my $edit; my $shelves; my @paramsloop; my $totitems; @@ -209,7 +208,6 @@ sub shelfpage { my $shelf = Koha::Virtualshelves->find( $shelfnumber ); my $member = GetMember( 'borrowernumber' => $shelf->owner ); my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : ''; - $edit = 1; $template->param( edit => 1, display => $displaymode, @@ -231,9 +229,6 @@ sub shelfpage { #View a shelf if ( $shelfnumber = $query->param('viewshelf') ) { my $shelf = Koha::Virtualshelves->find( $shelfnumber ); - $template->param( - 'DisplayMultiPlaceHold' => C4::Context->preference('DisplayMultiPlaceHold'), - ); if (C4::Context->preference('TagsEnabled')) { $template->param(TagsEnabled => 1); foreach (qw(TagsShowOnList TagsInputOnList)) { @@ -494,20 +489,6 @@ sub shelfpage { csv_profiles => GetCsvProfilesLoop('marc') ); - unless( $shelfnumber or $shelves or $edit ) { - # Only used for intranet - $template->param( op => 'list' ); - } - - if ($shelves or # note: this part looks duplicative, but is intentional - $edit - ) { - $template->param( seflag => 1 ); - #This hack is just another argument for refactoring this script one day - #At this point you are adding or editing a list; if you add, then you add a private list (by default) with permissions as below; if you edit, do not pass these permissions, they must come from the database - $template->param( allow_add => 0, allow_delete_own => 1, allow_delete_other => 0) unless $shelfnumber; - } - #Next call updates the shelves for the Lists button. #May not always be needed (when nothing changed), but doesn't take much. my ($total, $pubshelves, $barshelves) = C4::VirtualShelves::GetSomeShelfNames($loggedinuser, 'MASTHEAD'); --- a/Koha/Virtualshelf.pm +++ a/Koha/Virtualshelf.pm @@ -19,6 +19,9 @@ use Modern::Perl; use Carp; +use C4::Auth; + +use Koha::Borrowers; use Koha::Database; use Koha::DateUtils qw( dt_from_string ); use Koha::Exceptions; @@ -201,6 +204,59 @@ sub remove_biblios { return $number_removed; } +sub can_be_viewed { + my ( $self, $borrowernumber ) = @_; + return 1 if $self->category == $PUBLIC; + return 0 unless $borrowernumber; + return 1 if $self->owner == $borrowernumber; + return $self->get_shares->search( + { + borrowernumber => $borrowernumber, + } + )->count; +} + +sub can_be_deleted { + my ( $self, $borrowernumber ) = @_; + + return 0 unless $borrowernumber; + return 1 if $self->owner == $borrowernumber; + + my $patron = Koha::Borrowers->find( $borrowernumber ); + + return 1 if $self->category == $PUBLIC and C4::Auth::haspermission( $patron->userid, { lists => 'delete_public_lists' } ); + + return 0; +} + +sub can_be_managed { + my ( $self, $borrowernumber ) = @_; + return 1 + if $borrowernumber and $self->owner == $borrowernumber; + return 0; +} + +sub can_biblios_be_added { + my ( $self, $borrowernumber ) = @_; + + return 1 + if $borrowernumber + and ( $self->owner == $borrowernumber + or $self->allow_add ); + return 0; +} + +sub can_biblios_be_removed { + my ( $self, $borrowernumber ) = @_; + + return 1 + if $borrowernumber + and ( $self->owner == $borrowernumber + or $self->allow_delete_own + or $self->allow_delete_other ); + return 0; +} + sub type { return 'Virtualshelve'; } --- a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc +++ a/koha-tmpl/intranet-tmpl/prog/en/includes/virtualshelves-toolbar.inc @@ -1,7 +1,7 @@
- + [% END %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt @@ -360,7 +360,7 @@ function verify_images() { [% IF ( GetShelves ) %] Lists that include this title: [% FOREACH GetShelve IN GetShelves %] - [% GetShelve.shelfname %] + [% GetShelve.shelfname %] [% IF ( loop.last ) %][% ELSE %]|[% END %] [% END %] @@ -525,7 +525,7 @@ function verify_images() {Your download should begin automatically.
[% ELSE %] --- a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/shelves.tt @@ -1,5 +1,9 @@ +[% USE Koha %] +[% USE KohaDates %] +[% SET PRIVATE = 1 %] +[% SET PUBLIC = 2 %] [% INCLUDE 'doc-head-open.inc' %] -