@@ -, +, @@ --- C4/VirtualShelves.pm | 24 +++++++++++++++++++- C4/VirtualShelves/Page.pm | 13 +++++++++- .../opac-tmpl/prog/en/modules/opac-shelves.tt | 18 +++++++++++++++ t/db_dependent/VirtualShelves.t | 13 ++++++++++- 4 files changed, 64 insertions(+), 4 deletions(-) --- a/C4/VirtualShelves.pm +++ a/C4/VirtualShelves.pm @@ -44,7 +44,8 @@ BEGIN { &ModShelf &ShelfPossibleAction &DelFromShelf &DelShelf - &GetBibliosShelves &AddShare &AcceptShare &IsSharedList + &GetBibliosShelves + &AddShare &AcceptShare &RemoveShare &IsSharedList ); @EXPORT_OK = qw( &GetAllShelves &ShelvesMax @@ -740,6 +741,27 @@ sub IsSharedList { return defined($rv); } +=head2 RemoveShare + + RemoveShare( $user, $shelfnumber ); + +RemoveShare removes a share for specific shelf and borrower. +Returns true if a record could be deleted. + +=cut + +sub RemoveShare { + my ($user, $shelfnumber)= @_; + my $dbh = C4::Context->dbh; + my $sql=" +DELETE FROM virtualshelfshares +WHERE borrowernumber=? AND shelfnumber=? + "; + my $n= $dbh->do($sql,undef,($user, $shelfnumber)); + return if !defined($n) || !$n || $n eq '0E0'; #nothing removed + return 1; +} + # internal subs sub _shelf_count { --- a/C4/VirtualShelves/Page.pm +++ a/C4/VirtualShelves/Page.pm @@ -360,13 +360,22 @@ sub shelfpage { #Deleting a shelf (asking for confirmation if it has entries) foreach ( $query->param() ) { - /DEL-(\d+)/ or next; + /(DEL|REMSHR)-(\d+)/ or next; $delflag = 1; - my $number = $1; + my $number = $2; unless ( defined $shelflist->{$number} || defined $privshelflist->{$number} ) { push( @paramsloop, { unrecognized => $number } ); last; } + #remove a share + if(/REMSHR/) { + RemoveShare($loggedinuser, $number); + delete $shelflist->{$number} if exists $shelflist->{$number}; + delete $privshelflist->{$number} if exists $privshelflist->{$number}; + $stay=0; + next; + } + # unless ( ShelfPossibleAction( $loggedinuser, $number, 'manage' ) ) { push( @paramsloop, { nopermission => $shelfnumber } ); last; --- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tt +++ a/koha-tmpl/opac-tmpl/prog/en/modules/opac-shelves.tt @@ -8,6 +8,7 @@ // [% END %] +[%# When using the next block, add the parameter for shelfnumber and add a tag to end the form %] +[% BLOCK remove_share %] +
+ + + + +[% END %] + [% IF ( OpacNav ) %]
[% ELSIF ( loggedinusername ) %]
[% ELSE %]
[% END %]
[% INCLUDE 'masthead.inc' %] @@ -357,6 +367,10 @@ $(document).ready(function() { [% END %] + [% ELSIF showprivateshelves %] + [% INCLUDE remove_share %] + + [% END %] @@ -645,6 +659,10 @@ $(document).ready(function() { [% END %] + [% ELSIF shelveslooppri.shares %] + [% INCLUDE remove_share %] + + [% END %]  --- a/t/db_dependent/VirtualShelves.t +++ a/t/db_dependent/VirtualShelves.t @@ -5,7 +5,7 @@ # Larger modifications by Jonathan Druart and Marcel de Rooy use Modern::Perl; -use Test::More tests => 95; +use Test::More tests => 96; use MARC::Record; use C4::Biblio qw( AddBiblio DelBiblio ); @@ -229,6 +229,17 @@ for my $i (0..9) { is(IsSharedList($sh),$n? 1: '', "Checked IsSharedList for shelf $sh"); } +#----------------------- TEST RemoveShare -------------------------------------# + +my $remshr_test="select borrowernumber, shelfnumber from virtualshelfshares where borrowernumber is not null"; +my @remshr_shelf= $dbh->selectrow_array($remshr_test); +if(@remshr_shelf) { + is(RemoveShare(@remshr_shelf),1,'Removed a shelf share'); +} +else { + ok(1,'Skipped RemoveShare test'); +} + #----------------TEST DelShelf & DelFromShelf functions------------------------# for my $i (0..9){ --