Merge remote branch 'kc/new/enh/bug_5692' into kcmaster

This commit is contained in:
Chris Cormack 2011-04-13 16:08:52 +12:00
commit 9bb2554e39
3 changed files with 263 additions and 0 deletions

View file

@ -0,0 +1,110 @@
#!/usr/bin/perl
# Copyright 2000-2002 Katipo Communications
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Koha; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 SYNOPSIS
This plugin is used to map isbn/editor with collection.
It need :
in thesaurus, a category named EDITORS
in this category, datas must be entered like following :
isbn separator editor separator collection.
for example :
2204 -- Cerf -- Cogitatio fidei
2204 -- Cerf -- Le Magistere de l'Eglise
2204 -- Cerf -- Lectio divina
2204 -- Cerf -- Lire la Bible
2204 -- Cerf -- Pour lire
2204 -- Cerf -- Sources chretiennes
when the user clic on ... on 225a line, the popup shows the list of collections from the selected editor
if the biblio has no isbn, then the search if done on editor only
If the biblio ha an isbn, the search is done on isbn and editor. It's faster.
=over 2
=cut
use strict;
#use warnings; FIXME - Bug 2505
use C4::Auth;
use CGI;
use C4::Context;
use C4::AuthoritiesMarc;
use C4::Output;
=head1
plugin_parameters : other parameters added when the plugin is called by the dopop function
=cut
sub plugin_parameters {
my ( $dbh, $record, $tagslib, $i, $tabloop ) = @_;
return "";
}
sub plugin_javascript {
my ( $dbh, $record, $tagslib, $field_number, $tabloop ) = @_;
my $function_name = $field_number;
my $res = "
<script type=\"text/javascript\">
function Focus$function_name(subfield_managed) {
return 1;
}
function Blur$function_name(subfield_managed) {
return 1;
}
function Clic$function_name(index) {
window.open(\"../cataloguing/plugin_launcher.pl?plugin_name=unimarc_field_210c_bis.pl&index=\"+index,\"unimarc210c\",'width=500,height=400,toolbar=false,scrollbars=no');
}
</script>
";
return ( $function_name, $res );
}
sub plugin {
my ($input) = @_;
my $index = $input->param('index');
my $result = $input->param('result');
my $editor_found = $input->param('editor_found');
my $authoritysep = C4::Context->preference("authoritysep");
warn Data::Dumper::Dumper $index;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
{ template_name => "cataloguing/value_builder/unimarc_field_210c_bis.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
flagsrequired => { editcatalogue => '*' },
debug => 1,
}
);
$template->param(
index => $index,
);
output_html_with_http_headers $input, $cookie, $template->output;
}
1;

78
cataloguing/ysearch.pl Executable file
View file

@ -0,0 +1,78 @@
#!/usr/bin/perl
# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html)
# Copyright 2007 Tamil s.a.r.l.
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it under the
# terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Koha; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 ysearch.pl
=cut
use strict;
#use warnings; FIXME - Bug 2505
use CGI;
use C4::Context;
use C4::Auth qw/check_cookie_auth/;
my $input = new CGI;
my $query = $input->param('query');
my $table = $input->param('table');
my $field = $input->param('field');
# Prevent from disclosing data
die() unless ($table eq "biblioitems");
binmode STDOUT, ":utf8";
print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
my ( $auth_status, $sessionID ) = check_cookie_auth( $input->cookie('CGISESSID'), { cataloguing => '*' } );
if ( $auth_status ne "ok" ) {
exit 0;
}
my $dbh = C4::Context->dbh;
my $sql = qq(SELECT distinct $field
FROM $table
WHERE $field LIKE ? OR $field LIKE ? or $field LIKE ?);
$sql .= qq( ORDER BY $field);
my $sth = $dbh->prepare($sql);
$sth->execute("$query%", "% $query%", "%-$query%");
while ( my $rec = $sth->fetchrow_hashref ) {
print nsb_clean($rec->{$field}) . "\n";
}
sub nsb_clean {
my $NSB = '\x88' ; # NSB : begin Non Sorting Block
my $NSE = '\x89' ; # NSE : Non Sorting Block end
my $NSB2 = '\x98' ; # NSB : begin Non Sorting Block
my $NSE2 = '\x9C' ; # NSE : Non Sorting Block end
# handles non sorting blocks
my ($string) = @_ ;
$_ = $string ;
s/$NSB//g ;
s/$NSE//g ;
s/$NSB2//g ;
s/$NSE2//g ;
$string = $_ ;
return($string) ;
}

View file

@ -0,0 +1,75 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD Xhtml 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>UNIMARC_Field 225a builder</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="[% yuipath %]/utilities/utilities.js"></script>
<script type="text/javascript" src="[% yuipath %]/datasource/datasource.js"></script>
<script type="text/javascript" src="[% yuipath %]/autocomplete/autocomplete-min.js"></script>
<link rel="stylesheet" type="text/css" href="[% themelang %]/css/staff-global.css" />
</head>
<body>
<div id="header_search">
<script type="text/javascript">
//<![CDATA[
YAHOO.util.Event.onContentReady("header_search", function() {
new function() {
// Define a custom formatter function
this.fnCustomFormatter = function(oResultItem, sQuery) {
var name = oResultItem[0];
var aMarkup = [
"<div class=\"sample-result\">",
name,
"<\/div>"];
return (aMarkup.join(""));
};
// Instantiate one XHR DataSource and define schema as an array:
// ["Record Delimiter",
// "Field Delimiter"]
this.oACDS = new YAHOO.widget.DS_XHR("/cgi-bin/koha/cataloguing/ysearch.pl", ["\n", "\t"]);
this.oACDS.scriptQueryAppend = "table=biblioitems&field=publishercode";
this.oACDS.responseType = YAHOO.widget.DS_XHR.TYPE_FLAT;
this.oACDS.maxCacheEntries = 60;
this.oACDS.queryMatchSubset = false;
// Instantiate first AutoComplete
var myInput = document.getElementById('findvalue');
var myContainer = document.getElementById('yvaluecontainer');
this.oAutoComp = new YAHOO.widget.AutoComplete(myInput,myContainer,this.oACDS);
//this.oAutoComp.delimChar = ";";
this.oAutoComp.queryDelay = 1;
this.oAutoComp.formatResult = this.fnCustomFormatter;
this.oAutoComp.maxResultsDisplayed = 1000;
}
});
//]]>
</script>
<div id="mainbloc">
<div id="plugin">
<div class="autocomplete">
<form name="f_pop" onsubmit="javascript:report()" action="">
<div id="borrowerautocomplete" class="autocomplete">
<input autocomplete="off" id="findvalue" name="findvalue" size="40" class="focus" type="text" /><br /><br />
<input id="ysearchsubmit" type="submit" class="submit" value="Submit" />
<div id="yvaluecontainer"></div>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript">
function report() {
var doc = opener.document;
var field = doc.getElementById("[% index %]");
field.value = document.f_pop.findvalue.value;
window.close();
return false;
}
</script>
</body>
</html>