From 5c3a962f492011bebe096a5a4b007062152df2d7 Mon Sep 17 00:00:00 2001 From: tetragon Date: Wed, 4 Apr 2007 02:35:26 +0000 Subject: First round of template changes for new TT system git-svn-id: https://ledger-smb.svn.sourceforge.net/svnroot/ledger-smb/trunk@1023 4979c152-3d1c-0410-bac9-87ea11338e46 --- LedgerSMB/Form.pm | 3 +- LedgerSMB/Template.pm | 87 ++++++++++++++++++++++++++++++++++++++++++++++ LedgerSMB/Template/HTML.pm | 57 ++++++++++++++++++++++++++++++ 3 files changed, 146 insertions(+), 1 deletion(-) create mode 100755 LedgerSMB/Template.pm create mode 100755 LedgerSMB/Template/HTML.pm (limited to 'LedgerSMB') diff --git a/LedgerSMB/Form.pm b/LedgerSMB/Form.pm index 0cf52871..e799753f 100644 --- a/LedgerSMB/Form.pm +++ b/LedgerSMB/Form.pm @@ -88,7 +88,7 @@ sub new { } - if (($self->{script} =~ m#(..|\\|/)#)){ + if (($self->{script} =~ m#(\.\.|\\|/)#)){ $self->error("Access Denied"); } @@ -601,6 +601,7 @@ sub parse_template { my ($chars_per_line, $lines_on_first_page, $lines_on_second_page) = (0, 0, 0); my ($current_page, $current_line) = (1, 1); + print STDERR "Using deprecated Form::parse_template function\n"; my $pagebreak = ""; my $sum = 0; diff --git a/LedgerSMB/Template.pm b/LedgerSMB/Template.pm new file mode 100755 index 00000000..2c1a9d8f --- /dev/null +++ b/LedgerSMB/Template.pm @@ -0,0 +1,87 @@ +#===================================================================== +# +# Template support module for LedgerSMB +# LedgerSMB::Template +# +# LedgerSMB +# Small Medium Business Accounting software +# http://www.ledgersmb.org/ +# +# +# Copyright (C) 2007 +# This work contains copyrighted information from a number of sources all used +# with permission. It is released under the GNU General Public License +# Version 2 or, at your option, any later version. See COPYRIGHT file for +# details. +# +# +#====================================================================== +# This package contains template related functions: +# +# +#==================================================================== +use Error qw(:try); +use Template; +use LedgerSMB::Sysconfig; + +package LedgerSMB::Template; + +sub new { + my $class = shift; + my $self = {}; + $self->{myconfig} = shift; + $self->{template} = shift; + $self->{format} = shift; + $self->{language} = shift; + $self->{output} = ''; + bless $self, $class; + return $self; +} + +sub valid_language { + my $self = shift; + # XXX Actually perform validity checks + return 1; +} + +sub render { + my $self = shift; + my $vars = shift; + my $template; + + if (not defined $self->{language}) { + $template = Template->new({ + INCLUDE_PATH => $self->{'myconfig'}->{'templates'}, + START_TAG => quotemeta(' quotemeta('?>'), + DELIMITER => ';', + }) || throw Error::Simple Template->error(); + } elsif ($self->valid_language()) { + $template = Template->new({ + INCLUDE_PATH => "$self->{'myconfig'}->{'templates'}/$self->{language};$self->{'myconfig'}->{'templates'}", + START_TAG => quotemeta(' quotemeta('?>'), + DELIMITER => ';', + }) || throw Error::Simple Template->error(); + } else { + throw Error::Simple 'Invalid language'; + } + + eval "require LedgerSMB::Template::$self->{format}"; + if ($@) { + throw Error::Simple $@; + } + + my $cleanvars = &{"LedgerSMB::Template::$self->{format}::preprocess"}($vars); + if (not $template->process( + &{"LedgerSMB::Template::$self->{format}::get_template"}($self->{template}), + $cleanvars, \$self->{output}, binmode => ':utf8')) { + throw Error::Simple $template->error(); + } + + &{"LedgerSMB::Template::$self->{format}::postprocess"}($self); + + return $self->{output}; +} + +1; diff --git a/LedgerSMB/Template/HTML.pm b/LedgerSMB/Template/HTML.pm new file mode 100755 index 00000000..8e610e26 --- /dev/null +++ b/LedgerSMB/Template/HTML.pm @@ -0,0 +1,57 @@ +=head1 NAME + +LedgerSMB::Template::HTML Template support module for LedgerSMB + +=head1 METHODS + +=item get_template () + +=item preprocess ($vars) +This method returns a reference to a hash that contains a copy of the passed +hashref's data with HTML entities converted to escapes. + +=item postprocess () + +=head1 Copyright (C) 2007, The LedgerSMB core team. + +# This work contains copyrighted information from a number of sources all used +# with permission. +# +# It is released under the GNU General Public License Version 2 or, at your +# option, any later version. See COPYRIGHT file for details. For a full list +# including contact information of contributors, maintainers, and copyright +# holders, see the CONTRIBUTORS file. +=cut + +use Error qw(:try); +use CGI; + +package LedgerSMB::Template::HTML; + +sub get_template { + my $name = shift; + return "${name}.html"; +} + +sub preprocess { + my $rawvars = shift; + my $vars; + my $type = ref $rawvars; + +#XXX fix escaping function + if ($type eq 'ARRAY') { + } elsif ($type eq 'HASH') { + for (keys %{$rawvars}) { + $vars->{$_} = preprocess($rawvars[$_]); + } + } else { + return CGI::escapeHTML($rawvars); + } +} + +sub postprocess { + my $parent = shift; + return; +} + +1; -- cgit v1.2.3