3 # Copyright 2007 LibLime
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25 use C4
::Auth qw
/check_api_auth/;
31 binmode STDOUT
, ':encoding(UTF-8)';
33 my ($status, $cookie, $sessionID) = check_api_auth
($query, { editcatalogue
=> 'edit_catalogue'} );
34 unless ($status eq "ok") {
35 print $query->header(-type
=> 'text/xml', -status
=> '403 Forbidden');
36 print XMLout
({ auth_status
=> $status }, NoAttr
=> 1, RootName
=> 'response', XMLDecl
=> 1);
40 if ($query->request_method eq "POST") {
43 print $query->header(-type
=> 'text/xml', -status
=> '400 Bad Request');
52 my $inxml = $query->param('POSTDATA');
53 print $query->header(-type
=> 'text/xml');
55 my $marcflavour = C4
::Context
->preference('marcflavour') || 'MARC21';
56 my $record = eval {MARC
::Record
::new_from_xml
( $inxml, "utf8", $marcflavour)};
57 my $do_not_escape = 0;
59 $result->{'status'} = "failed";
60 $result->{'error'} = $@
;
63 if ($record->encoding() eq 'MARC-8') {
64 my ($guessed_charset, $charset_errors);
65 ($record, $guessed_charset, $charset_errors) = MarcToUTF8Record
($record, $marcflavour);
68 # delete any item tags
69 my ( $itemtag, $itemsubfield ) = GetMarcFromKohaField
("items.itemnumber", '');
70 foreach my $field ($record->field($itemtag)) {
71 $record->delete_field($field);
73 my ($biblionumber, $biblioitemnumber) = AddBiblio
($record, '');
74 my $new_record = GetMarcBiblio
($biblionumber);
75 $result->{'status'} = "ok";
76 $result->{'biblionumber'} = $biblionumber;
77 my $xml = $new_record->as_xml_record();
78 $xml =~ s/<\?xml.*?\?>//i;
79 $result->{'marcxml'} = $xml;
83 print XMLout
($result, NoAttr
=> 1, RootName
=> 'response', XMLDecl
=> 1, NoEscape
=> $do_not_escape);