X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=lib%2FPackages%2FTemplate.pm;h=60cabd6acfb0aaf79e6928743ec9b6260c075711;hb=f4bd5d6e5488854bc9633fb5629cc70d1045e9fa;hp=554f2ce0e4c8551248ad625a9d0224190c1fff01;hpb=bedf14e393ba83316aca3e442c14f24914a6cd84;p=deb%2Fpackages.git diff --git a/lib/Packages/Template.pm b/lib/Packages/Template.pm index 554f2ce..60cabd6 100644 --- a/lib/Packages/Template.pm +++ b/lib/Packages/Template.pm @@ -5,9 +5,13 @@ use warnings; use Template; use Locale::gettext; +use URI (); +use HTML::Entities (); +use URI::Escape (); use Benchmark ':hireswallclock'; use Packages::CGI; +use Packages::Config qw( @LANGUAGES ); use Packages::I18N::Locale; use Packages::I18N::Languages; use Packages::I18N::LanguageNames; @@ -19,6 +23,7 @@ use constant COMPILE => 1; sub new { my ($classname, $include, $format, $vars, $options) = @_; + $vars ||= {}; $options ||= {}; my $self = {}; @@ -29,6 +34,19 @@ sub new { year => $timestamp[5]+1900, string => scalar gmtime() .' UTC', }; + $vars->{make_search_url} = sub { return &Packages::CGI::make_search_url(@_) }; + $vars->{make_url} = sub { return &Packages::CGI::make_url(@_) }; + $vars->{g} = sub { return &Packages::I18N::Locale::tt_gettext(@_) }; + $vars->{extract_host} = sub { my $uri = URI->new($_[0]); + my $host = $uri->host; + $host .= ':'.$uri->port if $uri->port != $uri->default_port; + return $host; + }; + # needed to work around the limitations of the the FILTER syntax + $vars->{html_encode} = sub { return HTML::Entities::encode_entities(@_,'<>&"') }; + $vars->{uri_escape} = sub { return URI::Escape::uri_escape(@_) }; + $vars->{quotemeta} = sub { return quotemeta($_[0]) }; + $vars->{string2id} = sub { return &Packages::CGI::string2id(@_) }; $self->{template} = Template->new( { PRE_PROCESS => [ 'config.tmpl' ], @@ -36,7 +54,7 @@ sub new { VARIABLES => $vars, COMPILE_EXT => '.ttc', %$options, - } ) or fatal_error( sprintf( _g( "Initialization of Template Engine failed: %s" ), $Template::ERROR ) ); + } ) or die sprintf( "Initialization of Template Engine failed: %s", $Template::ERROR ); $self->{format} = $format; $self->{vars} = $vars; @@ -53,19 +71,23 @@ sub error { } sub page { - my ($self, $action, $page_content) = @_; + my ($self, $action, $page_content, $target) = @_; #use Data::Dumper; #die Dumper($self, $action, $page_content); - $page_content->{used_langs} ||= [ 'en' ]; + $page_content->{used_langs} ||= \@LANGUAGES; $page_content->{langs} = languages( $page_content->{lang} || $self->{vars}{lang} || 'en', @{$page_content->{used_langs}} ); my $txt; - $self->process("$self->{format}/$action.tmpl", $page_content, \$txt) - or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line - + if ($target) { + $self->process("$self->{format}/$action.tmpl", $page_content, $target) + or die sprintf( "template error: %s", $self->error ); # too late for reporting on-line + } else { + $self->process("$self->{format}/$action.tmpl", $page_content, \$txt) + or die sprintf( "template error: %s", $self->error ); + } return $txt; }