Bugzilla – Attachment 41964 Details for
Bug 14544
Move the list related code to Koha::Virtualshelves
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 14544: Make the OPAC side independent of Page.pm
Bug-14544-Make-the-OPAC-side-independent-of-Pagepm.patch (text/plain), 108.02 KB, created by
Jonathan Druart
on 2015-08-26 12:45:55 UTC
(
hide
)
Description:
Bug 14544: Make the OPAC side independent of Page.pm
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2015-08-26 12:45:55 UTC
Size:
108.02 KB
patch
obsolete
>From e7d5cc279160d34d8f9d745ecaf598eefa7f89d8 Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Mon, 10 Aug 2015 16:53:06 +0100 >Subject: [PATCH] Bug 14544: Make the OPAC side independent of Page.pm > >Bug 14544: Fix redirect on editing a list > >If you edit a list from the list view, after saving the form, you are >not redirected to the list view (but on the edit form). > >Bug 14544: Cosmetic: › should be a class divider >--- > Koha/Objects.pm | 11 + > Koha/Virtualshelf.pm | 16 +- > Koha/Virtualshelves.pm | 24 +- > .../virtualshelves/tables/shelves_results.tt | 2 + > .../opac-tmpl/bootstrap/en/includes/masthead.inc | 14 +- > .../opac-tmpl/bootstrap/en/includes/usermenu.inc | 2 +- > .../opac-tmpl/bootstrap/en/modules/opac-detail.tt | 4 +- > .../bootstrap/en/modules/opac-downloadshelf.tt | 16 +- > .../bootstrap/en/modules/opac-sendshelfform.tt | 6 +- > .../bootstrap/en/modules/opac-shareshelf.tt | 6 +- > .../bootstrap/en/modules/opac-shelves-rss.tt | 6 +- > .../opac-tmpl/bootstrap/en/modules/opac-shelves.tt | 638 +++++++++------------ > opac/opac-downloadshelf.pl | 18 +- > opac/opac-shelves.pl | 314 +++++++++- > t/db_dependent/Virtualshelves.t | 76 ++- > 15 files changed, 719 insertions(+), 434 deletions(-) > >diff --git a/Koha/Objects.pm b/Koha/Objects.pm >index 8ef6390..8f7af79 100644 >--- a/Koha/Objects.pm >+++ b/Koha/Objects.pm >@@ -126,6 +126,17 @@ sub count { > return $self->_resultset()->count($params); > } > >+=head3 Koha::Objects->pager(); >+ >+my $pager = Koha::Objects->pager; >+ >+=cut >+ >+sub pager { >+ my ( $self ) = @_; >+ return $self->_resultset->pager; >+} >+ > =head3 Koha::Objects->next(); > > my $object = Koha::Objects->next(); >diff --git a/Koha/Virtualshelf.pm b/Koha/Virtualshelf.pm >index e256316..f8f90a6 100644 >--- a/Koha/Virtualshelf.pm >+++ b/Koha/Virtualshelf.pm >@@ -101,12 +101,14 @@ sub is_shelfname_valid { > > sub get_shares { > my ( $self ) = @_; >- return $self->{_result}->virtualshelfshares; >+ my $shares = $self->{_result}->virtualshelfshares; >+ return $shares; > } > > sub get_contents { > my ( $self ) = @_; >- return $self->{_result}->virtualshelfcontents; >+ my $contents = $self->{_result}->virtualshelfcontents; >+ return $contents; > } > > sub share { >@@ -132,6 +134,16 @@ sub is_shared { > )->count; > } > >+sub is_shared_with { >+ my ( $self, $borrowernumber ) = @_; >+ return unless $borrowernumber; >+ return $self->get_shares->search( >+ { >+ borrowernumber => $borrowernumber, >+ } >+ )->count; >+} >+ > sub remove_share { > my ( $self, $borrowernumber ) = @_; > my $shelves = Koha::Virtualshelfshares->search( >diff --git a/Koha/Virtualshelves.pm b/Koha/Virtualshelves.pm >index 98f9d40..2cbd41c 100644 >--- a/Koha/Virtualshelves.pm >+++ b/Koha/Virtualshelves.pm >@@ -41,24 +41,23 @@ Koha::Virtualshelf - Koha Virtualshelf Object class > > sub get_private_shelves { > my ( $self, $params ) = @_; >- my $limit = $params->{limit}; >- my $offset = $params->{offset} || 0; >- my $borrowernumber = $params->{borrowernumber}; >+ my $page = $params->{page}; >+ my $rows = $params->{rows}; >+ my $borrowernumber = $params->{borrowernumber} || 0; > > $self->search( > { >- 'virtualshelfshares.borrowernumber' => $borrowernumber, > category => 1, > -or => { >- 'virtualshelfshares.owner' => $borrowernumber, >- 'virtualshelves.borrowernumber' => $borrowernumber, >+ 'virtualshelfshares.borrowernumber' => $borrowernumber, >+ 'me.owner' => $borrowernumber, > } > }, > { >- join => ['borrowers', 'virtualshelfcontents', 'virtualshelfshares' ], >+ join => [ 'virtualshelfshares' ], > group_by => 'shelfnumber', > order_by => 'shelfname', >- limit => "$limit,$offset", >+ ( $page and $rows ? ( page => $page, rows => $rows ) : () ) > } > ); > } >@@ -66,18 +65,17 @@ sub get_private_shelves { > > sub get_public_shelves { > my ( $self, $params ) = @_; >- my $limit = $params->{limit}; >- my $offset = $params->{offset} || 0; >+ my $page = $params->{page}; >+ my $rows = $params->{rows}; > > $self->search( > { >- category => 1, >+ category => 2, > }, > { >- join => [ 'virtualshelfcontents' ], > group_by => 'shelfnumber', > order_by => 'shelfname', >- limit => "$limit,$offset", >+ ( $page and $rows ? ( page => $page, rows => $rows ) : () ) > } > ); > } >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/tables/shelves_results.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/tables/shelves_results.tt >index 08d75a6..0304dbe 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/tables/shelves_results.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/virtualshelves/tables/shelves_results.tt >@@ -36,6 +36,7 @@ > [%~ action_block = action_block _ '<input type="hidden" name="shelfnumber" value="' _ shelfnumber _ '" />' ~%] > [%~ action_block = action_block _ '<input type="hidden" name="op" value="edit_form" />' ~%] > [%~ action_block = action_block _ '<input type="hidden" name="category" value="' _ type _ '" />' ~%] >+ [%~ action_block = action_block _ '<input type="hidden" name="referer" value="list" />' ~%] > [%~ action_block = action_block _ '<input type="submit" class="editshelf" value="Edit" />' ~%] > [%~ action_block = action_block _ '</form>' ~%] > [%~ END ~%] >@@ -46,6 +47,7 @@ > [%~ action_block = action_block _ '<input type="hidden" name="op" value="delete" />' ~%] > [%~ action_block = action_block _ '<input type="hidden" name="shelfnumber" value="' _ shelfnumber _ '" />' ~%] > [%~ action_block = action_block _ '<input type="hidden" name="category" value="' _ type _ '" />' ~%] >+ [%~ action_block = action_block _ '<input type="hidden" name="referer" value="list" />' ~%] > [%~ action_block = action_block _ '<input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST)" value="Delete" />' ~%] > [%~ action_block = action_block _ '</form>' ~%] > [%~ END ~%] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc >index 1ccd2be..a2b5cd7 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/masthead.inc >@@ -38,26 +38,26 @@ > <a href="#" title="Show lists" class="dropdown-toggle" id="listsmenu" data-toggle="dropdown" role="button"><i class="icon-list icon-white"></i> <span class="listslabel">Lists</span> <b class="caret"></b></a> > <ul aria-labelledby="listsmenu" role="menu" class="dropdown-menu"> > [% IF ( pubshelves ) %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves" tabindex="-1" role="menuitem"><strong>Public lists</strong></a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=2" tabindex="-1" role="menuitem"><strong>Public lists</strong></a></li> > [% FOREACH pubshelvesloo IN pubshelvesloop %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% pubshelvesloo.shelfnumber %]&sortfield=[% pubshelvesloo.sortfield %]" tabindex="-1" role="menuitem">[% pubshelvesloo.shelfname |html %]</a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% pubshelvesloo.shelfnumber %]&sortfield=[% pubshelvesloo.sortfield %]" tabindex="-1" role="menuitem">[% pubshelvesloo.shelfname |html %]</a></li> > [% END %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves" tabindex="-1" role="menuitem" class="listmenulink">View All</a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=2" tabindex="-1" role="menuitem" class="listmenulink">View All</a></li> > [% ELSE %] > <li role="presentation"><a href="#" tabindex="-1" class="menu-inactive" role="menuitem">No public lists</a></li> > [% END %] > <li class="divider" role="presentation"></li> > [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves" tabindex="-1" role="menuitem"><strong>Your lists</strong></a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=1" tabindex="-1" role="menuitem"><strong>Your lists</strong></a></li> > [% IF ( loggedinusername ) %] > [% IF ( barshelves ) %] > [% FOREACH barshelvesloo IN barshelvesloop %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% barshelvesloo.shelfnumber %]&sortfield=[% barshelvesloo.sortfield %]" tabindex="-1" role="menuitem">[% barshelvesloo.shelfname |html %]</a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% barshelvesloo.shelfnumber %]&sortfield=[% barshelvesloo.sortfield %]" tabindex="-1" role="menuitem">[% barshelvesloo.shelfname |html %]</a></li> > [% END %] >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves" tabindex="-1" role="menuitem" class="listmenulink">View all</a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=1" tabindex="-1" role="menuitem" class="listmenulink">View all</a></li> > [% ELSE %] > <li role="presentation"><a href="#" tabindex="-1" class="menu-inactive" role="menuitem">No private lists</a></li> >- <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves" tabindex="-1" role="menuitem" class="listmenulink">New list</a></li> >+ <li role="presentation"><a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=1" tabindex="-1" role="menuitem" class="listmenulink">New list</a></li> > [% END %] > [% ELSE %] > <li role="presentation"><a href="/cgi-bin/koha/opac-user.pl" tabindex="-1" class="menu-inactive loginModal-trigger" role="menuitem">Log in to create your own lists</a></li> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc >index c5a2298..d166b6e 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/usermenu.inc >@@ -91,7 +91,7 @@ > [% ELSE %] > <li> > [% END %] >- <a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">your lists</a></li> >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=1">your lists</a></li> > [% END %] > > [% IF Koha.Preference( 'useDischarge' ) == 1 %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >index 97de226..811874f 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt >@@ -391,8 +391,8 @@ > <!--This grabs all of the lists a bib record appears in --> > [% IF shelves %] > <span class="results_summary lists"><span class="label">List(s) this item appears in: </span> >- [% FOREACH shelf IN shelves %] >- <a href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelf.shelfnumber %]">[% shelf.shelfname %]</a> >+ [% FOREACH s IN shelves %] >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% s.shelfnumber %]">[% s.shelfname %]</a> > [% IF ( loop.last ) %][% ELSE %]|[% END %] > [% END %] > </span> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >index 1aa3a4b..ee0f205 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-downloadshelf.tt >@@ -1,7 +1,7 @@ > [% USE Koha %] > [% IF ( fullpage ) %] > [% INCLUDE 'doc-head-open.inc' %] >- <title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Download list [% shelfname %]</title>[% INCLUDE 'doc-head-close.inc' %] >+ <title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › Download list [% shelf.shelfname %]</title>[% INCLUDE 'doc-head-close.inc' %] > [% BLOCK cssinclude %][% END %] > </head> > [% INCLUDE 'bodytag.inc' bodyid='opac-downloadlist' %] >@@ -13,14 +13,14 @@ > <li><a href="/cgi-bin/koha/opac-user.pl">[% FOREACH USER_INF IN USER_INFO %][% USER_INF.title %] [% USER_INF.firstname %] [% USER_INF.surname %][% END %]</a> <span class="divider">›</span></li> > [% END %] > <li> >- [% IF ( showprivateshelves ) %] >- <a href="/cgi-bin/koha/opac-shelves.pl">Your lists</a> >+ [% IF shelf.category == 1 %] >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=1">Your lists</a> > [% ELSE %] >- <a href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves">Public lists</a> >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=2">Public lists</a> > [% END %] > <span class="divider">›</span> > </li> >- <li>Download list <i>[% shelfname %]</i></li> >+ <li>Download list <i>[% shelf.shelfname %]</i></li> > </ul> > <div class="container-fluid"> > <div class="row-fluid"> >@@ -47,7 +47,7 @@ > <p>Your download should begin automatically.</p> > </div> > [% ELSE %] >- <h1>Download list <i>[% shelfname %]</i></h1> >+ <h1>Download list <i>[% shelf.shelfname %]</i></h1> > <form method="post" action="/cgi-bin/koha/opac-downloadshelf.pl"> > <fieldset> > <select name="format" id="dlformat" required="required"> >@@ -64,9 +64,9 @@ > </fieldset> > > <fieldset class="action"> >- <input type="hidden" name="shelfid" value="[% shelfid | html %]" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > <input type="submit" name="save" class="btn" value="Go" /> >- <a href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelfid | html %]" class="cancel close" data-dismiss="modal">Cancel</a> >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelf.shelfnumber | html %]" class="cancel close" data-dismiss="modal">Cancel</a> > </fieldset> > </form> > [% IF ( modal ) %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelfform.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelfform.tt >index 3b38535..52b6671 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelfform.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-sendshelfform.tt >@@ -15,7 +15,7 @@ > <div class="alert alert-success"> > <p>The list was sent to: [% email %]</p> > </div> >- <p><a class="focus close" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelfid %]">Back to lists</a></p> >+ <p><a class="focus close" href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelfid %]">Back to lists</a></p> > [% END %] > [% IF ( error ) %] > <div class="alert"> >@@ -27,7 +27,7 @@ > <div class="alert"> > <p>You do not have permission to send this list.</p> > </div> >- <p><a class="button close" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelfid %]">Back to lists</a></p> >+ <p><a class="button close" href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelfid %]">Back to lists</a></p> > [% ELSE %] > <h1>Sending your list</h1> > <form action="[% url %]" method="post" id="sendshelfform"> >@@ -42,7 +42,7 @@ > </fieldset> > <fieldset class="action"> > <input type="submit" value="Send" class="btn" /> >- <a class="cancel close" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelfid %]">Cancel</a> >+ <a class="cancel close" href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelfid %]">Cancel</a> > </fieldset> > </form> > >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shareshelf.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shareshelf.tt >index 6421138..ac5a19b 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shareshelf.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shareshelf.tt >@@ -41,7 +41,7 @@ > [% IF errcode==6 %]<div class="alert">Sorry, but you did not enter a valid email address.</div>[% END %] > [% IF errcode==7 %]<div class="alert">Sorry, but we could not accept this key. The invitation may have expired. Contact the patron who sent you the invitation.</div>[% END %] > [% IF errcode==8 %]<div class="alert">As owner of a list you cannot accept an invitation for sharing it.</div>[% END %] >- <p><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Return to your lists</a></p> >+ <p><a href="/cgi-bin/koha/opac-shelves.pl?op=view&category=1">Return to your lists</a></p> > > [% ELSIF op=='invite' %] > <div id="invite"> >@@ -59,7 +59,7 @@ > </fieldset> > <fieldset class="action"> > <input type="submit" value="Send" class="btn" /> >- <a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves" class="cancel">Cancel</a> >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=view&category=1" class="cancel">Cancel</a> > </fieldset> > </form> > </div> >@@ -75,7 +75,7 @@ > [% IF approvedaddress %] > <p>You will receive an email notification if someone accepts your share within two weeks.</p> > [% END %] >- <p><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Return to your lists</a></p> >+ <p><a href="/cgi-bin/koha/opac-shelves.pl?op=view&category=1">Return to your lists</a></p> > </div> > > [% ELSIF op=='accept' %] >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves-rss.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves-rss.tt >index f25f3ed..2525d80 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves-rss.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves-rss.tt >@@ -3,9 +3,9 @@ > <rss version="2.0"> > > <channel> >- <title>[% shelfname %]</title> >- <link>[% OPACBaseURL %]/cgi-bin/koha/opac-shelves.pl?rss=1&viewshelf=[% shelfnumber %]</link> >- <description>RSS feed for public list [% shelfname | html %]</description> >+ <title>[% shelf.shelfname %]</title> >+ <link>[% OPACBaseURL %]/cgi-bin/koha/opac-shelves.pl?rss=1&viewshelf=[% shelf.shelfnumber %]</link> >+ <description>RSS feed for public list [% shelf.shelfname | html %]</description> > > [% FOREACH i IN itemsloop %] > <item> >diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt >index d7363f3..d3a0a07 100644 >--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt >+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-shelves.tt >@@ -1,9 +1,11 @@ > [% USE Koha %] >-[% SET TagsShowEnabled = ( ( Koha.Preference( 'TagsEnabled' ) == 1 ) && TagsShowOnList ) %] >-[% SET TagsInputEnabled = ( ( Koha.Preference( 'opacuserlogin' ) == 1 ) && ( Koha.Preference( 'TagsEnabled' ) == 1 ) && TagsInputOnList ) %] >+[% SET PRIVATE = 1 %] >+[% SET PUBLIC = 2 %] >+[% SET TagsShowEnabled = ( ( Koha.Preference( 'TagsEnabled' ) == 1 ) && Koha.Preference('TagsShowOnList') ) %] >+[% SET TagsInputEnabled = ( ( Koha.Preference( 'opacuserlogin' ) == 1 ) && ( Koha.Preference( 'TagsEnabled' ) == 1 ) && Koha.Preference('TagsInputOnList') ) %] > > [% INCLUDE 'doc-head-open.inc' %] >-<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › [% IF ( viewshelf ) %]Contents of [% shelfname |html %][% ELSE %]Your lists[% END %]</title>[% INCLUDE 'doc-head-close.inc' %] >+<title>[% IF ( LibraryNameTitle ) %][% LibraryNameTitle %][% ELSE %]Koha online[% END %] catalog › [% IF op == 'view' %]Contents of [% shelf.shelfname |html %][% ELSE %]Your lists[% END %]</title>[% INCLUDE 'doc-head-close.inc' %] > [% BLOCK cssinclude %][% END %] > </head> > [% IF ( loggedinusername ) %][% INCLUDE 'bodytag.inc' bodyid='opac-userlists' bodyclass='scrollto' %][% ELSE %][% INCLUDE 'bodytag.inc' bodyid='opac-lists' bodyclass='scrollto' %][% END %] >@@ -12,35 +14,28 @@ > <li> > <label for="allow_add">Permissions: </label> > <select name="allow_add" id="allow_add"> >- [% IF allow_add %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >- [% IF allow_add %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] >+ [% IF shelf.allow_add %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >+ [% IF shelf.allow_add %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] > </select> > <span>anyone else to add entries. (The owner of a list is always allowed to add entries, but needs permission to remove.)</span> > </li> > <li> > <label> </label> > <select name="allow_delete_own" id="allow_delete_own"> >- [% IF allow_delete_own %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >- [% IF allow_delete_own %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] >+ [% IF shelf.allow_delete_own %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >+ [% IF shelf.allow_delete_own %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] > </select> > <span>anyone to remove his own contributed entries.</span> > </li> > <li> > <label> </label> > <select name="allow_delete_other" id="allow_delete_other"> >- [% IF allow_delete_other %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >- [% IF allow_delete_other %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] >+ [% IF shelf.allow_delete_other %]<option value="0">Do not allow</option>[% ELSE %]<option value="0" selected="selected">Do not allow</option>[% END %] >+ [% IF shelf.allow_delete_other %]<option value="1" selected="selected">Allow</option>[% ELSE %]<option value="1">Allow</option>[% END %] > </select> > <span>anyone to remove other contributed entries.</span> > </li> > [% END %] >-[% BLOCK remove_share %] >- [%# Use: add parameter shelfnumber and add end form tag %] >- <form action="opac-shelves.pl" method="post" class="form-inline"> >- <input type="hidden" name="shelves" value="1" /> >- <input type="hidden" name="display" value="privateshelves" /> >- <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_REMOVE_SHARE);" value="Remove share" /> >-[% END %] > > [% INCLUDE 'masthead.inc' %] > <div class="main"> >@@ -50,42 +45,36 @@ > <li><a href="/cgi-bin/koha/opac-user.pl">[% FOREACH USER_INF IN USER_INFO %][% USER_INF.title %] [% USER_INF.firstname %] [% USER_INF.surname %][% END %]</a> <span class="divider">›</span></li> > [% END %] > >- [% IF ( category1 ) %] >- [% IF ( viewshelf || edit ) %] >- <li><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Your lists</a></li> >- [% ELSE %] >- <li>Your lists</li> >- [% END %] >- [% ELSIF ( category2 ) %] >- [% IF ( viewshelf || edit ) %] >- <li><a href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves">Public lists</a></li> >- [% ELSE %] >- <li>Public lists</li> >- [% END %] >- [% ELSIF ( showprivateshelves ) %] >- [% IF ( viewshelf || edit ) %] >- <li><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Your lists</a></li> >+ [% IF op != 'list' %] >+ <li><a href="/cgi-bin/koha/opac-shelves.pl">Lists</a></li> >+ [% ELSE %] >+ <li>Lists</li> >+ [% END %] >+ >+ [% IF shelf and shelf.category == PRIVATE %] >+ [% IF op == 'view' OR op == 'edit_form' %] >+ <li><span class="divider">›</span> <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PRIVATE %]">Your lists</a></li> > [% ELSE %] >- <li>Your lists</li> >+ <li><span class="divider">›</span> Your lists</li> > [% END %] >- [% ELSIF ( showpublicshelves ) %] >- [% IF ( viewshelf || edit || shelves ) %] >- <li><a href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves">Public lists</a></li> >+ [% ELSIF shelf AND shelf.category == PUBLIC %] >+ [% IF op == 'view' %] >+ <li><span class="divider">›</span> <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PUBLIC %]">Public lists</a></li> > [% ELSE %] >- <li>Public lists</li> >+ <li><span class="divider">›</span> Public lists</li> > [% END %] > [% END %] > >- [% IF ( viewshelf ) %] >- <li><span class="divider">›</span> Contents of <i>[% shelfname | html %]</i></li> >+ [% IF op == 'view' %] >+ <li><span class="divider">›</span> Contents of <i>[% shelf.shelfname | html %]</i></li> > [% END %] > >- [% IF ( shelves ) %] >+ [% IF op == 'add_form' %] > <li><span class="divider">›</span> Create new list</li> > [% END %] > >- [% IF ( edit ) %] >- <li><span class="divider">›</span> Edit list <i>[% shelfname | html %]</i></li> >+ [% IF op == 'edit_form' %] >+ <li><span class="divider">›</span> Edit list <i>[% shelf.shelfname | html %]</i></li> > [% END %] > > </ul> <!-- / .breadcrumb --> >@@ -107,52 +96,65 @@ > [% END %] > <div id="usershelves" class="maincontent"> > >- [% IF ( paramsloop ) %] >- [% FOREACH paramsloo IN paramsloop %] >- [% IF ( paramsloo.status ) %]<div class="alert">[% paramsloo.string %]</div>[% END %] >- [% IF ( paramsloo.nobarcode ) %]<div class="alert">ERROR: No barcode given.</div>[% END %] >- [% IF ( paramsloo.noshelfnumber ) %]<div class="alert">ERROR: No shelfnumber given.</div>[% END %] >- [% IF ( paramsloo.need_confirm ) %] >- <div class="alert"> >- The list <i>[% paramsloo.need_confirm %]</i> is not empty. >- <br />It has <b>[% paramsloo.count %]</b> [% IF paramsloo.count == 1 %]entry[% ELSE %]entries[% END %]. >- <br />Use the "Confirm" button below to confirm deletion. >- </div> >- [% END %] >- [% IF ( paramsloo.nopermission ) %] >- <div class="alert">ERROR: You do not have adequate permission for that action on list [% paramsloo.nopermission |html%].</div> >- [% END %] >- [% IF ( paramsloo.failgetitem ) %] >- <div class="alert">ERROR: No item found with barcode [% paramsloo.failgetitem %].</div> >- [% END %] >- [% IF ( paramsloo.duplicatebiblio ) %] >- <div class="alert">A record matching barcode <b>[% paramsloo.duplicatebiblio %]</b> has already been added.</div> >- [% END %] >- [% IF ( paramsloo.delete_ok ) %] >- <div class="alert alert-info">List [% paramsloo.delete_ok |html %] Deleted.</div> >- [% END %] >- [% IF ( paramsloo.delete_fail ) %] >- <div class="alert alert-info">ERROR: Database error. Delete (list number [% paramsloo.delete_fail |html %]) failed.</div> >- [% END %] >- [% IF ( paramsloo.unrecognized ) %] >- <div class="alert alert-info">ERROR: List number [% paramsloo.unrecognized %] unrecognized.</div> >- [% END %] >- [% IF ( paramsloo.modifyfailure) %] >- <div class="alert alert-info">ERROR: Shelf could not be renamed to [% paramsloo.modifyfailure %]. This name may not be unique for this type of list. Please check.</div> >- [% END %] >- [% IF ( paramsloo.nothingdeleted) %] >- <div class="alert alert-info">Warning: You could not delete any selected items from this shelf.</div> >- [% END %] >- [% IF ( paramsloo.somedeleted) %] >- <div class="alert alert-info">Warning: You could not delete all selected items from this shelf.</div> >- [% END %] >- [% END # / FOREACH paramsloop %] >- [% END # / IF paramsloop %] >+ [% FOR m IN messages %] >+ [% SWITCH m.type %] >+ [% CASE 'message' %] >+ <div class="alert alert-success" role="alert"> >+ [% CASE 'error' %] >+ <div class="alert alert-danger" role="alert"> >+ [% END %] >+ [% SWITCH m.code %] >+ [% CASE 'error_on_update' %] >+ An error occurred when updating this list. Perhaps the value already exists. >+ [% CASE 'error_on_insert' %] >+ An error occurred when inserting this list. Perhaps the name already exists. >+ [% CASE 'error_on_delete' %] >+ An error occurred when deleteing this list. Check the logs. >+ [% CASE 'error_on_add_biblio' %] >+ The item has not been added to the list. Please check it's not in this list yet. >+ [% CASE 'error_on_remove_share' %] >+ The share has not been removed. >+ [% CASE 'success_on_update' %] >+ List updated with success. >+ [% CASE 'success_on_insert' %] >+ List inserted with success. >+ [% CASE 'success_on_delete' %] >+ List deleted with success. >+ [% CASE 'success_on_add_biblio' %] >+ The item has been added to the list. >+ [% CASE 'success_on_remove_biblios' %] >+ The item has been removed from the list. >+ [% CASE 'success_on_remove_share' %] >+ The share has been removed. >+ [% CASE 'does_not_exist' %] >+ This list does not exist. >+ [% CASE 'item_does_not_exist' %] >+ This item does not exist. >+ [% CASE 'unauthorized_on_view' %] >+ You do not have permission to view this list. >+ [% CASE 'unauthorized_on_update' %] >+ You do not have permission to update this list. >+ [% CASE 'unauthorized_on_delete' %] >+ You do not have permission to delete this list. >+ [% CASE 'unauthorized_on_add_biblio' %] >+ You do not have permission to add a biblio to this list. >+ [% CASE 'no_biblio_removed' %] >+ No biblio has been removed. >+ [% CASE 'Koha::Exceptions::Virtualshelves::DuplicateObject' %] >+ An error occurred when inserting this list. The name already [% shelfname %] exists. >+ [% CASE 'DBIx::Class::Exception' %] >+ [% m.msg %] >+ [% CASE %] >+ [% m.code %] >+ [% m.msg %] >+ [% END %] >+ </div> >+ [% END %] > >- [% IF ( viewshelf ) %]<!-- Viewing a particular shelf --> >+ [% IF op == 'view' %] > <h3> >- [% shelfname |html %] >- <a href="[% OPACBaseURL %]/cgi-bin/koha/opac-shelves.pl?rss=1&viewshelf=[% shelfnumber %]" class="rss-list-link noprint"> >+ [% shelf.shelfname |html %] >+ <a href="[% OPACBaseURL %]/cgi-bin/koha/opac-shelves.pl?rss=1&op=view&shelfnumber=[% shelf.shelfnumber %]" class="rss-list-link noprint"> > <img src="[% interface %]/[% theme %]/images/feed-icon-16x16.png" alt="Subscribe to this list" title="Subscribe to this list" border="0" class="rsssearchicon"/> > </a> > </h3> >@@ -160,68 +162,70 @@ > [% IF ( itemsloop ) %] > <div id="toolbar" class="toolbar clearfix"> > <div class="list-actions"> >- <a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?shelves=1">New list</a> <span class="sep">|</span> >- <a href="/cgi-bin/koha/opac-downloadshelf.pl?shelfid=[% shelfnumber | html %]&showprivateshelves=[% showprivateshelves | html %]" class="download" data-toggle="modal" data-target="#modalWin">Download list</a> >+ <a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?op=add_form">New list</a> <span class="sep">|</span> >+ <a href="/cgi-bin/koha/opac-downloadshelf.pl?shelfnumber=[% shelf.shelfnumber | html %]" class="download" data-toggle="modal" data-target="#modalWin">Download list</a> > > [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] > <span class="sendlist"><a href="/cgi-bin/koha/opac-sendshelf.pl?shelfid=[% shelfnumber | html %]" class="send" onclick="open('/cgi-bin/koha/opac-sendshelf.pl?shelfid=[% shelfnumber | html %]','win_form','scrollbars=no,resizable=no,height=300,width=450,top=50,left=100'); return false; ">Send list</a></span> > [% END %] > >- <a class="print-small" target="_blank" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelfnumber %]&sort=[% sort %]&direction=[% direction |uri %]&print=1">Print list</a> >+ <a class="print-small" target="_blank" href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelf.shelfnumber %]&sortfield=[% sortfield %]&direction=[% direction |uri %]&print=1">Print list</a> > >- [% IF ( manageshelf ) %] >+ [% IF can_manage_shelf %] > <span class="sep">|</span> > <form method="get" action="/cgi-bin/koha/opac-shelves.pl" class="form-inline"> >- <input type="hidden" name="op" value="modif" /> >- <input type="hidden" name="display" value="viewshelf" /> >- <input type="hidden" name="shelfnumber" value="[% shelfnumber | html %]" /> >+ <input type="hidden" name="op" value="edit_form" /> >+ <input type='hidden' name='category' value='[% category %]' /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > <input type="submit" class="editshelf" value="Edit list" /> > </form> > > <form method="post" action="/cgi-bin/koha/opac-shelves.pl" class="form-inline"> >- <input type="hidden" value="1" name="shelves"/> >- <input type="hidden" value="1" name="DEL-[% shelfnumber | html %]"/> >- [% IF ( showprivateshelves ) %] >- <input type="hidden" name="display" value="privateshelves"/> >- [% END %] >+ <input type="hidden" name="op" value="delete" /> >+ <input type='hidden' name='category' value='[% category %]' /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > <input type="submit" class="deleteshelf" value="Delete list" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST);"/> > </form> >- [% IF showprivateshelves && Koha.Preference('OpacAllowSharingPrivateLists') %] >- <a href="/cgi-bin/koha/opac-shareshelf.pl?op=invite&shelfnumber=[% shelfnumber | html %]" class="">Share list</a> >+ [% IF category == PRIVATE && Koha.Preference('OpacAllowSharingPrivateLists') %] >+ <a href="/cgi-bin/koha/opac-shareshelf.pl?op=invite&shelfnumber=[% shelf.shelfnumber | html %]" class="">Share list</a> > [% END %] >- [% ELSIF showprivateshelves # not manageshelf and private means shared %] >- [% INCLUDE remove_share %] >- <input type="hidden" name="REMSHR-[% shelfnumber | html %]" value="1" /> >+ [% ELSIF category == PRIVATE # not manageshelf and private means shared %] >+ <form action="/cgi-bin/koha/opac-shelves.pl" method="post" class="form-inline"> >+ <input type="hidden" name="op" value="remove_share" /> >+ <input type='hidden' name='category' value='[% category %]' /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> >+ <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_REMOVE_SHARE);" value="Remove share" /> > </form> >- [% END # / IF manageshelf %] >+ [% END %] > </div> > > <form action="/cgi-bin/koha/opac-shelves.pl" id="sorting-form" class="form-inline sort_by pull-right"> >- <input type="hidden" name="viewshelf" value="[% shelfnumber | html %]" /> >+ <input type="hidden" name="op" value="view" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > >- <label for="sort">Sort by: </label> >- <select name="sort" id="sort" class="resort" onchange="$('#sorting-form').submit()"> >+ <label for="sortfield">Sort by: </label> >+ <select name="sortfield" id="sortfield" class="resort" onchange="$('#sorting-form').submit()"> > <option value="">Default sorting</option> > >- [% IF sort == 'author' %] >+ [% IF sortfield == 'author' %] > <option value="author" selected="selected">Author</option> > [% ELSE %] > <option value="author">Author</option> > [% END %] > >- [% IF sort == 'title' %] >+ [% IF sortfield == 'title' %] > <option value="title" selected="selected">Title</option> > [% ELSE %] > <option value="title">Title</option> > [% END %] > >- [% IF sort == 'itemcallnumber' %] >+ [% IF sortfield == 'itemcallnumber' %] > <option value="itemcallnumber" selected="selected">Call number</option> > [% ELSE %] > <option value="itemcallnumber">Call number</option> > [% END %] > >- [% IF sort == 'copyrightdate' %] >+ [% IF sortfield == 'copyrightdate' %] > <option value="copyrightdate" selected="selected">Copyright date</option> > [% ELSE %] > <option value="copyrightdate">Copyright date</option> >@@ -265,23 +269,23 @@ > <a href="#" id="tagsel_cancel">Cancel</a> > </span> > [% END %] >- [% IF ( loggedinusername && allowremovingitems ) %] >+ [% IF loggedinusername && can_remove_biblios %] > <span id="removeitems"></span> > [% END %] > </span> <!-- / .links --> > </div> <!-- / #selections-toolbar --> > > <form action="/cgi-bin/koha/opac-shelves.pl" method="post" id="myform" name="myform" class="checkboxed"> >- [% IF ( manageshelf ) %] >- <input type="hidden" name="viewshelf" value="[% shelfnumber | html %]" /> >- <input type="hidden" name="modifyshelfcontents" value="1" /> >+ [% IF can_manage_shelf %] >+ <input type="hidden" name="op" value="remove_biblios" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > [% END %] > <div class="searchresults"> > <table id="listcontents" class="table"> > <tbody> > [% FOREACH itemsloo IN itemsloop %] > <tr> >- <td class="select selectcol"><input type="checkbox" class="cb" name="REM-[% itemsloo.biblionumber %]" value="[% itemsloo.biblionumber %]" /></td> >+ <td class="select selectcol"><input type="checkbox" class="cb" name="biblionumber" value="[% itemsloo.biblionumber %]" /></td> > [% UNLESS ( item_level_itypes ) %] > <td> > [% UNLESS ( noItemTypeImages ) %] >@@ -455,8 +459,8 @@ > <span class="actions"><a class="addtoshelf" href="/cgi-bin/koha/opac-addbybiblionumber.pl?biblionumber=[% itemsloo.biblionumber %]" onclick="Dopop('opac-addbybiblionumber.pl?biblionumber=[% itemsloo.biblionumber %]'); return false;">Save to another list</a></span> > [% END %] > >- [% IF ( allowremovingitems ) %] >- <span class="actions"><a class="removefromlist hidden" id="REM-[% itemsloo.biblionumber %]" href="#">Remove from this list</a></span> >+ [% IF can_remove_biblios %] >+ <span class="actions"><a class="removefromlist" href="/cgi-bin/koha/opac-shelves.pl?op=remove_biblios&shelfnumber=[% shelf.shelfnumber %]&biblionumber=[% itemsloo.biblionumber %]">Remove from this list</a></span> > [% END %] > > [% IF Koha.Preference( 'opacbookbag' ) == 1 %] >@@ -484,25 +488,23 @@ > [% ELSE %] > <div id="toolbar" class="toolbar clearfix"> > <div class="list-actions"> >- <a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?shelves=1">New list</a> <span class="sep"></span> >- [% IF ( manageshelf ) %] >+ <a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?op=add_form">New list</a> <span class="sep"></span> >+ [% IF can_manage_shelf %] > <span class="sep">|</span> > <form method="get" action="/cgi-bin/koha/opac-shelves.pl" class="form-inline"> >- <input type="hidden" name="op" value="modif" /> >- <input type="hidden" name="display" value="viewshelf" /> >- <input type="hidden" name="shelfnumber" value="[% shelfnumber | html %]" /> >+ <input type="hidden" name="op" value="edit_form" /> >+ <input type="hidden" name="category" value="category" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > <input type="submit" class="editshelf" value="Edit list" /> > </form> > > <form method="post" action="/cgi-bin/koha/opac-shelves.pl" class="form-inline"> >- <input type="hidden" value="1" name="shelves"/> >- <input type="hidden" value="1" name="DEL-[% shelfnumber | html %]"/> >- [% IF ( showprivateshelves ) %] >- <input type="hidden" name="display" value="privateshelves"/> >- [% END %] >+ <input type="hidden" name="op" value="delete" /> >+ <input type="hidden" name="shelfnumber" value="[% shelfnumber | html %]"/> >+ <input type="hidden" name="category" value="category" /> > <input type="submit" class="deleteshelf" value="Delete list" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST);"/> > </form> >- [% END # / IF manageshelf %] >+ [% END %] > </div> <!-- / .list-actions --> > </div> <!-- / #toolbar --> > >@@ -513,297 +515,203 @@ > [% END %] > </div> > [% END # / IF itemsloop %] >- [% END # / IF viewshelf %] >+ [% END %] > >- [% IF ( itemsloop && allowremovingitems ) %] >- <input type="hidden" name="shelfnumber" value="[% shelfnumber | html %]" /> >+ [% IF itemsloop && can_remove_biblios %] >+ <input type="hidden" name="op" value="view" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> > <input type="hidden" name="modifyshelfcontents" value="1" /> >- <input type="hidden" name="viewshelf" value="[% shelfnumber | html %]" /><input type="submit" value="Remove selected items" id="remove-selected" class="btn btn-danger"/> >+ <input type="submit" value="Remove selected items" id="remove-selected" class="btn btn-danger"/> > </form> >- [% ELSIF ( !itemsloop && manageshelf ) %] >+ [% ELSIF !itemsloop && can_manage_shelf %] > <form method="post" action="opac-shelves.pl"> >- <input type="hidden" name="DEL-[% shelfnumber | html %]" value="1" /> >- <input type="hidden" name="shelves" value="1" /> >- <input type="hidden" name="shelfoff" value="[% shelfoff %]" /> >+ <input type="hidden" name="op" value="delete" /> >+ <input type="hidden" name="referer" value="list" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]"/> > <input type="submit" class="btn btn-danger" value="Delete this list" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST)" /> > </form> > [% END %] > >- [% IF ( edit ) %] >+ [% IF op == 'add_form' OR op == 'edit_form' %] > <form method="post" action="/cgi-bin/koha/opac-shelves.pl"> >- <input type="hidden" name="op" value="modifsave" /> >- <input type="hidden" name="display" value="[% display |html %]" /> >- <input type="hidden" name="shelfnumber" value="[% shelfnumber | html %]" /> > <fieldset class="rows"> >- <legend>Editing <em>[% shelfname |html %]</em></legend> >+ [% IF op == 'add_form' %] >+ <div id="addshelf"> >+ <legend>Create a new list</legend> >+ <input type="hidden" name="op" value="add" /> >+ [% ELSE %] >+ <legend>Editing <em>[% shelf.shelfname |html %]</em></legend> >+ <input type="hidden" name="op" value="edit" /> >+ <input type="hidden" name="referer" value="view" /> >+ <input type="hidden" name="shelfnumber" value="[% shelf.shelfnumber | html %]" /> >+ [% END %] >+ <input type="hidden" name="owner" id="owner" value="[% loggedinusernumber %]" /> > <ol> >- <li><label for="shelfname">List name: </label><input type="text" id="shelfname" name="shelfname" maxlength="255" value="[% shelfname |html %]" /></li> >+ <li> >+ <label class="required" for="shelfname">List name: </label> >+ <input type="text" id="shelfname" name="shelfname" maxlength="255" value="[% shelf.shelfname |html %]" /></li> > <li> > <label for="sortfield" >Sort this list by: </label> > <select name="sortfield" id="sortfield"> >- [% IF ( sortfield == "title" ) %] >+ [% IF shelf.sortfield == "title" %] > <option value="title" selected="selected">Title</option> > [% ELSE %] > <option value="title">Title</option> > [% END %] >- [% IF ( sortfield == "author" ) %] >+ [% IF shelf.sortfield == "author" %] > <option value="author" selected="selected">Author</option> > [% ELSE %] > <option value="author">Author</option> > [% END %] >- [% IF ( sortfield == "copyrightdate" ) %] >+ [% IF shelf.sortfield == "copyrightdate" %] > <option value="copyrightdate" selected="selected">Year</option> > [% ELSE %] > <option value="copyrightdate">Year</option> > [% END %] >- [% IF ( sortfield == "itemcallnumber" ) %] >+ [% IF shelf.sortfield == "itemcallnumber" %] > <option value="itemcallnumber" selected="selected">Call number</option> > [% ELSE %] > <option value="itemcallnumber">Call number</option> > [% END %] > </select> > </li> >- [% IF ( OpacAllowPublicListCreation || category2 ) %] >+ [% IF Koha.Preference('OpacAllowPublicListCreation') OR category == PUBLIC %] > <li> > <label for="category">Category:</label> > <select name="category" id="category"> >- [% IF ( category1 ) %] >+ [% IF shelf.category == PRIVATE %] > <option value="1" selected="selected">Private</option> > [% ELSE %] > <option value="1">Private</option> > [% END %] >- [% IF ( category2 ) %] >+ [% IF shelf.category == PUBLIC %] > <option value="2" selected="selected">Public</option> > [% ELSE %] > <option value="2">Public</option> > [% END %] > </select> >- [% IF ( category2 && !OpacAllowPublicListCreation ) %] >+ [% IF shelf.category == PUBLIC AND NOT Koha.Preference('OpacAllowPublicListCreation') %] > <span class="hint alert alert-info">The library has disabled the ability for patrons to create new public lists. If you make your list private, you will not be able to make it public again.</span> > [% END %] > </li> > [% INCLUDE list_permissions %] > [% END %] > </ol> >- [% UNLESS ( OpacAllowPublicListCreation || category2 ) %] >- <input type="hidden" name="category" value="1" /> >+ [% UNLESS Koha.Preference('OpacAllowPublicListCreation') OR category == PUBLIC %] >+ <input type="hidden" name="category" value="[% PRIVATE %]" /> > [% END %] > </fieldset> > > <fieldset class="action"> >- <input type="submit" value="Save" class="btn" /> >- [% IF ( showprivateshelves ) %] >- <a class="cancel" href="/cgi-bin/koha/opac-shelves.pl?shelfnumber=[% shelfnumber | html %]&display=privateshelves">Cancel</a> >+ <input type="submit" onclick="Check(this.form); return false;" value="Save" class="btn" /> >+ [% IF referer == 'view' %] >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% shelf.shelfnumber %]" class="cancel">Cancel</a> > [% ELSE %] >- <a class="cancel" href="/cgi-bin/koha/opac-shelves.pl?shelfnumber=[% shelfnumber | html %]">Cancel</a> >- [% END %] >+ <a href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PRIVATE %]" class="cancel">Cancel</a> >+ [% END %] >+ > </fieldset> > </form> >- [% END # / IF edit %] > >+ [% ELSIF op == 'list' %] >+ <h2>Lists</h2> >+ <div class="toptabs ui-tabs ui-widget ui-widget-content ui-corner-all"> >+ <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"> >+ [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >+ [% IF category == PRIVATE %] >+ <li id="privateshelves_tab" class="ui-state-default ui-corner-top ui-tabs-active ui-state-active"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?op=listamp;category=[% PRIVATE %]">Your lists</a></li> >+ [% ELSE %] >+ <li id="privateshelves_tab" class="ui-state-default ui-corner-top"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PRIVATE %]">Your lists</a></li> >+ [% END %] >+ [% END %] >+ [% IF category == PUBLIC %] >+ <li id="publicshelves_tab" class="ui-state-default ui-corner-top ui-tabs-active ui-state-active"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PUBLIC %]">Public lists</a></li> >+ [% ELSE %] >+ <li id="publicshelves_tab" class="ui-state-default ui-corner-top"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?op=list&category=[% PUBLIC %]">Public lists</a></li> >+ [% END %] >+ </ul> > >- [% UNLESS ( edit ) %] >- [% UNLESS ( viewshelf ) %] >- [% UNLESS ( shelves ) %] >- <h2>Lists</h2> >- <div class="toptabs ui-tabs ui-widget ui-widget-content ui-corner-all"> >- <ul class="ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all"> >- [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >- [% IF ( showprivateshelves ) %] >- <li id="privateshelves_tab" class="ui-state-default ui-corner-top ui-tabs-active ui-state-active"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Your lists</a></li> >- [% ELSE %] >- <li id="privateshelves_tab" class="ui-state-default ui-corner-top"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves">Your lists</a></li> >- [% END %] >- [% END %] >- [% IF ( showpublicshelves ) %] >- <li id="publicshelves_tab" class="ui-state-default ui-corner-top ui-tabs-active ui-state-active"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves">Public lists</a></li> >- [% ELSE %] >- <li id="publicshelves_tab" class="ui-state-default ui-corner-top"><a class="ui-tabs-anchor" href="/cgi-bin/koha/opac-shelves.pl?display=publicshelves">Public lists</a></li> >- [% END %] >- </ul> >- >- [% IF ( showprivateshelves ) %] >- <div id="privateshelves" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display:block;"> >- >- [% IF ( loggedinusername ) %] >- <div id="toolbar" class="toolbar"><a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?shelves=1">New list</a></div> >- [% IF ( showprivateshelves ) %] >- [% IF ( shelveslooppriv ) %] >- <table class="table"> >- <thead> >- <tr> >- <th>List name</th> >- <th>Contents</th> >- <th>Type</th> >- <th> </th> >- </tr> >- </thead> >- <tbody> >- [% FOREACH shelveslooppri IN shelveslooppriv %] >- <tr> >- <td><a href="/cgi-bin/koha/opac-shelves.pl?display=privateshelves&viewshelf=[% shelveslooppri.shelf %]&sortfield=[% shelveslooppri.sortfield %]">[% shelveslooppri.shelfname |html %]</a></td> >- <td>[% IF ( shelveslooppri.count ) %][% shelveslooppri.count %] [% IF shelveslooppri.count == 1 %]item[% ELSE %]items[% END %][% ELSE %]Empty[% END %]</td> >- <td> >- [% IF ( shelveslooppri.viewcategory1 ) %][% IF !shelveslooppri.shares %]Private[% ELSE %]Shared[% END %][% END %] >- </td> >- <td> >- [% IF ( shelveslooppri.mine ) %] >- <form action="/cgi-bin/koha/opac-shelves.pl" method="get" class="form-inline"> >- <input type="hidden" name="shelfnumber" value="[% shelveslooppri.shelf |html %]" /> >- <input type="hidden" name="display" value="privateshelves" /> >- <input type="hidden" name="op" value="modif" /> >- <input type="submit" class="editshelf" value="Edit" /> >- </form> >- <form action="opac-shelves.pl" method="post" class="form-inline"> >- <input type="hidden" name="shelves" value="1" /> >- <input type="hidden" name="display" value="privateshelves" /> >- <input type="hidden" name="DEL-[% shelveslooppri.shelf |html %]" value="1" /> >- <input type="hidden" name="shelfoff" value="[% shelfoff |html %]" /> >- [% IF ( shelveslooppri.confirm ) %] >- <input type="hidden" name="CONFIRM-[% shelveslooppri.confirm |html %]" value="1" /> >- <input type="submit" class="btn btn-danger confirm" value="Confirm" /> >- [% ELSE %] >- <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST);" value="Delete" /> >- [% END %] >- </form> >- [% IF Koha.Preference('OpacAllowSharingPrivateLists') %] >- <a href="/cgi-bin/koha/opac-shareshelf.pl?op=invite&shelfnumber=[% shelveslooppri.shelf |html %]" class="">Share</a> >- [% END %] >- [% ELSE # not shelveslooppri.mine, so shared %] >- [% INCLUDE remove_share # if pref is off, you should still be able to remove shares %] >- <input type="hidden" name="shelfoff" value="[% shelfoff |html %]" /> >- <input type="hidden" name="REMSHR-[% shelveslooppri.shelf |html %]" value="1" /> >- </form> >- [% END %] >- </td> >- </tr> >- [% END # / FOREACH shelveslooppri %] >- </tbody> >- </table> >- <div class="pages">[% pagination_bar %]</div> >- [% ELSE %] >- <p>No private lists.</p> >- [% END # / IF shelveslooppriv %] >- [% END # / IF showprivateshelves %] >- [% ELSE %] >- [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >- <div class="alert alert-info"><a href="/cgi-bin/koha/opac-user.pl">Log in</a> to create new lists.</div> >- [% END %] >- [% END # IF loggedinusername %] >- </div><!-- / #privateshelves --> >- [% END # / IF showprivateshelves %] >- [% IF ( showpublicshelves ) %] >- <div id="publicshelves" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display:block;"> >- >- [% IF ( loggedinusername ) %] >- <div id="toolbar" class="toolbar"> <a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?shelves=1">New list</a></div> >- [% ELSE %] >- [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >- <div class="alert alert-info"><a href="/cgi-bin/koha/opac-user.pl">Log in</a> to create new lists.</div> >- [% END %] >- [% END # / IF loggedinusername %] >- >- [% IF ( shelvesloop ) %] >- <table class="table"> >- <thead> >- <tr> >- <th>List name</th> >- <th>Contents</th> >- <th>Type</th><th> </th> >- </tr> >- </thead> >- <tbody> >- [% FOREACH shelvesloo IN shelvesloop %] >- <tr> >- <td><a class="title" href="/cgi-bin/koha/opac-shelves.pl?viewshelf=[% shelvesloo.shelf %]&sortfield=[% shelvesloo.sortfield %]">[% shelvesloo.shelfname |html %]</a></td> >- <td>[% shelvesloo.count %] [% IF shelvesloo.count == 1 %]item[% ELSE %]item(s)[% END %]</td> >- <td> >- [% IF ( shelvesloo.viewcategory2 ) %]Public[% END %] >- </td> >- <td> >- [% IF ( shelvesloo.mine ) %] >- <form action="/cgi-bin/koha/opac-shelves.pl" method="get" class="form-inline"> >- <input type="hidden" name="shelfnumber" value="[% shelvesloo.shelf %]" /> >- <input type="hidden" name="op" value="modif" /> >- <input type="hidden" name="display" value="publicshelves" /> >- <input type="submit" class="editshelf" value="Edit" /> >- </form> >- <form action="opac-shelves.pl" method="post" class="form-inline"> >- <input type="hidden" name="shelves" value="1" /> >- <input type="hidden" name="DEL-[% shelvesloo.shelf %]" value="1" /> >- [% IF ( shelvesloo.confirm ) %] >- <input type="hidden" name="CONFIRM-[% shelvesloo.confirm %]" value="1" /> >- <input type="submit" class="btn btn-danger confirm" value="Confirm" /> >- [% ELSE %] >- <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST);" value="Delete" /> >- [% END %] >- </form> >- [% END %] >- </td> >- </tr> >- [% END # / FOREACH shelvesloop %] >- </tbody> >- </table> >- [% IF ( pagination_bar ) %]<div class="pages">[% pagination_bar %]</div>[% END %] >- [% ELSE %] >- [% IF ( showpublicshelves ) %]<p>No public lists.</p>[% END %] >- [% END # / IF shelvesloop %] >- >- </div><!-- / # publicshelves --> >- [% END # / IF showprivateshelves %] >- </div> <!-- / .ui-tabs-panel --> >- [% END # / UNLESS shelves %] >- [% END # / UNLESS viewshelf %] >- [% END # / UNLESS edit %] >- >- [% IF ( shelves ) %] >- <div id="addshelf"> >- <form method="post" action="/cgi-bin/koha/opac-shelves.pl"> >- <fieldset class="rows"> >- <legend>Create a new list</legend> >- <input type="hidden" name="shelves" value="1" /> >- <ol> >- <li> >- <label class="required" for="addshelf">List name:</label> >- [% IF shelfname %] >- <input id="addshelf" type="text" name="addshelf" value="[% shelfname %]" maxlength="255" class="input-fluid" /> >- [% ELSE %] >- <input id="addshelf" type="text" name="addshelf" maxlength="255" class="input-fluid" /> >- [% END %] >- <input type="hidden" name="owner" id="owner" value="[% loggedinuser %]" /> >- </li> >- <li> >- <label for="sortfield" >Sort this list by: </label> >- <select name="sortfield" id="sortfield"> >- <option value="title">Title</option> >- <option value="author">Author</option> >- <option value="copyrightdate">Year</option> >- <option value="itemcallnumber">Call number</option> >- </select> >- </li> >- [% IF (OpacAllowPublicListCreation) %] >- <li> >- <label for="category">Category:</label> >- <select name="category" id="category"> >- <option value="1">Private</option> >- <option value="2">Public</option> >- </select> >- </li> >- [% INCLUDE list_permissions %] >+ [% IF category == PRIVATE %] >+ <div id="privateshelves" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display:block;"> >+ [% ELSE %] >+ <div id="publicshelves" class="ui-tabs-panel ui-widget-content ui-corner-bottom" style="display:block;"> >+ [% END %] >+ >+ <div id="toolbar" class="toolbar"><a class="newshelf" href="/cgi-bin/koha/opac-shelves.pl?op=add_form">New list</a></div> >+ [% IF shelves %] >+ <table class="table"> >+ <thead> >+ <tr> >+ <th>List name</th> >+ <th>Contents</th> >+ <th>Type</th> >+ <th> </th> >+ </tr> >+ </thead> >+ <tbody> >+ [% FOREACH s IN shelves %] >+ [% SET contents = s.get_contents %] >+ <tr> >+ <td><a href="/cgi-bin/koha/opac-shelves.pl?op=view&shelfnumber=[% s.shelfnumber %]">[% s.shelfname |html %]</a></td> >+ <td>[% IF contents.count %][% contents.count %] [% IF contents.count == 1 %]item[% ELSE %]items[% END %][% ELSE %]Empty[% END %]</td> >+ <td> >+ [% IF s.category == PRIVATE %] >+ [% IF s.is_shared %]Shared[% ELSE %]Private[% END %] >+ [% ELSE %] >+ Public >+ [% END %] >+ </td> >+ <td> >+ [% IF s.can_be_managed( loggedinusernumber ) %] >+ <form action="/cgi-bin/koha/opac-shelves.pl" method="get" class="form-inline"> >+ <input type="hidden" name="shelfnumber" value="[% s.shelfnumber |html %]" /> >+ <input type="hidden" name="category" value="[% s.category %]" /> >+ <input type="hidden" name="op" value="edit_form" /> >+ <input type="hidden" name="referer" value="list" /> >+ <input type="submit" class="editshelf" value="Edit" /> >+ </form> >+ [% END %] >+ [% IF s.can_be_deleted( loggedinusernumber ) %] >+ <form action="/cgi-bin/koha/opac-shelves.pl" method="post" class="form-inline"> >+ <input type="hidden" name="op" value="delete" /> >+ <input type="hidden" name="referer" value="list" /> >+ <input type='hidden' name='category' value='[% category %]' /> >+ <input type="hidden" name="shelfnumber" value="[% s.shelfnumber | html %]" /> >+ <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_DELETE_LIST);" value="Delete" /> >+ </form> >+ [% END %] >+ [% IF s.category == PRIVATE AND s.can_be_managed( loggedinusernumber ) AND Koha.Preference('OpacAllowSharingPrivateLists') %] >+ <a href="/cgi-bin/koha/opac-shareshelf.pl?op=invite&shelfnumber=[% s.shelfnumber |html %]" class="">Share</a> >+ [% END %] >+ [% IF s.is_shared_with( loggedinusernumber ) %] >+ <form action="opac-shelves.pl" method="post" class="form-inline"> >+ <input type="hidden" name="op" value="remove_share" /> >+ <input type="hidden" name="referer" value="list" /> >+ <input type='hidden' name='category' value='[% category %]' /> >+ <input type="hidden" name="shelfnumber" value="[% s.shelfnumber | html %]" /> >+ <input type="submit" class="deleteshelf" onclick="return confirmDelete(MSG_CONFIRM_REMOVE_SHARE);" value="Remove share" /> >+ </form> >+ [% END %] >+ </td> >+ </tr> > [% END %] >- </ol> >- [% UNLESS (OpacAllowPublicListCreation) %] >- <input type="hidden" name="category" value="1" /> >- [% END %] >- </fieldset> >- <fieldset class="action"> >- <input type="submit" onclick="Check(this.form); return false;" value="Save" class="btn" /> >- <a class="cancel" href="/cgi-bin/koha/opac-shelves.pl">Cancel</a> >- </fieldset> >- </form> >- </div> <!-- / #addshelf --> >- [% END # / IF shelves %] >- >+ </tbody> >+ </table> >+ <div class="pages">[% pagination_bar %]</div> >+ [% ELSE %] >+ [% IF category == PUBLIC %] >+ <p>No public lists.</p> >+ [% ELSE %] >+ <p>No private lists.</p> >+ [% END %] >+ [% END %] >+ <div> [%# privateshelves or publicshelves %] >+ </div> [%# <div class="toptabs ui-tabs ui-widget ui-widget-content ui-corner-all"> %] >+ [% ELSIF NOT loggedinusernumber %] >+ [% IF Koha.Preference( 'opacuserlogin' ) == 1 %] >+ <div class="alert alert-info"><a href="/cgi-bin/koha/opac-user.pl">Log in</a> to create new lists.</div> >+ [% END %] >+ [% END # IF loggedinusername %] > </div> <!-- / #usershelves --> > </div> <!-- / .span10/12 --> > </div> <!-- / .row-fluid --> >@@ -987,15 +895,9 @@ $(function() { > }); > [% END %] > >- [% IF ( loggedinusername && allowremovingitems ) %] >- var removeFromListLinks = $(".removefromlist"); >- removeFromListLinks.removeClass("hidden"); >- // "remove from list" appearing on each line of the list output >- removeFromListLinks.on("click",function(){ >- $(".checkboxed").unCheckCheckboxes(); >- var listitem = $("input[name="+this.id+"]"); >- listitem.prop("checked",true); >- $("#myform").submit(); >+ [% IF loggedinusername && can_remove_biblios %] >+ $(".removefromlist").on("click", function(e){ >+ return confirmDelete(MSG_REMOVE_ONE_FROM_LIST); > }); > > $("#myform").submit(function(){ >diff --git a/opac/opac-downloadshelf.pl b/opac/opac-downloadshelf.pl >index 15a85dc..4b932fc 100755 >--- a/opac/opac-downloadshelf.pl >+++ b/opac/opac-downloadshelf.pl >@@ -46,17 +46,17 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user ( > } > ); > >-my $shelfid = $query->param('shelfid'); >+my $shelfnumber = $query->param('shelfnumber'); > my $format = $query->param('format'); > my $context = $query->param('context'); >-my $showprivateshelves = $query->param('showprivateshelves'); > my $dbh = C4::Context->dbh; > >-if ( ShelfPossibleAction( (defined($borrowernumber) ? $borrowernumber : -1), $shelfid, 'view' ) ) { >+my $shelf = Koha::Virtualshelves->find( $shelfnumber ); >+if ( $shelf and $shelf->can_be_viewed( $borrowernumber ) ) { > >- if ($shelfid && $format) { >+ if ($shelfnumber && $format) { > >- my ($items, $totitems) = GetShelfContents($shelfid); >+ my ($items, $totitems) = GetShelfContents($shelfnumber); > my $marcflavour = C4::Context->preference('marcflavour'); > my $output; > my $extension; >@@ -116,13 +116,7 @@ if ( ShelfPossibleAction( (defined($borrowernumber) ? $borrowernumber : -1), $sh > $template->param(fullpage => 1); > } > $template->param(csv_profiles => GetCsvProfilesLoop('marc')); >- $template->param( >- showprivateshelves => $showprivateshelves, >- shelfid => $shelf->shelfnumber, >- shelfnumber => $shelf->shelfnumber, >- viewshelf => $shelf->shelfnumber, >- shelfname => $shelf->shelfname, >- ); >+ $template->param( shelf => $shelf ); > output_html_with_http_headers $query, $cookie, $template->output; > } > >diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl >index 2b09535..632177f 100755 >--- a/opac/opac-shelves.pl >+++ b/opac/opac-shelves.pl >@@ -1,6 +1,6 @@ > #!/usr/bin/perl > >-# Copyright 2000-2002 Katipo Communications >+# Copyright 2015 Koha Team > # > # This file is part of Koha. > # >@@ -17,13 +17,20 @@ > # You should have received a copy of the GNU General Public License > # along with Koha; if not, see <http://www.gnu.org/licenses>. > >-use strict; >-use warnings; >+use Modern::Perl; > use CGI qw ( -utf8 ); >-use C4::VirtualShelves::Page; >+use C4::VirtualShelves; > use C4::Auth; >+use C4::Biblio; >+use C4::Koha; >+use C4::Items; >+use C4::Members; >+use C4::Output; >+use C4::Tags qw( get_tags ); >+use C4::XSLT; >+use Koha::Virtualshelves; > >-my $query = CGI->new(); >+my $query = new CGI; > > my $template_name = $query->param('rss') ? "opac-shelves-rss.tt" : "opac-shelves.tt"; > >@@ -34,9 +41,302 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ > authnotrequired => ( C4::Context->preference("OpacPublic") ? 1 : 0 ), > }); > >+my $op = $query->param('op') || 'list'; >+my $referer = $query->param('referer') || $op; >+my $category = $query->param('category') || 1; >+my ( $shelf, $shelfnumber, @messages ); >+ >+if ( $op eq 'add_form' ) { >+ # Nothing to do >+} elsif ( $op eq 'edit_form' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ >+ if ( $shelf ) { >+ $category = $shelf->category; >+ my $patron = GetMember( 'borrowernumber' => $shelf->owner ); >+ $template->param( owner => $patron, ); >+ unless ( $shelf->can_be_managed( $loggedinuser ) ) { >+ push @messages, { type => 'error', code => 'unauthorized_on_update' }; >+ $op = 'list'; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+} elsif ( $op eq 'add' ) { >+ eval { >+ $shelf = Koha::Virtualshelf->new( >+ { shelfname => $query->param('shelfname'), >+ sortfield => $query->param('sortfield'), >+ category => $query->param('category') || 1, >+ allow_add => $query->param('allow_add'), >+ allow_delete_own => $query->param('allow_delete_own'), >+ allow_delete_other => $query->param('allow_delete_other'), >+ owner => $query->param('owner'), >+ } >+ ); >+ $shelf->store; >+ $shelfnumber = $shelf->shelfnumber; >+ }; >+ if ($@) { >+ push @messages, { type => 'error', code => ref($@), msg => $@ }; >+ } elsif ( not $shelf ) { >+ push @messages, { type => 'error', code => 'error_on_insert' }; >+ } else { >+ push @messages, { type => 'message', code => 'success_on_insert' }; >+ $op = 'view'; >+ } >+} elsif ( $op eq 'edit' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ if ( $shelf ) { >+ $op = $referer; >+ if ( $shelf->can_be_managed( $loggedinuser ) ) { >+ $shelf->shelfname( $query->param('shelfname') ); >+ $shelf->sortfield( $query->param('sortfield') ); >+ $shelf->allow_add( $query->param('allow_add') ); >+ $shelf->allow_delete_own( $query->param('allow_delete_own') ); >+ $shelf->allow_delete_other( $query->param('allow_delete_other') ); >+ $shelf->category( $query->param('category') ); >+ eval { $shelf->store }; >+ >+ if ($@) { >+ push @messages, { type => 'error', code => 'error_on_update' }; >+ $op = 'edit_form'; >+ } else { >+ push @messages, { type => 'message', code => 'success_on_update' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'unauthorized_on_update' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+} elsif ( $op eq 'delete' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ if ($shelf) { >+ if ( $shelf->can_be_deleted( $loggedinuser ) ) { >+ eval { $shelf->delete; }; >+ if ($@) { >+ push @messages, { type => 'error', code => ref($@), msg => $@ }; >+ } else { >+ push @messages, { type => 'message', code => 'success_on_delete' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'unauthorized_on_delete' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+ $op = $referer; >+} elsif ( $op eq 'remove_share' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ if ($shelf) { >+ my $removed = eval { $shelf->remove_share( $loggedinuser ); }; >+ if ($@) { >+ push @messages, { type => 'error', code => ref($@), msg => $@ }; >+ } elsif ( $removed ) { >+ push @messages, { type => 'message', code => 'success_on_remove_share' }; >+ } else { >+ push @messages, { type => 'error', code => 'error_on_remove_share' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+ $op = $referer; >+ >+} elsif ( $op eq 'add_biblio' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ if ($shelf) { >+ if( my $barcode = $query->param('barcode') ) { >+ my $item = GetItem( 0, $barcode); >+ if (defined $item && $item->{itemnumber}) { >+ my $biblio = GetBiblioFromItemNumber( $item->{itemnumber} ); >+ if ( $shelf->can_biblios_be_added( $loggedinuser ) ) { >+ my $added = eval { $shelf->add_biblio( $biblio->{biblionumber}, $loggedinuser ); }; >+ if ($@) { >+ push @messages, { type => 'error', code => ref($@), msg => $@ }; >+ } elsif ( $added ) { >+ push @messages, { type => 'message', code => 'success_on_add_biblio' }; >+ } else { >+ push @messages, { type => 'message', code => 'error_on_add_biblio' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'unauthorized_on_add_biblio' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'item_does_not_exist' }; >+ } >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+ $op = $referer; >+} elsif ( $op eq 'remove_biblios' ) { >+ $shelfnumber = $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ my @biblionumber = $query->param('biblionumber'); >+ if ($shelf) { >+ if ( $shelf->can_biblios_be_removed( $loggedinuser ) ) { >+ my $number_of_biblios_removed = eval { >+ $shelf->remove_biblios( >+ { >+ biblionumbers => \@biblionumber, >+ borrowernumber => $loggedinuser, >+ } >+ ); >+ }; >+ if ($@) { >+ push @messages, { type => 'error', code => ref($@), msg => $@ }; >+ } elsif ( $number_of_biblios_removed ) { >+ push @messages, { type => 'message', code => 'success_on_remove_biblios' }; >+ } else { >+ push @messages, { type => 'error', code => 'no_biblio_removed' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'unauthorized_on_remove_biblios' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+ $op = 'view'; >+} >+ >+if ( $op eq 'view' ) { >+ $shelfnumber ||= $query->param('shelfnumber'); >+ $shelf = Koha::Virtualshelves->find($shelfnumber); >+ if ( $shelf ) { >+ if ( $shelf->can_be_viewed( $loggedinuser ) ) { >+ $category = $shelf->category; >+ my $sortfield = $query->param('sortfield') || $shelf->sortfield; # Passed in sorting overrides default sorting >+ my $direction = $query->param('direction') || 'asc'; >+ my ( $shelflimit, $shelfoffset, $itemoff ); >+ unless ( $query->param('print') or $query->param('rss') ) { >+ $shelflimit = C4::Context->preference('OPACnumSearchResults') || 20; >+ $itemoff = ( $query->param('itemoff') ? $query->param('itemoff') : 1 ); >+ $shelfoffset = ( $itemoff - 1 ) * $shelflimit; # Sets the offset to begin retrieving items at >+ } >+ my ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset, $sortfield, $direction ); >+ >+ # get biblionumbers stored in the cart >+ my @cart_list; >+ if(my $cart_list = $query->cookie('bib_list')){ >+ @cart_list = split(/\//, $cart_list); >+ } >+ >+ my $borrower = GetMember( borrowernumber => $loggedinuser ); >+ >+ for my $this_item (@$items) { >+ my $biblionumber = $this_item->{biblionumber}; >+ my $record = GetMarcBiblio($biblionumber); >+ >+ if ( C4::Context->preference("OPACXSLTResultsDisplay") ) { >+ $this_item->{XSLTBloc} = XSLTParse4Display( $biblionumber, $record, "OPACXSLTResultsDisplay" ); >+ } >+ >+ my $marcflavour = C4::Context->preference("marcflavour"); >+ $this_item->{'imageurl'} = getitemtypeinfo( $this_item->{'itemtype'}, 'intranet' )->{'imageurl'}; >+ $this_item->{'coins'} = GetCOinSBiblio($record); >+ $this_item->{'subtitle'} = GetRecordValue( 'subtitle', $record, GetFrameworkCode( $this_item->{'biblionumber'} ) ); >+ $this_item->{'normalized_upc'} = GetNormalizedUPC( $record, $marcflavour ); >+ $this_item->{'normalized_ean'} = GetNormalizedEAN( $record, $marcflavour ); >+ $this_item->{'normalized_oclc'} = GetNormalizedOCLCNumber( $record, $marcflavour ); >+ $this_item->{'normalized_isbn'} = GetNormalizedISBN( undef, $record, $marcflavour ); >+ >+ unless ( defined $this_item->{size} ) { >+ >+ #TT has problems with size >+ $this_item->{size} = q||; >+ } >+ >+ # Getting items infos for location display >+ my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'} ); >+ $this_item->{'ITEM_RESULTS'} = \@items_infos; >+ >+ if (C4::Context->preference('TagsEnabled') and C4::Context->preference('TagsShowOnList')) { >+ $this_item->{TagLoop} = get_tags({ >+ biblionumber=>$this_item->{'biblionumber'}, approved=>1, 'sort'=>'-weight', >+ limit => C4::Context->preference('TagsShowOnList'), >+ }); >+ } >+ >+ $this_item->{allow_onshelf_holds} = C4::Reserves::OnShelfHoldsAllowed($this_item, $borrower); >+ >+ >+ if ( grep {$_ eq $biblionumber} @cart_list) { >+ $this_item->{incart} = 1; >+ } >+ >+ if ( $query->param('rss') ) { >+ $this_item->{title} = $content->biblionumber->title; >+ $this_item->{author} = $content->biblionumber->author; >+ $this_item->{biblionumber} = $biblionumber; >+ } >+ push @items, $this_item; >+ } >+ >+ # Build drop-down list for 'Add To:' menu... >+ my ( $totalref, $pubshelves, $barshelves ) = C4::VirtualShelves::GetSomeShelfNames( $loggedinuser, 'COMBO', 1 ); >+ $template->param( >+ addbarshelves => $totalref->{bartotal}, >+ addbarshelvesloop => $barshelves, >+ addpubshelves => $totalref->{pubtotal}, >+ addpubshelvesloop => $pubshelves, >+ can_manage_shelf => $shelf->can_be_managed($loggedinuser), >+ can_delete_shelf => $shelf->can_be_deleted($loggedinuser), >+ can_remove_biblios => $shelf->can_biblios_be_removed($loggedinuser), >+ can_add_biblios => $shelf->can_biblios_be_added($loggedinuser), >+ sortfield => $sortfield, >+ itemsloop => $items, >+ sortfield => $sortfield, >+ direction => $direction, >+ ); >+ if ($shelflimit) { >+ $template->param( >+ pagination_bar => pagination_bar( >+ q||, ( int( $totitems / $shelflimit ) ) + ( ( $totitems % $shelflimit ) > 0 ? 1 : 0 ), >+ $itemoff, "itemoff", { op => 'view', shelfnumber => $shelf->shelfnumber, sortfield => $sortfield, direction => $direction, } >+ ), >+ ); >+ } >+ } else { >+ push @messages, { type => 'error', code => 'unauthorized_on_view' }; >+ } >+ } else { >+ push @messages, { type => 'error', code => 'does_not_exist' }; >+ } >+} >+ >+if ( $op eq 'list' ) { >+ my $shelves; >+ my ( $page, $rows ) = ( $query->param('page') || 1, 20 ); >+ if ( $category == 1 ) { >+ $shelves = Koha::Virtualshelves->get_private_shelves({ page => $page, rows => $rows, borrowernumber => $loggedinuser, }); >+ } else { >+ $shelves = Koha::Virtualshelves->get_public_shelves({ page => $page, rows => $rows, }); >+ } >+ >+ my $pager = $shelves->pager; >+ $template->param( >+ shelves => $shelves, >+ pagination_bar => pagination_bar( >+ q||, $pager->last_page - $pager->first_page + 1, >+ $page, "page", { op => 'list', category => $category, } >+ ), >+ ); >+} >+ > $template->param( >+ op => $op, >+ referer => $referer, >+ shelf => $shelf, >+ messages => \@messages, >+ category => $category, >+ print => $query->param('print') || 0, > listsview => 1, >- print => $query->param('print') > ); > >-shelfpage('opac', $query, $template, $loggedinuser, $cookie); >+output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/t/db_dependent/Virtualshelves.t b/t/db_dependent/Virtualshelves.t >index aa8b323..42c7ea9 100644 >--- a/t/db_dependent/Virtualshelves.t >+++ b/t/db_dependent/Virtualshelves.t >@@ -1,7 +1,7 @@ > #!/usr/bin/perl > > use Modern::Perl; >-use Test::More tests => 4; >+use Test::More tests => 5; > use DateTime::Duration; > > use C4::Context; >@@ -14,10 +14,7 @@ use t::lib::TestBuilder; > > my $dbh = C4::Context->dbh; > $dbh->{AutoCommit} = 0; >- >-$dbh->do(q|DELETE FROM virtualshelfshares|); >-$dbh->do(q|DELETE FROM virtualshelfcontents|); >-$dbh->do(q|DELETE FROM virtualshelves|); >+teardown(); > > my $builder = t::lib::TestBuilder->new; > >@@ -81,6 +78,8 @@ subtest 'CRUD' => sub { > is( $is_deleted, 1, 'The shelf has been deleted correctly' ); > $number_of_shelves = Koha::Virtualshelves->search->count; > is( $number_of_shelves, 1, 'To be sure the shelf has been deleted' ); >+ >+ teardown(); > }; > > subtest 'Sharing' => sub { >@@ -149,6 +148,8 @@ subtest 'Sharing' => sub { > is( $shelf_to_share->remove_share( $share_with_me->{borrowernumber} ), 1, '1 share should have been removed if the shelf was shared with this patron' ); > $number_of_shelves_shared = Koha::Virtualshelfshares->search->count; > is( $number_of_shelves_shared, 1, 'To be sure the share has been removed' ); >+ >+ teardown(); > }; > > subtest 'Shelf content' => sub { >@@ -235,6 +236,8 @@ subtest 'Shelf content' => sub { > is( $number_of_deleted_biblios, 1, ); > $number_of_contents = Koha::Virtualshelfcontents->search->count; > is( $number_of_contents, 1, 'The biblio should have been deleted to the shelf by the patron 2, even if it is not his own content (allow_delete_other=1)' ); >+ >+ teardown(); > }; > > subtest 'Shelf permissions' => sub { >@@ -340,4 +343,67 @@ subtest 'Shelf permissions' => sub { > > is( $private_shelf->can_biblios_be_removed( $patron1->{borrowernumber} ), 1, 'The owner should be able to remove biblios to his list' ); > is( $private_shelf->can_biblios_be_removed( $patron2->{borrowernumber} ), 1, 'Private list could be modified (remove) by someone else # individual check done later' ); >+ >+ teardown(); >+}; >+ >+subtest 'Get shelves' => sub { >+ plan tests => 4; >+ my $patron1 = $builder->build({ >+ source => 'Borrower', >+ }); >+ my $patron2 = $builder->build({ >+ source => 'Borrower', >+ }); >+ >+ my $private_shelf1_1 = Koha::Virtualshelf->new({ >+ shelfname => "private shelf 1 for patron 1", >+ owner => $patron1->{borrowernumber}, >+ category => 1, >+ } >+ )->store; >+ my $private_shelf1_2 = Koha::Virtualshelf->new({ >+ shelfname => "private shelf 2 for patron 1", >+ owner => $patron1->{borrowernumber}, >+ category => 1, >+ } >+ )->store; >+ my $private_shelf2_1 = Koha::Virtualshelf->new({ >+ shelfname => "private shelf 1 for patron 2", >+ owner => $patron2->{borrowernumber}, >+ category => 1, >+ } >+ )->store; >+ my $public_shelf1_1 = Koha::Virtualshelf->new({ >+ shelfname => "public shelf 1 for patron 1", >+ owner => $patron1->{borrowernumber}, >+ category => 2, >+ } >+ )->store; >+ my $public_shelf1_2 = Koha::Virtualshelf->new({ >+ shelfname => "public shelf 2 for patron 1", >+ owner => $patron1->{borrowernumber}, >+ category => 2, >+ } >+ )->store; >+ >+ my $private_shelves = Koha::Virtualshelves->get_private_shelves; >+ is( $private_shelves->count, 0, 'Without borrowernumber given, get_private_shelves should not return any shelf' ); >+ $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} }); >+ is( $private_shelves->count, 2, 'get_private_shelves should return all shelves for a given patron' ); >+ >+ $private_shelf2_1->share('a key')->accept('a key', $patron1->{borrowernumber}); >+ $private_shelves = Koha::Virtualshelves->get_private_shelves({ borrowernumber => $patron1->{borrowernumber} }); >+ is( $private_shelves->count, 3, 'get_private_shelves should return all shelves for a given patron, even the shared ones' ); >+ >+ my $public_shelves = Koha::Virtualshelves->get_public_shelves; >+ is( $public_shelves->count, 2, 'get_public_shelves should return all public shelves, no matter who is the owner' ); >+ >+ teardown(); > }; >+ >+sub teardown { >+ $dbh->do(q|DELETE FROM virtualshelfshares|); >+ $dbh->do(q|DELETE FROM virtualshelfcontents|); >+ $dbh->do(q|DELETE FROM virtualshelves|); >+} >-- >2.1.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 14544
:
41034
|
41035
|
41036
|
41037
|
41038
|
41039
|
41040
|
41041
|
41042
|
41403
|
41404
|
41405
|
41406
|
41407
|
41408
|
41409
|
41410
|
41411
|
41412
|
41584
|
41585
|
41586
|
41587
|
41588
|
41589
|
41590
|
41591
|
41592
|
41593
|
41594
|
41595
|
41596
|
41597
|
41598
|
41599
|
41600
|
41601
|
41716
|
41717
|
41718
|
41719
|
41720
|
41721
|
41722
|
41723
|
41724
|
41725
|
41726
|
41727
|
41728
|
41729
|
41730
|
41731
|
41732
|
41733
|
41766
|
41909
|
41910
|
41913
|
41914
|
41915
|
41917
|
41918
|
41919
|
41924
|
41927
|
41931
|
41932
|
41953
|
41954
|
41955
|
41956
|
41957
|
41958
|
41959
|
41960
|
41961
|
41962
|
41963
|
41964
|
41965
|
41966
|
41967
|
41968
|
41969
|
41970
|
41973
|
41974
|
41975
|
41976
|
41977
|
41978
|
41979
|
41980
|
41981
|
41982
|
41983
|
41986
|
41988
|
42192
|
42199
|
42200
|
42201
|
42202
|
42203
|
42204
|
42205
|
42206
|
42207
|
42208
|
42209
|
42210
|
42211
|
42212
|
42213
|
42214
|
42215
|
42216
|
42217
|
42218
|
42219
|
42638
|
43223
|
43224
|
43225
|
43226
|
43227
|
43228
|
43229
|
43230
|
43231
|
43232
|
43233
|
43234
|
43235
|
43236
|
43237
|
43238
|
43239
|
43240
|
43241
|
43242
|
43243
|
43296
|
43334
|
43335
|
43403
|
43456
|
43457
|
43458
|
43459
|
43460
|
43461
|
43462
|
43463
|
43464
|
43465
|
43466
|
43467
|
43469
|
43470
|
43471
|
43472
|
43473
|
43474
|
43475
|
43476
|
43477
|
43478
|
43479
|
43480
|
43481
|
43482
|
43485
|
43486
|
43487
|
44467
|
44468
|
44469
|
44470
|
44471
|
44472
|
44473
|
44474
|
44475
|
44476
|
44477
|
44478
|
44479
|
44480
|
44481
|
44482
|
44483
|
44484
|
44485
|
44486
|
44487
|
44758
|
44845
|
44852
|
44863
|
44872