]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 413121 รข\80\93 UTF-8 in templates are garbaged.
authorwurblzap%gmail.com <>
Thu, 14 Feb 2008 04:40:10 +0000 (04:40 +0000)
committerwurblzap%gmail.com <>
Thu, 14 Feb 2008 04:40:10 +0000 (04:40 +0000)
Patch by Marc Schumann <wurblzap@gmail.com>;
r=mkanat, a=mkanat

Bugzilla/Template.pm
Bugzilla/Template/Parser.pm [new file with mode: 0755]

index 9df831c7a8e3e99f01c9f7410a59d89d42a00b4f..e9b6c3b9cf7fe9e093289b233cc2dffad1c96f83 100644 (file)
@@ -41,6 +41,7 @@ use Bugzilla::Util;
 use Bugzilla::User;
 use Bugzilla::Error;
 use Bugzilla::Status;
+use Bugzilla::Template::Parser;
 
 use Cwd qw(abs_path);
 use MIME::Base64;
@@ -54,6 +55,28 @@ use IO::Dir;
 
 use base qw(Template);
 
+# As per the Template::Base documentation, the _init() method is being called 
+# by the new() constructor. We take advantage of this in order to plug our
+# UTF-8-aware Parser object in neatly after the original _init() method has
+# happened, in particular, after having set up the constants namespace.
+# See bug 413121 for details.
+sub _init {
+    my $self = shift;
+    my $config = $_[0];
+
+    $self->SUPER::_init(@_) || return undef;
+
+    $self->{PARSER} = $config->{PARSER}
+        = new Bugzilla::Template::Parser($config);
+
+    # Now we need to re-create the default Service object, making it aware
+    # of our Parser object.
+    $self->{SERVICE} = $config->{SERVICE}
+        = Template::Config->service($config);
+
+    return $self;
+}
+
 # Convert the constants in the Bugzilla::Constants module into a hash we can
 # pass to the template object for reflection into its "constants" namespace
 # (which is like its "variables" namespace, but for constants).  To do so, we
diff --git a/Bugzilla/Template/Parser.pm b/Bugzilla/Template/Parser.pm
new file mode 100755 (executable)
index 0000000..0965e07
--- /dev/null
@@ -0,0 +1,66 @@
+# -*- Mode: perl; indent-tabs-mode: nil -*-
+#
+# The contents of this file are subject to the Mozilla Public
+# License Version 1.1 (the "License"); you may not use this file
+# except in compliance with the License. You may obtain a copy of
+# the License at http://www.mozilla.org/MPL/
+#
+# Software distributed under the License is distributed on an "AS
+# IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+# implied. See the License for the specific language governing
+# rights and limitations under the License.
+#
+# The Original Code is the Bugzilla Bug Tracking System.
+#
+# The Initial Developer of the Original Code is Marc Schumann.
+# Portions created by Marc Schumann are Copyright (C) 2008 Marc Schumann.
+# All Rights Reserved.
+#
+# Contributor(s): Marc Schumann <wurblzap@gmail.com>
+
+
+package Bugzilla::Template::Parser;
+
+use strict;
+
+use base qw(Template::Parser);
+
+sub parse {
+    my ($self, $text, @params) = @_;
+    if (Bugzilla->params->{'utf8'}) {
+        utf8::is_utf8($text) || utf8::decode($text);
+    }
+    return $self->SUPER::parse($text, @params);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Bugzilla::Template::Parser - Wrapper around the Template Toolkit
+C<Template::Parser> object
+
+=head1 DESCRIPTION
+
+This wrapper makes the Template Toolkit aware of UTF-8 templates.
+
+=head1 SUBROUTINES
+
+=over
+
+=item C<parse($options)>
+
+Description: Parses template text using Template::Parser::parse(),
+converting the text to UTF-8 encoding before, if necessary.
+
+Params:      C<$text> - Text to pass to Template::Parser::parse().
+
+Returns:     Parsed text as returned by Template::Parser::parse().
+
+=back
+
+=head1 SEE ALSO
+
+L<Template>