From 20e71b802e70054b7ce021aefd7843e67f1f049f Mon Sep 17 00:00:00 2001 From: Jared Camins-Esakov Date: Thu, 29 Nov 2012 16:58:27 -0500 Subject: [PATCH] Bug 9174: Fix itemtype image display in OPAC lists Prior to this patch, C4::VirtualShelves::Page did not make sure that the itemtype images that it chose when displaying itemtype images for biblio-level itemtypes were for the correct interface, so even on the OPAC the Intranet icons were requested. On standard installations, intranet-tmpl is not available to the OPAC. To test: 1) Set noItemTypeImages to "Show" and item-level_items to "biblio record" 2) Create a list and add an item with the default item type (942$c in MARC21) set to something with an itemtype image associated with it. 3) View the list in the OPAC. 4) If you are an a standard install, the itemtype image will be a broken link. If on a dev install, you can confirm with Firebug or the like that the image is pulled from /intranet-tmpl. 5) Apply patch. 6) Run `prove t/db_dependent/Koha.t` to confirm that the behavior of the routine used to retrieve the image URL is correct. (Note that you must have an item type with the code 'BK') 7) Refresh the list, noting that the display is now correct/the image is pulled from opac-tmpl. Signed-off-by: Jonathan Druart It works as expected. All tests in Koha.t passed. Signed-off-by: Mason James Signed-off-by: Jared Camins-Esakov Conflicts: t/db_dependent/Koha.t Squashed with: Bug 9174 follow-up: Eliminate warning and fix POD Thanks to Marcel for spotting these issues. Signed-off-by: Chris Cormack Signed-off-by: Mason James Signed-off-by: Jared Camins-Esakov --- C4/Koha.pm | 10 ++++++---- C4/VirtualShelves/Page.pm | 2 +- t/db_dependent/Koha.t | 8 +++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/C4/Koha.pm b/C4/Koha.pm index c559a43..f2661ef 100644 --- a/C4/Koha.pm +++ b/C4/Koha.pm @@ -419,20 +419,22 @@ sub getframeworkinfo { =head2 getitemtypeinfo - $itemtype = &getitemtype($itemtype); + $itemtype = &getitemtypeinfo($itemtype, [$interface]); -Returns information about an itemtype. +Returns information about an itemtype. The optional $interface argument +sets which interface ('opac' or 'intranet') to return the imageurl for. +Defaults to intranet. =cut sub getitemtypeinfo { - my ($itemtype) = @_; + my ($itemtype, $interface) = @_; my $dbh = C4::Context->dbh; my $sth = $dbh->prepare("select * from itemtypes where itemtype=?"); $sth->execute($itemtype); my $res = $sth->fetchrow_hashref; - $res->{imageurl} = getitemtypeimagelocation( 'intranet', $res->{imageurl} ); + $res->{imageurl} = getitemtypeimagelocation( ( ( defined $interface && $interface eq 'opac' ) ? 'opac' : 'intranet' ), $res->{imageurl} ); return $res; } diff --git a/C4/VirtualShelves/Page.pm b/C4/VirtualShelves/Page.pm index ddf15ea..6591e7b 100644 --- a/C4/VirtualShelves/Page.pm +++ b/C4/VirtualShelves/Page.pm @@ -271,7 +271,7 @@ sub shelfpage { #$this_item->{imageurl} = $imgdir."/".$itemtypes->{ $this_item->{itemtype} }->{'imageurl'}; #$this_item->{'description'} = $itemtypes->{ $this_item->{itemtype} }->{'description'}; $this_item->{'dateadded'} = format_date( $this_item->{'dateadded'} ); - $this_item->{'imageurl'} = getitemtypeinfo( $this_item->{'itemtype'} )->{'imageurl'}; + $this_item->{'imageurl'} = getitemtypeinfo( $this_item->{'itemtype'}, $type )->{'imageurl'}; $this_item->{'coins'} = GetCOinSBiblio( $record ); $this_item->{'subtitle'} = GetRecordValue('subtitle', $record, GetFrameworkCode($this_item->{'biblionumber'})); $this_item->{'normalized_upc'} = GetNormalizedUPC( $record,$marcflavour); diff --git a/t/db_dependent/Koha.t b/t/db_dependent/Koha.t index 378a0c1..826c159 100644 --- a/t/db_dependent/Koha.t +++ b/t/db_dependent/Koha.t @@ -7,7 +7,7 @@ use strict; use warnings; use C4::Context; -use Test::More tests => 8; +use Test::More tests => 9; BEGIN { use_ok('C4::Koha'); @@ -55,3 +55,9 @@ if($insert_success){ $sth->execute($data->{category}, $data->{authorised_value}, $data->{lib}, $data->{lib_opac}, $data->{imageurl}); } +subtest 'Itemtype info Tests' => sub { + like ( getitemtypeinfo('BK')->{'imageurl'}, qr/intranet-tmpl/, 'getitemtypeinfo on unspecified interface returns intranet imageurl (legacy behavior)' ); + like ( getitemtypeinfo('BK', 'intranet')->{'imageurl'}, qr/intranet-tmpl/, 'getitemtypeinfo on "intranet" interface returns intranet imageurl' ); + like ( getitemtypeinfo('BK', 'opac')->{'imageurl'}, qr/opac-tmpl/, 'getitemtypeinfo on "opac" interface returns opac imageurl' ); +}; + -- 1.7.9.5