View | Details | Raw Unified | Return to bug 20551
Collapse All | Expand All

(-)a/Koha/Exporter/Record.pm (-31 / +26 lines)
Lines 232-269 sub export { Link Here
232
    }
232
    }
233
233
234
    if ( $format eq 'xml' || $format eq 'iso2709' ) {
234
    if ( $format eq 'xml' || $format eq 'iso2709' ) {
235
        my @records;
235
        my @record_ids = reverse @{$record_ids};
236
        @records = map {
236
        my @deleted_record_ids = reverse @{$deleted_record_ids};
237
            my $record = _get_record_for_export( { %{$params}, record_id => $_ } );
237
        my $deleted_resultset = Koha::Database->new()->schema()->resultset('DeletedbiblioMetadata');
238
            $record ? $record : ();
238
239
        } @{$record_ids};
239
        my $records_iterator = sub {
240
240
            if (my $record_id = pop(@record_ids)) {
241
        my @deleted_records;
241
                return _get_record_for_export( { %{$params}, record_id => $record_id } );
242
        if ( @{$deleted_record_ids} ) {
242
            }
243
            my $resultset = Koha::Database->new()->schema()->resultset('DeletedbiblioMetadata');
243
            elsif (my $deleted_record_id = pop(@deleted_record_ids)) {
244
244
                return _get_record_for_export(
245
            @deleted_records = map {
246
                my $record = _get_record_for_export(
247
                    {
245
                    {
248
                        %{$params},
246
                        %{$params},
249
                        record_type => 'deleted_bibs',
247
                        record_type => 'deleted_bibs',
250
                        record_id   => $_,
248
                        record_id   => $deleted_record_id,
251
                        resultset   => $resultset
249
                        resultset   => $deleted_resultset
252
                    }
250
                    }
253
                );
251
                );
254
                $record ? $record : ();
252
            }
255
            } @{$deleted_record_ids};
253
            return;
256
        }
254
        };
257
        if ( $format eq 'iso2709' ) {
255
256
        if ($format eq 'iso2709') {
258
            my $encoding_validator = sub {
257
            my $encoding_validator = sub {
259
                my ( $record, $record_type ) = @_;
258
                my ( $record ) = @_;
260
                my @decoding_warnings =
259
                my @decoding_warnings =
261
                    eval { MARC::File::USMARC->decode( $record->as_usmarc )->warnings() };
260
                    eval { MARC::File::USMARC->decode( $record->as_usmarc )->warnings() };
262
                my $error = $@;
261
                my $error = $@;
263
                if ( $error || @decoding_warnings ) {
262
                if ( $error || @decoding_warnings ) {
263
                    my $record_status = substr $record->leader(), 5, 1;
264
                    my $msg = $record_status eq 'd' ? "Deleted record" : "Record";
264
                    my ( $id_tag, $id_code ) = GetMarcFromKohaField( 'biblio.biblionumber', '' );
265
                    my ( $id_tag, $id_code ) = GetMarcFromKohaField( 'biblio.biblionumber', '' );
265
                    my $field = $record->field($id_tag);
266
                    my $field = $record->field($id_tag);
266
                    my $msg = "$record_type";
267
                    if ($field) {
267
                    if ($field) {
268
                        $msg .= " " . $field->is_control_field ? $field->data : $field->subfield($id_code);
268
                        $msg .= " " . $field->is_control_field ? $field->data : $field->subfield($id_code);
269
                    }
269
                    }
Lines 275-309 sub export { Link Here
275
                }
275
                }
276
                return 1;
276
                return 1;
277
            };
277
            };
278
            for my $record ( grep { $encoding_validator->( $_, 'Record' ) } @records ) {
278
            while (defined ( my $record = $records_iterator->() )) {
279
                print $record->as_usmarc();
279
                if ($encoding_validator->($record)) {
280
            }
280
                    print $record->as_usmarc();
281
            if (@deleted_records) {
282
                for my $deleted_record ( grep { $encoding_validator->( $_, 'Deleted record' ) } @deleted_records ) {
283
                    print $deleted_record->as_usmarc();
284
                }
281
                }
285
            }
282
            }
286
        } elsif ( $format eq 'xml' ) {
283
        } elsif ($format eq 'xml') {
287
            my $marcflavour = C4::Context->preference("marcflavour");
284
            my $marcflavour = C4::Context->preference("marcflavour");
288
            MARC::File::XML->default_record_format(
285
            MARC::File::XML->default_record_format(
289
                ( $marcflavour eq 'UNIMARC' && $record_type eq 'auths' ) ? 'UNIMARCAUTH' : $marcflavour );
286
                ( $marcflavour eq 'UNIMARC' && $record_type eq 'auths' ) ? 'UNIMARCAUTH' : $marcflavour );
290
            print MARC::File::XML::header();
287
            print MARC::File::XML::header();
291
            print "\n";
288
            print "\n";
292
            for my $record ( @records, @deleted_records ) {
289
            while (defined ( my $record = $records_iterator->() )) {
293
                print MARC::File::XML::record($record);
290
                print MARC::File::XML::record($record);
294
                print "\n";
291
                print "\n";
295
            }
292
            }
296
            print MARC::File::XML::footer();
293
            print MARC::File::XML::footer();
297
            print "\n";
294
            print "\n";
298
        }
295
        }
299
    } elsif ( $format eq 'csv' ) {
296
    } elsif ($format eq 'csv') {
300
        die 'There is no valid csv profile defined for this export'
297
        die 'There is no valid csv profile defined for this export'
301
            unless Koha::CsvProfiles->find($csv_profile_id);
298
            unless Koha::CsvProfiles->find($csv_profile_id);
302
        print marc2csv( $record_ids, $csv_profile_id, $itemnumbers );
299
        print marc2csv( $record_ids, $csv_profile_id, $itemnumbers );
303
    }
300
    }
304
    close $fh if $output_filepath;
301
    close $fh if $output_filepath;
305
}
302
}
306
307
1;
303
1;
308
304
309
__END__
305
__END__
310
- 

Return to bug 20551