X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FVirtualShelves%2FPage.pm;h=8a171821b7745180e61e71695d5fa9f77b9119ee;hb=a0a9368beccd1748e720966f25869259a30e68f2;hp=9d158472b79724e3562692cf16103a117f25a0e9;hpb=7475c9dd476cb4343583e2778efd5b05495ba8c6;p=koha_gimpoz diff --git a/C4/VirtualShelves/Page.pm b/C4/VirtualShelves/Page.pm index 9d158472b7..8a171821b7 100644 --- a/C4/VirtualShelves/Page.pm +++ b/C4/VirtualShelves/Page.pm @@ -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); @@ -54,19 +56,23 @@ sub shelfpage ($$$$$) { ( $pages{$type} ) or $type = 'opac'; $query or die "No query"; $template or die "No template"; - $template->param( { loggedinuser => $loggedinuser } ); + $template->param( loggedinuser => $loggedinuser ); + my $edit; + my $shelves; my @paramsloop; my $totitems; my $shelfoff = ( $query->param('shelfoff') ? $query->param('shelfoff') : 1 ); + $template->{VARS}->{'shelfoff'} = $shelfoff; 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 ); @@ -83,7 +89,6 @@ sub shelfpage ($$$$$) { # the format of this is unindented for ease of diff comparison to the old script # Note: do not mistake the assignment statements below for comparisons! - if ( $query->param('modifyshelfcontents') ) { my ( $shelfnumber, $barcode, $item, $biblio ); if ( $shelfnumber = $query->param('viewshelf') ) { @@ -160,6 +165,7 @@ sub shelfpage ($$$$$) { my ( $shelfnumber2, $shelfname, $owner, $category, $sortfield ) = GetShelf($shelfnumber); my $member = GetMember( 'borrowernumber' => $owner ); my $ownername = defined($member) ? $member->{firstname} . " " . $member->{surname} : ''; + $edit = 1; $template->param( edit => 1, shelfnumber => $shelfnumber2, @@ -174,12 +180,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'; @@ -189,7 +205,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") && $type eq 'opac'; # 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 @@ -199,24 +219,37 @@ sub shelfpage ($$$$$) { $this_item->{'imageurl'} = getitemtypeinfo( $this_item->{'itemtype'} )->{'imageurl'}; $this_item->{'coins'} = GetCOinSBiblio( $this_item->{'biblionumber'} ); $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'}, - shelfnumber => $shelfnumber, - viewshelf => $shelfnumber, - authorsort => $authorsort, - yearsort => $yearsort, - manageshelf => $manageshelf, - itemsloop => $items, + shelfname => $shelfname, + shelfnumber => $shelfnumber, + viewshelf => $shelfnumber, + authorsort => $authorsort, + yearsort => $yearsort, + manageshelf => $manageshelf, + "category$category" => 1, + category => $category, + itemsloop => $items, ); } else { push @paramsloop, { nopermission => $shelfnumber }; @@ -256,7 +289,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 } ); @@ -284,7 +317,10 @@ sub shelfpage ($$$$$) { $stay = 0; } $showadd = 1; - $stay and $template->param( shelves => 1 ); + if ($stay){ + $template->param( shelves => 1 ); + $shelves = 1; + } last SWITCH; } } @@ -331,11 +367,11 @@ sub shelfpage ($$$$$) { $qhash{$_} = $query->param($_) if $query->param($_); } ( scalar keys %qhash ) and $url .= '?' . join '&', map { "$_=$qhash{$_}" } keys %qhash; - if ( $query->param('viewshelf') ) { - $template->param( { pagination_bar => pagination_bar( $url, ( int( $totitems / $shelflimit ) ) + ( ( $totitems % $shelflimit ) > 0 ? 1 : 0 ), $itemoff, "itemoff" ) } ); + if ( $shelfnumber ) { + $template->param( pagination_bar => pagination_bar( $url, ( int( $totitems / $shelflimit ) ) + ( ( $totitems % $shelflimit ) > 0 ? 1 : 0 ), $itemoff, "itemoff" ) ); } else { $template->param( - { pagination_bar => pagination_bar( $url, ( int( $totshelves / $shelveslimit ) ) + ( ( $totshelves % $shelveslimit ) > 0 ? 1 : 0 ), $shelfoff, "shelfoff" ) } ); + pagination_bar => pagination_bar( $url, ( int( $totshelves / $shelveslimit ) ) + ( ( $totshelves % $shelveslimit ) > 0 ? 1 : 0 ), $shelfoff, "shelfoff" ) ); } $template->param( shelveslooppriv => \@shelveslooppriv, @@ -345,13 +381,13 @@ sub shelfpage ($$$$$) { "BiblioDefaultView" . C4::Context->preference("BiblioDefaultView") => 1, csv_profiles => GetCsvProfilesLoop() ); - if ( $template->param('viewshelf') - or $template->param('shelves') - or $template->param('edit') ) { + if ( $shelfnumber + or $shelves + or $edit ) { $template->param( vseflag => 1 ); } - if ($template->param('shelves') or # note: this part looks duplicative, but is intentional - $template->param('edit') + if ($shelves or # note: this part looks duplicative, but is intentional + $edit ) { $template->param( seflag => 1 ); } @@ -365,18 +401,18 @@ sub shelfpage ($$$$$) { 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; @@ -387,11 +423,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 @@ -399,32 +435,32 @@ __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 -=cut \ No newline at end of file +=cut