Koha/serials/routing.pl
Dobrica Pavlinusic d542740ab8 Bug 6554 - make Koha internally utf-8 clean
In current implementation (mostly commented out in this patch)
uses heuristic to guess which strings need decoding from utf-8
to binary representation and doesn't support utf-8 characters
in templates and has problems with utf-8 data from database.

With this changes, Koha perl code always uses utf-8 encoding
correctly. All incomming data from database is allready
correctly marked as utf-8, and decoding of utf8 is required
only from Zebra and XSLT transfers which don't set utf-8 flag
correctly.

For output, standard perl :encoding(utf8) handler is used
so it also removes various "wide character" warnings as side-effect.

Test scenario:
1. make sure that you have utf-8 characters in your biblio
   records, patrons, categories etc.
2. try to search records on intranet and opac which contain
   utf-8 characters
3. install language which has utf-8 characters, e.g. uk-UA
   dpavlin@koha-dev:/srv/koha/misc/translator(bug_6554) $
   PERL5LIB=/srv/koha/ perl translate install uk-UA
4. switch language to uk-UA and verify that templates
   display correctly
5. test search and Z39.50 search and verify that caracters
   are correct

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

I followed the test plan, adding utf-8 characters to library names,
patron categories, titles, and authorized values. I tried the uk-UA
translation and everything looked good.

When performing Z39.50 searches for titles containing utf-8 characters I
got results which were still occasionally contaminated with dummy
characters [?] but I assume this is Z39.50's fault not the patch's.

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Bernardo Gonzalez Kriegel <bgkriegel@gmail.com>
Already signed, add mine.
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
2013-04-01 18:51:49 -04:00

128 lines
3.7 KiB
Perl
Executable file

#!/usr/bin/perl
# 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
=head1 Routing.pl
script used to create a routing list for a serial subscription
In this instance it is in fact a setting up of a list of reserves for the item
where the hierarchical order can be changed on the fly and a routing list can be
printed out
=cut
use strict;
use warnings;
use CGI;
use C4::Koha;
use C4::Auth;
use C4::Dates;
use C4::Output;
use C4::Acquisition;
use C4::Output;
use C4::Context;
use C4::Members;
use C4::Serials;
use URI::Escape;
my $query = new CGI;
my $subscriptionid = $query->param('subscriptionid');
my $serialseq = $query->param('serialseq');
my $routingid = $query->param('routingid');
my $borrowernumber = $query->param('borrowernumber');
my $notes = $query->param('notes');
my $op = $query->param('op') || q{};
my $date_selected = $query->param('date_selected');
$date_selected ||= q{};
my $dbh = C4::Context->dbh;
if($op eq 'delete'){
delroutingmember($routingid,$subscriptionid);
}
if($op eq 'add'){
addroutingmember($borrowernumber,$subscriptionid);
}
if($op eq 'save'){
my $sth = $dbh->prepare('UPDATE serial SET routingnotes = ? WHERE subscriptionid = ?');
$sth->execute($notes,$subscriptionid);
my $urldate = URI::Escape::uri_escape_utf8($date_selected);
print $query->redirect("routing-preview.pl?subscriptionid=$subscriptionid&issue=$urldate");
}
my @routinglist = getroutinglist($subscriptionid);
my $subs = GetSubscription($subscriptionid);
my ($count,@serials) = GetSerials($subscriptionid);
my $serialdates = GetLatestSerials($subscriptionid,$count);
my $dates = [];
foreach my $dateseq (@{$serialdates}) {
my $d = {};
$d->{planneddate} = $dateseq->{planneddate};
$d->{serialseq} = $dateseq->{serialseq};
$d->{serialid} = $dateseq->{serialid};
if($date_selected eq $dateseq->{serialid}){
$d->{selected} = ' selected';
} else {
$d->{selected} = q{};
}
push @{$dates}, $d;
}
my ($template, $loggedinuser, $cookie)
= get_template_and_user({template_name => 'serials/routing.tmpl',
query => $query,
type => 'intranet',
authnotrequired => 0,
flagsrequired => {serials => 'routing'},
debug => 1,
});
my $member_loop = [];
for my $routing ( @routinglist ) {
my $member=GetMember('borrowernumber' => $routing->{borrowernumber});
$member->{location} = $member->{branchcode};
if ($member->{firstname} ) {
$member->{name} = $member->{firstname} . q| |;
}
else {
$member->{name} = q{};
}
if ($member->{surname} ) {
$member->{name} .= $member->{surname};
}
$member->{routingid}=$routing->{routingid} || q{};
$member->{ranking} = $routing->{ranking} || q{};
push(@{$member_loop}, $member);
}
$template->param(
title => $subs->{bibliotitle},
subscriptionid => $subscriptionid,
memberloop => $member_loop,
op => $op eq 'new',
dates => $dates,
routingnotes => $serials[0]->{'routingnotes'},
hasRouting => check_routing($subscriptionid),
(uc(C4::Context->preference("marcflavour"))) => 1
);
output_html_with_http_headers $query, $cookie, $template->output;