X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FLetters.pm;h=0349efe6c196ee7940edaf9ec6993b15fc531f65;hb=7668e19c9593da570cffb5cd4640fe175d739328;hp=9e610c2efc57031723695a9ca47da767af180724;hpb=7061e74676d17c4a306a9bec07bdb02597850817;p=koha.git diff --git a/C4/Letters.pm b/C4/Letters.pm index 9e610c2efc..0349efe6c1 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -30,7 +30,6 @@ use C4::Log; use C4::SMS; use C4::Debug; use Koha::DateUtils; - use Date::Calc qw( Add_Delta_Days ); use Encode; use Carp; @@ -118,13 +117,18 @@ sub GetLetters { return \%letters; } -my %letter; +# FIXME: using our here means that a Plack server will need to be +# restarted fairly regularly when working with this routine. +# A better option would be to use Koha::Cache and use a cache +# that actually works in a persistent environment, but as a +# short-term fix, our will work. +our %letter; sub getletter { my ( $module, $code, $branchcode ) = @_; $branchcode ||= ''; - if ( C4::Context->preference('IndependantBranches') + if ( C4::Context->preference('IndependentBranches') and $branchcode and C4::Context->userenv ) { @@ -552,15 +556,17 @@ sub _substitute_tables { } } -my %handles = (); sub _parseletter_sth { my $table = shift; + my $sth; unless ($table) { carp "ERROR: _parseletter_sth() called without argument (table)"; return; } - # check cache first - (defined $handles{$table}) and return $handles{$table}; + # NOTE: we used to check whether we had a statement handle cached in + # a %handles module-level variable. This was a dumb move and + # broke things for the rest of us. prepare_cached is a better + # way to cache statement handles anyway. my $query = ($table eq 'biblio' ) ? "SELECT * FROM $table WHERE biblionumber = ?" : ($table eq 'biblioitems' ) ? "SELECT * FROM $table WHERE biblionumber = ?" : @@ -580,11 +586,11 @@ sub _parseletter_sth { warn "ERROR: No _parseletter_sth query for table '$table'"; return; # nothing to get } - unless ($handles{$table} = C4::Context->dbh->prepare($query)) { + unless ($sth = C4::Context->dbh->prepare_cached($query)) { warn "ERROR: Failed to prepare query: '$query'"; return; } - return $handles{$table}; # now cache is populated for that $table + return $sth; # now cache is populated for that $table } =head2 _parseletter($letter, $table, $values) @@ -598,7 +604,6 @@ sub _parseletter_sth { =cut -my %columns = (); sub _parseletter { my ( $letter, $table, $values ) = @_; @@ -614,15 +619,18 @@ sub _parseletter { } if ($letter->{content} && $letter->{content} =~ /<>/) { - my @da = localtime(); - my $todaysdate = "$da[2]:$da[1] " . C4::Dates->today(); + my $todaysdate = output_pref( DateTime->now() ); $letter->{content} =~ s/<>/$todaysdate/go; } while ( my ($field, $val) = each %$values ) { my $replacetablefield = "<<$table.$field>>"; my $replacefield = "<<$field>>"; - $val =~ s/\p{P}(?=$)//g if $val; + $val =~ s/\p{P}$// if $val && $table=~/biblio/; + #BZ 9886: Assuming that we want to eliminate ISBD punctuation here + #Therefore adding the test on biblio. This includes biblioitems, + #but excludes items. Removed unneeded global and lookahead. + my $replacedby = defined ($val) ? $val : ''; ($letter->{title} ) and do { $letter->{title} =~ s/$replacetablefield/$replacedby/g;