From 8caf4b5277b7460aad6347c2de47c267eda0cd9d Mon Sep 17 00:00:00 2001 From: tipaul Date: Thu, 28 Jul 2005 15:10:12 +0000 Subject: [PATCH] Introducing new "Letters" system : Letters will be used everytime you want to sent something to someone (through mail or paper). For example, sending a mail for overdues use letter that you can put as parameters. Sending a mail to a borrower when a suggestion is validated uses a letter too. the letter table contains 3 fields : * code => the code of the letter * name => the complete name of the letter * content => the complete text. It's a TEXT field type, so has no limits. My next goal now is to work on point 2-I "serial issue alert" With this feature, in serials, a user can subscribe the "issue alert". For every issue arrived/missing, a mail is sent to all subscribers of this list. The mail warns the user that the issue is arrive or missing. Will be in head. (see mail on koha-devel, 2005/04/07) The "serial issue alert" will be the 1st to use this letter system that probably needs some tweaking ;-) Once it will be stabilised default letters (in any languages) could be added during installer to help the library begin with this new feature. --- admin/letter.pl | 211 +++++++++++++++++ .../default/en/help/admin/letter.tmpl | 49 ++++ .../default/en/parameters/letter.tmpl | 218 ++++++++++++++++++ updater/updatedatabase | 36 +++ 4 files changed, 514 insertions(+) create mode 100755 admin/letter.pl create mode 100644 koha-tmpl/intranet-tmpl/default/en/help/admin/letter.tmpl create mode 100644 koha-tmpl/intranet-tmpl/default/en/parameters/letter.tmpl diff --git a/admin/letter.pl b/admin/letter.pl new file mode 100755 index 0000000000..1f87dc04c7 --- /dev/null +++ b/admin/letter.pl @@ -0,0 +1,211 @@ +#!/usr/bin/perl + +#script to administer the aqbudget 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 +# terms of the GNU General Public License as published by the Free Software +# Foundation; either version 2 of the License, or (at your option) any later +# version. +# +# Koha is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# 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 + +use strict; +use CGI; +use C4::Date; +use C4::Auth; +use C4::Context; +use C4::Output; +use C4::Interface::CGI::Output; +use C4::Search; +use HTML::Template; + +sub StringSearch { + my ($env,$searchstring,$type)=@_; + my $dbh = C4::Context->dbh; + $searchstring=~ s/\'/\\\'/g; + my @data=split(' ',$searchstring); + my $count=@data; + my $sth=$dbh->prepare("Select * from letter where (code like ?) order by code"); + $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 $input = new CGI; +my $searchfield=$input->param('searchfield'); +my $offset=$input->param('offset'); +my $script_name="/cgi-bin/koha/admin/letter.pl"; +my $code=$input->param('code'); +my $pagesize=20; +my $op = $input->param('op'); +$searchfield=~ s/\,//g; +my $dbh = C4::Context->dbh; + +my ($template, $borrowernumber, $cookie) + = get_template_and_user({template_name => "parameters/letter.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {tools => 1}, + debug => 1, + }); + +if ($op) { +$template->param(script_name => $script_name, + $op => 1); # we show only the TMPL_VAR names $op +} else { +$template->param(script_name => $script_name, + else => 1); # we show only the TMPL_VAR names $op +} + +$template->param(action => $script_name); +################## 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 $letter; + if ($code) { + my $sth=$dbh->prepare("select * from letter where code=?"); + $sth->execute($code); + $letter=$sth->fetchrow_hashref; + $sth->finish; + } + # build field list + my @SQLfieldname; + my $sth2=$dbh->prepare("SHOW COLUMNS from biblio"); + $sth2->execute; + my %line = ('value' => "", 'text' => '---BIBLIO---'); + push @SQLfieldname, \%line; + while ((my $field) = $sth2->fetchrow_array) { + my %line = ('value' => "biblio.".$field, 'text' => "biblio.".$field); + warn "$line{value}"; + push @SQLfieldname, \%line; + } + my $sth2=$dbh->prepare("SHOW COLUMNS from biblioitems"); + $sth2->execute; + my %line = ('value' => "", 'text' => '---BIBLIOITEMS---'); + push @SQLfieldname, \%line; + while ((my $field) = $sth2->fetchrow_array) { + my %line = ('value' => "biblioitems.".$field, 'text' => "biblioitems.".$field); + warn "$line{value}"; + push @SQLfieldname, \%line; + } + my %line = ('value' => "", 'text' => '---ITEMS---'); + push @SQLfieldname, \%line; + my %line = ('value' => "items.content", 'text' => 'items.content'); + push @SQLfieldname, \%line; + + my $sth2=$dbh->prepare("SHOW COLUMNS from borrowers"); + $sth2->execute; + my %line = ('value' => "", 'text' => '---BORROWERS---'); + push @SQLfieldname, \%line; + while ((my $field) = $sth2->fetchrow_array) { + my %line = ('value' => "borrowers.".$field, 'text' => "borrowers.".$field); + warn "$line{value}"; + push @SQLfieldname, \%line; + } + if ($code) { + $template->param(modify => 1); + $template->param(code => $letter->{code}); + } else { + $template->param(adding => 1); + } + $template->param(name => $letter->{name}, + content => $letter->{content}, + SQLfieldname => \@SQLfieldname,); + # 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 = C4::Context->dbh; + my $sth=$dbh->prepare("replace letter (code,name,content) values (?,?,?)"); + $sth->execute($input->param('code'),$input->param('name'),$input->param('content')); + $sth->finish; + print $input->redirect("letter.pl"); + exit; +# 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 = C4::Context->dbh; + my $sth=$dbh->prepare("select * from letter where code=?"); + $sth->execute($code); + my $data=$sth->fetchrow_hashref; + $sth->finish; + $template->param(code => $code); + $template->param(name => $data->{'name'}); + $template->param(content => $data->{'content'}); + # 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 = C4::Context->dbh; + my $code=uc($input->param('code')); + my $sth=$dbh->prepare("delete from letter where code=?"); + $sth->execute($code); + $sth->finish; + print $input->redirect("letter.pl"); + return; + # END $OP eq DELETE_CONFIRMED +################## DEFAULT ################################## +} else { # DEFAULT + if ($searchfield ne '') { + $template->param(search => 1); + $template->param(searchfield => $searchfield); + } + my $env; + my ($count,$results)=StringSearch($env,$searchfield,'web'); + my $toggle="white"; + my @loop_data =(); + for (my $i=$offset; $i < ($offset+$pagesize<$count?$offset+$pagesize:$count); $i++){ + if ($toggle eq 'white'){ + $toggle="#ffffcc"; + } else { + $toggle="white"; + } + my %row_data; + $row_data{toggle} = $toggle; + $row_data{code} = $results->[$i]{'code'}; + $row_data{name} = $results->[$i]{'name'}; + push(@loop_data, \%row_data); + } + $template->param(letter => \@loop_data); +} #---- END $OP eq DEFAULT + +output_html_with_http_headers $input, $cookie, $template->output; + diff --git a/koha-tmpl/intranet-tmpl/default/en/help/admin/letter.tmpl b/koha-tmpl/intranet-tmpl/default/en/help/admin/letter.tmpl new file mode 100644 index 0000000000..55a4536757 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/help/admin/letter.tmpl @@ -0,0 +1,49 @@ + + +

Letter administration

+ +

In this part of Koha, you can define "letters".

+

Letters will be used everytime you want to sent something to someone (through mail or paper). For example, sending a mail for overdues use letter that you can put as parameters. Sending a mail to a borrower when a suggestion is validated uses a letter too.

+

Letter contains specific "meta-tags" that are related to fields that will be replaced by a value at runtime. Here is a list of fields that can be used :

+

General

+ +

catalogue information

+ +

(items.content will contain one or more item informations, coming from items table)

+

borrower information

+

put borrower fields here

+ +All fields must be included in << and >>, like : <<biblio.title>> + \ No newline at end of file diff --git a/koha-tmpl/intranet-tmpl/default/en/parameters/letter.tmpl b/koha-tmpl/intranet-tmpl/default/en/parameters/letter.tmpl new file mode 100644 index 0000000000..6ec13d9bdc --- /dev/null +++ b/koha-tmpl/intranet-tmpl/default/en/parameters/letter.tmpl @@ -0,0 +1,218 @@ + +
+

Letters admin

+ +
+ +
+ +
You Searched for


+ + + + + + + + + + > + + + + + + +
CodeName  
+ "> + //images/fileopen.png" width="32" hspace="0" vspace="0" border="0"> + + + "> + //images/edittrash.png" width="32" hspace="0" vspace="0" border="0"> + +
+

+ +
+ +
+
+
+ + + + +
+ +

Modify letter

+ +

Add letter

+ +
+ + + +

+ "> +

+

+ +

+ + + +

+ +

+ + +

+ "> +

+

+ +

+

+ + +

+

+
+
+ + + + Data recorded +
" method="post"> + +
+ + + + + + + + + + " method="post"> + "> + + + + + + + + + + +
/images/background-mem.gif"> + Code + /images/background-mem.gif"> + +
Name
CONFIRM DELETION
" method="post">
+ + + + Data deleted +
" method="post"> + +
+ +
+ diff --git a/updater/updatedatabase b/updater/updatedatabase index 7ed7d404f6..82615f2b6c 100755 --- a/updater/updatedatabase +++ b/updater/updatedatabase @@ -72,6 +72,12 @@ my %requiretables = ( `info` TEXT default '' , PRIMARY KEY ( `timestamp` , `user` ) )", + letter => "( + code varchar(20) NOT NULL, + name varchar(100) NOT NULL, + content TEXT, + PRIMARY KEY (code) + )", ); my %requirefields = ( @@ -350,6 +356,21 @@ $sth->finish; exit; # $Log$ +# Revision 1.114 2005/07/28 15:10:13 tipaul +# Introducing new "Letters" system : Letters will be used everytime you want to sent something to someone (through mail or paper). For example, sending a mail for overdues use letter that you can put as parameters. Sending a mail to a borrower when a suggestion is validated uses a letter too. +# the letter table contains 3 fields : +# * code => the code of the letter +# * name => the complete name of the letter +# * content => the complete text. It's a TEXT field type, so has no limits. +# +# My next goal now is to work on point 2-I "serial issue alert" +# With this feature, in serials, a user can subscribe the "issue alert". For every issue arrived/missing, a mail is sent to all subscribers of this list. The mail warns the user that the issue is arrive or missing. Will be in head. +# (see mail on koha-devel, 2005/04/07) +# +# The "serial issue alert" will be the 1st to use this letter system that probably needs some tweaking ;-) +# +# Once it will be stabilised default letters (in any languages) could be added during installer to help the library begin with this new feature. +# # Revision 1.113 2005/07/28 08:38:41 tipaul # For instance, the return date does not rely on the borrower expiration date. A systempref will be added in Koha, to modify return date calculation schema : # * ReturnBeforeExpiry = yes => return date can't be after expiry date @@ -716,6 +737,21 @@ $sth->finish; exit; # $Log$ +# Revision 1.114 2005/07/28 15:10:13 tipaul +# Introducing new "Letters" system : Letters will be used everytime you want to sent something to someone (through mail or paper). For example, sending a mail for overdues use letter that you can put as parameters. Sending a mail to a borrower when a suggestion is validated uses a letter too. +# the letter table contains 3 fields : +# * code => the code of the letter +# * name => the complete name of the letter +# * content => the complete text. It's a TEXT field type, so has no limits. +# +# My next goal now is to work on point 2-I "serial issue alert" +# With this feature, in serials, a user can subscribe the "issue alert". For every issue arrived/missing, a mail is sent to all subscribers of this list. The mail warns the user that the issue is arrive or missing. Will be in head. +# (see mail on koha-devel, 2005/04/07) +# +# The "serial issue alert" will be the 1st to use this letter system that probably needs some tweaking ;-) +# +# Once it will be stabilised default letters (in any languages) could be added during installer to help the library begin with this new feature. +# # Revision 1.113 2005/07/28 08:38:41 tipaul # For instance, the return date does not rely on the borrower expiration date. A systempref will be added in Koha, to modify return date calculation schema : # * ReturnBeforeExpiry = yes => return date can't be after expiry date -- 2.39.5