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

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

Return to bug 20551