From aea8533844a94ceb5b29ed0fcb8d72f5af02be21 Mon Sep 17 00:00:00 2001 From: plg Date: Thu, 6 Apr 2006 11:00:08 +0000 Subject: [PATCH] Experimental rewrite of Stop Words administration screen. Feedback welcomed. --- admin/stopwords.pl | 242 +++++++++--------- .../prog/en/admin/stopwords.tmpl | 222 ++++++---------- .../prog/en/includes/intranet.css | 9 +- 3 files changed, 208 insertions(+), 265 deletions(-) diff --git a/admin/stopwords.pl b/admin/stopwords.pl index 5a1e50df72..8d26716f5a 100755 --- a/admin/stopwords.pl +++ b/admin/stopwords.pl @@ -1,27 +1,5 @@ #!/usr/bin/perl -#script to administer the stopwords table -#written 20/02/2002 by paul.poulain@free.fr -# This software is placed under the gnu General Public License, v2 (http://www.gnu.org/licenses/gpl.html) - -# ALGO : -# this script use an $op to know what to do. -# if $op is empty or none of the above values, -# - the default screen is build (with all records, or filtered datas). -# - the user can clic on add, modify or delete record. -# if $op=add_form -# - if primkey exists, this is a modification,so we read the $primkey record -# - builds the add/modify form -# if $op=add_validate -# - the user has just send datas, so we create/modify the record -# if $op=delete_form -# - we show the record having primkey=$primkey and ask for deletion validation form -# if $op=delete_confirm -# - we delete the record having primkey=$primkey - - -# Copyright 2000-2002 Katipo Communications -# # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the @@ -36,9 +14,21 @@ # 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 +# +### +# +# script to administer the stopwords table +# +# - written on 2002/02/20 by paul.poulain@free.fr +# +# - experimentaly rewrittten on 2006/04/06 by Pierrick LE GALL (INEO media +# system) +# use strict; use CGI; +use List::Util qw/min/; + use C4::Context; use C4::Output; use C4::Search; @@ -47,31 +37,37 @@ use C4::Auth; use C4::Interface::CGI::Output; sub StringSearch { - my ($env,$searchstring,$type)=@_; - my $dbh = C4::Context->dbh; - $searchstring=~ s/\'/\\\'/g; - my @data=split(' ',$searchstring); - my $count=@data; - my $query=""; - my $sth=$dbh->prepare("Select word from stopwords where (word like ?) order by word"); - $sth->execute("$data[0]%"); - my @results; - my $cnt=0; - while (my $data=$sth->fetchrow_hashref){ - push(@results,$data); - $cnt ++; - } - # $sth->execute; - $sth->finish; - return ($cnt,\@results); + my ($searchstring) = @_; + + my $dbh = C4::Context->dbh; + $searchstring =~ s/\'/\\\'/g; + my @tokens = split(' ',$searchstring); + + my $query = ' +SELECT word + FROM stopwords + WHERE (word like ?) + ORDER BY word +'; + my $sth = $dbh->prepare($query); + $sth->execute($tokens[0].'%'); + my @results; + while (my $row = $sth->fetchrow_hashref) { + push(@results, $row->{word}); + } + $sth->finish; + + return @results; } +my $dbh = C4::Context->dbh; +my $sth; +my $query; my $input = new CGI; -my $searchfield=$input->param('searchfield'); -my $offset=$input->param('offset'); +my $searchfield = $input->param('searchfield'); my $script_name="/cgi-bin/koha/admin/stopwords.pl"; -my $pagesize=20; +my $pagesize = 40; my $op = $input->param('op'); $searchfield=~ s/\,//g; @@ -87,86 +83,88 @@ my ($template, $loggedinuser, $cookie) $template->param(script_name => $script_name, searchfield => $searchfield); +if ($input->param('add')) { + if ($input->param('word')) { + my @words = split / |,/, $input->param('word'); + + $query = ' +DELETE + FROM stopwords + WHERE word IN (?'.(',?' x scalar @words - 1).') +'; + $sth = $dbh->prepare($query); + $sth->execute(@words); + $sth->finish; + + $query = ' +INSERT + INTO stopwords + (word) + VALUES + (?)'.(',(?)' x scalar @words - 1).' +'; + $sth = $dbh->prepare($query); + $sth->execute(@words); + $sth->finish; + + $template->param(stopword_added => 1); + } +} +elsif ($input->param('deleteSelected')) { + if ($input->param('stopwords[]')) { + my @stopwords_loop = (); + + foreach my $word ($input->param('stopwords[]')) { + push @stopwords_loop, {word => $word}; + } + + $template->param( + delete_confirm => 1, + stopwords_to_delete => \@stopwords_loop, + ); + } +} +elsif ($input->param('confirmDeletion')) { + my @words = $input->param('confirmed_stopwords[]'); + + $query = ' +DELETE + FROM stopwords + WHERE word IN (?'.(',?' x scalar @words - 1).') +'; + $sth = $dbh->prepare($query); + $sth->execute(@words); + $sth->finish; + + $template->param(delete_confirmed => 1); +} + +my $page = $input->param('page') || 1; + +my @results = StringSearch($searchfield); +my @loop; + +my $first = ($page - 1) * $pagesize; -################## ADD_FORM ################################## -# called by default. Used to create form to add or modify a record -if ($op eq 'add_form') { - $template->param(add_form => 1); - #---- if primkey exists, it's a modify action, so read values to modify... - my $data; - if ($searchfield) { - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select word from stopwords where word=?"); - $sth->execute($searchfield); - $data=$sth->fetchrow_hashref; - $sth->finish; - } - - # END $OP eq ADD_FORM -################## ADD_VALIDATE ################################## -# called by add_form, used to insert/modify data in DB -} elsif ($op eq 'add_validate') { - $template->param(add_validate => 1); - my $dbh = C4::Context->dbh; - my @tab = split / |,/, $input->param('word'); - my $sth=$dbh->prepare("replace stopwords (word) values (?)"); - foreach my $insert_value (@tab) { - $sth->execute($insert_value); - } - $sth->finish; - # END $OP eq ADD_VALIDATE -################## DELETE_CONFIRM ################################## -# called by default form, used to confirm deletion of data in DB -} elsif ($op eq 'delete_confirm') { - $template->param(delete_confirm => 1); - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("select word from stopwords where word=?"); - $sth->execute($searchfield); - my $data=$sth->fetchrow_hashref; - $sth->finish; - # END $OP eq DELETE_CONFIRM -################## DELETE_CONFIRMED ################################## -# called by delete_confirm, used to effectively confirm deletion of data in DB -} elsif ($op eq 'delete_confirmed') { - $template->param(delete_confirmed => 1); - my $dbh = C4::Context->dbh; - my $sth=$dbh->prepare("delete from stopwords where word=?"); - $sth->execute($searchfield); - $sth->finish; - # END $OP eq DELETE_CONFIRMED -################## DEFAULT ################################## -} else { # DEFAULT - $template->param(else => 1); - - my $env; - my ($count,$results)=StringSearch($env,$searchfield,'web'); - my @loop; - my $toggle = 'white'; - for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){ - my %row = (word => $results->[$i]{'word'}, - toggle => $toggle); - push @loop, \%row; - - if ( $toggle eq 'white' ) - { - $toggle = '#ffffcc'; - } - else - { - $toggle = 'white'; - } - } - $template->param(loop => \@loop); - - if ($offset>0) { - $template->param(offsetgtzero => 1, - prevpage => $offset-$pagesize); - } - if ($offset+$pagesize<$count) { - $template->param(ltcount => 1, - nextpage => $offset+$pagesize); - } +# if we are on the last page, the number of the last word to display must +# not exceed the length of the results array +my $last = min( + $first + $pagesize - 1, + scalar(@results) - 1, +); + +foreach my $word (@results[$first .. $last]) { + push @loop, {word => $word}; } - -output_html_with_http_headers $input, $cookie, $template->output; +$template->param( + loop => \@loop, + pagination_bar => pagination_bar( + $script_name, + int(scalar(@results) / $pagesize) + 1, + $page, + 'page' + ) +); + +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/admin/stopwords.tmpl b/koha-tmpl/intranet-tmpl/prog/en/admin/stopwords.tmpl index c20fc89676..e998666bcf 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/admin/stopwords.tmpl +++ b/koha-tmpl/intranet-tmpl/prog/en/admin/stopwords.tmpl @@ -1,159 +1,97 @@ -Koha -- System Administration: -Stop Words Administration -Modify Stop WordAdd Stop Word -Stop Word Added -Confirm Deletion of Stop Word '' -Stop Word Deleted + +Koha -- System Administration: Stop Words Administration - - - - - -
- - -

Modify Stop Word

- -

Add Stop Word

- - - - - - - - - - - - - -
Stop Word -
Stop Word: - -

Update Stop WordAdd Stop Word " onclick="Check(this.form);" /> ';" />

-
- + - -

Stop Word Added

-
" method="post"> - -
- +

Stop Words Administration

- -

Confirm Deletion of Stop Word

- - - - -
Stop Word:
" method="post"> - - " /> -
" method="post"> - -
- + - -

Stop Words Administration

-
" method="post"> - " /> - -
- - You searched for - - - - - - - - - - - - - -
Word 
?op=delete_confirm&searchfield=">Delete
- - -
" method="get">" />
-
" method="post"> - -
-
" method="get">" />
- - +
- + +
+ Confirm - +

Confirm Deletion of the following Stop Words:

+
    + +
  • + + " /> +
  • + +
+

+ + +

+
+
+ Add Stop Words + + + + + + +
Stop Words + +
+ +

+ + +

+
+ +
+ Stop Words selection + +

+ " /> + +

+ +
    + +
  • + +
  • + +
+ +
+ +

+ + +

+
+
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet.css b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet.css index 1ddaa5d2d0..eb86c6ae00 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/intranet.css +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/intranet.css @@ -33,7 +33,7 @@ th[scope=row] { text-align : right; } -input[type=submit], input[type=button] { +input[type=submit], input[type=button], input[type=reset] { background-color : #6699cc; color : #FFFFFF; font-size : 1em; @@ -44,3 +44,10 @@ tr.highlight td, tr.highlight th { background-color : #EEEEEE; } +#admin_stopwords_select UL { + width: 600px; +} + +#admin_stopwords_select UL LI { + white-space: nowrap; +} \ No newline at end of file -- 2.39.5