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

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

Return to bug 20551