[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