X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FVirtualShelves%2FPage.pm;h=df7054e57d73c45e755a8fd4b5ae17082e9b604e;hb=0cf2eccfe926f77753a2b948e2babf077e2975d3;hp=14f9816b1b2ef67f6e8894557cfc5c3f9a2e9566;hpb=aece7ada1df04945dd3bba9bd323c7adcd5e233f;p=koha.git diff --git a/C4/VirtualShelves/Page.pm b/C4/VirtualShelves/Page.pm index 14f9816b1b..df7054e57d 100644 --- a/C4/VirtualShelves/Page.pm +++ b/C4/VirtualShelves/Page.pm @@ -14,9 +14,9 @@ package C4::VirtualShelves::Page; # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # -# You should have received a copy of the GNU General Public License along with -# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, -# Suite 330, Boston, MA 02111-1307 USA +# You should have received a copy of the GNU General Public License along +# with Koha; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # perldoc at the end of the file, per convention. @@ -31,9 +31,11 @@ use C4::Auth qw/get_session/; use C4::Members; use C4::Output; use C4::Dates qw/format_date/; +use C4::Tags qw(get_tags); use Exporter; use Data::Dumper; use C4::Csv; +use C4::XSLT; use vars qw($debug @EXPORT @ISA $VERSION); @@ -61,12 +63,13 @@ sub shelfpage ($$$$$) { my $itemoff = ( $query->param('itemoff') ? $query->param('itemoff') : 1 ); my $displaymode = ( $query->param('display') ? $query->param('display') : 'publicshelves' ); my ( $shelflimit, $shelfoffset, $shelveslimit, $shelvesoffset ); + my $marcflavour = C4::Context->preference("marcflavour"); - # FIXME: These limits should not be hardcoded... - $shelflimit = 20; # Limits number of items returned for a given query - $shelfoffset = ( $itemoff - 1 ) * 20; # Sets the offset to begin retrieving items at - $shelveslimit = 20; # Limits number of shelves returned for a given query (row_count) - $shelvesoffset = ( $shelfoff - 1 ) * 20; # Sets the offset to begin retrieving shelves at (offset) + $shelflimit = ( $type eq 'opac' ? C4::Context->preference('OPACnumSearchResults') : C4::Context->preference('numSearchResults') ); + $shelflimit = $shelflimit || 20; + $shelfoffset = ( $itemoff - 1 ) * $shelflimit; # Sets the offset to begin retrieving items at + $shelveslimit = $shelflimit; # Limits number of shelves returned for a given query (row_count) + $shelvesoffset = ( $shelfoff - 1 ) * $shelflimit; # Sets the offset to begin retrieving shelves at (offset) # getting the Shelves list my $category = ( ( $displaymode eq 'privateshelves' ) ? 1 : 2 ); my ( $shelflist, $totshelves ) = GetShelves( $category, $shelveslimit, $shelvesoffset, $loggedinuser ); @@ -89,7 +92,8 @@ sub shelfpage ($$$$$) { if ( $shelfnumber = $query->param('viewshelf') ) { if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ) ) { if ( $barcode = $query->param('addbarcode') ) { - if ( $item = GetItem( 0, $barcode ) ) { + $item = GetItem( 0, $barcode ); + if (defined $item && $item->{'itemnumber'}){ $biblio = GetBiblioFromItemNumber( $item->{'itemnumber'} ); AddToShelf( $biblio->{'biblionumber'}, $shelfnumber ) or push @paramsloop, { duplicatebiblio => $barcode }; @@ -173,12 +177,22 @@ sub shelfpage ($$$$$) { last SWITCH; } if ( $shelfnumber = $query->param('viewshelf') ) { - + # explicitly fetch this shelf + my ($shelfnumber2,$shelfname,$owner,$category,$sorton) = GetShelf($shelfnumber); + + $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); + if (C4::Context->preference('TagsEnabled')) { + $template->param(TagsEnabled => 1); + foreach (qw(TagsShowOnList TagsInputOnList)) { + C4::Context->preference($_) and $template->param($_ => 1); + } + } #check that the user can view the shelf if ( ShelfPossibleAction( $loggedinuser, $shelfnumber, 'view' ) ) { my $items; my $authorsort; my $yearsort; + my $tag_quantity; my $sortfield = ( $query->param('sortfield') ? $query->param('sortfield') : 'title' ); if ( $sortfield eq 'author' ) { $authorsort = 'author'; @@ -188,7 +202,11 @@ sub shelfpage ($$$$$) { } ( $items, $totitems ) = GetShelfContents( $shelfnumber, $shelflimit, $shelfoffset ); for my $this_item (@$items) { - my $record = GetMarcBiblio( $this_item->{'biblionumber'} ); + my $biblionumber = $this_item->{'biblionumber'}; + my $record = GetMarcBiblio($biblionumber); + $this_item->{XSLTBloc} = + XSLTParse4Display($biblionumber, $record, 'Results', 'opac') + if C4::Context->preference("OPACXSLTResultsDisplay"); # the virtualshelfcontents table does not store these columns nor are they retrieved from the items # and itemtypes tables, so I'm commenting them out for now to quiet the log -crn @@ -197,19 +215,30 @@ sub shelfpage ($$$$$) { $this_item->{'dateadded'} = format_date( $this_item->{'dateadded'} ); $this_item->{'imageurl'} = getitemtypeinfo( $this_item->{'itemtype'} )->{'imageurl'}; $this_item->{'coins'} = GetCOinSBiblio( $this_item->{'biblionumber'} ); - $this_item->{'subtitle'} = C4::Biblio::get_koha_field_from_marc( 'bibliosubtitle', 'subtitle', $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); # Getting items infos for location display - my @items_infos = &GetItemsInfo( $this_item->{'biblionumber'}, $type ); + my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'}); + $this_item->{'itemsissued'} = CountItemsIssued( $this_item->{'biblionumber'} ); $this_item->{'ITEM_RESULTS'} = \@items_infos; + if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnList')) { + $this_item->{'TagLoop'} = get_tags({ + biblionumber=>$this_item->{'biblionumber'}, approved=>1, 'sort'=>'-weight', + limit=>$tag_quantity + }); + } + } push @paramsloop, { display => 'privateshelves' } if $category == 1; $showadd = 1; my $i = 0; my $manageshelf = ShelfPossibleAction( $loggedinuser, $shelfnumber, 'manage' ); $template->param( - shelfname => $shelflist->{$shelfnumber}->{'shelfname'} || $privshelflist->{$shelfnumber}->{'shelfname'}, + shelfname => $shelfname, shelfnumber => $shelfnumber, viewshelf => $shelfnumber, authorsort => $authorsort, @@ -255,7 +284,7 @@ sub shelfpage ($$$$$) { if ( my $count = scalar @$contents ) { unless ( scalar grep { /^CONFIRM-$number$/ } $query->param() ) { if ( defined $shelflist->{$number} ) { - push( @paramsloop, { need_confirm => $shelflist->{$number}->{shelfname}, count => $count } ); + push( @paramsloop, { need_confirm => $shelflist->{$number}->{shelfname}, count => $count, single => ($count eq 1 ? 1:0) } ); $shelflist->{$number}->{confirm} = $number; } else { push( @paramsloop, { need_confirm => $privshelflist->{$number}->{shelfname}, count => $count } ); @@ -302,6 +331,13 @@ sub shelfpage ($$$$$) { my $category = $shelflist->{$element}->{'category'}; my $owner = $shelflist->{$element}->{'owner'}; my $canmanage = ShelfPossibleAction( $loggedinuser, $element, 'manage' ); + my $sortfield = $shelflist->{$element}->{'sortfield'}; + if ( $sortfield eq 'author' ) { + $shelflist->{$element}->{"authorsort"} = 'author'; + } + if ( $sortfield eq 'year' ) { + $shelflist->{$element}->{"yearsort"} = 'year'; + } $shelflist->{$element}->{"viewcategory$category"} = 1; $shelflist->{$element}->{manageshelf} = $canmanage; if ( $owner eq $loggedinuser or $canmanage ) { @@ -348,27 +384,27 @@ sub shelfpage ($$$$$) { $template->param( seflag => 1 ); } - #FIXME: This refresh really only needs to happen when there is a modification of some sort - # to the shelves, but the above code is so convoluted in its handling of the various - # options, it is easier to do this refresh every time C4::VirtualShelves::Page.pm is - # called + #FIXME: This refresh really only needs to happen when there is a modification of some sort + # to the shelves, but the above code is so convoluted in its handling of the various + # options, it is easier to do this refresh every time C4::VirtualShelves::Page.pm is + # called my ( $total, $pubshelves, $barshelves ) = RefreshShelvesSummary( $query->cookie("CGISESSID"), $loggedinuser, ( $loggedinuser == -1 ? 20 : 10 ) ); if ( defined $barshelves ) { $template->param( - barshelves => scalar( @{ $barshelves->[0] } ), - barshelvesloop => $barshelves->[0], + barshelves => scalar( @{ $barshelves } ), + barshelvesloop => $barshelves, ); - $template->param( bartotal => $total->{'bartotal'}, ) if ( $total->{'bartotal'} > scalar( @{ $barshelves->[0] } ) ); + $template->param( bartotal => $total->{'bartotal'}, ) if ( $total->{'bartotal'} > scalar( @{ $barshelves } ) ); } if ( defined $pubshelves ) { $template->param( - pubshelves => scalar( @{ $pubshelves->[0] } ), - pubshelvesloop => $pubshelves->[0], + pubshelves => scalar( @{ $pubshelves } ), + pubshelvesloop => $pubshelves, ); - $template->param( pubtotal => $total->{'pubtotal'}, ) if ( $total->{'pubtotal'} > scalar( @{ $pubshelves->[0] } ) ); + $template->param( pubtotal => $total->{'pubtotal'}, ) if ( $total->{'pubtotal'} > scalar( @{ $pubshelves } ) ); } output_html_with_http_headers $query, $cookie, $template->output; @@ -379,11 +415,11 @@ __END__ =head1 NAME - VirtualShelves/Page.pm +VirtualShelves/Page.pm =head1 DESCRIPTION - Module used for both OPAC and intranet pages. +Module used for both OPAC and intranet pages. =head1 CGI PARAMETERS @@ -391,31 +427,31 @@ __END__ =item C - If this script has to modify the shelf content. +If this script has to modify the shelf content. =item C - To know on which shelf to work. +To know on which shelf to work. =item C =item C - Op can be: - * modif: show the template allowing modification of the shelves; - * modifsave: save changes from modif mode. + Op can be: + * modif: show the template allowing modification of the shelves; + * modifsave: save changes from modif mode. =item C - Load template with 'viewshelves param' displaying the shelf's information. +Load template with 'viewshelves param' displaying the shelf's information. =item C - If the param shelves == 1, then add or delete a shelf. +If the param shelves == 1, then add or delete a shelf. =item C - If the param shelves == 1, then addshelf is the name of the shelf to add. +If the param shelves == 1, then addshelf is the name of the shelf to add. =back