From 1abb5a4a58b72559d47b9891a10e8e6492e89051 Mon Sep 17 00:00:00 2001 From: tonnesen Date: Tue, 5 Nov 2002 19:47:11 +0000 Subject: [PATCH] Adding an admin script for setting up the 'class' list in the advanced search pages. --- admin/itemtypesearchgroups.pl | 248 ++++++++++++++++++ .../default/en/parameters/admin-home.tmpl | 1 + t/webscripts/catalog.t | 6 +- updater/updatedatabase | 6 + 4 files changed, 260 insertions(+), 1 deletion(-) create mode 100755 admin/itemtypesearchgroups.pl diff --git a/admin/itemtypesearchgroups.pl b/admin/itemtypesearchgroups.pl new file mode 100755 index 0000000000..9a817f54a0 --- /dev/null +++ b/admin/itemtypesearchgroups.pl @@ -0,0 +1,248 @@ +#!/usr/bin/perl + +#script to administer the branches 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 + +use strict; +use C4::Output; +use CGI; +use C4::Search; +use C4::Database; + +sub StringSearch { + my ($env,$searchstring,$type)=@_; + my $dbh = &C4Connect; + $searchstring=~ s/\'/\\\'/g; + my @data=split(' ',$searchstring); + my $count=@data; + my $query="Select groupname,itemtypes from itemtypesearchgroups where (groupname like \"$data[0]%\") order by groupname"; + my $sth=$dbh->prepare($query); + $sth->execute; + my @results; + my $cnt=0; + while (my $data=$sth->fetchrow_hashref){ + push(@results,$data); + $cnt ++; + } + # $sth->execute; + $sth->finish; + $dbh->disconnect; + return ($cnt,\@results); +} + +my $input = new CGI; +my $searchfield=$input->param('searchfield'); +my $q_searchfield="'$searchfield'"; +my $pkfield="groupname"; +my $reqsel="select groupname,itemtypes from itemtypesearchgroups where groupname=$q_searchfield"; +my $reqdel="delete from itemtypsearchgroups where groupname=$q_searchfield"; +my $offset=$input->param('offset'); +my $script_name="/cgi-bin/koha/admin/itemtypesearchgroups.pl"; + +my $pagesize=20; +my $op = $input->param('op'); +$searchfield=~ s/\,//g; +print $input->header; + +#start the page and read in includes +print startpage(); +print startmenu('admin'); + +################## ADD_FORM ################################## +# called by default. Used to create form to add or modify a record +if ($op eq 'add_form') { + #---- if primkey exists, it's a modify action, so read values to modify... + my $data; + if ($searchfield) { + my $dbh = &C4Connect; + my $sth=$dbh->prepare("select groupname,itemtypes from itemtypesearchgroups where groupname=$q_searchfield"); + $sth->execute; + $data=$sth->fetchrow_hashref; + $sth->finish; + } + print < + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + function isNotNull(f,noalert) { + if (f.value.length ==0) { + return false; + } + return true; + } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + function toUC(f) { + var x=f.value.toUpperCase(); + f.value=x; + return true; + } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + function isNum(v,maybenull) { + var n = new Number(v.value); + if (isNaN(n)) { + return false; + } + if (maybenull==0 && v.value=='') { + return false; + } + return true; + } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + function isDate(f) { + var t = Date.parse(f.value); + if (isNaN(t)) { + return false; + } + } + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// + function Check(f) { + var ok=1; + var _alertString=""; + var alertString2; + if (f.searchfield.value.length==0) { + _alertString += "- Group Name missing\\n"; + } + if (f.itemtypes.value.length==0) { + _alertString += "- Item Types missing\\n"; + } + if (_alertString.length==0) { + document.Aform.submit(); + } else { + alertString2 = "Form not submitted because of the following problem(s)\\n"; + alertString2 += "------------------------------------------------------------------------------------\\n\\n"; + alertString2 += _alertString; + alert(alertString2); + } + } + +printend +;#/ + if ($searchfield) { + print "

Modify branch

"; + } else { + print "

Add branch

"; + } + print "
"; + print ""; + print ""; + if ($searchfield) { + print ""; + } else { + print ""; + } + print ""; + print ""; + print "
Group Name$searchfield
Group Nme
Name 
 
"; + print "
"; +; + # END $OP eq ADD_FORM +################## ADD_VALIDATE ################################## +# called by add_form, used to insert/modify data in DB +} elsif ($op eq 'add_validate') { + my $dbh=C4Connect; + my $query = "replace itemtypesearchgroups (groupname,itemtypes) values ("; + $query.= $dbh->quote($input->param('searchfield')).","; + $query.= $dbh->quote($input->param('itemtypes')).")"; + my $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; + print "data recorded"; + print "
"; + print ""; + print "
"; + # END $OP eq ADD_VALIDATE +################## DELETE_CONFIRM ################################## +# called by default form, used to confirm deletion of data in DB +} elsif ($op eq 'delete_confirm') { + my $dbh = &C4Connect; + my $sth=$dbh->prepare("select count(*) as total from borrowers where branchcode='$searchfield'"); + $sth->execute; + my $total = $sth->fetchrow_hashref; + $sth->finish; + print "$reqsel"; + my $sth=$dbh->prepare($reqsel); + $sth->execute; + my $data=$sth->fetchrow_hashref; + $sth->finish; + print mktablehdr; + print mktablerow(2,'#99cc33',bold('Branch code'),bold("$searchfield"),'/images/background-mem.gif'); + print "
"; + print "Group Name$data->{'searchfield'}"; + print "Item Types$data->{'itemtypes'}"; + print "CONFIRM DELETION"; + print "
"; + # 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') { + my $dbh=C4Connect; +# my $searchfield=$input->param('branchcode'); + my $sth=$dbh->prepare($reqdel); + $sth->execute; + $sth->finish; + print "data deleted"; + print "
"; + print ""; + print "
"; + # END $OP eq DELETE_CONFIRMED +################## DEFAULT ################################## +} else { # DEFAULT + my @inputs=(["text","searchfield",$searchfield], + ["reset","reset","clr"]); + print mkheadr(2,'Item Type Search Group Admin'); + print mkformnotable("$script_name",@inputs); + print <$searchfield

"; + } + print mktablehdr; + print mktablerow(4,'#99cc33',bold('Group Name'),bold('Item Types'), + ' ',' ','/images/background-mem.gif'); + my $env; + my ($count,$results)=StringSearch($env,$searchfield,'web'); + my $toggle="white"; + for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){ + if ($toggle eq 'white'){ + $toggle="#ffffcc"; + } else { + $toggle="white"; + } + print mktablerow(4,$toggle,$results->[$i]{'groupname'},$results->[$i]{'itemtypes'}, + mklink("$script_name?op=add_form&searchfield=".$results->[$i]{'branchcode'},'Edit'), + mklink("$script_name?op=delete_confirm&searchfield=".$results->[$i]{'branchcode'},'Delete')); + } + print mktableft; + print "

"; + print ""; + if ($offset>0) { + my $prevpage = $offset-$pagesize; + print mklink("$script_name?offset=".$prevpage,'<< Prev'); + } + print "      "; + if ($offset+$pagesize<$count) { + my $nextpage =$offset+$pagesize; + print mklink("$script_name?offset=".$nextpage,'Next >>'); + } + print "

"; + print "
"; +} #---- END $OP eq DEFAULT +print endmenu('admin'); +print endpage(); diff --git a/koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl b/koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl index 07f4993c70..a142df0a15 100644 --- a/koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl +++ b/koha-tmpl/intranet-tmpl/default/en/parameters/admin-home.tmpl @@ -11,6 +11,7 @@ CurrenciesCurrencies of booksellers. PrintersPrinters (UNIX paths). stopwordsWords deleted during searches +stopwordsItemtype groups for search menu Z39.50 ServersServers used to download MARC records to Koha systempreferencesSystem preferences diff --git a/t/webscripts/catalog.t b/t/webscripts/catalog.t index cc905d88d6..aa4907f7ec 100644 --- a/t/webscripts/catalog.t +++ b/t/webscripts/catalog.t @@ -4,7 +4,7 @@ BEGIN { exit; } - $| = 1; print "1..28\n"; + $| = 1; print "1..29\n"; $::intranetdir=`grep intranetdir /etc/koha.conf`; chomp $::intranetdir; $::intranetdir=~s/\s*intranetdir\s*=\s*//i; @@ -48,6 +48,10 @@ $test='Author search - Thompson'; $script="$intranetdir/cgi-bin/search.pl author=thompson"; contains($script, $test, [200,164]); +$test='Author search - Johnson, Edna'; +$script="$intranetdir/cgi-bin/search.pl author=Johnson,%20Edna"; +contains($script, $test, [276]); + $test='Subject search - bear'; $script="$intranetdir/cgi-bin/search.pl subject=bear"; diff --git a/updater/updatedatabase b/updater/updatedatabase index 8e5a7780b2..0a6a5ffa3a 100755 --- a/updater/updatedatabase +++ b/updater/updatedatabase @@ -109,6 +109,8 @@ my %requiretables=( userid char(100) NOT NULL default '', ip char(18) NOT NULL default '', url text NOT NULL default '' )", + itemtypesearchgroups=>"( groupname varchar(255) NOT NULL default '' primary key, + itemtypes char(100) NOT NULL default '')", ); @@ -415,6 +417,10 @@ $dbh->disconnect; exit; # $Log$ +# Revision 1.4.2.26 2002/11/05 19:47:12 tonnesen +# Adding an admin script for setting up the 'class' list in the advanced search +# pages. +# # Revision 1.4.2.25 2002/10/29 20:22:43 tonnesen # buildrelease now puts the test scripts in $intranetdir/scripts/t/ # -- 2.39.5