Bug 16166: Improve L1 cache performance and safety
[koha.git] / tools / batch_records_ajax.pl
1 #!/usr/bin/perl
2
3 # Copyright 2013 ByWater Solutions
4 # Based on circ/ysearch.pl: Copyright 2007 Tamil s.a.r.l.
5 #
6 # This file is part of Koha.
7 #
8 # Koha is free software; you can redistribute it and/or modify it under the
9 # terms of the GNU General Public License as published by the Free Software
10 # Foundation; either version 3 of the License, or (at your option) any later
11 # version.
12 #
13 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
14 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
15 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License along
18 # with Koha; if not, write to the Free Software Foundation, Inc.,
19 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
21 =head1 NAME
22
23 batch_records_ajax.pl - A script for searching batch imported records via ajax
24
25 =head1 SYNOPSIS
26
27 This script is to be used as a data source for DataTables that load and display
28 the records from an import batch.
29
30 =cut
31
32 use Modern::Perl;
33
34 use CGI qw ( -utf8 );
35 use JSON qw/ to_json /;
36
37 use C4::Context;
38 use C4::Charset;
39 use C4::Auth qw/check_cookie_auth/;
40 use C4::ImportBatch;
41
42 my $input = new CGI;
43
44 my @sort_columns =
45   qw/import_record_id title status overlay_status overlay_status/;
46
47 my $import_batch_id   = $input->param('import_batch_id');
48 my $offset            = $input->param('iDisplayStart');
49 my $results_per_page  = $input->param('iDisplayLength');
50 my $sorting_column    = $sort_columns[ $input->param('iSortCol_0') ];
51 my $sorting_direction = $input->param('sSortDir_0');
52
53 $results_per_page = undef if ( $results_per_page == -1 );
54
55 binmode STDOUT, ":encoding(UTF-8)";
56 print $input->header( -type => 'text/plain', -charset => 'UTF-8' );
57
58 my ( $auth_status, $sessionID ) =
59   check_cookie_auth( $input->cookie('CGISESSID'), { tools => 'manage_staged_marc' } );
60 if ( $auth_status ne "ok" ) {
61     exit 0;
62 }
63
64 my $batch = GetImportBatch($import_batch_id);
65 my $records =
66   GetImportRecordsRange( $import_batch_id, $offset, $results_per_page, undef,
67     { order_by => $sorting_column, order_by_direction => $sorting_direction } );
68 my @list = ();
69 foreach my $record (@$records) {
70     my $citation = $record->{'title'} || $record->{'authorized_heading'};
71     $citation .= " $record->{'author'}" if $record->{'author'};
72     $citation .= " (" if $record->{'issn'} or $record->{'isbn'};
73     $citation .= $record->{'isbn'} if $record->{'isbn'};
74     $citation .= ", " if $record->{'issn'} and $record->{'isbn'};
75     $citation .= $record->{'issn'} if $record->{'issn'};
76     $citation .= ")" if $record->{'issn'} or $record->{'isbn'};
77
78     my $match = GetImportRecordMatches( $record->{'import_record_id'}, 1 );
79     my $match_citation = '';
80     my $match_id;
81     if ( $#$match > -1 ) {
82         if ( $match->[0]->{'record_type'} eq 'biblio' ) {
83             $match_citation .= $match->[0]->{'title'}
84               if defined( $match->[0]->{'title'} );
85             $match_citation .= ' ' . $match->[0]->{'author'}
86               if defined( $match->[0]->{'author'} );
87             $match_id = $match->[0]->{'biblionumber'};
88         }
89         elsif ( $match->[0]->{'record_type'} eq 'auth' ) {
90             if ( defined( $match->[0]->{'authorized_heading'} ) ) {
91                 $match_citation .= $match->[0]->{'authorized_heading'};
92                 $match_id = $match->[0]->{'candidate_match_id'};
93             }
94         }
95     }
96
97     push @list,
98       {
99         DT_RowId        => $record->{'import_record_id'},
100         import_record_id => $record->{'import_record_id'},
101         citation        => $citation,
102         status          => $record->{'status'},
103         overlay_status  => $record->{'overlay_status'},
104         match_citation  => $match_citation,
105         matched         => $record->{'matched_biblionumber'}
106           || $record->{'matched_authid'}
107           || q{},
108         score => $#$match > -1 ? $match->[0]->{'score'} : 0,
109         match_id => $match_id,
110         diff_url => $match_id ? "/cgi-bin/koha/tools/showdiffmarc.pl?batchid=$import_batch_id&importid=$record->{import_record_id}&id=$match_id" : undef
111       };
112 }
113
114 my $data;
115 $data->{'iTotalRecords'}        = $batch->{'num_records'};
116 $data->{'iTotalDisplayRecords'} = $batch->{'num_records'};
117 $data->{'sEcho'}                = $input->param('sEcho') || undef;
118 $data->{'aaData'}               = \@list;
119
120 print to_json($data);