[Koha-patches] [PATCH] Baker and Taylor OPAC integration, plus some logic for Tags
Joe Atzberger
joe.atzberger at liblime.com
Tue Apr 8 16:02:06 CEST 2008
---
.../opac-tmpl/prog/en/modules/opac-detail.tmpl | 43 +++++++++++++-
.../opac-tmpl/prog/en/modules/opac-results.tmpl | 34 +++++++++--
opac/opac-detail.pl | 63 +++++++++++++++++--
opac/opac-search.pl | 64 ++++++++++++++++++--
4 files changed, 184 insertions(+), 20 deletions(-)
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
index 744dccc..e1ea077 100755
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -28,13 +28,23 @@
<div id="catalogue_detail_biblio">
<!-- TMPL_IF NAME="AmazonContent" -->
- <div id="bookcover"> <!-- TMPL_IF NAME="isbn" -->
+ <div id="bookcover"><!-- TMPL_IF NAME="isbn" -->
<a href="http://www.amazon.com/gp/reader/<!-- TMPL_VAR NAME="amazonisbn" -->/ref=sib_dp_pt/002-7879865-0184864#reader-link">
<img border="0" src="http://images.amazon.com/images/P/<!-- TMPL_VAR NAME="amazonisbn" -->.01._PIdp-schmooS,TopRight,7,-26_SCMZZZZZZZ_.jpg" alt="Cover Image" />
</a><!-- TMPL_ELSE -->
<img border="0" src="http://g-images.amazon.com/images/G/01/x-site/icons/no-img-sm.gif" alt="Cover Image" />
<!-- /TMPL_IF --></div>
-<!-- /TMPL_IF -->
+ <!-- TMPL_ELSE -->
+ <!-- TMPL_IF NAME="BakerTaylorEnabled" -->
+ <div id="bookcover">
+ <!-- TMPL_IF NAME="isbn" -->
+ <a href="https://<!-- TMPL_VAR name="BakerTaylorBookstoreURL" ESCAPE="HTML" --><!-- TMPL_VAR name="clean_isbn" -->">
+ <img alt="See Baker & Taylor" src="<!-- TMPL_VAR name="BakerTaylorImageURL" ESCAPE="HTML" --><!-- TMPL_VAR name="clean_isbn" -->" />
+ </a>
+ <!-- TMPL_ELSE -->
+ <!-- /TMPL_IF --></div>
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- TMPL_IF NAME="XSLTDetailsDisplay" -->
<!-- TMPL_VAR NAME="XSLTBloc" -->
<!-- TMPL_ELSE -->
@@ -154,6 +164,7 @@
<!-- /TMPL_LOOP --></ul>
<!-- /TMPL_IF -->
<!-- /TMPL_IF -->
+
</div>
<div id="bibliodescriptions" class="toptabs">
@@ -481,6 +492,34 @@
<option value="utf8">MARC (Unicode/UTF-8)</option> </select><input type="hidden" name="op" value="export" /><input type="hidden" name="bib" value="<!-- TMPL_VAR NAME="biblionumber" -->" />
<input type="submit" name="save" value="Go" /></form></div>
+ <!-- TMPL_IF NAME="TagsShowOnDetail" -->
+ <div class="detailtagcell"><span class="tagtitle">Tags:</span>
+ <!-- TMPL_IF NAME="TagLoop" -->
+ <ul><!-- TMPL_LOOP NAME="TagLoop" -->
+ <li><a href="/cgi-bin/koha/opac-search.pl?tag=<!-- TMPL_VAR NAME="term" ESCAPE="URL" -->&q=<!-- TMPL_VAR NAME="term" ESCAPE="URL" -->"><!-- TMPL_VAR NAME="term" ESCAPE="HTML" --></a> <span class="weight">(<!-- TMPL_VAR NAME="weight_total" -->)</span></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="TagsInputOnDetail" -->
+ <form name="tagform<!-- TMPL_VAR NAME="biblionumber" -->" method="post" action="/cgi-bin/koha/opac-tags.pl">
+ <label for="newtag<!-- TMPL_VAR NAME="biblionumber" -->">New tag:</label>
+ <input name="newtag<!-- TMPL_VAR NAME="biblionumber" -->" id="newtag<!-- TMPL_VAR NAME="biblionumber" -->" maxlength="100" />
+ <input name="tagbutton" class="tagbutton" type="submit" value="Add" />
+ </form>
+ <br />
+ <span id="tagstatus<!-- TMPL_VAR NAME="biblionumber" -->" class="tagstatus" style="display:none;">
+ Tag status here.
+ </span>
+ <!-- /TMPL_IF -->
+ </div>
+ <!-- /TMPL_IF -->
+ <!-- TMPL_IF NAME="BakerTaylorContentURL" -->
+ <div id="bakertaylor" class="detailtagcell">
+ <a href="<!-- TMPL_VAR NAME="BakerTaylorContentURL" ESCAPE="HTML" -->">
+ More info from B&T
+ </a>
+ </div>
+ <!-- /TMPL_IF -->
</div>
</div>
diff --git a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
index 280a73d..44d436d 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-results.tmpl
@@ -192,7 +192,18 @@ $(document).ready(function(){
<!-- TMPL_IF name="imageurl" -->
<img src="<!-- TMPL_VAR name="imageurl" -->" title="<!-- TMPL_VAR name="description" -->" />
<!-- TMPL_ELSE -->
- <!-- TMPL_VAR name="description" -->
+ <!-- TMPL_IF NAME="BakerTaylorEnabled" -->
+ <!-- TMPL_IF NAME="clean_isbn" --><a href="https://<!-- TMPL_VAR name="BakerTaylorBookstoreURL" ESCAPE="HTML" --><!-- TMPL_VAR name="clean_isbn" -->">
+ <img alt="See Baker & Taylor" src="<!-- TMPL_VAR name="BakerTaylorImageURL" ESCAPE="HTML" --><!-- TMPL_VAR name="clean_isbn" -->" />
+ </a>
+ <!-- TMPL_ELSE -->
+ (No clean ISBN.)
+ <!-- /TMPL_IF -->
+ <!-- TMPL_ELSE -->
+ <!-- TMPL_IF name="imageurl" --><img src="<!-- TMPL_VAR name="imageurl" -->" title="<!-- TMPL_VAR name="description" -->" />
+ <!-- TMPL_ELSE --><!-- TMPL_VAR name="description" -->
+ <!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
<!-- /TMPL_IF -->
<!-- /TMPL_UNLESS -->
</td>
@@ -241,20 +252,31 @@ $(document).ready(function(){
<a href="/cgi-bin/koha/opac-search.pl?q=callnum:<!-- TMPL_VAR NAME="itemcallnumber" ESCAPE="URL" -->"><!-- TMPL_VAR NAME="itemcallnumber" --></a>
<!-- /TMPL_IF --></p>
</td>
- <!-- /TMPL_IF -->
- <!-- TMPL_IF NAME="TaggingOnList" -->
+ <!-- /TMPL_IF --> <!-- this is possibly an extra from merge -->
+ <!-- TMPL_IF NAME="TagsEnabled" -->
+ <!-- TMPL_IF NAME="TagsShowOnList" -->
<td><div class="tagcell">
<!-- TMPL_IF NAME="TagLoop" -->
<span class="tagtitle">Tags:</span>
- <ul><!-- TMPL_LOOP NAME="TagLoop" --><li><!-- TMPL_VAR NAME="tag" --></li>
+ <ul><!-- TMPL_LOOP NAME="TagLoop" --><li><a href="/cgi-bin/koha/opac-search.pl?tag=<!-- TMPL_VAR NAME="term" ESCAPE="URL" -->&q=<!-- TMPL_VAR NAME="term" ESCAPE="URL" -->"><!-- TMPL_VAR NAME="term" --></a> <span class="weight">(<!-- TMPL_VAR NAME="weight_total" -->)</span></li>
<!-- /TMPL_LOOP -->
</ul>
- <!-- TMPL_ELSE -->
<!-- /TMPL_IF -->
- <a href="#">Add new tag</a>
+ <!-- TMPL_IF NAME="TagsInputOnList" -->
+ <form name="tagform<!-- TMPL_VAR NAME="biblionumber" -->" method="post" action="/cgi-bin/koha/opac-tags.pl">
+ <label for="newtag<!-- TMPL_VAR NAME="biblionumber" -->">New tag:</label>
+ <input name="newtag<!-- TMPL_VAR NAME="biblionumber" -->" id="newtag<!-- TMPL_VAR NAME="biblionumber" -->" maxlength="100" />
+ <input name="tagbutton" class="tagbutton" type="submit" value="Add" />
+ </form>
+ <br />
+ <span id="tagstatus<!-- TMPL_VAR NAME="biblionumber" -->" class="tagstatus" style="display:none;">
+ Tag status here.
+ </span>
+ <!-- /TMPL_IF -->
</div>
</td>
<!-- /TMPL_IF -->
+ <!-- /TMPL_IF -->
</tr>
<!-- /TMPL_LOOP -->
</table>
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index f017bcc..f4d31a2 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -28,6 +28,7 @@ use C4::Serials; #uses getsubscriptionfrom biblionumber
use C4::Output;
use C4::Biblio;
use C4::Items;
+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;
@@ -36,6 +37,13 @@ use C4::Serials;
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(
{
@@ -134,11 +142,11 @@ for my $itm (@items) {
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 $marcnotesarray = GetMarcNotes ($record,$marcflavour);
+ my $marcauthorsarray = GetMarcAuthors ($record,$marcflavour);
+ my $marcsubjctsarray = GetMarcSubjects($record,$marcflavour);
+ my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
+ my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
$template->param(
MARCNOTES => $marcnotesarray,
@@ -199,7 +207,19 @@ $template->param(
# XISBN Stuff
my $xisbn=$dat->{'isbn'};
$xisbn =~ /(\d*[X]*)/;
-$template->param(amazonisbn => $1);
+$template->param(amazonisbn => $1); # FIXME: so it is OK if the ISBN = 'XXXXX' ?
+my ($clean, $amazonisbn);
+$amazonisbn = $1;
+# these might be overkill, but they are better than the regexp above.
+if (
+ $amazonisbn =~ /\b(\d{13})\b/ or
+ $amazonisbn =~ /\b(\d{10})\b/ or
+ $amazonisbn =~ /\b(\d{9}X)\b/i
+) {
+ $clean = $1;
+ $template->param(clean_isbn => $1);
+}
+
if (C4::Context->preference("OPACFRBRizeEditions")==1) {
eval {
$template->param(
@@ -299,4 +319,35 @@ $template->param(
);
}
+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,
+ 'sort'=>'-weight', limit=>$tag_quantity}));
+}
+
output_html_with_http_headers $query, $cookie, $template->output;
diff --git a/opac/opac-search.pl b/opac/opac-search.pl
index 40dcb47..8e4fc55 100755
--- a/opac/opac-search.pl
+++ b/opac/opac-search.pl
@@ -11,7 +11,9 @@ use C4::Context;
use C4::Output;
use C4::Auth;
use C4::Search;
+use C4::Biblio; # GetBiblioData
use C4::Koha;
+use C4::Tags qw(get_tags);
use POSIX qw(ceil floor);
use C4::Branch; # GetBranches
@@ -20,6 +22,13 @@ use C4::Branch; # GetBranches
use CGI qw('-no_undef_params');
my $cgi = new CGI;
+BEGIN {
+ if (C4::Context->preference('BakerTaylorEnabled')) {
+ require C4::External::BakerTaylor;
+ import C4::External::BakerTaylor qw(&image_url &link_url);
+ }
+}
+
my ($template,$borrowernumber,$cookie);
# decide which template to use
@@ -50,8 +59,19 @@ if (C4::Context->preference("marcflavour") eq "UNIMARC" ) {
$template->param('UNIMARC' => 1);
}
-foreach (qw(TaggingOnList TaggingOnDetail)) {
- C4::Context->preference($_) and $template->param($_ => 1);
+if (C4::Context->preference('BakerTaylorEnabled')) {
+ $template->param(
+ BakerTaylorEnabled => 1,
+ BakerTaylorImageURL => &image_url(),
+ BakerTaylorLinkURL => &link_url(),
+ BakerTaylorBookstoreURL => C4::Context->preference('BakerTaylorBookstoreURL'),
+ );
+}
+if (C4::Context->preference('TagsEnabled')) {
+ $template->param(TagsEnabled => 1);
+ foreach (qw(TagsShowOnList TagsInputOnList)) {
+ C4::Context->preference($_) and $template->param($_ => 1);
+ }
}
## URI Re-Writing
@@ -178,6 +198,8 @@ if ( $template_type eq 'advsearch' ) {
# * we can edit the values by changing the key
# * multivalued CGI paramaters are returned as a packaged string separated by "\0" (null)
my $params = $cgi->Vars;
+my $tag;
+$tag = $params->{tag} if $params->{tag};
# Params that can have more than one value
# sort by is used to sort the query
@@ -277,9 +299,7 @@ sub _input_cgi_parse ($) {
for my $this_cgi ( split('&',shift) ) {
next unless $this_cgi;
$this_cgi =~ /(.*)=(.*)/;
- my $input_name = $1;
- my $input_value = $2;
- push @elements, { input_name => $input_name, input_value => $input_value };
+ push @elements, { input_name => $1, input_value => $2 };
}
return @elements;
}
@@ -310,7 +330,17 @@ my $facets; # this object stores the faceted results that display on the left-ha
my @results_array;
my $results_hashref;
-if (C4::Context->preference('NoZebra')) {
+if ($tag) {
+ my $taglist = get_tags({term=>$tag});
+ $results_hashref->{biblioserver}->{hits} = scalar (@$taglist);
+ my @biblist = (map {GetBiblioData($_->{biblionumber})} @$taglist);
+ my @marclist = (map {$_->{marc}} @biblist );
+ $DEBUG and printf STDERR "taglist (%s biblionumber)\nmarclist (%s records)\n", scalar(@$taglist), scalar(@marclist);
+ $results_hashref->{biblioserver}->{RECORDS} = \@marclist;
+ # FIXME: tag search and standard search should work together, not exclusively
+ # FIXME: No facets for tags search.
+}
+elsif (C4::Context->preference('NoZebra')) {
eval {
($error, $results_hashref, $facets) = NZgetRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
};
@@ -323,6 +353,8 @@ if (C4::Context->preference('NoZebra')) {
($error, $results_hashref, $facets) = getRecords($query,$simple_query,\@sort_by,\@servers,$results_per_page,$offset,$expanded_facet,$branches,$query_type,$scan);
};
}
+use Data::Dumper;
+print STDERR "-" x 25, "\n", Dumper($results_hashref);
if ($@ || $error) {
$template->param(query_error => $error.$@);
output_html_with_http_headers $cgi, $cookie, $template->output;
@@ -350,6 +382,26 @@ for (my $i=0;$i<=@servers;$i++) {
} else {
@newresults = searchResults( $query_desc,$hits,$results_per_page,$offset,@{$results_hashref->{$server}->{"RECORDS"}});
}
+ my $tag_quantity;
+ if (C4::Context->preference('TagsEnabled') and
+ $tag_quantity = C4::Context->preference('TagsShowOnList')) {
+ foreach (@newresults) {
+ my $bibnum = $_->{biblionumber} or next;
+ $_ ->{'TagLoop'} = get_tags({biblionumber=>$bibnum, 'sort'=>'-weight',
+ limit=>$tag_quantity });
+ }
+ }
+ foreach (@newresults) {
+ my $clean = $_->{isbn} or next;
+ unless (
+ $clean =~ /\b(\d{13})\b/ or
+ $clean =~ /\b(\d{10})\b/ or
+ $clean =~ /\b(\d{9}X)\b/i
+ ) {
+ next;
+ }
+ $_ ->{'clean_isbn'} = $1;
+ }
$total = $total + $results_hashref->{$server}->{"hits"};
## If there's just one result, redirect to the detail page
if ($total == 1) {
--
1.5.2.1
More information about the Koha-patches
mailing list