Bug 9108: Followup: send the dateformat value from C4::Auth
[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 under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
10 # version.
11 #
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
20 use strict;
21 use warnings;
22 use C4::Auth;
23 use CGI;
24 use C4::Output;
25 use C4::Reports::Guided;
26 use C4::Dates;
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.tmpl",
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(),
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(),
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             if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
145                 my $date = C4::Dates->new($value);
146                 $value = $date->output("iso");
147             }
148             $query_criteria .= " AND $crit='$value'";
149         }
150         $value = $input->param( $crit . "_start_value" );
151         if ($value) {
152             my %tmp_hash;
153             $tmp_hash{'name'}  = "$crit Start";
154             $tmp_hash{'value'} = $value;
155             push @criteria_loop, \%tmp_hash;
156             if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
157                 my $date = C4::Dates->new($value);
158                 $value = $date->output("iso");
159             }
160             $query_criteria .= " AND $crit >= '$value'";
161         }
162         $value = $input->param( $crit . "_end_value" );
163         if ($value) {
164             my %tmp_hash;
165             $tmp_hash{'name'}  = "$crit End";
166             $tmp_hash{'value'} = $value;
167             push @criteria_loop, \%tmp_hash;
168             if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
169                 my $date = C4::Dates->new($value);
170                 $value = $date->output("iso");
171             }
172             $query_criteria .= " AND $crit <= '$value'";
173         }
174     }
175     my %report_areas = map @$_, get_report_areas();
176     $template->param(
177         'step_5'                 => 1,
178         'area'                   => $area,
179         'areaname'               => $report_areas{$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     my $areas = get_report_areas();
212     my @a;
213     foreach (@$areas) {
214         push @a, {
215             id => $_->[0],
216             name => $_->[1],
217             selected => ($_->[0] eq $area),
218         };
219     }
220     return \@a;
221 }