big commit, still breaking things...
[koha.git] / admin / systempreferences.pl
index 1677ca1..a18d7b7 100755 (executable)
@@ -41,12 +41,46 @@ use strict;
 use CGI;
 use C4::Auth;
 use C4::Context;
+use C4::Koha;
 use C4::Output;
 use C4::Interface::CGI::Output;
 use C4::Search;
 use HTML::Template;
 use C4::Context;
 
+my %tabsysprefs;
+$tabsysprefs{acquisitions}="Acquisitions";
+$tabsysprefs{gist}="Acquisitions";
+$tabsysprefs{authoritysep}="Authorities";
+$tabsysprefs{ISBD}="Catalogue";
+$tabsysprefs{marc}="Catalogue";
+$tabsysprefs{autoBarcode}="Catalogue";
+$tabsysprefs{marcflavour}="Catalogue";
+$tabsysprefs{SubscriptionHistory}="OPAC";
+$tabsysprefs{maxoutstanding}="Circulation";
+$tabsysprefs{printcirculationslips}="Circulation";
+$tabsysprefs{ReturnBeforeExpiry}="Circulation";
+$tabsysprefs{suggestion}="OPAC";
+$tabsysprefs{automembernum}="Members";
+$tabsysprefs{noissuescharge}="Circulation";
+$tabsysprefs{opacthemes}="OPAC";
+$tabsysprefs{opaclanguages}="OPAC";
+$tabsysprefs{LibraryName}="OPAC";
+$tabsysprefs{opacstylesheet}="OPAC";
+$tabsysprefs{BiblioDefaultView}="OPAC";
+$tabsysprefs{opaclargeimage}="OPAC";
+$tabsysprefs{opacsmallimage}="OPAC";
+$tabsysprefs{hidelostitems}="OPAC";
+$tabsysprefs{KohaAdmin}="Admin";
+$tabsysprefs{checkdigit}="Members";
+$tabsysprefs{dateformat}="Admin";
+$tabsysprefs{insecure}="Admin";
+$tabsysprefs{ldapinfos}="Admin";
+$tabsysprefs{ldapserver}="Admin";
+$tabsysprefs{itemcallnumber}="Catalogue";
+$tabsysprefs{maxreserves}="Circulation";
+$tabsysprefs{virtualshelves}="OPAC";
+$tabsysprefs{hide_marc}="Catalogue";
 
 sub StringSearch  {
        my ($env,$searchstring,$type)=@_;
@@ -54,18 +88,40 @@ sub StringSearch  {
        $searchstring=~ s/\'/\\\'/g;
        my @data=split(' ',$searchstring);
        my $count=@data;
-       my $sth=$dbh->prepare("Select variable,value,explanation,type,options from systempreferences where (variable like ?) order by variable");
-       $sth->execute("$data[0]%");
        my @results;
        my $cnt=0;
-       while (my $data=$sth->fetchrow_hashref){
-               push(@results,$data);
-               $cnt ++;
+       if ($type){
+               foreach my $syspref (sort keys %tabsysprefs){
+                       if ($tabsysprefs{$syspref} eq $type){
+                               my $sth=$dbh->prepare("Select variable,value,explanation,type,options from systempreferences where (variable like ?) order by variable");
+                               $sth->execute($syspref);
+                               while (my $data=$sth->fetchrow_hashref){
+                                       push(@results,$data);
+                                       $cnt++;
+                               }
+                               $sth->finish;
+                       }
+               }
+       } else {
+               my $strsth ="Select variable,value,explanation,type,options from systempreferences where variable not in (";  
+               foreach my $syspref (keys %tabsysprefs){
+                       $strsth .= $dbh->quote($syspref).",";
+               }
+               $strsth =~ s/,$/) /;
+               $strsth .= " order by variable";
+               warn $strsth;
+               my $sth=$dbh->prepare($strsth);
+               $sth->execute();
+               while (my $data=$sth->fetchrow_hashref){
+                       push(@results,$data);
+                       $cnt++;
+               }
+               $sth->finish;
        }
-       $sth->finish;
        return ($cnt,\@results);
 }
 
+
 my $input = new CGI;
 my $searchfield=$input->param('searchfield');
 my $offset=$input->param('offset');
@@ -79,16 +135,16 @@ my ($template, $borrowernumber, $cookie)
                             flagsrequired => {parameters => 1},
                             debug => 1,
                             });
-my $pagesize=20;
+my $pagesize=100;
 my $op = $input->param('op');
 $searchfield=~ s/\,//g;
 
 if ($op) {
 $template->param(script_name => $script_name,
-                                               $op              => 1); # we show only the TMPL_VAR names $op
+                                               $op              => 1,); # we show only the TMPL_VAR names $op
 } else {
 $template->param(script_name => $script_name,
-                                               else              => 1); # we show only the TMPL_VAR names $op
+                                               else              => 1,); # we show only the TMPL_VAR names $op
 }
 
 if ($op eq 'update_and_reedit') {
@@ -131,14 +187,14 @@ if ($op eq 'update_and_reedit') {
        $sth->execute($input->param('variable'));
        if ($sth->rows) {
                unless (C4::Context->config('demo') eq 1) {
-                       my $sth=$dbh->prepare("update systempreferences set value=?,explanation=? where variable=?");
-                       $sth->execute($value, $input->param('explanation'), $input->param('variable'));
+                       my $sth=$dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?");
+                       $sth->execute($value, $input->param('explanation'), $input->param('variable'), $input->param('preftype'), $input->param('prefoptions'));
                        $sth->finish;
                }
     } else {
                unless (C4::Context->config('demo') eq 1) {
-                       my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation) values (?,?,?)");
-                       $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'));
+                       my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation) values (?,?,?,?,?)");
+                       $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'));
                        $sth->finish;
                }
        }
@@ -173,17 +229,18 @@ if ($op eq 'add_form') {
                $template->param('type-yesno' => 1);
                $data->{'value'}=C4::Context->boolean_preference($data->{'variable'});
                ($data->{'value'} eq '1') ? ($template->param('value-yes'=>1)) : ($template->param('value-no'=>1));
-       } elsif ($data->{'type'} eq 'free') {
-               $template->param('type-free' => 1);
-               $template->param('fieldlength' => $data->{'options'});
        } elsif ($data->{'type'} eq 'Integer') {
                $template->param('type-free' => 1);
                $template->param('fieldlength' => $data->{'options'});
+       } elsif ($data->{'type'} eq 'Textarea') {
+               $template->param('type-textarea' => 1);
+               $data->{options} =~ /(.*)\|(.*)/;
+               $template->param('cols' => $1, 'rows' => $2);;
        } elsif ($data->{'type'} eq 'Float') {
                $template->param('type-free' => 1);
                $template->param('fieldlength' => $data->{'options'});
        } elsif ($data->{'type'} eq 'Themes') {
-               $template->param('type-reorderlist' => 1);
+               $template->param('type-choice' => 1);
                my $type='';
                ($data->{'variable'}=~m#opac#i) ? ($type='opac') : ($type='intranet');
                @options=();
@@ -201,7 +258,7 @@ if ($op eq 'add_form') {
                        $counter++;
                }
        } elsif ($data->{'type'} eq 'Languages') {
-               $template->param('type-reorderlist' => 1);
+               $template->param('type-choice' => 1);
                my $type='';
                @options=();
                my $currently_selected_languages;
@@ -219,11 +276,16 @@ if ($op eq 'add_form') {
                        push @options, { option => $language, counter => $counter };
                        $counter++;
                }
+       } else {
+               $template->param('type-free' => 1);
+               $template->param('fieldlength' => $data->{'options'}>0?$data->{'options'}:60);
        }
        $template->param(explanation => $data->{'explanation'},
                         value => $data->{'value'},
                         type => $data->{'type'},
                         options => \@options,
+                        preftype => $data->{'type'},
+                        prefoptions => $data->{'options'},
                         searchfield => $searchfield);
 
 ################## ADD_VALIDATE ##################################
@@ -234,18 +296,20 @@ if ($op eq 'add_form') {
        $sth->execute($input->param('variable'));
        if ($sth->rows) {
                unless (C4::Context->config('demo') eq 1) {
-                       my $sth=$dbh->prepare("update systempreferences set value=?,explanation=? where variable=?");
-                       $sth->execute($input->param('value'), $input->param('explanation'), $input->param('variable'));
+                       my $sth=$dbh->prepare("update systempreferences set value=?,explanation=?,type=?,options=? where variable=?");
+                       $sth->execute($input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'), $input->param('variable'));
                        $sth->finish;
                }
        } else {
                unless (C4::Context->config('demo') eq 1) {
-                       my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation) values (?,?,?)");
-                       $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'));
+                       my $sth=$dbh->prepare("insert into systempreferences (variable,value,explanation,type,options) values (?,?,?,?,?)");
+                       $sth->execute($input->param('variable'), $input->param('value'), $input->param('explanation'), $input->param('preftype'), $input->param('prefoptions'));
                        $sth->finish;
                }
        }
        $sth->finish;
+       print "Content-Type: text/html\n\n<META HTTP-EQUIV=Refresh CONTENT=\"0; URL=systempreferences.pl?tab=".$tabsysprefs{$input->param('variable')}."\"></html>";
+       exit;
 ################## DELETE_CONFIRM ##################################
 # called by default form, used to confirm deletion of data in DB
 } elsif ($op eq 'delete_confirm') {
@@ -269,28 +333,30 @@ if ($op eq 'add_form') {
                                                                                                        # END $OP eq DELETE_CONFIRMED
 ################## DEFAULT ##################################
 } else { # DEFAULT
-       if  ($searchfield ne '') {
-                $template->param(searchfield => "<p>You Searched for <strong>$searchfield</strong></p>");
-       }
+       #Adding tab management for system preferences
+       my $tab=$input->param('tab');
+       
        my $env;
-       my ($count,$results)=StringSearch($env,$searchfield,'web');
-       my $toggle="white";
+       my ($count,$results)=StringSearch($env,$searchfield,$tab);
+       my $toggle=0;
        my @loop_data = ();
        for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){
-               if ($toggle eq 'white'){
-                       $toggle="#ffffcc";
+               if ($toggle eq 0){
+                       $toggle=1;
                } else {
-                       $toggle="white";
+                       $toggle=0;
                }
                my %row_data;  # get a fresh hash for the row data
                $row_data{variable} = $results->[$i]{'variable'};
                $row_data{value} = $results->[$i]{'value'};
                $row_data{explanation} = $results->[$i]{'explanation'};
+               $row_data{toggle} = $toggle;
                $row_data{edit} = "$script_name?op=add_form&amp;searchfield=".$results->[$i]{'variable'};
                $row_data{delete} = "$script_name?op=delete_confirm&amp;searchfield=".$results->[$i]{'variable'};
                push(@loop_data, \%row_data);
        }
-       $template->param(loop => \@loop_data);
+       $tab=($tab?$tab:"Others");
+       $template->param(loop => \@loop_data, $tab => 1);
        if ($offset>0) {
                my $prevpage = $offset-$pagesize;
                $template->param("<a href=$script_name?offset=".$prevpage.'&lt;&lt; Prev</a>');