]> git.koha-community.org Git - koha.git/blob - reports/dictionary.pl
Bug 11559: (followup) Fix import bugs, display/parsing issues
[koha.git] / reports / dictionary.pl
1 #!/usr/bin/perl
2
3 # Copyright 2007 Liblime ltd
4 #
5 # This file is part of Koha.
6 #
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
19 use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
20 use strict;
21 use warnings;
22 use C4::Auth;
23 use CGI qw ( -utf8 );
24 use C4::Output;
25 use C4::Reports::Guided;
26 use Koha::DateUtils;
27
28 =head1 NAME
29
30 Script to control the guided report creation
31
32 =head1 DESCRIPTION
33
34 =cut
35
36 my $input = new CGI;
37 my $referer = $input->referer();
38
39 my $phase = $input->param('phase') || 'View Dictionary';
40 my $definition_name        = $input->param('definition_name');
41 my $definition_description = $input->param('definition_description');
42 my $area  = $input->param('area') || '';
43 my $no_html = 0;    # this will be set if we dont want to print out an html::template
44 my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
45     {   template_name   => "reports/dictionary.tt",
46         query           => $input,
47         type            => "intranet",
48         authnotrequired => 0,
49         flagsrequired   => { reports => '*' },
50         debug           => 1,
51     }
52         );
53
54 if ($phase eq 'View Dictionary'){
55     # view the dictionary we use to set up abstract variables such as all borrowers over fifty who live in a certain town
56     my $definitions = get_from_dictionary($area);
57     $template->param(
58         'areas'            => areas( $area ),
59         'start_dictionary' => 1,
60         'definitions'      => $definitions,
61     );
62 } elsif ( $phase eq 'Add New Definition' ) {
63
64     # display form allowing them to add a new definition
65     $template->param( 'new_dictionary' => 1, );
66 }
67
68 elsif ( $phase eq 'New Term step 2' ) {
69
70     # Choosing the area
71     $template->param(
72         'step_2'                 => 1,
73         'areas'                  => areas( $area ),
74         'definition_name'        => $definition_name,
75         'definition_description' => $definition_description,
76     );
77 }
78
79 elsif ( $phase eq 'New Term step 3' ) {
80
81     # Choosing the columns
82     my $columns                = get_columns( $area, $input );
83     $template->param(
84         'step_3'                 => 1,
85         'area'                   => $area,
86         'columns'                => $columns,
87         'definition_name'        => $definition_name,
88         'definition_description' => $definition_description,
89     );
90 }
91
92 elsif ( $phase eq 'New Term step 4' ) {
93
94     # Choosing the values
95     my @columns                = $input->param('columns');
96     my $columnstring           = join( ',', @columns );
97     my @column_loop;
98     foreach my $column (@columns) {
99         my %tmp_hash;
100         $tmp_hash{'name'} = $column;
101         my $type = get_column_type($column);
102         if ( $type eq 'distinct' ) {
103             my $values = get_distinct_values($column);
104             $tmp_hash{'values'}   = $values;
105             $tmp_hash{'distinct'} = 1;
106
107         }
108         if ( $type eq 'DATE' || $type eq 'DATETIME' ) {
109             $tmp_hash{'date'} = 1;
110         }
111         if ($type eq 'TEXT' || $type eq 'MEDIUMTEXT'){
112             $tmp_hash{'text'} = 1;
113         }
114
115         #               else {
116         #                       warn $type;#
117         #                       }
118         push @column_loop, \%tmp_hash;
119     }
120
121         $template->param( 'step_4' => 1,
122                 'area' => $area,
123                 'definition_name' => $definition_name,
124                 'definition_description' => $definition_description,
125                 'columns' => \@column_loop,
126                 'columnstring' => $columnstring,
127         );
128 }
129
130 elsif ( $phase eq 'New Term step 5' ) {
131     # Confirmation screen
132     my $columnstring           = $input->param('columnstring');
133     my @criteria               = $input->param('criteria_column');
134     my $query_criteria;
135     my @criteria_loop;
136
137     foreach my $crit (@criteria) {
138         my $value = $input->param( $crit . "_value" );
139         if ($value) {
140             my %tmp_hash;
141             $tmp_hash{'name'}  = $crit;
142             $tmp_hash{'value'} = $value;
143             push @criteria_loop, \%tmp_hash;
144             my $value_dt = eval { dt_from_string( $value ) };
145             $value = output_pref( { dt => $value_dt, dateonly => 1, dateformat => 'iso' } )
146                 if ( $value_dt );
147
148             $query_criteria .= " AND $crit='$value'";
149         }
150         $value = $input->param( $crit . "_start_value" );
151
152         if ($value) {
153             my %tmp_hash;
154             $tmp_hash{'name'}  = "$crit Start";
155             $tmp_hash{'value'} = $value;
156             push @criteria_loop, \%tmp_hash;
157             my $value_dt = eval { dt_from_string( $value ) };
158             $value = output_pref( { dt => $value_dt, dateonly => 1, dateformat => 'iso' } )
159                 if ( $value_dt );
160
161             $query_criteria .= " AND $crit >= '$value'";
162         }
163
164         $value = $input->param( $crit . "_end_value" );
165         if ($value) {
166             my %tmp_hash;
167             $tmp_hash{'name'}  = "$crit End";
168             $tmp_hash{'value'} = $value;
169             push @criteria_loop, \%tmp_hash;
170             my $value_dt = eval { dt_from_string( $value ) };
171             $value = output_pref( { dt => $value_dt, dateonly => 1, dateformat => 'iso' } )
172                 if ( $value_dt );
173
174             $query_criteria .= " AND $crit <= '$value'";
175         }
176     }
177     $template->param(
178         'step_5'                 => 1,
179         'area'                   => $area,
180         'definition_name'        => $definition_name,
181         'definition_description' => $definition_description,
182         'query'                  => $query_criteria,
183         'columnstring'           => $columnstring,
184         'criteria_loop'          => \@criteria_loop,
185     );
186 }
187
188 elsif ( $phase eq 'New Term step 6' ) {
189     # Saving
190     my $area                   = $input->param('area');
191     my $sql                    = $input->param('sql');
192     save_dictionary( $definition_name, $definition_description, $sql, $area );
193     $no_html = 1;
194     print $input->redirect("/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary");
195
196 } elsif ( $phase eq 'Delete Definition' ) {
197     $no_html = 1;
198     my $id = $input->param('id');
199     delete_definition($id);
200     print $input->redirect("/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary");
201 }
202
203 $template->param( 'referer' => $referer );
204
205
206 if (!$no_html){
207         output_html_with_http_headers $input, $cookie, $template->output;
208 }
209
210 sub areas {
211
212     my $selected = shift;
213
214     my $areas = get_report_areas();
215     my @a;
216     foreach my $area ( @$areas ) {
217         push @a, {
218             id       => $area,
219             selected => ( $area eq $selected )
220         };
221     }
222
223     return \@a;
224 }