bug 2867 [1/2]: Move basic editing to main system preferences screen
[koha.git] / admin / systempreferences.pl
index ef53715..9407c69 100755 (executable)
@@ -317,31 +317,17 @@ sub StringSearch  {
     my $count=@data;
     my @results;
     my $cnt=0;
+    my $sth;
 
     # used for doing a plain-old sys-pref search
-    if ($type eq 'all' ){
-        my $sth=$dbh->prepare("SELECT * FROM systempreferences 
-                WHERE variable LIKE ? OR explanation LIKE ? 
-                ORDER BY VARIABLE");
-        $sth->execute("%$searchstring%", "%$searchstring%");
-        while (my $data=$sth->fetchrow_hashref){
-            $data->{value} =~ s/</&lt;/g;
-            $data->{value} =~ s/>/&gt;/g;
-            $data->{value}=substr($data->{value},0,60)."..." if length($data->{value}) >60;
-            push(@results,$data);
-            $cnt++;
-        }
-        $sth->finish;
-
-    }  elsif ($type){
+    if ($type && $type ne 'all') {
         foreach my $syspref (sort { lc $a cmp lc $b } 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){
-                    $data->{value} =~ s/</&lt;/g;
-                    $data->{value} =~ s/>/&gt;/g;
-                    $data->{value}=substr($data->{value},0,60)."..." if length($data->{value}) >60;
+                    $data->{shortvalue} = $data->{value};
+                    $data->{shortvalue} = substr($data->{value},0,60)."..." if length($data->{value}) >60;
                     push(@results,$data);
                     $cnt++;
                 }
@@ -349,28 +335,145 @@ sub StringSearch  {
             }
         }
     } else {
-        my $strsth ="Select variable,value,explanation,type,options from systempreferences where variable not in (";
-        foreach my $syspref (keys %tabsysprefs){
-            $strsth .= $dbh->quote($syspref).",";
+               my $sth;
+
+        if ($type eq 'all' ){
+            $sth=$dbh->prepare("
+            SELECT *
+              FROM systempreferences 
+              WHERE variable LIKE ? OR explanation LIKE ? 
+              ORDER BY VARIABLE");
+            $sth->execute("%$searchstring%", "%$searchstring%");
+        } 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";
+            $sth=$dbh->prepare($strsth);
+            $sth->execute();
         }
-        $strsth =~ s/,$/) /;
-        $strsth .= " order by variable";
-        my $sth=$dbh->prepare($strsth);
-        $sth->execute();
-        while (my $data=$sth->fetchrow_hashref){
-            $data->{value}=substr($data->{value},0,60);
-            push(@results,$data);
-            $cnt++;
+
+               while (my $data=$sth->fetchrow_hashref){
+                       $data->{shortvalue} = $data->{value};
+                       $data->{shortvalue} = substr($data->{value},0,60)."..." if length($data->{value}) >60;
+                       push(@results,$data);
+                       $cnt++;
+               }
+
+               $sth->finish;
+    }  
+    return ($cnt,\@results);
+}
+
+sub GetPrefParams {
+    my $data = shift;
+    my $params = $data;
+    my @options;
+   
+    if (defined $data->{'options'}) { 
+        foreach my $option (split(/\|/, $data->{'options'})) {
+            my $selected='0';
+            $option eq $data->{'value'} and $selected=1;
+            push @options, { option => $option, selected => $selected };
         }
-        $sth->finish;
     }
-    return ($cnt,\@results);
+
+    $params->{'prefoptions'} = $data->{'options'};
+
+    if ($data->{'type'} eq 'Choice') {
+        $params->{'type-choice'} = 1;
+    } elsif ($data->{'type'} eq 'YesNo') {
+        $params->{'type-yesno'} = 1;
+        $data->{'value'}=C4::Context->boolean_preference($data->{'variable'});
+        if ($data->{'value'} eq '1') {
+            $params->{'value-yes'} = 1;
+        } else {
+            $params->{'value-no'} = 1;
+        }
+    } elsif ($data->{'type'} eq 'Integer' || $data->{'type'} eq 'Float') {
+        $params->{'type-free'} = 1;
+        $params->{'fieldlength'} = $data->{'options'}>0 ? $data->{'options'} : 10;
+    } elsif ($data->{'type'} eq 'Textarea') {
+        $params->{'type-textarea'} = 1;
+        $data->{options} =~ /(.*)\|(.*)/;
+        $params->{'cols'} = $1;
+        $params->{'rows'} = $2;
+    } elsif ($data->{'type'} eq 'Themes') {
+        $params->{'type-choice'} = 1;
+        my $type='';
+        ($data->{'variable'}=~m#opac#i) ? ($type='opac') : ($type='intranet');
+        @options=();
+        my $currently_selected_themes;
+        my $counter=0;
+        foreach my $theme (split /\s+/, $data->{'value'}) {
+            push @options, { option => $theme, counter => $counter };
+            $currently_selected_themes->{$theme}=1;
+            $counter++;
+        }
+        foreach my $theme (getallthemes($type)) {
+            my $selected='0';
+            next if $currently_selected_themes->{$theme};
+            push @options, { option => $theme, counter => $counter };
+            $counter++;
+        }
+    } elsif ($data->{'type'} eq 'ClassSources') {
+        $params->{'type-choice'} = 1;
+        my $type='';
+        @options=();
+        my $sources = GetClassSources();
+        my $counter=0;
+        foreach my $cn_source (sort keys %$sources) {
+            if ($cn_source eq $data->{'value'}) {
+                push @options, { option => $cn_source, counter => $counter, selected => 1 };
+            } else {
+                push @options, { option => $cn_source, counter => $counter };
+            }
+            $counter++; 
+        }
+    } elsif ($data->{'type'} eq 'Languages') {
+    my $currently_selected_languages;
+        foreach my $language (split /\s+/, $data->{'value'}) {
+            $currently_selected_languages->{$language}=1;
+        }
+        # current language
+        my $lang = $params->{'lang'};
+        my $theme;
+        my $interface;
+        if ($data->{'variable'} =~ /opac/) {
+            # this is the OPAC
+            $interface = 'opac';
+                $theme = C4::Context->preference('opacthemes');
+        }
+        else {
+            # this is the staff client  
+            $interface = 'intranet';
+            $theme = C4::Context->preference('template');
+        }
+        my $languages_loop = getTranslatedLanguages($interface,$theme,$lang,$currently_selected_languages);
+
+        $params->{'languages_loop'} = $languages_loop;
+        $params->{'type-langselector'} = 1;
+    } else {
+        $params->{'type-free'} = 1;
+        $params->{'fieldlength'} = $data->{'options'}>0 ? $data->{'options'} : 30;
+    }
+
+    if ( $params->{'type-choice'} || $params->{'type-free'} || $params->{'type-yesno'} ) {
+        $params->{'oneline'} = 1;
+    }
+
+       $params->{'preftype'} = $data->{'type'};
+    $params->{'options'} = \@options;
+
+    return $params;
 }
 
 my $input = new CGI;
 my $searchfield = $input->param('searchfield');
 my $Tvalue = $input->param('Tvalue');
-my $offset = $input->param('offset');
+my $offset = $input->param('offset') || 0;
 my $script_name="/cgi-bin/koha/admin/systempreferences.pl";
 
 my ($template, $borrowernumber, $cookie)
@@ -436,7 +539,6 @@ if ($op eq 'update_and_reedit') {
             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;
-            warn "logaction !! mod ";
             logaction('SYSTEMPREFERENCE','MODIFY',undef, $input->param('variable') . " | " . $value );
         }
     } else {
@@ -444,7 +546,6 @@ if ($op eq 'update_and_reedit') {
             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;
-            warn "logaction !! add ";
             logaction('SYSTEMPREFERENCE','ADD',undef, $input->param('variable') . " | " . $input->param('value') );
         }
     }
@@ -469,94 +570,11 @@ if ($op eq 'add_form') {
         $template->param(return_tab => $tabsysprefs{$searchfield});
     }
 
-    my @options;
-    foreach my $option (split(/\|/, $data->{'options'})) {
-        my $selected='0';
-        $option eq $data->{'value'} and $selected=1;
-        push @options, { option => $option, selected => $selected };
-    }
-    if ($data->{'type'} eq 'Choice') {
-        $template->param('type-choice' => 1);
-    } elsif ($data->{'type'} eq 'YesNo') {
-        $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 '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-choice' => 1);
-        my $type='';
-        ($data->{'variable'}=~m#opac#i) ? ($type='opac') : ($type='intranet');
-        @options=();
-        my $currently_selected_themes;
-        my $counter=0;
-        foreach my $theme (split /\s+/, $data->{'value'}) {
-            push @options, { option => $theme, counter => $counter };
-            $currently_selected_themes->{$theme}=1;
-            $counter++;
-        }
-        foreach my $theme (getallthemes($type)) {
-            my $selected='0';
-            next if $currently_selected_themes->{$theme};
-            push @options, { option => $theme, counter => $counter };
-            $counter++;
-        }
-    } elsif ($data->{'type'} eq 'ClassSources') {
-        $template->param('type-choice' => 1);
-        my $type='';
-        @options=();
-        my $sources = GetClassSources();
-        my $counter=0;
-        foreach my $cn_source (sort keys %$sources) {
-            if ($cn_source eq $data->{'value'}) {
-                push @options, { option => $cn_source, counter => $counter, selected => 1 };
-            } else {
-                push @options, { option => $cn_source, counter => $counter };
-            }
-            $counter++; 
-        }
-    } elsif ($data->{'type'} eq 'Languages') {
-    my $currently_selected_languages;
-        foreach my $language (split /\s+/, $data->{'value'}) {
-            $currently_selected_languages->{$language}=1;
-        }
-    # current language
-        my $lang = $template->param('lang');
-        my $theme;
-    my $interface;
-    if ($data->{'variable'} =~ /opac/) {
-        # this is the OPAC
-        $interface = 'opac';
-            $theme = C4::Context->preference('opacthemes');
-    }
-    else {
-        # this is the staff client  
-        $interface = 'intranet';
-        $theme = C4::Context->preference('template');
-    }
-    my $languages_loop = getTranslatedLanguages($interface,$theme,$lang,$currently_selected_languages);
+    $data->{'lang'} = $template->param('lang');
 
-        $template->param('languages_loop' => $languages_loop);
-        $template->param('type-langselector' => 1);
-    } 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);
+    $template->param( GetPrefParams( $data ) );
+
+    $template->param( searchfield => $searchfield );
 
 ################## ADD_VALIDATE ##################################
 # called by add_form, used to insert/modify data in DB
@@ -568,7 +586,8 @@ if ($op eq 'add_form') {
     my $value;
     # handle multiple value strings (separated by ',')
     my $params = $input->Vars;
-    my @values = split("\0",$params->{'value'}) if $params->{'value'};
+    my @values = ();
+    @values = split("\0",$params->{'value'}) if $params->{'value'};
     for my $vl (@values) {
         $value .= "$vl,";
     }
@@ -629,16 +648,13 @@ if ($op eq 'add_form') {
           } else {
             $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{yes} = 1 if ($results->[$i]{'value'} == 1);
-        $row_data{yesno} = 1 if ($results->[$i]{'type'} eq 'YesNo');
-        $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);
+        my $row_data = $results->[$i];
+        $row_data->{'lang'} = $template->param('lang');
+        $row_data = GetPrefParams( $row_data );  # get a fresh hash for the row data
+        $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);
     }
     $tab=($tab?$tab:"Local Use");
     $template->param(loop => \@loop_data, $tab => 1);