X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=svc%2Fbib;h=1cb176e7776fc7cc564ea943f9485eae4a39cec2;hb=refs%2Fheads%2Fkoha_ffzg;hp=48085592e87dbf3c7e6a0fde8639685d422b259e;hpb=28646dd55007003300b8c76262c25ab96e04871e;p=koha.git diff --git a/svc/bib b/svc/bib index 48085592e8..1cb176e777 100755 --- a/svc/bib +++ b/svc/bib @@ -1,29 +1,30 @@ #!/usr/bin/perl # Copyright 2007 LibLime +# Copyright 2012 software.coop and MJ Ray # # 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 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 3 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. +# 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., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . # -use strict; -use warnings; +use Modern::Perl; -use CGI; +use CGI qw ( -utf8 ); use C4::Auth qw/check_api_auth/; use C4::Biblio; +use C4::Items; use XML::Simple; my $query = new CGI; @@ -46,11 +47,17 @@ if ($path_info =~ m!^/(\d+)$!) { print $query->header(-type => 'text/xml', -status => '400 Bad Request'); } -# are we retrieving or updating a bib? +# are we retrieving, updating or deleting a bib? if ($query->request_method eq "GET") { fetch_bib($query, $biblionumber); -} else { +} elsif ($query->request_method eq "POST") { update_bib($query, $biblionumber); +} elsif ($query->request_method eq "DELETE") { + delete_bib($query, $biblionumber); +} else { + print $query->header(-type => 'text/xml', -status => '405 Method not allowed'); + print XMLout({ error => 'Method not allowed' }, NoAttr => 1, RootName => 'response', XMLDecl => 1); + exit 0; } exit 0; @@ -58,9 +65,11 @@ exit 0; sub fetch_bib { my $query = shift; my $biblionumber = shift; - my $record = GetMarcBiblio($biblionumber); + my $record = GetMarcBiblio({ + biblionumber => $biblionumber, + embed_items => scalar $query->param('items') }); if (defined $record) { - print $query->header(-type => 'text/xml'); + print $query->header(-type => 'text/xml',-charset => 'utf-8',); print $record->as_xml_record(); } else { print $query->header(-type => 'text/xml', -status => '404 Not Found'); @@ -70,7 +79,8 @@ sub fetch_bib { sub update_bib { my $query = shift; my $biblionumber = shift; - my $old_record = GetMarcBiblio($biblionumber); + my $old_record = GetMarcBiblio({ biblionumber => $biblionumber }); + my $frameworkcode = $query->url_param('frameworkcode') // GetFrameworkCode($biblionumber); unless (defined $old_record) { print $query->header(-type => 'text/xml', -status => '404 Not Found'); return; @@ -78,7 +88,7 @@ sub update_bib { my $result = {}; my $inxml = $query->param('POSTDATA'); - print $query->header(-type => 'text/xml'); + print $query->header(-type => 'text/xml', -charset => 'utf-8'); my $record = eval {MARC::Record::new_from_xml( $inxml, "utf8", C4::Context->preference('marcflavour'))}; my $do_not_escape = 0; @@ -86,13 +96,29 @@ sub update_bib { $result->{'status'} = "failed"; $result->{'error'} = $@; } else { + my $fullrecord = $record->clone(); + my ( $itemtag, $itemsubfield ) = + GetMarcFromKohaField( "items.itemnumber", '' ); + # delete any item tags - my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField("items.itemnumber", ''); - foreach my $field ($record->field($itemtag)) { + foreach my $field ( $record->field($itemtag) ) { $record->delete_field($field); } - ModBiblio($record, $biblionumber, ''); - my $new_record = GetMarcBiblio($biblionumber); + + if ( $query->url_param('items') ) { + foreach my $field ( $fullrecord->field($itemtag) ) { + my $one_item_record = $record->clone(); + $one_item_record->add_fields($field); + ModItemFromMarc( $one_item_record, $biblionumber, + $field->subfield($itemsubfield) ); + } + } + + ModBiblio( $record, $biblionumber, $frameworkcode ); + my $new_record = GetMarcBiblio({ + biblionumber => $biblionumber, + embed_items => scalar $query->url_param('items') }); + $result->{'status'} = "ok"; $result->{'biblionumber'} = $biblionumber; my $xml = $new_record->as_xml_record(); @@ -103,3 +129,18 @@ sub update_bib { print XMLout($result, NoAttr => 1, RootName => 'response', XMLDecl => 1, NoEscape => $do_not_escape); } + +sub delete_bib { + my $query = shift; + my $biblionumber = shift; + my $error = DelBiblio($biblionumber); + + if (defined $error) { + print $query->header(-type => 'text/xml', -status => '400 Bad request'); + print XMLout({ error => $error }, NoAttr => 1, RootName => 'response', XMLDecl => 1); + exit 0; + } + + print $query->header(-type => 'text/xml'); + print XMLout({ status => 'OK, biblio deleted' }, NoAttr => 1, RootName => 'response', XMLDecl => 1); +}