summaryrefslogtreecommitdiff
path: root/LedgerSMB/Template.pm
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/Template.pm
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/Template.pm')
-rwxr-xr-xLedgerSMB/Template.pm87
1 files changed, 87 insertions, 0 deletions
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;