Bug 7295 (follow-up) replace simple-quoted string by double-quoted string
[koha.git] / reports / dictionary.pl
index d8c5ab9..96b71e9 100755 (executable)
 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along with
-# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
-# Suite 330, Boston, MA  02111-1307 USA
+# You should have received a copy of the GNU General Public License along
+# with Koha; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
 use strict;
+use warnings;
 use C4::Auth;
 use CGI;
 use C4::Output;
-use C4::Reports;
+use C4::Reports::Guided;
+use C4::Dates;
 
 =head1 NAME
 
@@ -29,97 +31,92 @@ Script to control the guided report creation
 
 =head1 DESCRIPTION
 
-
-=over2
-
 =cut
 
 my $input = new CGI;
 my $referer = $input->referer();
 
-my $phase = $input->param('phase');
-my $no_html = 0; # this will be set if we dont want to print out an html::template
-my     ( $template, $borrowernumber, $cookie ) = get_template_and_user(
-    {
-        template_name   => "reports/dictionary.tmpl",
+my $phase = $input->param('phase') || 'View Dictionary';
+my $definition_name        = $input->param('definition_name');
+my $definition_description = $input->param('definition_description');
+my $area  = $input->param('area') || '';
+my $no_html = 0;    # this will be set if we dont want to print out an html::template
+my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
+    {   template_name   => "reports/dictionary.tmpl",
         query           => $input,
         type            => "intranet",
         authnotrequired => 0,
-        flagsrequired   => { editcatalogue => 1 },
+        flagsrequired   => { reports => '*' },
         debug           => 1,
     }
        );
 
 if ($phase eq 'View Dictionary'){
-       # view the dictionary we use to set up abstract variables such as all borrowers over fifty who live in a certain town
-       my $areas = C4::Reports::get_report_areas();
-       my $definitions = get_from_dictionary();
-       $template->param( 'areas' => $areas ,
-               'start_dictionary' => 1,
-               'definitions' => $definitions,
-       );
-}
-elsif ($phase eq 'Add New Definition'){
-       # display form allowing them to add a new definition
-       $template->param( 'new_dictionary' => 1,
-               );
+    # view the dictionary we use to set up abstract variables such as all borrowers over fifty who live in a certain town
+    my $definitions = get_from_dictionary($area);
+    $template->param(
+        'areas'=> areas(),
+        'start_dictionary' => 1,
+        'definitions'      => $definitions,
+    );
+} elsif ( $phase eq 'Add New Definition' ) {
+
+    # display form allowing them to add a new definition
+    $template->param( 'new_dictionary' => 1, );
 }
 
-elsif ($phase eq 'New Term step 2'){
-       # Choosing the area
-       my $areas = C4::Reports::get_report_areas();
-       my $definition_name=$input->param('definition_name');
-       my $definition_description=$input->param('definition_description');             
-       $template->param( 'step_2' => 1,
-               'areas' => $areas,
-               'definition_name' => $definition_name,
-               'definition_description' => $definition_description,
-       );
+elsif ( $phase eq 'New Term step 2' ) {
+
+    # Choosing the area
+    $template->param(
+        'step_2'                 => 1,
+        'areas'                  => areas(),
+        'definition_name'        => $definition_name,
+        'definition_description' => $definition_description,
+    );
 }
 
-elsif ($phase eq 'New Term step 3'){
-       # Choosing the columns
-       my $area = $input->param('areas');
-       my $columns = get_columns($area);
-       my $definition_name=$input->param('definition_name');
-       my $definition_description=$input->param('definition_description');             
-       $template->param( 'step_3' => 1,
-               'area' => $area,
-               'columns' => $columns,
-               'definition_name' => $definition_name,
-               'definition_description' => $definition_description,
-       );
+elsif ( $phase eq 'New Term step 3' ) {
+
+    # Choosing the columns
+    my $columns                = get_columns( $area, $input );
+    $template->param(
+        'step_3'                 => 1,
+        'area'                   => $area,
+        'columns'                => $columns,
+        'definition_name'        => $definition_name,
+        'definition_description' => $definition_description,
+    );
 }
 
-elsif ($phase eq 'New Term step 4'){
-       # Choosing the values
-       my $area=$input->param('area');
-       my $definition_name=$input->param('definition_name');
-       my $definition_description=$input->param('definition_description');             
-    my @columns = $input->param('columns');
-       my $columnstring = join (',',@columns);
-       my @column_loop;
-       foreach my $column (@columns){
-               my %tmp_hash;
-               $tmp_hash{'name'}=$column;
-               my $type =get_column_type($column);
-               if ($type eq 'distinct'){
-                       my $values = get_distinct_values($column);
-                       $tmp_hash{'values'} = $values;
-                       $tmp_hash{'distinct'} = 1;
-                         
-               }
-               if ($type eq 'DATE' || $type eq 'DATETIME'){
-                       $tmp_hash{'date'}=1;
-               }
-               if ($type eq 'TEXT'){
-                       $tmp_hash{'text'}=1;
-               }
-#              else {
-#                      warn $type;#
-#                      }
-               push @column_loop,\%tmp_hash;
-               }
+elsif ( $phase eq 'New Term step 4' ) {
+
+    # Choosing the values
+    my @columns                = $input->param('columns');
+    my $columnstring           = join( ',', @columns );
+    my @column_loop;
+    foreach my $column (@columns) {
+        my %tmp_hash;
+        $tmp_hash{'name'} = $column;
+        my $type = get_column_type($column);
+        if ( $type eq 'distinct' ) {
+            my $values = get_distinct_values($column);
+            $tmp_hash{'values'}   = $values;
+            $tmp_hash{'distinct'} = 1;
+
+        }
+        if ( $type eq 'DATE' || $type eq 'DATETIME' ) {
+            $tmp_hash{'date'} = 1;
+        }
+        if ($type eq 'TEXT' || $type eq 'MEDIUMTEXT'){
+            $tmp_hash{'text'} = 1;
+        }
+
+        #              else {
+        #                      warn $type;#
+        #                      }
+        push @column_loop, \%tmp_hash;
+    }
 
        $template->param( 'step_4' => 1,
                'area' => $area,
@@ -127,73 +124,81 @@ elsif ($phase eq 'New Term step 4'){
                'definition_description' => $definition_description,
                'columns' => \@column_loop,
                'columnstring' => $columnstring,
-
        );
 }
 
-elsif ($phase eq 'New Term step 5'){
-       # Confirmation screen
-       my $area = $input->param('area');
-       my $columnstring = $input->param('columnstring');
-       my $definition_name=$input->param('definition_name');
-       my $definition_description=$input->param('definition_description');     
-       my @criteria = $input->param('criteria_column'); 
-       my $query_criteria;
-       my @criteria_loop;
-       foreach my $crit (@criteria) {
-               my $value = $input->param( $crit . "_value" );
-               if ($value) {
-                       $query_criteria .= " AND $crit='$value'";
-                       my %tmp_hash;
-                       $tmp_hash{'name'}=$crit;
-                       $tmp_hash{'value'} = $value;
-                       push @criteria_loop,\%tmp_hash;
-               }
-               
-               $value = $input->param( $crit . "_start_value" );
-               if ($value) {
-                       $query_criteria .= " AND $crit > '$value'";
-                       my %tmp_hash;
-                       $tmp_hash{'name'}="$crit Start";
-                       $tmp_hash{'value'} = $value;
-                       push @criteria_loop,\%tmp_hash;
-               }
-               $value = $input->param( $crit . "_end_value" );
-               if ($value) {
-                       $query_criteria .= " AND $crit <= '$value'";
-                       my %tmp_hash;
-                       $tmp_hash{'name'}="$crit End";
-                       $tmp_hash{'value'} = $value;
-                       push @criteria_loop,\%tmp_hash;
-               }                 
-       }
-       $template->param( 'step_5' => 1,
-               'area' => $area,
-               'definition_name' => $definition_name,
-               'definition_description' => $definition_description,
-               'query' => $query_criteria,
-               'columnstring' => $columnstring,
-               'criteria_loop' => \@criteria_loop,
-       );
+elsif ( $phase eq 'New Term step 5' ) {
+    # Confirmation screen
+    my $columnstring           = $input->param('columnstring');
+    my @criteria               = $input->param('criteria_column');
+    my $query_criteria;
+    my @criteria_loop;
+
+    foreach my $crit (@criteria) {
+        my $value = $input->param( $crit . "_value" );
+        if ($value) {
+            my %tmp_hash;
+            $tmp_hash{'name'}  = $crit;
+            $tmp_hash{'value'} = $value;
+            push @criteria_loop, \%tmp_hash;
+            if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
+                my $date = C4::Dates->new($value);
+                $value = $date->output("iso");
+            }
+            $query_criteria .= " AND $crit='$value'";
+        }
+        $value = $input->param( $crit . "_start_value" );
+        if ($value) {
+            my %tmp_hash;
+            $tmp_hash{'name'}  = "$crit Start";
+            $tmp_hash{'value'} = $value;
+            push @criteria_loop, \%tmp_hash;
+            if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
+                my $date = C4::Dates->new($value);
+                $value = $date->output("iso");
+            }
+            $query_criteria .= " AND $crit >= '$value'";
+        }
+        $value = $input->param( $crit . "_end_value" );
+        if ($value) {
+            my %tmp_hash;
+            $tmp_hash{'name'}  = "$crit End";
+            $tmp_hash{'value'} = $value;
+            push @criteria_loop, \%tmp_hash;
+            if ( $value =~ C4::Dates->regexp( C4::Context->preference('dateformat') ) ) {
+                my $date = C4::Dates->new($value);
+                $value = $date->output("iso");
+            }
+            $query_criteria .= " AND $crit <= '$value'";
+        }
+    }
+    my %report_areas = map @$_, get_report_areas();
+    $template->param(
+        'step_5'                 => 1,
+        'area'                   => $area,
+        'areaname'               => $report_areas{$area},
+        'definition_name'        => $definition_name,
+        'definition_description' => $definition_description,
+        'query'                  => $query_criteria,
+        'columnstring'           => $columnstring,
+        'criteria_loop'          => \@criteria_loop,
+    );
 }
 
-elsif ($phase eq 'New Term step 6'){
-       # Saving
-       my $area = $input->param('area');
-       my $definition_name=$input->param('definition_name');
-       my $definition_description=$input->param('definition_description');             
-       my $sql=$input->param('sql');
-       save_dictionary($definition_name,$definition_description,$sql,$area);
-       $no_html=1;
-       print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=View%20Dictionary");      
-
+elsif ( $phase eq 'New Term step 6' ) {
+    # Saving
+    my $area                   = $input->param('area');
+    my $sql                    = $input->param('sql');
+    save_dictionary( $definition_name, $definition_description, $sql, $area );
+    $no_html = 1;
+    print $input->redirect("/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary");
+
+} elsif ( $phase eq 'Delete Definition' ) {
+    $no_html = 1;
+    my $id = $input->param('id');
+    delete_definition($id);
+    print $input->redirect("/cgi-bin/koha/reports/dictionary.pl?phase=View%20Dictionary");
 }
-elsif ($phase eq 'Delete Definition'){
-       $no_html=1;
-       my $id = $input->param('id');
-       delete_definition($id);
-       print $input->redirect("/cgi-bin/koha/reports/guided_reports.pl?phase=View%20Dictionary");
-       }
 
 $template->param( 'referer' => $referer );
 
@@ -201,3 +206,16 @@ $template->param( 'referer' => $referer );
 if (!$no_html){
        output_html_with_http_headers $input, $cookie, $template->output;
 }
+
+sub areas {
+    my $areas = get_report_areas();
+    my @a;
+    foreach (@$areas) {
+        push @a, {
+            id => $_->[0],
+            name => $_->[1],
+            selected => ($_->[0] eq $area),
+        };
+    }
+    return \@a;
+}