From 0097260501ef2d9e875040fadf4c08ad83605661 Mon Sep 17 00:00:00 2001 From: hdl Date: Sat, 12 Mar 2005 16:45:50 +0000 Subject: [PATCH] Adding plugin for Unimarc_field-4XX.pl Search and results OK. Process stil to be done. --- .../en/value_builder/unimarc_field_4XX.tmpl | 246 ++++++++++++++++ value_builder/unimarc_field_4XX.pl | 268 ++++++++++++++++++ 2 files changed, 514 insertions(+) create mode 100644 koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_4XX.tmpl create mode 100755 value_builder/unimarc_field_4XX.pl diff --git a/koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_4XX.tmpl b/koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_4XX.tmpl new file mode 100644 index 0000000000..f2cbcf0830 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/value_builder/unimarc_field_4XX.tmpl @@ -0,0 +1,246 @@ + + + KOHA:INTRANET : Biblio Search + + + + +/includes/common-style.css"> + + + + + + + + +

Logged in as: [Log Out]

+ +

Log In to Koha

+ +
+

KOHA : INTRANET : Catalogue

+ +
+

Search On

+
+ +

+ + "> + "> + + + + + + + + +

+

+ + + + + + +

+

+ + + + + +

+

+ + + + + + +

+

+ + + + + + +

+

Other options

+

+ + + + + + +

+

+ + + + + + +

+

+ + + + + + + +

+
+
+

+

Results per page : + + Ordered by + +

+

+ + +

+ + +
+ + + +

Search results

+ +
+ + + + + + + + + + class="hilighted"> + + "> + + "> +

+ - + ; + - + : + ; +

+ +
+ + + + + +
SummaryItem CountLocation 
class="hilighted"> + + class="hilighted"> + +

+ + + On Loan until + + + () + + + + () + +

+ +

On order

+
+ //images/arrow.gif" width="32" hspace="0" vspace="0" border="0"> +
+
+ + + + + +
+ + diff --git a/value_builder/unimarc_field_4XX.pl b/value_builder/unimarc_field_4XX.pl new file mode 100755 index 0000000000..ad489c7ab1 --- /dev/null +++ b/value_builder/unimarc_field_4XX.pl @@ -0,0 +1,268 @@ +#!/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., 59 Temple Place, +# Suite 330, Boston, MA 02111-1307 USA + +use strict; +require Exporter; +use CGI; +use HTML::Template; +use C4::Interface::CGI::Output; +use C4::Context; +use C4::Search; +use C4::Auth; +use C4::Output; +use C4::Database; +use C4::Biblio; +use C4::SearchMarc; +use C4::Acquisition; +use C4::Koha; + +sub plugin_parameters { +my ($dbh,$record,$tagslib,$i,$tabloop) = @_; +return ""; +} + +sub plugin_javascript { +my ($dbh,$record,$tagslib,$field_number,$tabloop) = @_; +my $function_name= "4XX".(int(rand(100000))+1); +my $res=" + +"; + +return ($function_name,$res); +} + +sub plugin { + my ($input) = @_; + my %env; + + + my $dbh=C4::Context->dbh; + my $query = new CGI; + my $op = $query->param('op'); + my $type=$query->param('type'); + warn "operation ".$op; + my $startfrom=$query->param('startfrom'); + $startfrom=0 if(!defined $startfrom); + my ($template, $loggedinuser, $cookie); + my $resultsperpage; + my $searchdesc; + + if ($op eq "do_search") { + my @marclist = $query->param('marclist'); + my @and_or = $query->param('and_or'); + my @excluding = $query->param('excluding'); + my @operator = $query->param('operator'); + my @value = $query->param('value'); + + for (my $i=0;$i<=$#marclist;$i++) { + if ($searchdesc) { # don't put the and_or on the 1st search term + $searchdesc .= $and_or[$i]." ".$excluding[$i]." ".($marclist[$i]?$marclist[$i]:"*")." ".$operator[$i]." ".$value[$i]." " if ($value[$i]); + } else { + $searchdesc = $excluding[$i]." ".($marclist[$i]?$marclist[$i]:"*")." ".$operator[$i]." ".$value[$i]." " if ($value[$i]); + } + } + $resultsperpage= $query->param('resultsperpage'); + $resultsperpage = 19 if(!defined $resultsperpage); + my $orderby = $query->param('orderby'); + my $desc_or_asc = $query->param('desc_or_asc'); + + # builds tag and subfield arrays + my @tags; + foreach my $marc (@marclist) { + if ($marc) { + my ($tag,$subfield) = MARCfind_marc_from_kohafield($dbh,$marc,''); + if ($tag) { + push @tags,$dbh->quote("$tag$subfield"); + } else { + push @tags, $dbh->quote(substr($marc,0,4)); + } + } else { + push @tags, ""; + } + } + + my ($results,$total) = catalogsearch($dbh, \@tags,\@and_or, + \@excluding, \@operator, \@value, + $startfrom*$resultsperpage, $resultsperpage,$orderby, $desc_or_asc); + warn " biblio count : ".$total; + warn " biblio count : ".$total; + + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/unimarc_field_4XX.tmpl", + query => $query, + type => 'intranet', + authnotrequired => 1, + debug => 1, + }); + + # multi page display gestion + my $displaynext=0; + my $displayprev=$startfrom; + if(($total - (($startfrom+1)*($resultsperpage))) > 0 ){ + $displaynext = 1; + } + + my @field_data = (); + + + for(my $i = 0 ; $i <= $#marclist ; $i++) + { + push @field_data, { term => "marclist", val=>$marclist[$i] }; + push @field_data, { term => "and_or", val=>$and_or[$i] }; + push @field_data, { term => "excluding", val=>$excluding[$i] }; + push @field_data, { term => "operator", val=>$operator[$i] }; + push @field_data, { term => "value", val=>$value[$i] }; + } + + my @numbers = (); + + if ($total>$resultsperpage) + { + for (my $i=1; $i<$total/$resultsperpage+1; $i++) + { + if ($i<16) + { + my $highlight=0; + ($startfrom==($i-1)) && ($highlight=1); + push @numbers, { number => $i, + highlight => $highlight , + searchdata=> \@field_data, + startfrom => ($i-1)}; + } + } + } + + my $from = $startfrom*$resultsperpage+1; + my $to; + + if($total < (($startfrom+1)*$resultsperpage)) + { + $to = $total; + } else { + $to = (($startfrom+1)*$resultsperpage); + } + my $defaultview = 'BiblioDefaultView'.C4::Context->preference('BiblioDefaultView'); + $template->param(result => $results, + index => $query->param('index')."", + startfrom=> $startfrom, + displaynext=> $displaynext, + displayprev=> $displayprev, + resultsperpage => $resultsperpage, + orderby => $orderby, + startfromnext => $startfrom+1, + startfromprev => $startfrom-1, + searchdata=>\@field_data, + total=>$total, + from=>$from, + to=>$to, + numbers=>\@numbers, + searchdesc=> $searchdesc, + $defaultview => 1, + Search =>0 + ); + + } else { + ($template, $loggedinuser, $cookie) + = get_template_and_user({template_name => "value_builder/unimarc_field_4XX.tmpl", + query => $query, + type => "intranet", + authnotrequired => 1, + }); + + + my $sth=$dbh->prepare("Select itemtype,description from itemtypes order by description"); + $sth->execute; + my @itemtype; + my %itemtypes; + push @itemtype, ""; + $itemtypes{''} = ""; + while (my ($value,$lib) = $sth->fetchrow_array) { + push @itemtype, $value; + $itemtypes{$value}=$lib; + } + + my $CGIitemtype=CGI::scrolling_list( -name => 'value', + -values => \@itemtype, + -labels => \%itemtypes, + -size => 1, + -multiple => 0 ); + $sth->finish; + + my @branchloop; + my @select_branch; + my %select_branches; + my $branches=getbranches; + push @select_branch, ""; + $select_branches{''} = ""; + foreach my $thisbranch (keys %$branches){ + push @select_branch, $branches->{$thisbranch}->{'branchcode'}; + $select_branches{$branches->{$thisbranch}->{'branchcode'}} = $branches->{$thisbranch}->{'branchname'}; + } + my $CGIbranch=CGI::scrolling_list( -name => 'value', + -values => \@select_branch, + -labels => \%select_branches, + -size => 1, + -multiple => 0 ); + $sth->finish; + + my $req = $dbh->prepare("select distinctrow left(publishercode,45) from biblioitems order by publishercode"); + $req->execute; + my @select; + push @select,""; + while (my ($value) =$req->fetchrow) { + push @select, $value; + } + my $CGIpublisher=CGI::scrolling_list( -name => 'value', + -id => 'publisher', + -values => \@select, + -size => 1, + -multiple => 0 ); + +# my $sth=$dbh->prepare("select description,itemtype from itemtypes order by description"); +# $sth->execute; +# while (my ($description,$itemtype) = $sth->fetchrow) { +# $classlist.="\n"; +# } +# $sth->finish; + + $template->param(#classlist => $classlist, + CGIitemtype => $CGIitemtype, + CGIbranch => $CGIbranch, + CGIPublisher => $CGIpublisher, + Search =>1, + ); + } + output_html_with_http_headers $query, $cookie, $template->output ; +} + +1; -- 2.39.5