[Koha-patches] [PATCH] (bug #4321) clean C4::Biblio::GetBiblio and uses

Nahuel ANGELINETTI nahuel.angelinetti at biblibre.com
Thu Mar 18 14:28:15 CET 2010


This change the getbiblio function to be correctly coded, and change all places where it was used.
---
 C4/Biblio.pm                        |   16 ++--
 C4/ILSDI/Services.pm                |    6 +-
 C4/ImportBatch.pm                   |    4 +-
 C4/Serials.pm                       |    2 +-
 catalogue/issuehistory.pl           |    4 +-
 tools/batchedit.pl                  |  197 +++++++++++++++++++++++++++++++++++
 virtualshelves/addbybiblionumber.pl |   12 +-
 7 files changed, 219 insertions(+), 22 deletions(-)
 create mode 100755 tools/batchedit.pl

diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index ded50fc..49ba477 100755
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -894,15 +894,15 @@ sub GetBiblio {
     my ($biblionumber) = @_;
     my $dbh            = C4::Context->dbh;
     my $sth            = $dbh->prepare("SELECT * FROM biblio WHERE biblionumber = ?");
-    my $count          = 0;
-    my @results;
+
     $sth->execute($biblionumber);
-    while ( my $data = $sth->fetchrow_hashref ) {
-        $results[$count] = $data;
-        $count++;
-    }    # while
-    $sth->finish;
-    return ( $count, @results );
+    
+    if ( my $data = $sth->fetchrow_hashref ) {
+        return $data;
+    }else{
+        return undef;
+    }
+    
 }    # sub GetBiblio
 
 =head2 GetBiblioItemInfosOf
diff --git a/C4/ILSDI/Services.pm b/C4/ILSDI/Services.pm
index bb32166..fd96826 100644
--- a/C4/ILSDI/Services.pm
+++ b/C4/ILSDI/Services.pm
@@ -406,7 +406,7 @@ sub GetPatronInfo {
             # Add additional fields
             $reserve->{'item'}       = $item;
             $reserve->{'branchname'} = $branchname;
-            $reserve->{'title'}      = ( GetBiblio( $reserve->{'biblionumber'} ) )[1]->{'title'};
+            $reserve->{'title'}      = GetBiblio( $reserve->{'biblionumber'} )->{'title'};
         }
         $borrower->{'holds'}->{'hold'} = \@reserves;
     }
@@ -605,7 +605,7 @@ sub HoldTitle {
 
     # Get the biblio record, or return an error code
     my $biblionumber = $cgi->param('bib_id');
-    my ( $count, $biblio ) = GetBiblio($biblionumber);
+    my $biblio = GetBiblio($biblionumber);
     if ( not $biblio->{'biblionumber'} ) {
         return { message => 'RecordNotFound' };
     }
@@ -678,7 +678,7 @@ sub HoldItem {
 
     # Get the biblio or return an error code
     my $biblionumber = $cgi->param('bib_id');
-    my ( $count, $biblio ) = GetBiblio($biblionumber);
+    my $biblio = GetBiblio($biblionumber);
     if ( not $biblio->{'biblionumber'} ) {
         return { message => 'RecordNotFound' };
     }
diff --git a/C4/ImportBatch.pm b/C4/ImportBatch.pm
index f8b5d54..e4dd3fe 100644
--- a/C4/ImportBatch.pm
+++ b/C4/ImportBatch.pm
@@ -503,7 +503,7 @@ sub BatchCommitBibRecords {
         } elsif ($bib_result eq 'replace') {
             $num_updated++;
             my $biblionumber = $bib_match;
-            my ($count, $oldbiblio) = GetBiblio($biblionumber);
+            my $oldbiblio = GetBiblio($biblionumber);
             my $oldxml = GetXmlBiblio($biblionumber);
 
             # remove item fields so that they don't get
@@ -649,7 +649,7 @@ sub BatchRevertBibRecords {
             $num_reverted++;
             my $old_record = MARC::Record->new_from_xml(StripNonXmlChars($rowref->{'marcxml_old'}), 'UTF-8', $rowref->{'encoding'});
             my $biblionumber = $rowref->{'matched_biblionumber'};
-            my ($count, $oldbiblio) = GetBiblio($biblionumber);
+            my $oldbiblio = GetBiblio($biblionumber);
             $num_items_deleted += BatchRevertItems($rowref->{'import_record_id'}, $rowref->{'matched_biblionumber'});
             ModBiblio($old_record, $biblionumber, $oldbiblio->{'frameworkcode'});
             SetImportRecordStatus($rowref->{'import_record_id'}, 'reverted');
diff --git a/C4/Serials.pm b/C4/Serials.pm
index 439bd01..55dd8e0 100644
--- a/C4/Serials.pm
+++ b/C4/Serials.pm
@@ -1393,7 +1393,7 @@ sub NewSubscription {
     logaction( "SERIAL", "ADD", $subscriptionid, "" ) if C4::Context->preference("SubscriptionLog");
 
     #set serial flag on biblio if not already set.
-    my ( $null, ($bib) ) = GetBiblio($biblionumber);
+    my $bib = GetBiblio($biblionumber);
     if ( !$bib->{'serial'} ) {
         my $record = GetMarcBiblio($biblionumber);
         my ( $tag, $subf ) = GetMarcFromKohaField( 'biblio.serial', $bib->{'frameworkcode'} );
diff --git a/catalogue/issuehistory.pl b/catalogue/issuehistory.pl
index 8790bb5..1e1856f 100755
--- a/catalogue/issuehistory.pl
+++ b/catalogue/issuehistory.pl
@@ -56,10 +56,10 @@ if ($itemnumber){
 	);
 } else {
 	$issues = GetBiblioIssues($biblionumber);
-	my (undef, at biblio)=GetBiblio($biblionumber);
+	my $biblio = GetBiblio($biblionumber);
 	my $total  = scalar @$issues;
 	$template->param(
-		%{$biblio[0]},
+		%{$biblio},
 	);
 } 
 foreach (@$issues){
diff --git a/tools/batchedit.pl b/tools/batchedit.pl
new file mode 100755
index 0000000..d74c9cb
--- /dev/null
+++ b/tools/batchedit.pl
@@ -0,0 +1,197 @@
+#!/usr/bin/perl
+
+
+# Copyright 2010 SARL BibLibre
+#
+# 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 CGI;
+use strict;
+use C4::Output;
+use C4::Auth;
+use C4::Branch;
+use C4::Koha;
+use C4::Biblio;
+use C4::Context;
+use C4::Debug;
+use JSON;
+
+my $input = new CGI;
+my $dbh = C4::Context->dbh;
+
+my @biblionumbers = split('/', $input->param('bib_list'));
+my $op            = $input->param('op');
+
+my $frameworkcode="";
+my $tagslib = &GetMarcStructure(1,$frameworkcode);
+
+
+if($input->param('field') and not defined $op){
+    my ($template, $loggedinuser, $cookie) 
+        = get_template_and_user({template_name => "acqui/ajax.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => "batchedit",
+        });
+    
+    
+    my $tag      = $input->param('field');
+    my $subfield = $input->param('subfield');
+    
+    if($input->param('subfield')){
+        my $branches = GetBranchesLoop();
+         
+        my @authorised_values;
+        if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
+             if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) {
+                foreach my $thisbranch (@$branches) {
+                    push @authorised_values, { 
+                            code => $thisbranch->{value},
+                            value => $thisbranch->{branchname},
+                        };
+                    # $value = $thisbranch->{value} if $thisbranch->{selected};
+                }
+             }elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
+                 my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description");
+                 $sth->execute();
+                 while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
+                    push @authorised_values, { 
+                        code => $itemtype,
+                        value => $description,
+                    };
+                 }
+
+            }else {
+                  # Getting the fields where the item location is
+                  my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode);
+        
+                  # Getting the name of the authorised values' category for item location
+                  my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'};
+        	      # Are we dealing with item location ?
+                  my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0;
+        
+                  # If so, we sort by authorised_value, else by libelle
+                  my $orderby = $item_location ? 'authorised_value' : 'lib';
+        
+                  my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby");
+        
+                  $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value});
+        
+        
+                  while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
+                    push @authorised_values, {
+                        code => $value,
+                        value => ($item_location) ? $value . " - " . $lib : $lib,
+                    };
+        	      	
+                  }
+            }
+        }
+      $template->param('return' => to_json(\@authorised_values));
+    }else{
+        my @modifiablesubf;
+        
+        foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
+            next if subfield_is_koha_internal_p($subfield);
+            next if ($tagslib->{$tag}->{$subfield}->{'tab'} eq "10");
+            my %subfield_data;    
+            $subfield_data{subfield} = $subfield;
+            push @modifiablesubf, \%subfield_data;
+        }
+        $template->param('return' => to_json(\@modifiablesubf));
+    }
+        
+
+    output_html_with_http_headers $input, $cookie, $template->output;
+    exit;
+}
+elsif(!defined $op) {
+    my ($template, $loggedinuser, $cookie)
+        = get_template_and_user({template_name => "tools/batchedit.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => "batchedit",
+                 });
+
+    my @modifiablefields;
+    my @biblioinfos;
+    
+    for my $biblionumber (@biblionumbers){
+        my $biblio = GetBiblio($biblionumber);
+        push @biblioinfos, $biblio;
+    }
+
+    foreach my $tag (sort keys %{$tagslib}) {
+        my %subfield_data;        
+        foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
+            next if $subfield_data{tag};
+            next if subfield_is_koha_internal_p($subfield);
+            next if ($tagslib->{$tag}->{$subfield}->{'tab'} eq "10");
+            
+            $subfield_data{tag}      = $tag;
+            
+            push @modifiablefields, \%subfield_data;
+        }
+    }
+    
+    $template->param( marcfields => \@modifiablefields,
+                      bib_list => $input->param('bib_list')
+                     );        
+    output_html_with_http_headers $input, $cookie, $template->output;
+    exit;
+    
+}else{
+    my ($template, $loggedinuser, $cookie)
+        = get_template_and_user({template_name => "tools/batchedit.tmpl",
+                 query => $input,
+                 type => "intranet",
+                 authnotrequired => 0,
+                 flagsrequired => "batchedit",
+                 });
+    my @fields    = $input->param('field');
+    my @subfields = $input->param('subfield');
+    my @actions   = $input->param('action');
+    my @condvals   = $input->param('condval');
+    my @repvals    = $input->param('repval');
+
+    foreach my $biblionumber ( @biblionumbers ){
+        my $record = GetMarcBiblio($biblionumber);
+        for(my $i = 0 ; $i < scalar(@fields) ; $i++ ){
+            my $field    = $fields[$i];
+            my $subfield = $subfields[$i];
+            my $action   = $actions[$i];
+            my $condval  = $condvals[$i];
+            my $repval   = $repvals[$i];
+
+            if($record->field($field)){
+                foreach my $rfield( $record->field($field) ){
+                    if($rfield->subfield($subfield)){
+                        BatchModField($rfield, $subfield, $action, $condval, $repval);
+                    }
+                }
+            }
+        }
+    }
+    
+    $template->param('modsuccess' => 1);
+    
+    output_html_with_http_headers $input, $cookie, $template->output;
+    exit;
+    
+}
+
diff --git a/virtualshelves/addbybiblionumber.pl b/virtualshelves/addbybiblionumber.pl
index 8b8a6ca..9aaaa03 100755
--- a/virtualshelves/addbybiblionumber.pl
+++ b/virtualshelves/addbybiblionumber.pl
@@ -198,21 +198,21 @@ else {    # this shelf doesn't already exist.
     );
 
     unless (@biblionumbers) {
-        my ( $bibliocount, @biblios ) = GetBiblio($biblionumber);
+        my $biblio = GetBiblio($biblionumber);
     
         $template->param
           (
            biblionumber      => $biblionumber,
-           title             => $biblios[0]->{'title'},
-           author            => $biblios[0]->{'author'},
+           title             => $biblio->{'title'},
+           author            => $biblio->{'author'},
           );
     } else {
         my @biblioloop = ();
         foreach my $biblionumber (@biblionumbers) {
-            my ( $bibliocount, @biblios ) = GetBiblio($biblionumber);
+            my $biblio = GetBiblio($biblionumber);
             my %biblioiter = (
-                              title=>$biblios[0]->{'title'},
-                              author=>$biblios[0]->{'author'}
+                              title =>$biblio->{'title'},
+                              author=>$biblio->{'author'}
                              );
             push @biblioloop, \%biblioiter;
         }
-- 
1.6.3.3




More information about the Koha-patches mailing list