summaryrefslogtreecommitdiff
path: root/LedgerSMB
diff options
context:
space:
mode:
authortetragon <tetragon@4979c152-3d1c-0410-bac9-87ea11338e46>2007-04-04 02:35:26 +0000
committertetragon <tetragon@4979c152-3d1c-0410-bac9-87ea11338e46>2007-04-04 02:35:26 +0000
commit5c3a962f492011bebe096a5a4b007062152df2d7 (patch)
tree4767953d3090870de43ccb992ed096545be9e4da /LedgerSMB
parenta3a6064b492c70ecacaa5b413547deb695212487 (diff)
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
Diffstat (limited to 'LedgerSMB')
-rw-r--r--LedgerSMB/Form.pm3
-rwxr-xr-xLedgerSMB/Template.pm87
-rwxr-xr-xLedgerSMB/Template/HTML.pm57
3 files changed, 146 insertions, 1 deletions
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('<?lsmb'),
+ END_TAG => 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('<?lsmb'),
+ END_TAG => 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;