From 06d2a720ae14013b7f59047321ff4592602dc481 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 +++++++++++---------- .../intranet-tmpl/prog/en/css/staff-global.css | 4 + .../prog/en/modules/admin/systempreferences.tmpl | 124 +++++++-- 3 files changed, 257 insertions(+), 151 deletions(-) diff --git a/admin/systempreferences.pl b/admin/systempreferences.pl index f95aea50a0..95f73e3ca6 100755 --- a/admin/systempreferences.pl +++ b/admin/systempreferences.pl @@ -318,31 +318,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++; } @@ -350,28 +336,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) @@ -437,7 +540,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 { @@ -445,7 +547,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') ); } } @@ -470,94 +571,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 @@ -569,7 +587,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,"; } @@ -630,16 +649,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 a4661a522a..d51db246d5 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 @@
- +