[Koha-patches] [PATCH] Bug 5888: opac-detail.pl: adding of search rebound on author and subject
Julian Maurice
julian.maurice at biblibre.com
Thu Mar 17 16:43:34 CET 2011
From: Alex Arnaud <alex.arnaud at biblibre.com>
BibLibre bug #2990
---
admin/systempreferences.pl | 3 +-
installer/data/mysql/en/mandatory/sysprefs.sql | 2 +
installer/data/mysql/updatedatabase.pl | 11 ++
.../prog/en/modules/admin/preferences/opac.pref | 6 +
koha-tmpl/opac-tmpl/prog/en/css/opac.css | 30 ++++
.../opac-tmpl/prog/en/modules/opac-detail.tmpl | 139 ++++++++++++++++++--
opac/opac-detail.pl | 33 +++++
7 files changed, 214 insertions(+), 10 deletions(-)
diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl
index b33c7ec..32e2d19 100755
--- a/admin/systempreferences.pl
+++ b/admin/systempreferences.pl
@@ -379,7 +379,8 @@ $tabsysprefs{OPACItemHolds} = "OPAC";
$tabsysprefs{OPACGroupResults} = "OPAC";
$tabsysprefs{XSLTDetailsDisplay} = "OPAC";
$tabsysprefs{XSLTResultsDisplay} = "OPAC";
-$tabsysprefs{OPACShowCheckoutName} = "OPAC";
+$tabsysprefs{OPACShowCheckoutName} = "OPAC";
+$tabsysprefs{OPACSearchReboundBy} = "OPAC";
# Serials
$tabsysprefs{RoutingListAddReserves} = "Serials";
diff --git a/installer/data/mysql/en/mandatory/sysprefs.sql b/installer/data/mysql/en/mandatory/sysprefs.sql
index 6d382c7..174f2cc 100644
--- a/installer/data/mysql/en/mandatory/sysprefs.sql
+++ b/installer/data/mysql/en/mandatory/sysprefs.sql
@@ -292,3 +292,5 @@ INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('TraceCompleteSubfields','0','Force subject tracings to only match complete subfields.','0','YesNo');
INSERT INTO `systempreferences` (variable,value,explanation,options,type) VALUES ('UseAuthoritiesForTracings','1','Use authority record numbers for subject tracings instead of heading strings.','0','YesNo');
INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ('OPACAllowUserToChooseBranch', 1, 'Allow the user to choose the branch they want to pickup their hold from','1','YesNo');
+INSERT INTO systempreferences (variable,value,explanation,options,type) VALUES ( 'OPACSearchReboundBy', 'term', 'term|authority', 'determines if the rebound search use authority number or term.', 'Choice' );
+
diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl
index 66e9828..80d166b 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -4090,6 +4090,17 @@ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
SetVersion ($DBversion);
}
+$DBversion = 'XXX';
+if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do(q{
+ INSERT INTO systempreferences (variable,value,explanation,options,type)
+ VALUES ('OPACSearchReboundBy', 'term', 'determines if the search rebound use authority number or term.','term|authority','Choice');
+});
+ print "Upgrade to $DBversion done. (Add a new system preference OPACSearchReboundBy)\n";
+ SetVersion ($DBversion);
+}
+
+
=head1 FUNCTIONS
=head2 DropAllForeignKeys($table)
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
index 3014e63..ececdd4 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/opac.pref
@@ -225,6 +225,12 @@ OPAC:
yes: Allow
no: "Don't allow"
- patrons to place holds on items from the OPAC.
+ -
+ - Do search rebound on
+ - pref: OPACSearchReboundBy
+ choices:
+ authority: Authority
+ term: Term
Policy:
-
- pref: singleBranchMode
diff --git a/koha-tmpl/opac-tmpl/prog/en/css/opac.css b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
index 83b54ea..bdbd98e 100644
--- a/koha-tmpl/opac-tmpl/prog/en/css/opac.css
+++ b/koha-tmpl/opac-tmpl/prog/en/css/opac.css
@@ -1956,6 +1956,36 @@ a.p1:active {
div.ft {
clear : both;
}
+
+.authorSearch {
+ position: absolute;
+ display: none;
+ z-index: 2;
+ background-color: white;
+ border: 1px solid black;
+ padding: 4px;
+}
+.authorSearch li {
+ list-style-type: none;
+}
+.authorSearch ul {
+ padding-left: 0px;
+}
+.subjectSearch {
+ position: absolute;
+ display: none;
+ z-index: 2;
+ background-color: white;
+ border: 1px solid black;
+ padding: 4px;
+}
+.subjectSearch li {
+ list-style-type: none;
+}
+.subjectSearch ul {
+ padding-left: 0px;
+}
+
#basket td ul li {
font-size:90%;
list-style:disc outside url("../../images/item-bullet.gif");
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 468e90f..2d67a83 100644
--- a/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
+++ b/koha-tmpl/opac-tmpl/prog/en/modules/opac-detail.tmpl
@@ -44,6 +44,95 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
//]]>
</script>
+<script type="text/JavaScript" language="JavaScript">
+ function showAuthors(element, value){
+ check("#authorsList", value);
+ makeAuthorRequest();
+ var left = element.offsetLeft || 0;
+ var top = element.offsetTop || 0;
+ $('.authorSearch').css('display', 'block');
+ $('.authorSearch').css('left', left);
+ $('.authorSearch').css('top', top + 15);
+ }
+
+ function hideMenu(elem) {
+ $(elem).css('display', 'none');
+ }
+
+ function check(elem, value) {
+ $(elem).find("li").each(function (){
+ if ($(this).find("input").val() == value) { $(this).find("input").attr("checked", "true"); }
+ else { $(this).find("input").attr("checked", ""); }
+ });
+ }
+
+ function checkAll(elem) {
+ var check = "";
+ if ($(elem).find("li:first").find("input").attr("checked")){ check = true; }
+ $(elem).find("li").not(":first").each(function (){
+ $(this).find("input").attr("checked", check);
+ });
+ elem == "#authorsList" ? makeAuthorRequest() : makeSubjectRequest();
+ }
+
+ function makeAuthorRequest(){
+ var request = "/cgi-bin/koha/opac-search.pl?q=";
+ var alreadyFound = false;
+ $("#authorsList").find("li").each(function (){
+ if ($(this).find("input").attr("checked") && $(this).find("input").attr("name") == "checkbox") {
+ value = $(this).find("input").val();
+ if (alreadyFound){ request += " and " + value; }
+ else {
+ request += value;
+ alreadyFound = true;
+ }
+ }
+ });
+ if (alreadyFound) {
+ $("#validAuthorSearch").attr("href", request);
+ }else {
+ $("#validAuthorSearch").removeAttr("href");
+ }
+
+ }
+ //Subjects
+ function showSubjects(element, value, code){
+ $("#subjectsList").find("li").each(function (){
+ $(this).find("input").attr("checked", "");
+ });
+ $("#subjectsList").find("li").each(function (){
+ if ($(this).find("input").val() == value && $(this).find("input").attr("code") == code) {
+ $(this).find("input").attr("checked", "true");
+ var elem = this;
+ while ($(elem).prev("li").children().attr("id") == "checkbox") {
+ $(elem).prev("li").find("input").attr("checked", "true");
+ elem = $(elem).prev("li");
+ }
+ }
+ });
+ makeSubjectRequest();
+ var left = element.offsetLeft || 0;
+ var top = element.offsetTop || 0;
+ $('.subjectSearch').css('display', 'block');
+ $('.subjectSearch').css('left', left);
+ $('.subjectSearch').css('top', top + 15);
+ }
+ function makeSubjectRequest() {
+ var request = "/cgi-bin/koha/opac-search.pl?q=";
+ var alreadyFound = false;
+ $("#subjectsList").find("li").each(function (){
+ if ($(this).find("input").attr("checked") && $(this).find("input").attr("name") == "checkbox") {
+ value = $(this).find("input").val();
+ if (alreadyFound){ request += " and " + value; }
+ else {
+ request += value;
+ alreadyFound = true;
+ }
+ }
+ });
+ alreadyFound ? $("#validSubjectSearch").attr("href", request) : $("#validSubjectSearch").removeAttr("href");
+ }
+</script>
<!-- TMPL_IF NAME="opacuserlogin" --><!-- TMPL_IF NAME="loggedinusername" --><!-- TMPL_IF NAME="TagsEnabled" --><style type="text/css">
#addtagl { display: none; }
</style><!-- /TMPL_IF --><!-- /TMPL_IF --><!-- /TMPL_IF -->
@@ -101,12 +190,26 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
</span>
<!-- TMPL_IF name="MARCAUTHORS" -->
- <span class="results_summary"><span class="label">Authors:</span>
- <!-- TMPL_LOOP NAME="MARCAUTHORS" -->
- <!-- TMPL_LOOP NAME="MARCAUTHOR_SUBFIELDS_LOOP" --><!-- TMPL_VAR NAME="separator" --><a title="‡<!-- TMPL_VAR NAME=code --> <!-- TMPL_VAR NAME=value -->" href="/cgi-bin/koha/opac-search.pl?q=<!-- TMPL_LOOP NAME=link_loop --><!-- TMPL_VAR NAME=operator ESCAPE="URL" --><!-- TMPL_VAR NAME='limit' ESCAPE="URL" -->:<!-- TMPL_VAR NAME=link ESCAPE="URL" --><!-- /TMPL_LOOP -->"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
- <!-- TMPL_UNLESS NAME="__last__" -->|
-<!-- /TMPL_UNLESS -->
+ <span class="results_summary">
+ <span class="label">Authors:</span>
+ <div class="authorSearch">
+ <span><b>Select the item(s) to search :</b></span>
+ <ul id="authorsList">
+ <li><input type="checkbox" onchange="checkAll('#authorsList')"> <b>all</b></li>
+ <!-- TMPL_LOOP NAME="bouncemarcauthorsarray" -->
+ <li><input type="checkbox" name="checkbox" onclick="makeAuthorRequest()" value="<!-- TMPL_IF name="searchbyauthority" --><!-- TMPL_IF name="authoritylink" -->an:<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF -->"><!-- TMPL_LOOP name="term" --> <!-- TMPL_VAR name="value" --> <!-- /TMPL_LOOP --></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ <a href="#" onclick="hideMenu('.authorSearch');">Cancel</a> | <a id="validAuthorSearch"href="#">Search</a>
+ </div>
+ <!-- TMPL_LOOP NAME="bouncemarcauthorsarray" -->
+ <a href="<!-- TMPL_IF name="authoritylink" -->/cgi-bin/koha/opac-authoritiesdetail.pl?authid=<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE --><!-- /TMPL_IF -->" >
+ <img height="15" src="/opac-tmpl/prog/images/filefind.png">
+ </a>
+ <a href="#" onclick="showAuthors(this, '<!-- TMPL_IF name="searchbyauthority" --><!-- TMPL_IF name="authoritylink" -->an:<!-- TMPL_VAR name="authoritylink" --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF --><!-- TMPL_ELSE -->au,wrdl:<!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --><!-- TMPL_UNLESS NAME="__last__" -->+<!-- /TMPL_UNLESS --><!-- /TMPL_LOOP --><!-- /TMPL_IF -->')"><!-- TMPL_LOOP name="term" --><!-- TMPL_VAR name="value" --> <!-- /TMPL_LOOP --></a> |
<!-- /TMPL_LOOP -->
+ <!-- /TMPL_UNLESS -->
+ <!-- /TMPL_LOOP -->
</span>
<!-- /TMPL_IF -->
@@ -160,12 +263,30 @@ YAHOO.util.Event.onContentReady("furtherm", function () {
<!-- /TMPL_IF -->
<!-- TMPL_IF NAME="MARCSUBJCTS" -->
- <span class="results_summary"><span class="label">Subject(s):</span>
+ <span class="results_summary"><span class="label">Subject(s):</span>
+ <div class="subjectSearch" >
+ <span><b>Select the item(s) to search :</b></span>
+ <ul id="subjectsList">
+ <li><input id="all" type="checkbox" onchange="checkAll('#subjectsList')"> <b>all</b></li>
+ <!-- TMPL_LOOP NAME="MARCSUBJCTS" -->
+ <!-- TMPL_LOOP NAME="MARCSUBJECT_SUBFIELDS_LOOP" -->
+ <li><input type="checkbox" onclick="makeSubjectRequest()" name="checkbox" id="checkbox" code="<!-- TMPL_VAR name="value" -->" value="<!-- TMPL_IF name="searchbyauthority" -->an:<!-- TMPL_LOOP name="link_loop" --><!-- TMPL_VAR name="link" --><!-- /TMPL_LOOP --><!-- TMPL_ELSE -->su,wrdl:<!-- TMPL_VAR name="value" --><!-- /TMPL_IF -->"> <!-- TMPL_VAR name="value" --></li>
+ <!-- /TMPL_LOOP -->
+ <li><hr id="trait"></li>
+ <!-- /TMPL_LOOP -->
+ </ul>
+ <a href="#" onclick="hideMenu('.subjectSearch')">Cancel</a> | <a id="validSubjectSearch"href="#">Search</a>
+ </div>
<!-- TMPL_LOOP NAME="MARCSUBJCTS" -->
<!-- TMPL_LOOP NAME="MARCSUBJECT_SUBFIELDS_LOOP" -->
- <!-- TMPL_VAR NAME="separator" --><a title="$<!-- TMPL_VAR NAME="code" --> <!-- TMPL_VAR NAME="value" -->" href="/cgi-bin/koha/opac-search.pl?q=<!-- TMPL_LOOP NAME="link_loop" --><!-- TMPL_VAR NAME="operator" ESCAPE="URL" --><!-- TMPL_VAR NAME="limit" ESCAPE="URL" -->:<!-- TMPL_VAR NAME="link" ESCAPE="URL" --><!-- /TMPL_LOOP -->"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
- <!-- TMPL_IF NAME="__LAST__" --><!-- TMPL_ELSE -->|<!-- /TMPL_IF -->
- <!-- /TMPL_LOOP --></span>
+ <!-- TMPL_VAR NAME="separator" -->
+ <span>
+ <a href="/cgi-bin/koha/opac-authoritiesdetail.pl?authid=<!-- TMPL_LOOP NAME="link_loop" --><!-- TMPL_VAR NAME="link" ESCAPE="URL" --><!-- /TMPL_LOOP -->"><img height="15" src="/opac-tmpl/prog/images/filefind.png"></a>
+ </span>
+ <a href="#" onclick="showSubjects(this, '<!-- TMPL_IF name="searchbyauthority" -->an:<!-- TMPL_LOOP name="link_loop" --><!-- TMPL_VAR name="link" --><!-- /TMPL_LOOP --><!-- TMPL_ELSE -->su,wrdl:<!-- TMPL_VAR name="value" --><!-- /TMPL_IF -->', '<!-- TMPL_VAR name="value" -->')"><!-- TMPL_VAR NAME="value" --></a><!-- /TMPL_LOOP -->
+ <!-- TMPL_IF NAME="__LAST__" --><!-- TMPL_ELSE -->|<!-- /TMPL_IF -->
+ <!-- /TMPL_LOOP -->
+ </span>
<!-- TMPL_ELSE -->
<!-- TMPL_IF name="subjects" --><span class="results_summary"><span class="label">Subject(s):</span> <!-- TMPL_LOOP name="subjects" --><a href="/cgi-bin/koha/opac-search.pl?q=su:<!-- TMPL_VAR NAME="subject" escape="URL" -->"><!-- TMPL_VAR NAME="subject" --></a> | <!-- /TMPL_LOOP --></span><!-- /TMPL_IF -->
<!-- /TMPL_IF -->
diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl
index 93edc15..60d2f77 100755
--- a/opac/opac-detail.pl
+++ b/opac/opac-detail.pl
@@ -205,6 +205,38 @@ my $marcseriesarray = GetMarcSeries ($record,$marcflavour);
my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($biblionumber));
+#search rebound parameter
+my $searchByauthority = 0;
+if ( C4::Context->preference("OPACSearchReboundBy") eq "authority" ) {
+ $searchByauthority = 1;
+}
+
+#search rebound on author
+my @reboundmarcauthorsarray;
+foreach my $author (@$marcauthorsarray) {
+ my ( $a, $b, $authoritylink, @term );
+ foreach my $subfield ( @{ $author->{'MARCAUTHOR_SUBFIELDS_LOOP'} } ) {
+ if ( $subfield->{'code'} eq "a" && @{ $subfield->{'link_loop'} }[0]->{"limit"} eq "an" ) {
+ $authoritylink = @{ $subfield->{'link_loop'} }[0]->{"link"};
+ }
+ unless ( $subfield->{'code'} eq "3" || $subfield->{'code'} eq "4" ) { push( @term, { value => $subfield->{'value'} } ); }
+ }
+ push(
+ @reboundmarcauthorsarray,
+ { term => \@term,
+ authoritylink => $authoritylink,
+ searchbyauthority => $searchByauthority,
+ }
+ );
+}
+
+#search rebound on subject
+foreach my $subject (@$marcsubjctsarray) {
+ foreach my $subfield ( @{ $subject->{'MARCSUBJECT_SUBFIELDS_LOOP'} } ) {
+ $subfield->{'searchbyauthority'} = $searchByauthority;
+ }
+}
+
$template->param(
MARCNOTES => $marcnotesarray,
MARCSUBJCTS => $marcsubjctsarray,
@@ -220,6 +252,7 @@ my $subtitle = GetRecordValue('subtitle', $record, GetFrameworkCode($bib
itemdata_itemnotes => $itemfields{itemnotes},
authorised_value_images => $biblio_authorised_value_images,
subtitle => $subtitle,
+ bouncemarcauthorsarray => \@reboundmarcauthorsarray,
);
foreach ( keys %{$dat} ) {
--
1.7.4.1
More information about the Koha-patches
mailing list