use C4::Output;
use C4::Biblio;
use C4::Items;
+use C4::Circulation;
+use C4::Tags qw(get_tags);
use C4::Dates qw/format_date/;
use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn get_biblio_from_xisbn);
use C4::Amazon;
use C4::Members;
use C4::XSLT;
+BEGIN {
+ if (C4::Context->preference('BakerTaylorEnabled')) {
+ require C4::External::BakerTaylor;
+ import C4::External::BakerTaylor qw(&image_url &link_url);
+ }
+}
+
my $query = new CGI;
my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
{
$template->param( biblionumber => $biblionumber );
# XSLT processing of some stuff
if (C4::Context->preference("XSLTResultsDisplay") ) {
- my $newxmlrecord = XSLTParse4Display($biblionumber,'Detail');
+ my $newxmlrecord = XSLTParse4Display($biblionumber,C4::Context->config('opachtdocs')."/prog/en/xslt/MARC21slim2OPACDetail.xsl");
$template->param('XSLTBloc' => $newxmlrecord);
}
my $dat = &GetBiblioData($biblionumber);
if (!$dat) {
- print $query->redirect("/cgi-bin/koha/koha-tmpl/errors/404.pl");
+ print $query->redirect("/cgi-bin/koha/errors/404.pl");
exit;
}
my $imgdir = getitemtypeimagesrc();
$dat->{'imageurl'} = $imgdir."/".$itemtypes->{$itemtype}->{'imageurl'};
$dat->{'description'} = $itemtypes->{$itemtype}->{'description'};
}
+my $shelflocations =GetKohaAuthorisedValues('items.location',$dat->{'frameworkcode'});
+my $collections = GetKohaAuthorisedValues('items.ccode',$dat->{'frameworkcode'} );
#coping with subscriptions
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
-my @subscriptions =
- GetSubscriptions( $dat->{title}, $dat->{issn}, $biblionumber );
+my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, $biblionumber );
my @subs;
$dat->{'serial'}=1 if $subscriptionsnumber;
foreach my $subscription (@subscriptions) {
$RequestOnOpac = 1;
}
+my $biblio_authorised_value_images = C4::Items::get_authorised_value_images( C4::Biblio::get_biblio_authorised_values( $biblionumber ) );
+
my $norequests = 1;
-foreach my $itm (@items) {
+my $branches = GetBranches();
+my %itemfields;
+for my $itm (@items) {
$norequests = 0 && $norequests
if ( (not $itm->{'wthdrawn'} )
- || (not $itm->{'itemlost'} )
- || (not $itm->{'itemnotforloan'} )
- || ($itm->{'itemnumber'} ) );
- $itm->{ $itm->{'publictype'} } = 1;
+ && (not $itm->{'itemlost'} )
+ && ($itm->{'itemnotforloan'}<0 || not $itm->{'itemnotforloan'} )
+ && (not $itemtypes->{$itm->{'itype'}}->{notforloan} )
+ && ($itm->{'itemnumber'} ) );
+
+ $itm->{ $itm->{'publictype'} } = 1;
$itm->{datedue} = format_date($itm->{datedue});
$itm->{datelastseen} = format_date($itm->{datelastseen});
#get collection code description, too
- $itm->{'ccode'} = GetAuthorisedValueDesc('','', $itm->{'ccode'} ,'','','CCODE');
- $itm->{'location_description'} = GetAuthorisedValueDesc('','', $itm->{'location'} ,'','','LOC');
+ my $ccode= $itm->{'ccode'};
+ $itm->{'ccode'} = $collections->{$ccode} if(defined($collections) && exists($collections->{$ccode}));
+ $itm->{'location_description'} = $shelflocations->{$itm->{'location'} };
$itm->{'imageurl'} = $imgdir."/".$itemtypes->{ $itm->{itype} }->{'imageurl'};
$itm->{'description'} = $itemtypes->{$itemtype}->{'description'};
+ $itemfields{ccode} = 1 if($itm->{ccode});
+ $itemfields{enumchron} = 1 if($itm->{enumchron});
+ $itemfields{copynumber} = 1 if($itm->{copynumber});
+ $itemfields{itemnotes} = 1 if($itm->{itemnotes});
-}
+ # walk through the item-level authorised values and populate some images
+ my $item_authorised_value_images = C4::Items::get_authorised_value_images( C4::Items::get_item_authorised_values( $itm->{'itemnumber'} ) );
+ # warn( Data::Dumper->Dump( [ $item_authorised_value_images ], [ 'item_authorised_value_images' ] ) );
+
+ if ( $itm->{'itemlost'} ) {
+ my $lostimageinfo = List::Util::first { $_->{'category'} eq 'LOST' } @$item_authorised_value_images;
+ $itm->{'lostimageurl'} = $lostimageinfo->{ 'imageurl' };
+ $itm->{'lostimagelabel'} = $lostimageinfo->{ 'label' };
+ }
-$template->param( norequests => $norequests, RequestOnOpac=>$RequestOnOpac );
+
+ my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($itm->{itemnumber});
+ if ( $transfertwhen ne '' ) {
+ $itm->{transfertwhen} = format_date($transfertwhen);
+ $itm->{transfertfrom} = $branches->{$transfertfrom}{branchname};
+ $itm->{transfertto} = $branches->{$transfertto}{branchname};
+ }
+}
## get notes and subjects from MARC record
- my $dbh = C4::Context->dbh;
- my $marcflavour = C4::Context->preference("marcflavour");
- my $record = GetMarcBiblio($biblionumber);
- my $marcnotesarray = GetMarcNotes( $record, $marcflavour );
- my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour );
- my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour );
- my $marcseriesarray = GetMarcSeries($record,$marcflavour);
- my $marcurlsarray = GetMarcUrls($record,$marcflavour);
+my $dbh = C4::Context->dbh;
+my $marcflavour = C4::Context->preference("marcflavour");
+my $record = GetMarcBiblio($biblionumber);
+my $marcnotesarray = GetMarcNotes ($record,$marcflavour);
+my $marcauthorsarray = GetMarcAuthors ($record,$marcflavour);
+my $marcsubjctsarray = GetMarcSubjects($record,$marcflavour);
+my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
+my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
+my $subtitle = C4::Biblio::get_koha_field_from_marc('bibliosubtitle', 'subtitle', $record, '');
$template->param(
- MARCNOTES => $marcnotesarray,
- MARCSUBJCTS => $marcsubjctsarray,
- MARCAUTHORS => $marcauthorsarray,
- MARCSERIES => $marcseriesarray,
- MARCURLS => $marcurlsarray,
+ MARCNOTES => $marcnotesarray,
+ MARCSUBJCTS => $marcsubjctsarray,
+ MARCAUTHORS => $marcauthorsarray,
+ MARCSERIES => $marcseriesarray,
+ MARCURLS => $marcurlsarray,
+ norequests => $norequests,
+ RequestOnOpac => $RequestOnOpac,
+ itemdata_ccode => $itemfields{ccode},
+ itemdata_enumchron => $itemfields{enumchron},
+ itemdata_copynumber => $itemfields{copynumber},
+ itemdata_itemnotes => $itemfields{itemnotes},
+ authorised_value_images => $biblio_authorised_value_images,
+ subtitle => $subtitle,
);
foreach ( keys %{$dat} ) {
);
my $reviews = getreviews( $biblionumber, 1 );
+my $loggedincommenter;
foreach ( @$reviews ) {
- my $borrower_number_review = $_->{borrowernumber};
- my $borrowerData = GetMember($borrower_number_review,'borrowernumber');
+ my $borrowerData = GetMember($_->{borrowernumber},'borrowernumber');
# setting some borrower info into this hash
$_->{title} = $borrowerData->{'title'};
$_->{surname} = $borrowerData->{'surname'};
$_->{firstname} = $borrowerData->{'firstname'};
+ $_->{userid} = $borrowerData->{'userid'};
$_->{datereviewed} = format_date($_->{datereviewed});
+ if ($borrowerData->{'borrowernumber'} eq $borrowernumber) {
+ $_->{your_comment} = 1;
+ $loggedincommenter = 1;
+ }
}
biblionumber => $biblionumber,
subscriptions => \@subs,
subscriptionsnumber => $subscriptionsnumber,
- reviews => $reviews
+ reviews => $reviews,
+ loggedincommenter => $loggedincommenter
);
+sub isbn_cleanup ($) {
+ my $isbn=shift;
+ if (
+ $isbn =~ /\b(\d{13})\b/ or
+ $isbn =~ /\b(\d{10})\b/ or
+ $isbn =~ /\b(\d{9}X)\b/i
+ ) {
+ return $1;
+ }
+ return undef;
+}
+
# XISBN Stuff
my $xisbn=$dat->{'isbn'};
-$xisbn =~ s/(p|-| |:)//g;
-$template->param(amazonisbn => $xisbn);
+$xisbn =~ /(\d*[X]*)/;
+$template->param(amazonisbn => $1); # FIXME: so it is OK if the ISBN = 'XXXXX' ?
+my ($clean,$clean2);
+# these might be overkill, but they are better than the regexp above.
+if ($clean = isbn_cleanup($xisbn)){
+ $template->param(clean_isbn => $clean);
+}
+
if (C4::Context->preference("OPACFRBRizeEditions")==1) {
eval {
$template->param(
# do we have any of these isbns in our collection?
my $similar_biblionumbers = get_biblionumber_from_isbn($similar_product->{ASIN});
# verify that there is at least one similar item
- $similar_products_exist++ if ${@$similar_biblionumbers}[0];
- push @similar_products, +{ similar_biblionumbers => $similar_biblionumbers, title => $similar_product->{Title}, ASIN => $similar_product->{ASIN} };
+ if (scalar(@$similar_biblionumbers)){
+ $similar_products_exist++ if ($similar_biblionumbers && $similar_biblionumbers->[0]);
+ push @similar_products, +{ similar_biblionumbers => $similar_biblionumbers, title => $similar_product->{Title}, ASIN => $similar_product->{ASIN} };
+ }
}
my $editorial_reviews = \@{$amazon_details->{Items}->{Item}->{EditorialReviews}->{EditorialReview}};
my $average_rating = $amazon_details->{Items}->{Item}->{CustomerReviews}->{AverageRating};
my ($starting_cn_sort, $starting_homebranch, $starting_location);
my $sth_get_cn_sort = $dbh->prepare("SELECT cn_sort,homebranch,location from items where itemnumber=?");
$sth_get_cn_sort->execute($starting_itemnumber);
-my $branches = GetBranches();
while (my $result = $sth_get_cn_sort->fetchrow_hashref()) {
$starting_cn_sort = $result->{'cn_sort'};
$starting_homebranch->{code} = $result->{'homebranch'};
$sth_get_biblio->execute($this_item->{biblionumber});
while (my $this_biblio = $sth_get_biblio->fetchrow_hashref()) {
$this_item->{'title'} = $this_biblio->{'title'};
- $this_item->{'isbn'} = $this_biblio->{'isbn'};
+ if ($clean2 = isbn_cleanup($this_biblio->{'isbn'})) {
+ $this_item->{'isbn'} = $clean2;
+ } else {
+ $this_item->{'isbn'} = $this_biblio->{'isbn'};
+ }
}
unshift @previous_items, $this_item;
}
$sth_get_biblio->execute($this_item->{biblionumber});
while (my $this_biblio = $sth_get_biblio->fetchrow_hashref()) {
$this_item->{'title'} = $this_biblio->{'title'};
- $this_item->{'isbn'} = $this_biblio->{'isbn'};
+ if ($clean2 = isbn_cleanup($this_biblio->{'isbn'})) {
+ $this_item->{'isbn'} = $clean2;
+ } else {
+ $this_item->{'isbn'} = $this_biblio->{'isbn'};
+ }
}
push @next_items, $this_item;
}
);
}
+if (C4::Context->preference("BakerTaylorEnabled")) {
+ $template->param(
+ BakerTaylorEnabled => 1,
+ BakerTaylorImageURL => &image_url(),
+ BakerTaylorLinkURL => &link_url(),
+ BakerTaylorBookstoreURL => C4::Context->preference('BakerTaylorBookstoreURL'),
+ );
+ my ($bt_user, $bt_pass);
+ if ($clean and
+ $bt_user = C4::Context->preference('BakerTaylorUsername') and
+ $bt_pass = C4::Context->preference('BakerTaylorPassword') )
+ {
+ $template->param(
+ BakerTaylorContentURL =>
+ sprintf("http://contentcafe2.btol.com/ContentCafeClient/ContentCafe.aspx?UserID=%s&Password=%s&ItemKey=%s&Options=Y",
+ $bt_user,$bt_pass,$clean)
+ );
+ }
+}
+
+my $tag_quantity;
+if (C4::Context->preference('TagsEnabled') and $tag_quantity = C4::Context->preference('TagsShowOnDetail')) {
+ $template->param(
+ TagsEnabled => 1,
+ TagsShowOnDetail => $tag_quantity,
+ TagsInputOnDetail => C4::Context->preference('TagsInputOnDetail')
+ );
+ $template->param(TagLoop => get_tags({biblionumber=>$biblionumber, approved=>1,
+ 'sort'=>'-weight', limit=>$tag_quantity}));
+}
+
output_html_with_http_headers $query, $cookie, $template->output;