[Koha-cvs] koha/intranet/cgi-bin/cataloguing addbiblio.pl ... [rel_TG]
Tumer Garip
tgarip at neu.edu.tr
Sat Mar 10 02:15:48 CET 2007
CVSROOT: /sources/koha
Module name: koha
Branch: rel_TG
Changes by: Tumer Garip <tgarip1957> 07/03/10 01:15:48
Added files:
intranet/cgi-bin/cataloguing: addbiblio.pl addbooks.pl
additem.pl isbnsearch.pl
Log message:
fresh files for rel_TG
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/intranet/cgi-bin/cataloguing/addbiblio.pl?cvsroot=koha&only_with_tag=rel_TG&rev=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/koha/intranet/cgi-bin/cataloguing/addbooks.pl?cvsroot=koha&only_with_tag=rel_TG&rev=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/koha/intranet/cgi-bin/cataloguing/additem.pl?cvsroot=koha&only_with_tag=rel_TG&rev=1.1.2.1
http://cvs.savannah.gnu.org/viewcvs/koha/intranet/cgi-bin/cataloguing/isbnsearch.pl?cvsroot=koha&only_with_tag=rel_TG&rev=1.1.2.1
Patches:
Index: addbiblio.pl
===================================================================
RCS file: addbiblio.pl
diff -N addbiblio.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ addbiblio.pl 10 Mar 2007 01:15:48 -0000 1.1.2.1
@@ -0,0 +1,291 @@
+#!/usr/bin/perl
+
+# $Id: addbiblio.pl,v 1.1.2.1 2007/03/10 01:15:48 tgarip1957 Exp $
+
+# 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;
+use CGI;
+use C4::Auth;
+use C4::Output;
+use C4::Interface::CGI::Output;
+use C4::Biblio;
+use C4::Search; # also includes Biblio.pm, Search is used to FindDuplicate
+use C4::Context;
+use C4::Koha; # XXX subfield_is_koha_internal_p
+use MARC::Record;
+use MARC::File::USMARC;
+my $format="USMARC";
+$format="UNIMARC" if (C4::Context->preference('marcflavour') eq 'UNIMARC');
+use MARC::File::XML(RecordFormat =>$format);
+use Encode;
+use C4::Biblioadd;
+####
+my $dbh = C4::Context->dbh;
+my $authorised_values_sth = $dbh->prepare("select authorised_value,lib
+ from authorised_values
+ where category=? order by lib");
+my $BIG_LOOP;
+my $addedfield;
+###Declare all globals
+my $input = new CGI;
+my $logstatus=C4::Context->preference('Activate_log');
+my $xml;
+my $itemtype; # created here because it can be used in build_authorized_values_list sub
+my $fromserials=$input->param('fromserials');## if a serial is being added do not display navigation menus
+
+my $error = $input->param('error');
+my $oldbiblionumber=$input->param('oldbiblionumber'); # if bib exists, it's a modif, not a new biblio.
+my $breedingid = $input->param('breedingid');
+my $z3950 = $input->param('z3950');
+my $DVDid=$input->param('DVDid');
+my $op = $input->param('op');
+my $duplicateok = $input->param('duplicateok');
+my $suggestionid=$input->param('suggestionid');
+my $frameworkcode = $input->param('frameworkcode');
+
+my $biblionumber;
+
+
+###Find related tags for Z3950 searches- required by template
+my($isbntag,$isbnsub)=MARCfind_marc_from_kohafield("isbn","biblios");
+my($issntag,$issnsub)=MARCfind_marc_from_kohafield("issn","biblios");
+my($titletag,$titlesub)=MARCfind_marc_from_kohafield("title","biblios");
+my($authortag,$authorsub)=MARCfind_marc_from_kohafield("author","biblios");
+my($urltag,$urlsub)=MARCfind_marc_from_kohafield("url","biblios"); ##DVD search uses this field
+
+# ========================
+# MAIN
+#=========================
+
+
+$biblionumber=$oldbiblionumber if $oldbiblionumber;
+$frameworkcode='' if ($frameworkcode eq 'Default');
+my ($template, $loggedinuser, $cookie)
+ = get_template_and_user({template_name => "cataloguing/addbiblio.tmpl",
+ query => $input,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => {editcatalogue => 1},
+ debug => 1,
+ });
+
+#Getting the list of all frameworks
+my $queryfwk =$dbh->prepare("select frameworktext, frameworkcode from biblios_framework");
+$queryfwk->execute;
+my %select_fwk;
+my @select_fwk;
+my $curfwk;
+push @select_fwk,"Default";
+$select_fwk{"Default"} = "Default";
+while (my ($description, $fwk) =$queryfwk->fetchrow) {
+ push @select_fwk, $fwk;
+ $select_fwk{$fwk} = $description;
+}
+$curfwk=$frameworkcode;
+my $framework=CGI::scrolling_list( -name => 'Frameworks',
+ -id => 'Frameworks',
+ -default => $curfwk,
+ -OnChange => 'Changefwk(this);',
+ -values => \@select_fwk,
+ -labels => \%select_fwk,
+ -size => 1,
+ -multiple => 0 );
+$template->param( framework => $framework);
+my $xmlhash;
+my $xml;
+#####DO NOT RETRIVE FROM ZEBRA######
+my $record =XMLgetbiblio($dbh,$biblionumber) if ($biblionumber);
+$xmlhash=XML_xml2hash_onerecord($record) if ($biblionumber);
+$frameworkcode=MARCfind_frameworkcode( $dbh, $biblionumber );
+###########
+my $tagslib = &MARCgettagslib($dbh,1,$frameworkcode);
+if ($suggestionid && !$biblionumber){
+my $data=GetSuggestion($suggestionid) ;
+$xml=$data->{xml};
+$xmlhash=XML_xml2hash_onerecord($xml);
+}
+my $encoding="";
+($xmlhash,$encoding) = MARCfindbreeding($dbh,$breedingid,$oldbiblionumber) if ($breedingid);
+($xmlhash) = ImportDVD($DVDid,$oldbiblionumber) if ($DVDid);
+
+my $is_a_modif=0;
+$is_a_modif=1 if $oldbiblionumber;
+my ($oldbiblionumtagfield,$oldbiblionumtagsubfield);
+if ($biblionumber && !$z3950) {
+ $is_a_modif=1;
+ # if it's a modif, retrieve old biblionumber for the future modification of old-DB.
+ ($oldbiblionumtagfield,$oldbiblionumtagsubfield) = &MARCfind_marc_from_kohafield($dbh,"biblionumber","biblios");
+
+
+}
+#------------------------------------------------------------------------------------------------------------------------------
+if ($op eq "addbiblio") {
+#------------------------------------------------------------------------------------------------------------------------------
+ # rebuild
+ my @tags = $input->param('tag');
+ my @subfields =$input->param('subfield');
+ my @values=$input->param('field_value');
+ # build indicator hash.
+ my @ind_tag = $input->param('ind_tag');
+ my @indicator = $input->param('indicator');
+ my @tagindex=$input->param('tagindex');
+
+
+## check for malformed xml -- non UTF-8 like (MARC8) will break xml without warning
+### This usually happens with data coming from other Z3950 servers
+## Slows the saving process so comment out at your own risk
+eval{
+ $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag,\@tagindex);
+};
+ if ($@){
+warn $@;
+ $template->param(error =>1,xmlerror=>1,);
+goto FINAL;
+ };
+my $xmlhash=XML_xml2hash_onerecord($xml);
+ my ($duplicatebiblionumber,$duplicatetitle) = FindDuplicate($xmlhash) if (($op eq "addbiblio") && (!$is_a_modif) && (!$duplicateok));
+ my $confirm_not_duplicate = $input->param('confirm_not_duplicate');
+ # it is not a duplicate (determined either by Koha itself or by user checking it's not a duplicate)
+ if (!$duplicatebiblionumber or $confirm_not_duplicate) {
+ # MARC::Record built => now, record in DB
+ my $oldbibnum;
+ my $oldbibitemnum;
+ if ($is_a_modif) {
+ NEWmodbiblio($dbh,$biblionumber,$xmlhash,$frameworkcode);
+
+ } else {
+
+ ($biblionumber) = NEWnewbiblio($dbh,$xmlhash,$frameworkcode);
+
+ }
+ # now, redirect to additem page
+ unless ($fromserials){
+ print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode") unless $fromserials;
+ exit;
+ }else{
+ my $title=XML_readline_onerecord($xmlhash,"title","biblios");
+ $template->param(exit=>1,biblionumber=>$biblionumber,title=>$title);
+ goto FINAL;
+ }
+
+ } else {
+FINAL:
+ # it may be a duplicate, warn the user and do nothing
+ build_tabs ($template, $xmlhash, $dbh,$addedfield,$tagslib,$authorised_values_sth);
+
+ $tagslib=build_hidden_data($tagslib);
+ $template->param(fromserials=>$fromserials,
+ oldbiblionumber => $oldbiblionumber,
+ biblionumber => $biblionumber,
+ oldbiblionumtagfield => $oldbiblionumtagfield,
+ oldbiblionumtagsubfield => $oldbiblionumtagsubfield,
+ duplicatebiblionumber => $duplicatebiblionumber,
+ duplicatetitle => $duplicatetitle,
+ );
+ }
+#------------------------------------------------------------------------------------------------------------------------------
+} elsif ($op eq "addfield") {
+#------------------------------------------------------------------------------------------------------------------------------
+ $addedfield = $input->param('addfield_field');
+ my @tags = $input->param('tag');
+ my @subfields = $input->param('subfield');
+ my @values = $input->param('field_value');
+ # build indicator hash.
+ my @ind_tag = $input->param('ind_tag');
+ my @indicator = $input->param('indicator');
+ my @tagindex=$input->param('tagindex');
+ my $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag,\@tagindex);
+ my $xmlhash=XML_xml2hash_onerecord($xml);
+ # adding an empty field
+ &build_tabs ($template, $xmlhash, $dbh,$addedfield,$tagslib,$authorised_values_sth);
+ $tagslib=build_hidden_data($tagslib);
+# $template->param(BIG_LOOP=>$BIG_LOOP,);
+ $template->param(
+ oldbiblionumber => $oldbiblionumber,
+ biblionumber => $biblionumber,
+ oldbiblionumtagfield => $oldbiblionumtagfield,
+ oldbiblionumtagsubfield => $oldbiblionumtagsubfield,
+ fromserials=>$fromserials
+ );
+} elsif ($op eq "delete") {
+#------------------------------------------------------------------------------------------------------------------------------
+my $sth=$dbh->prepare("select iss.itemnumber from items i ,issues iss where iss.itemnumber=i.itemnumber and iss.returndate is null and i.biblionumber=?");
+ $sth->execute($biblionumber);
+my $onloan=$sth->fetchrow;
+
+ if (!$onloan){
+ NEWdelbiblio($dbh,$biblionumber);
+print $input->redirect("/cgi-bin/koha/catalogue/catalogue-search.pl");
+ exit;
+ }else{
+
+$template->param(error => 1, onloan=>1,);
+ }
+#------------------------------------------------------------------------------------------------------------------------------
+#------------------------------------------------------------------------------------------------------------------------------
+} else {
+#------------------------------------------------------------------------------------------------------------------------------
+
+ # If we're in a duplication case, we have to set to "" the biblionumber
+ # as we'll save the biblio as a new one.
+ if ($op eq "duplicate")
+ {
+ $biblionumber = "";
+ $oldbiblionumber= "";
+ $template->param(duplicateok => 1);
+ }
+ build_tabs($template, $xmlhash, $dbh,$addedfield,$tagslib,$authorised_values_sth);
+# $tagslib=build_hidden_data($tagslib);
+# $template->param(BIG_LOOP=>$BIG_LOOP,);
+#warn Dumper($xmlhash);
+ $template->param(
+ oldbiblionumber => $oldbiblionumber,
+ biblionumber => $biblionumber,
+ oldbiblionumtagfield => $oldbiblionumtagfield,
+ oldbiblionumtagsubfield => $oldbiblionumtagsubfield,
+ fromserials=>$fromserials
+ );
+}
+$template->param(
+ isbntag => $isbntag,
+ isbnsub => $isbnsub,
+ issntag => $isbntag,
+ issnsub => $issnsub,
+ titletag => $titletag,
+ titlesub => $titlesub,
+ authortag => $authortag,
+ authorsub => $authorsub,
+ urltag => $urltag,
+ urlsub => $urlsub,
+ );
+
+$template->param(
+ frameworkcode => $frameworkcode,
+ itemtype => $frameworkcode, # HINT: if the library has itemtype = framework, itemtype is auto filled !
+ hide_marc => C4::Context->preference('hide_marc'),
+ intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
+ intranetstylesheet => C4::Context->preference("intranetstylesheet"),
+ IntranetNav => C4::Context->preference("IntranetNav"),
+ advancedMARCEditor => C4::Context->preference("advancedMARCEditor"),
+ );
+
+output_html_with_http_headers $input, $cookie, $template->output;
+
+
+
Index: addbooks.pl
===================================================================
RCS file: addbooks.pl
diff -N addbooks.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ addbooks.pl 10 Mar 2007 01:15:48 -0000 1.1.2.1
@@ -0,0 +1,59 @@
+#!/usr/bin/perl
+
+# $Id: addbooks.pl,v 1.1.2.1 2007/03/10 01:15:48 tgarip1957 Exp $
+
+# 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;
+use CGI;
+use C4::Auth;
+use C4::Biblio;
+use C4::Output;
+use C4::Interface::CGI::Output;
+use C4::Koha;
+
+my $query = new CGI;
+
+my $error = $query->param('error');
+my $success = $query->param('biblioitem');
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "cataloguing/addbooks.tmpl",
+ query => $query,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { editcatalogue => 1 },
+ debug => 1,
+ }
+);
+
+# get framework list
+my $frameworks = getframeworks;
+my @frameworkcodeloop;
+foreach my $thisframeworkcode (keys %$frameworks) {
+ my %row =(value => $thisframeworkcode,
+ frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'},
+ );
+ push @frameworkcodeloop, \%row;
+}
+
+my $marc_p = C4::Context->boolean_preference("marc");
+$template->param( NOTMARC => !$marc_p,
+ frameworkcodeloop => \@frameworkcodeloop );
+
+output_html_with_http_headers $query, $cookie, $template->output;
Index: additem.pl
===================================================================
RCS file: additem.pl
diff -N additem.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ additem.pl 10 Mar 2007 01:15:48 -0000 1.1.2.1
@@ -0,0 +1,442 @@
+#!/usr/bin/perl
+
+# $Id: additem.pl,v 1.1.2.1 2007/03/10 01:15:48 tgarip1957 Exp $
+
+# 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;
+use CGI;
+
+use C4::Auth;
+use C4::Output;
+use C4::Interface::CGI::Output;
+use C4::Biblio;
+use C4::Context;
+use C4::Koha; # XXX subfield_is_koha_internal_p
+use C4::Search;
+use C4::Circulation::Circ2;
+use C4::Log;
+
+my $logstatus=C4::Context->preference('Activate_log');
+
+sub find_value {
+ my ($tagfield,$insubfield,$record) = @_;
+ my $result;
+ my $indicator;
+my $item=$record->{datafield};
+my $controlfield=$record->{controlfield};
+my $leader=$record->{leader};
+ if ($tagfield eq '000'){
+## We are getting the leader
+$result=$leader->[0];
+return($indicator,$result);
+}
+ if ($tagfield <10){
+ foreach my $control (@$controlfield) {
+ if ($control->{tag} eq $tagfield){
+ $result.=$control->{content};
+ }
+ }
+ }else{
+ foreach my $field (@$item) {
+ if ($field->{tag} eq $tagfield){
+ foreach my $subfield ( $field->{'subfield'}){
+ foreach my $code ( @$subfield){
+ if ($code->{code} eq $insubfield) {
+ $result .= $code->{content};
+ $indicator = $field->{ind1}.$field->{ind2};
+ }
+ }## each code
+ }##each subfield
+ }## if tag
+ }### $field
+ }## tag<10
+ return($indicator,$result);
+}
+my $input = new CGI;
+my $dbh = C4::Context->dbh;
+my $error = $input->param('error');
+my $biblionumber = $input->param('biblionumber');
+my $oldbiblionumber =$biblionumber;
+my $frameworkcode=$input->param('frameworkcode');
+my $op = $input->param('op');
+my $itemnumber = $input->param('itemnumber');
+my $fromserials=$input->param('fromserials');## if a serial is being added do not display navigation menus
+my $serialid=$input->param('serialid');
+my @itemrecords; ##Builds existing items
+my $bibliorecord; #Bibliorecord relared to this item
+my $newrecord; ## the new record buing built
+my $itemrecexist; #item record we are editing
+my $xml; ## data on html
+ $frameworkcode=MARCfind_frameworkcode($dbh,$biblionumber) unless $frameworkcode;
+my $tagslib = &MARCitemsgettagslib($dbh,1,$frameworkcode);
+my $itemrecord;
+my $nextop="additem";
+my @errors; # store errors found while checking data BEFORE saving item.
+
+
+my ($template, $loggedinuser, $cookie)
+ = get_template_and_user({template_name => "cataloguing/additem.tmpl",
+ query => $input,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => {editcatalogue => 1},
+ debug => 1,
+ });
+
+#------------------------------------------------------------------------------------------------------------------------------
+if ($op eq "additem") {
+#------------------------------------------------------------------------------------------------------------------------------
+ # rebuild
+
+ my @tags = $input->param('tag');
+ my @subfields = $input->param('subfield');
+ my @values = $input->param('field_value');
+ # build indicator hash.
+ my @ind_tag = $input->param('ind_tag');
+ my @indicator = $input->param('indicator');
+ my %indicators;
+ for (my $i=0;$i<=$#ind_tag;$i++) {
+ $indicators{$ind_tag[$i]} = $indicator[$i];
+ }
+## check for malformed xml -- non UTF-8 like (MARC8) will break xml without warning
+### This usually happens with data coming from other Z3950 servers
+## Slows the saving process so comment out at your own risk
+eval{
+ $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+};
+ if ($@){
+push @errors,"non_utf8" ;
+$nextop = "additem";
+goto FINAL;
+ };
+ my $newrecord=XML_xml2hash_onerecord($xml);
+my $newbarcode=XML_readline_onerecord($newrecord,"barcode","holdings");
+
+ # if autoBarcode is ON, calculate barcode...
+ if (C4::Context->preference('autoBarcode')) {
+ unless ($newbarcode) {
+ my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items");
+ $sth_barcode->execute;
+ ($newbarcode) = $sth_barcode->fetchrow;
+ $newbarcode++;
+ # OK, we have the new barcode, now create the entry in MARC record
+ $newrecord=XML_writeline( $newrecord, "barcode", $newbarcode,"holdings" );
+ }
+ }
+# check for item barcode # being unique
+ my ($oldrecord)=XMLgetitem($dbh,"",$newbarcode);
+
+ push @errors,"barcode_not_unique" if($oldrecord);
+# MARC::Record builded => now, record in DB
+## User may be keeping serialids in marc records -- check and add it
+if ($fromserials){
+$newrecord=XML_writeline( $newrecord, "serialid", $serialid,"holdings" );
+}
+ # if barcode exists, don't create, but report the problem.
+ unless ($oldrecord){
+ $itemnumber=NEWnewitem($dbh,$newrecord,$biblionumber) ;
+ if ($fromserials){
+ my $holdingbranch=XML_readline_onerecord($newrecord,"holdingbranch","holdings");
+ $template->param(exit=>1,holdingbranch=>$holdingbranch);
+ }
+ $nextop = "additem";
+ }
+ else{
+ $nextop = "additem";
+ $itemrecexist = $newrecord;
+ }
+#------------------------------------------------------------------------------------------------------------------------------
+} elsif ($op eq "edititem") {
+#------------------------------------------------------------------------------------------------------------------------------
+# retrieve item if exist => then, it's a modif
+ ($itemrecexist) = XMLgetitemhash($dbh,$itemnumber);## item is already in our array-getit
+ $nextop="saveitem";
+
+#logaction($loggedinuser,"acqui.simple","modify",$oldbiblionumber,"item : ".$itemnumber) if ($logstatus);
+
+#------------------------------------------------------------------------------------------------------------------------------
+} elsif ($op eq "delitem") {
+#------------------------------------------------------------------------------------------------------------------------------
+# retrieve item if exist => then, it's a modif
+my $sth=$dbh->prepare("select * from issues i where i.returndate is null and i.itemnumber=?");
+ $sth->execute($itemnumber);
+my $onloan=$sth->fetchrow;
+push @errors,"book_on_loan" if ($onloan);
+ if ($onloan){
+ $nextop = "additem";
+}else{
+ &NEWdelitem($dbh,$itemnumber);
+ $nextop="additem";
+}
+#------------------------------------------------------------------------------------------------------------------------------
+} elsif ($op eq "saveitem") {
+#------------------------------------------------------------------------------------------------------------------------------
+ # rebuild
+#warn "save item";
+ my @tags = $input->param('tag');
+ my @subfields = $input->param('subfield');
+ my @values = $input->param('field_value');
+ # build indicator hash.
+ my @ind_tag = $input->param('ind_tag');
+ my @indicator = $input->param('indicator');
+ my $itemnumber = $input->param('itemnumber');
+ my %indicators;
+ for (my $i=0;$i<=$#ind_tag;$i++) {
+ $indicators{$ind_tag[$i]} = $indicator[$i];
+ }
+## check for malformed xml -- non UTF-8 like (MARC8) will break xml without warning
+### This usually happens with data coming from other Z3950 servers
+## Slows the saving process so comment out at your own risk
+eval{
+ $xml = MARChtml2xml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag);
+};
+ if ($@){
+push @errors,"non_utf8" ;
+$nextop = "edititem";
+goto FINAL;
+ };
+ my $newrecord=XML_xml2hash_onerecord($xml);
+ my $newbarcode=XML_readline_onerecord($newrecord,"barcode","holdings");
+ my ($oldrecord)=XMLgetitem($dbh,"",$newbarcode);
+ $oldrecord=XML_xml2hash_onerecord($oldrecord);
+ my $exist=XML_readline_onerecord($oldrecord,"itemnumber","holdings") if $oldrecord;
+ if ($exist && ($exist ne $itemnumber)){
+ push @errors,"barcode_not_unique" ; ## Although editing user may have changed the barcode
+ $nextop="edititem";
+ }else{
+ NEWmoditem($dbh,$newrecord,$biblionumber,$itemnumber);
+ $itemnumber="";
+ $nextop="additem";
+
+ }
+}
+
+#
+#------------------------------------------------------------------------------------------------------------------------------
+# build screen with existing items. and "new" one
+#------------------------------------------------------------------------------------------------------------------------------
+FINAL:
+my %indicators;
+$indicators{995}=' ';
+# now, build existing item list
+###DO NOT CHANGE TO RETRIVE FROM ZEBRA#####
+my $record =XMLgetbiblio($dbh,$biblionumber);
+$bibliorecord=XML_xml2hash_onerecord($record);
+my @itemxmls=XMLgetallitems($dbh,$biblionumber);
+ foreach my $itemrecord(@itemxmls){
+ my $itemhash=XML_xml2hash($itemrecord);
+ push @itemrecords, $itemhash;
+ }
+####
+
+
+
+my ($itemtagfield,$itemtagsubfield) = &MARCfind_marc_from_kohafield("itemnumber","holdings");
+my @itemnums;
+my @fields;
+my %witness; #---- stores the list of subfields used at least once, with the "meaning" of the code
+my @big_array;
+my @item_value_loop;
+my @header_value_loop;
+unless($fromserials){ ## do not display existing items if adding a serial. It could be a looong list
+foreach my $itemrecord (@itemrecords){
+
+my $item=$itemrecord->{datafield};
+my $controlfield=$itemrecord->{controlfield};
+my $leader=$itemrecord->{leader};
+my %this_row;
+ ### The leader
+ unless ($tagslib->{'000'}->{'@'}->{tab} ne 10 || substr($tagslib->{'000'}->{'@'}->{hidden},1,1)>0){
+ my @datasub='000@';
+ $witness{$datasub[0]} = $tagslib->{'000'}->{'@'}->{lib};
+ $this_row{$datasub[0]} =$leader->[0];
+ }## leader
+ foreach my $control (@$controlfield){
+ push @itemnums,$control->{content} if ($control->{tag} eq $itemtagfield);
+ next if ($tagslib->{$control->{tag}}->{'@'}->{tab} ne 10);
+ next if (substr($tagslib->{$control->{tag}}->{'@'}->{hidden},1,1)>0);
+
+ my @datasub=$control->{tag}.'@';
+ $witness{$datasub[0]} = $tagslib->{$control->{tag}}->{'@'}->{lib};
+ $this_row{$datasub[0]} =$control->{content};
+ }## Controlfields
+ foreach my $data (@$item){
+ foreach my $subfield ( $data->{'subfield'}){
+ foreach my $code ( @$subfield){
+ # loop through each subfield
+ push @itemnums,$code->{content} if ($data->{tag} eq $itemtagfield && $code->{code} eq $itemtagsubfield);
+ next if ($tagslib->{$data->{tag}}->{$code->{code}}->{tab} ne 10);
+ next if (substr($tagslib->{$data->{tag}}->{$code->{code}}->{hidden},1,1)>0);
+ $witness{$data->{tag}.$code->{code}} = $tagslib->{$data->{tag}}->{$code->{code}}->{lib};
+ $this_row{$data->{tag}.$code->{code}} =$code->{content};
+ }
+
+ }# subfield
+
+ }## each data
+ if (%this_row) {
+ push(@big_array, \%this_row);
+ }
+}## each record
+#fill big_row with missing datas
+foreach my $subfield_code (keys(%witness)) {
+ for (my $i=0;$i<=$#big_array;$i++) {
+ $big_array[$i]{$subfield_code}=" " unless ($big_array[$i]{$subfield_code});
+ }
+}
+# now, construct template !
+
+for (my $i=0;$i<=$#big_array; $i++) {
+ my $items_data;
+ foreach my $subfield_code (sort keys(%witness)) {
+ $items_data .="<td>".$big_array[$i]{$subfield_code}."</td>";
+ }
+ my %row_data;
+ $row_data{item_value} = $items_data;
+ $row_data{itemnumber} = $itemnums[$i];
+ push(@item_value_loop,\%row_data);
+}
+foreach my $subfield_code (sort keys(%witness)) {
+ my %header_value;
+ $header_value{header_value} = $witness{$subfield_code};
+ push(@header_value_loop, \%header_value);
+}
+}## unless from serials
+# next item form
+my @loop_data =();
+my $i=0;
+my $authorised_values_sth = $dbh->prepare("select authorised_value,lib from authorised_values where category=? order by lib");
+
+foreach my $tag (sort keys %{$tagslib}) {
+ if ($itemtagfield <10){
+next if($tag==$itemtagfield);
+}
+ my $previous_tag = '';
+# loop through each subfield
+ foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
+ next if subfield_is_koha_internal_p($subfield);
+ next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
+ next if ($tagslib->{$tag} eq $itemtagfield && $tagslib->{$tag}->{$subfield} eq $itemtagsubfield);
+ my %subfield_data;
+ $subfield_data{tag}=$tag;
+ $subfield_data{subfield}=$subfield;
+ $subfield_data{marc_lib}="<span id=\"error$i\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
+ $subfield_data{mandatory}=$tagslib->{$tag}->{$subfield}->{mandatory};
+ $subfield_data{repeatable}=$tagslib->{$tag}->{$subfield}->{repeatable};
+ $subfield_data{hidden}= "display:none" if (substr($tagslib->{$tag}->{$subfield}->{hidden},2,1)>0);
+
+ my ($x,$value);
+ ($x,$value) = find_value($tag,$subfield,$itemrecexist) if ($itemrecexist);
+ # search for itemcallnumber if applicable
+ my ($itemcntag,$itemcntagsub)=MARCfind_marc_from_kohafield("itemcallnumber","holdings");
+ if ($tag eq $itemcntag && $subfield eq $itemcntagsub && C4::Context->preference('itemcallnumber')) {
+ my $CNtag = substr(C4::Context->preference('itemcallnumber'),0,3);
+ my $CNsubfield = substr(C4::Context->preference('itemcallnumber'),3,1);
+ my $CNsubfield2 = substr(C4::Context->preference('itemcallnumber'),4,1);
+ my $temp1 = XML_readline_onerecord($bibliorecord,"","",$CNtag,$CNsubfield);
+ my $temp2 = XML_readline_onerecord($bibliorecord,"","",$CNtag,$CNsubfield2);
+ $value = $temp1.' '.$temp2;
+ $value=~s/^\s+|\s+$//g;
+
+ }
+ if ($tagslib->{$tag}->{$subfield}->{authorised_value}) {
+ my @authorised_values;
+ my %authorised_lib;
+ # builds list, depending on authorised value...
+ #---- branch
+ if ($tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
+ my $sth=$dbh->prepare("select branchcode,branchname from branches order by branchname");
+ $sth->execute;
+ push @authorised_values, "" unless ($tagslib->{$tag}->{$subfield}->{mandatory});
+ while (my ($branchcode,$branchname) = $sth->fetchrow_array) {
+ push @authorised_values, $branchcode;
+ $authorised_lib{$branchcode}=$branchname;
+ }
+ #----- itemtypes
+ } elsif ($tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes") {
+ my $sth=$dbh->prepare("select itemtype,description from itemtypes order by description");
+ $sth->execute;
+ push @authorised_values, "" unless ($tagslib->{$tag}->{$subfield}->{mandatory});
+ while (my ($itemtype,$description) = $sth->fetchrow_array) {
+ push @authorised_values, $itemtype;
+ $authorised_lib{$itemtype}=$description;
+ }
+ #---- "true" authorised value
+ } else {
+ $authorised_values_sth->execute($tagslib->{$tag}->{$subfield}->{authorised_value});
+ push @authorised_values, "" unless ($tagslib->{$tag}->{$subfield}->{mandatory});
+ while (my ($value,$lib) = $authorised_values_sth->fetchrow_array) {
+ push @authorised_values, $value;
+ $authorised_lib{$value}=$lib;
+ }
+ }
+ $subfield_data{marc_value}= CGI::scrolling_list(-name=>'field_value',
+ -values=> \@authorised_values,
+ -default=>"$value", -labels => \%authorised_lib, -size=>1,
+ -multiple=>0, );
+ } elsif ($tagslib->{$tag}->{$subfield}->{thesaurus_category}) {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" size=47 maxlength=255 DISABLE READONLY> <a href=\"javascript:Dopop('../authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$i',$i)\">...</a>";
+ #"
+ } elsif ($tagslib->{$tag}->{$subfield}->{'value_builder'}) {
+ my $cgidir = C4::Context->intranetdir ."/cgi-bin/value_builder";
+ unless (opendir(DIR, "$cgidir")) {
+ $cgidir = C4::Context->intranetdir."/value_builder";
+ }
+ my $plugin=$cgidir."/".$tagslib->{$tag}->{$subfield}->{'value_builder'};
+ do $plugin;
+ my $extended_param = plugin_parameters($dbh,$newrecord,$tagslib,$i,0);
+ my ($function_name,$javascript) = plugin_javascript($dbh,$newrecord,$tagslib,$i,0);
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=\"47\" maxlength=\"255\" DISABLE READONLY OnFocus=\"javascript:Focus$function_name($i)\" OnBlur=\"javascript:Blur$function_name($i)\"> <a href=\"javascript:Clic$function_name($i)\">...</a> $javascript";
+ } else {
+ $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\" value=\"$value\" size=50 maxlength=255>";
+ }
+# $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">";
+ push(@loop_data, \%subfield_data);
+ $i++
+ }
+}
+
+
+# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
+$template->param(item_loop => \@item_value_loop,
+ item_header_loop => \@header_value_loop,
+ biblionumber =>$biblionumber,
+ title => &XML_readline_onerecord($bibliorecord,"title","biblios"),
+ author => &XML_readline_onerecord($bibliorecord,"author","biblios"),
+ item => \@loop_data,
+ itemnumber => $itemnumber,
+ itemtagfield => $itemtagfield,
+ itemtagsubfield =>$itemtagsubfield,
+ op => $nextop,
+ opisadd => ($nextop eq "saveitem")?0:1,
+ fromserials=>$fromserials, serialid=>$serialid,);
+foreach my $error (@errors) {
+ $template->param($error => 1);
+
+}
+output_html_with_http_headers $input, $cookie, $template->output;
+
+sub XMLfinditem {
+my ($itemnumber, at itemrecords)=@_;
+foreach my $record (@itemrecords){
+my $inumber=XML_readline_onerecord($record,"itemnumber","holdings");
+ if ($inumber ==$itemnumber){
+ return $record;
+ }
+}
+}
Index: isbnsearch.pl
===================================================================
RCS file: isbnsearch.pl
diff -N isbnsearch.pl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ isbnsearch.pl 10 Mar 2007 01:15:48 -0000 1.1.2.1
@@ -0,0 +1,190 @@
+#!/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;
+use CGI;
+
+use C4::Auth;
+use C4::Biblio;
+use C4::Search;
+use C4::Output;
+use C4::Interface::CGI::Output;
+use C4::Breeding;
+use C4::Koha;
+
+my $input = new CGI;
+my $isbn = $input->param('isbn');
+my $title = $input->param('title');
+my $offset = $input->param('offset');
+my $num = $input->param('num');
+my $showoffset = $offset + 1;
+my $total;
+my $count;
+my @results;
+my $facets;
+my %search;
+my $toggle;
+my $marc_p = C4::Context->boolean_preference("marc");
+my $SQLorZEBRA=C4::Context->preference("SQLorZEBRA");
+if ( !$isbn && !$title ) {
+ print $input->redirect('addbooks.pl');
+}
+else {
+ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+ {
+ template_name => "cataloguing/isbnsearch.tmpl",
+ query => $input,
+ type => "intranet",
+ authnotrequired => 0,
+ flagsrequired => { editcatalogue => 1 },
+ debug => 1,
+ }
+ );
+
+ # fill with books in ACTIVE DB (biblio)
+ if ( !$offset ) {
+ $offset = 0;
+ $showoffset = 1;
+ }
+ if ( !$num ) { $num = 10 }
+my @kohafield;
+my @value;
+my @relation;
+my @and_or;
+my $order="title,1";
+if ($isbn){
+$search{'isbn'}=$isbn;
+push @kohafield, "isbn";
+push @value,$isbn;
+}else{
+$search{'title'}=$title;
+push @kohafield, "title";
+push @value,$title;
+push @relation, "\@attr 5=1 \@attr 6=3 \@attr 4=1 \@attr 3=1 ";
+ }
+$search{avoidquerylog}=1;
+if ($SQLorZEBRA eq "sql"){
+($count, @results) =cataloguing_search(\%search,$num,$offset);
+}else{
+($count,$facets, at results) =ZEBRAsearch_kohafields(\@kohafield,\@value, \@relation,$order, \@and_or, 1,"",$offset, $num,"intranet");
+
+}
+my $grandtotal=$count;
+ if ( $count < ( $offset + $num ) ) {
+ $total = $count;
+ }
+ else {
+ $total = $offset + $num;
+ } # else
+
+ my @loop_data;
+
+ @loop_data=@results if $count >0;;
+ $template->param( startfrom => $offset + 1 );
+ ( $offset + $num <= $count )
+ ? ( $template->param( endat => $offset + $num ) )
+ : ( $template->param( endat => $count ) );
+ $template->param( numrecords => $count );
+ my $nextstartfrom = ( $offset + $num < $count ) ? ( $offset + $num ) : (-1);
+ my $prevstartfrom = ( $offset - $num >= 0 ) ? ( $offset - $num ) : (-1);
+ $template->param( nextstartfrom => $nextstartfrom );
+ my $displaynext = 1;
+ my $displayprev = 0;
+ ( $nextstartfrom == -1 ) ? ( $displaynext = 0 ) : ( $displaynext = 1 );
+ ( $prevstartfrom == -1 ) ? ( $displayprev = 0 ) : ( $displayprev = 1 );
+ $template->param( displaynext => $displaynext );
+ $template->param( displayprev => $displayprev );
+ my @numbers = ();
+ my $term;
+ my $value;
+
+ if ($isbn) {
+ $term = "isbn";
+ $value = $isbn;
+ }
+ else {
+ $term = "title";
+ $value = $title;
+ }
+ if ( $count > 10 ) {
+ for ( my $i = 1 ; $i < $count / 10 + 1 ; $i++ ) {
+ if ( $i < 16 ) {
+ my $highlight = 0;
+ ( $offset == ( $i - 1 ) * 10 ) && ( $highlight = 1 );
+ push @numbers,
+ {
+ number => $i,
+ highlight => $highlight,
+ term => $term,
+ value => $value,
+ startfrom => ( $i - 1 ) * 10
+ };
+ }
+ }
+ }
+
+ # fill with books in breeding farm
+ ( $count, @results ) = BreedingSearch( $title, $isbn );
+ my @breeding_loop = ();
+ for ( my $i = 0 ; $i <= $#results ; $i++ ) {
+ my %row_data;
+ if ( $i % 2 ) {
+ $toggle = "#ffffcc";
+ }
+ else {
+ $toggle = "white";
+ }
+ $row_data{toggle} = $toggle;
+ $row_data{id} = $results[$i]->{'id'};
+ $row_data{isbn} = $results[$i]->{'isbn'};
+ $row_data{file} = $results[$i]->{'file'};
+ $row_data{title} = $results[$i]->{'title'};
+ $row_data{author} = $results[$i]->{'author'};
+ $row_data{classification} = $results[$i]->{'classification'};
+ $row_data{subclass} = $results[$i]->{'subclass'};
+ push ( @breeding_loop, \%row_data );
+ }
+# get framework list
+ my $frameworks = getframeworks;
+ my @frameworkcodeloop;
+ foreach my $thisframeworkcode (keys %$frameworks) {
+ my %row =(value => $thisframeworkcode,
+ frameworktext => $frameworks->{$thisframeworkcode}->{'frameworktext'},
+ );
+ push @frameworkcodeloop, \%row;
+ }
+
+
+ $template->param(
+ isbn => $isbn,
+ title => $title,
+ showoffset => $showoffset,
+ total => $total,
+ grandtotal => $grandtotal,
+ offset => $offset,
+ results_loop => \@loop_data,
+ breeding_loop => \@breeding_loop,
+ numbers => \@numbers,
+ term => $term,
+ value => $value,
+ frameworkcodeloop => \@frameworkcodeloop
+ );
+
+ output_html_with_http_headers $input, $cookie, $template->output;
+} # else
More information about the Koha-cvs
mailing list