From abfd5ba2c11bea7fc12faecf5e06ab64e110904e Mon Sep 17 00:00:00 2001 From: Jesse Weaver Date: Wed, 17 Dec 2008 09:53:37 -0600 Subject: [PATCH] bug 2867 [1/2]: Move basic editing to main system preferences screen This allows the user to edit system preferences from the main system preferences screen, rather than having to dig down into each preference. [This patch includes some modifications by Galen Charlton to fix XHTML validation errors and a couple errors that would crop up under warnings.] Signed-off-by: Galen Charlton --- admin/systempreferences.pl | 280 +++++++++--------- .../prog/en/css/staff-global.css | 4 + .../en/modules/admin/systempreferences.tmpl | 124 ++++++-- 3 files changed, 257 insertions(+), 151 deletions(-) diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index ef53715412..9407c69498 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -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/{value} =~ s/>/>/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/{value} =~ s/>/>/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&searchfield=".$results->[$i]{'variable'}; - $row_data{delete} = "$script_name?op=delete_confirm&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&searchfield=".$results->[$i]{'variable'}; + $row_data->{delete} = "$script_name?op=delete_confirm&searchfield=".$results->[$i]{'variable'}; + push(@loop_data, $row_data); } $tab=($tab?$tab:"Local Use"); $template->param(loop => \@loop_data, $tab => 1); diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css index 34c499af2e..40bcadb9cb 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css +++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css @@ -362,6 +362,10 @@ div#reserves,div#checkouts { color : Gray; } +.single-line { + white-space: nowrap; +} + .ex { font-family : "Courier New", Courier, fixed-width; font-weight : bold; diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tmpl index 76e0134192..a72a023c93 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/systempreferences.tmpl @@ -63,6 +63,13 @@ alert(alertString2); } } + $( function() { + $( '#sysprefst .expand-textarea' ).show().click( function () { + $( this ).hide().nextAll( 'textarea, input[type=submit]' ).show( 'slow' ); + + return false; + } ).nextAll( 'textarea, input[type=submit]' ).hide(); + } ); //]]> @@ -111,9 +118,9 @@ - +
-
+
+ -
@@ -136,18 +143,23 @@ " name="value" id="" type="checkbox" checked="checked" /> -
+
- - - + + + + + + + +
@@ -195,11 +207,11 @@
" method="post"> - - " /> - " /> + + " /> + " />
-
" method="post">
+
" method="post">
@@ -215,16 +227,16 @@
- +