koha-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Koha-cvs] koha/intranet/cgi-bin/cataloguing addbiblio.pl ... [rel_TG]


From: Tumer Garip
Subject: [Koha-cvs] koha/intranet/cgi-bin/cataloguing addbiblio.pl ... [rel_TG]
Date: Sat, 10 Mar 2007 01:15:48 +0000

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   => address@hidden,
+                       -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(address@hidden,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden);
       
+};
+ 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(address@hidden,address@hidden,address@hidden,address@hidden,address@hidden,address@hidden);
+       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 => address@hidden );
+
+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(address@hidden,address@hidden,address@hidden,address@hidden,address@hidden);
      
+};
+ 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(address@hidden,address@hidden,address@hidden,address@hidden,address@hidden);
      
+};
+        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}="&nbsp;" 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=> 
address@hidden,
+                                                                               
                                                                
-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 => address@hidden,
+                                               item_header_loop => 
address@hidden,
+                                               biblionumber =>$biblionumber,
+                                               title => 
&XML_readline_onerecord($bibliorecord,"title","biblios"),
+                                               author => 
&XML_readline_onerecord($bibliorecord,"author","biblios"),
+                                               item => address@hidden,
+                                               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,@itemrecords)address@hidden;
+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, "address@hidden 5=1 address@hidden 6=3 address@hidden 4=1 
address@hidden 3=1 ";
+  }
+$search{avoidquerylog}=1;
+if ($SQLorZEBRA eq "sql"){
+($count, @results) =cataloguing_search(\%search,$num,$offset);
+}else{
+($count,$facets,@results) 
=ZEBRAsearch_kohafields(address@hidden,address@hidden, address@hidden,$order, 
address@hidden, 1,"",$offset, $num,"intranet");
+
+}
+my $grandtotal=$count;
+    if ( $count < ( $offset + $num ) ) {
+        $total = $count;
+    }
+    else {
+        $total = $offset + $num;
+    }    # else
+
+    my @loop_data;
+ 
+ @address@hidden 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          => address@hidden,
+        breeding_loop => address@hidden,
+        numbers       => address@hidden,
+        term          => $term,
+        value         => $value,
+       frameworkcodeloop => address@hidden
+    );
+
+  output_html_with_http_headers $input, $cookie, $template->output;
+}    # else




reply via email to

[Prev in Thread] Current Thread [Next in Thread]