removed old template system and replaced with template asset

This commit is contained in:
JT Smith 2005-01-05 17:28:14 +00:00
parent 023ce77917
commit 4798ba497d
50 changed files with 614 additions and 660 deletions

View file

@ -19,7 +19,7 @@ use WebGUI::Asset;
use WebGUI::HTTP;
use WebGUI::Session;
use WebGUI::Storage;
use WebGUI::Template;
use WebGUI::Asset::Template;
our @ISA = qw(WebGUI::Asset);
@ -93,7 +93,7 @@ sub getBox {
$var{"attachment.name"} = $self->get("filename");
$var{"attachment.size"} = $self->getStorageLocation->getSize;
$var{"attachment.type"} = $self->getStorageLocation->getFileExtension;
return WebGUI::Template::process(1,"AttachmentBox",\%var);
return WebGUI::Asset::Template->new("PBtmpl0000000000000003")->process(\%var);
}
@ -224,7 +224,7 @@ sub view {
$var{controls} = $self->getToolbar;
$var{fileUrl} = $self->getFileUrl;
$var{fileIcon} = $self->getFileIconUrl;
return WebGUI::Template::process("1","FileAsset",\%var);
return WebGUI::Asset::Template->new("PBtmpl0000000000000024")->process(\%var);
}

View file

@ -16,10 +16,12 @@ package WebGUI::Asset::File::Image;
use strict;
use WebGUI::Asset::File;
use WebGUI::Asset::Template;
use WebGUI::HTTP;
use WebGUI::Session;
use WebGUI::Utility;
# do a check to see if they've installed Image::Magick
my $hasImageMagick = 1;
eval " use Image::Magick; "; $hasImageMagick=0 if $@;
@ -206,7 +208,7 @@ sub view {
$var{fileUrl} = $self->getFileUrl;
$var{fileIcon} = $self->getFileIconUrl;
$var{thumbnail} = $self->getThumbnailUrl;
return WebGUI::Template::process("1","ImageAsset",\%var);
return WebGUI::Asset::Template->new("PBtmpl0000000000000088")->process(\%var);
}

View file

@ -22,7 +22,6 @@ use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::Storage;
use WebGUI::TabForm;
use WebGUI::Template;
use WebGUI::Utility;
our @ISA = qw(WebGUI::Asset);

View file

@ -0,0 +1,332 @@
package WebGUI::Asset::Template;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2004 Plain Black Corporation.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use HTML::Template;
use strict;
use WebGUI::Asset;
use WebGUI::HTTP;
use WebGUI::Session;
use WebGUI::Storage;
our @ISA = qw(WebGUI::Asset);
=head1 NAME
Package WebGUI::Asset::Template
=head1 DESCRIPTION
Provides a mechanism to provide a templating system in WebGUI.
=head1 SYNOPSIS
use WebGUI::Asset::Template;
=head1 METHODS
These methods are available from this class:
=cut
#-------------------------------------------------------------------
sub _getTemplateFile {
my $templateId = shift;
my $filename = $templateId.".tmpl";
$filename =~ s/\//-/g;
$filename =~ s/ /-/g;
return WebGUI::Attachment->new($filename,"temp","templates");
}
#-------------------------------------------------------------------
sub _execute {
my $params = shift;
my $vars = shift;
my $t;
eval {
$t = HTML::Template->new(%{$params});
};
unless ($@) {
while (my ($section, $hash) = each %session) {
next unless (ref $hash eq 'HASH');
while (my ($key, $value) = each %$hash) {
unless (lc($key) eq "password" || lc($key) eq "identifier") {
$t->param("session.".$section.".".$key=>$value);
}
}
}
$t->param(%{$vars});
$t->param("webgui.version"=>$WebGUI::VERSION);
$t->param("webgui.status"=>$WebGUI::STATUS);
return $t->output;
} else {
WebGUI::ErrorHandler::warn("Error in template. ".$@);
return WebGUI::International::get(848).$@;
}
}
#-------------------------------------------------------------------
=head2 definition ( definition )
Defines the properties of this asset.
=head3 definition
A hash reference passed in from a subclass definition.
=cut
sub definition {
my $class = shift;
my $definition = shift;
push(@{$definition}, {
tableName=>'template',
className=>'WebGUI::Asset::Template',
properties=>{
template=>{
fieldType=>'codearea',
defaultValue=>undef
},
isEditable=>{
fieldType=>'hidden',
defaultValue=>1
},
showInForms=>{
fieldType=>'yesNo',
defaultValue=>1
},
namespace=>{
fieldType=>'hidden',
defaultValue=>undef
}
}
});
return $class->SUPER::definition($definition);
}
#-------------------------------------------------------------------
=head2 getEditForm ()
Returns the TabForm object that will be used in generating the edit page for this asset.
=cut
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("properties")->raw('<input type="hidden" name="op2" value="'.$session{form}{afterEdit}.'" />');
if ($session{form}{tid} eq "new") {
my $namespaces = WebGUI::SQL->buildHashRef("select distinct(namespace),namespace
from template order by namespace");
$tabform->getTab("properties")->selectList(
-name=>"namespace",
-options=>$namespaces,
-label=>WebGUI::International::get(721),
-value=>[$session{form}{namespace}]
);
}
$tabform->getTab("display")->yesNo(
-name=>"showInForms",
-value=>$self->getValue("showInForms"),
-label=>"Show in forms?"
);
$tabform->getTab("properties")->codearea(
-name=>"template",
-label=>WebGUI::International::get(504),
-value=>$self->getValue("template")
);
return $tabform;
}
#-------------------------------------------------------------------
sub getIcon {
my $self = shift;
my $small = shift;
return $session{config}{extrasURL}.'/assets/small/template.gif' if ($small);
return $session{config}{extrasURL}.'/assets/template.gif';
}
#-------------------------------------------------------------------
=head2 getList ( namespace )
Returns a hash reference containing template ids and template names of all the templates in the specified namespace.
NOTE: This is a class method.
=head3 namespace
Specify the namespace to build the list for.
=cut
sub getList {
my $class = shift;
my $namespace = shift;
return WebGUI::SQL->buildHashRef("select templateId,name from template where namespace=".quote($namespace)." and showInForms=1 order by name",WebGUI::SQL->getSlave);
}
#-------------------------------------------------------------------
=head2 getName
Returns the displayable name of this asset.
=cut
sub getName {
return "Template";
}
#-------------------------------------------------------------------
=head2 process ( vars )
Evaluate a template replacing template commands for HTML.
=head3 vars
A hash reference containing template variables and loops. Automatically includes the entire WebGUI session.
=cut
sub process {
my $self = shift;
my $vars = shift;
return $self->processRaw($self->get("template"),$vars);
# skip all the junk below here for now until we have time to bring it inline with the new system
my $file = _getTemplateFile($self->get("templateId"));
my $fileCacheDir = $session{config}{uploadsPath}.$session{os}{slash}."temp".$session{os}{slash}."templatecache";
my %params = (
filename=>$file->getPath,
global_vars=>1,
loop_context_vars=>1,
die_on_bad_params=>0,
no_includes=>1,
file_cache_dir=>$fileCacheDir,
strict=>0
);
my $error=0;
if ($session{config}{templateCacheType} =~ /file/) {
eval { mkpath($fileCacheDir) };
if($@) {
WebGUI::ErrorHandler::warn("Could not create dir $fileCacheDir: $@\nTemplate file caching disabled");
$error++;
}
if(not -w $fileCacheDir) {
WebGUI::ErrorHandler::warn("Directory $fileCacheDir is not writable. Template file caching is disabled");
$error++;
}
}
if ($session{config}{templateCacheType} eq "file" && not $error) {
# disabled until we can figure out what's wrong with it
# $params{file_cache} = 1;
} elsif ($session{config}{templateCacheType} eq "memory") {
$params{cache} = 1;
} elsif ($session{config}{templateCacheType} eq "ipc") {
$params{shared_cache} = 1;
} elsif ($session{config}{templateCacheType} eq "memory-ipc") {
$params{double_cache} = 1;
} elsif ($session{config}{templateCacheType} eq "memory-file" && not $error) {
$params{double_file_cache} = 1;
}
my $template;
unless (-e $file->getPath) {
$file->saveFromScalar($self->get("template"));
unless (-e $file->getPath) {
WebGUI::ErrorHandler::warn("Could not create file ".$file->getPath."\nTemplate file caching is disabled");
$params{scalarref} = \$template;
delete $params{filename};
}
}
return _execute(\%params,$vars);
}
#-------------------------------------------------------------------
=head2 processRaw ( template, vars )
Evaluate a template replacing template commands for HTML.
NOTE: This is a class method, no instance data required.
=head3 template
A scalar variable containing the template.
=head3 vars
A hash reference containing template variables and loops. Automatically includes the entire WebGUI session.
=cut
sub processRaw {
my $class = shift;
my $template = shift;
my $vars = shift;
return _execute({
scalarref=>\$template,
global_vars=>1,
loop_context_vars=>1,
die_on_bad_params=>0,
no_includes=>1,
strict=>0
},$vars);
}
sub view {
my $self = shift;
return $self->get("template");
}
#-------------------------------------------------------------------
sub www_edit {
my $self = shift;
return WebGUI::Privilege::insufficient() unless $self->canEdit;
$self->getAdminConsole->setHelp("template add/edit");
return $self->getAdminConsole->render($self->getEditForm->print,WebGUI::International::get(507));
}
sub www_view {
my $self = shift;
return WebGUI::Privilege::noAccess() unless $self->canView;
if ($session{var}{adminOn}) {
return $self->www_edit;
}
return $self->view;
}
1;

View file

@ -34,7 +34,7 @@ use WebGUI::Session;
use WebGUI::Style;
use WebGUI::SQL;
use WebGUI::TabForm;
use WebGUI::Template;
use WebGUI::Asset::Template;
use WebGUI::URL;
use WebGUI::Utility;
use WebGUI::MetaData;
@ -86,10 +86,6 @@ sub definition {
fieldType=>'interval',
defaultValue=>600
},
templateId=>{
fieldType=>'template',
defaultValue=>undef
},
styleTemplateId=>{
fieldType=>'template',
defaultValue=>undef
@ -241,11 +237,6 @@ sub getEditForm {
-value=>$self->getValue("displayTitle"),
-uiLevel=>5
);
$tabform->getTab("display")->template(
-value=>$self->getValue("templateId"),
-namespace=>$self->get("namespace"),
-afterEdit=>'func=edit&amp;wid='.$self->get("wobjectId")."&amp;namespace=".$self->get("namespace")
);
$tabform->getTab("display")->template(
-name=>"styleTemplateId",
-label=>WebGUI::International::get(1073),
@ -444,7 +435,7 @@ sub processPropertiesFromFormPost {
#-------------------------------------------------------------------
=head2 processTemplate ( vars, namespace [ , templateId ] )
=head2 processTemplate ( vars, templateId )
Returns the content generated from this template.
@ -452,21 +443,16 @@ Returns the content generated from this template.
A hash reference containing variables and loops to pass to the template engine.
=head3 namespace
A namespace to use for the template. Defaults to the wobject's namespace.
=head3 templateId
An id referring to a particular template in the templates table. Defaults to $self->get("templateId").
An id referring to a particular template in the templates table.
=cut
sub processTemplate {
my $self = shift;
my $var = shift;
my $namespace = shift;
my $templateId = shift || $self->get("templateId");
my $templateId = shift;
my $meta = WebGUI::MetaData::getMetaDataFields($self->get("wobjectId"));
foreach my $field (keys %$meta) {
$var->{$meta->{$field}{fieldName}} = $meta->{$field}{value};
@ -481,7 +467,7 @@ sub processTemplate {
my ($originalPageURL) = WebGUI::SQL->quickArray("select url from asset where assetId=".quote($self->getId),WebGUI::SQL->getSlave);
$vars{originalURL} = WebGUI::URL::gateway($originalPageURL."#".$self->getId);
}
return WebGUI::Template::process($templateId,$namespace, \%vars);
return WebGUI::Asset::Template->new($templateId)->process(\%vars);
}
#-------------------------------------------------------------------

View file

@ -31,6 +31,10 @@ sub definition {
tableName=>'Article',
className=>'WebGUI::Asset::Wobject::Article',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000002'
},
linkURL=>{
fieldType=>'url',
defaultValue=>undef
@ -54,6 +58,10 @@ sub definition {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"Article"
);
$tabform->getTab("properties")->text(
-name=>"linkTitle",
-label=>WebGUI::International::get(7,"Article"),
@ -169,7 +177,7 @@ sub view {
forumId=>$self->get("forumId")
});
} else {
return $self->processTemplate(\%var, "Article", $templateId);
return $self->processTemplate(\%var, $templateId);
}
}

View file

@ -131,6 +131,10 @@ sub definition {
tableName=>'DataForm',
className=>'WebGUI::Asset::Wobject::DataForm',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000020'
},
acknowledgement=>{
fieldType=>"textarea",
defaultValue=>undef
@ -188,6 +192,10 @@ sub duplicate {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm;
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"DataForm"
);
$tabform->getTab("display")->template(
-name=>"emailTemplateId",
-value=>$self->getValue("emailTemplateId"),
@ -563,7 +571,7 @@ sub purge {
sub sendEmail {
my $self = shift;
my $var = shift;
my $message = WebGUI::Macro::process($self->processTemplate($var,"DataForm",$self->get("emailTemplateId")));
my $message = WebGUI::Macro::process($self->processTemplate($var,$self->get("emailTemplateId")));
my ($to, $subject, $from, $bcc, $cc);
foreach my $row (@{$var->{field_loop}}) {
if ($row->{"field.name"} eq "to") {

View file

@ -36,6 +36,10 @@ sub definition {
tableName=>'HttpProxy',
className=>'WebGUI::Asset::Wobject::HttpProxy',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000033'
},
proxiedUrl=>{
fieldType=>"url",
defaultValue=>'http://'
@ -94,6 +98,10 @@ sub getCookieJar {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"HttpProxy"
);
my %hash;
tie %hash, 'Tie::IxHash';
%hash=(5=>5,10=>10,20=>20,30=>30,60=>60);
@ -191,7 +199,7 @@ sub view {
$redirect=0;
return $self->processTemplate({},"HttpProxy",$self->get("templateId")) unless ($proxiedUrl ne "");
return $self->processTemplate({},$self->get("templateId")) unless ($proxiedUrl ne "");
my $cachedContent = WebGUI::Cache->new($proxiedUrl,"URL");
my $cachedHeader = WebGUI::Cache->new($proxiedUrl,"HEADER");
@ -328,7 +336,7 @@ sub view {
WebGUI::HTTP::setMimeType($var{header});
return $var{content};
} else {
return $self->processTemplate(\%var,"HttpProxy",$self->get("templateId"));
return $self->processTemplate(\%var,$self->get("templateId"));
}
}

View file

@ -59,9 +59,13 @@ sub definition {
my $class = shift;
my $definition = shift;
push(@{$definition}, {
tableName=>'layout',
tableName=>'Layout',
className=>'WebGUI::Asset::Wobject::Layout',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000054'
},
contentPositions => {
defaultValue=>undef,
fieldType=>"hidden"
@ -84,6 +88,10 @@ Returns the TabForm object that will be used in generating the edit page for thi
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"Layout"
);
if ($self->get("assetId") eq "new") {
$tabform->getTab("properties")->whatNext(
-options=>{
@ -191,7 +199,7 @@ sub view {
';
}
return $self->processTemplate(\%vars, "page");
return $self->processTemplate(\%vars,$self->get("templateId"));
}

View file

@ -34,6 +34,10 @@ sub definition {
tableName=>'Navigation',
className=>'WebGUI::Asset::Wobject::Navigation',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000048'
},
assetsToInclude=>{
fieldType=>'checkList',
defaultValue=>"descendants"
@ -70,6 +74,10 @@ sub definition {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm;
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"Navigation"
);
my ($descendantsChecked, $selfChecked, $pedigreeChecked, $siblingsChecked);
my @assetsToInclude = split("\n",$self->getValue("assetsToInclude"));
my $afterScript;
@ -337,7 +345,7 @@ sub view {
}
push(@{$var->{page_loop}}, $pageData);
}
return $self->processTemplate($var,"Navigation",$self->get("templateId"));
return $self->processTemplate($var,$self->get("templateId"));
}

View file

@ -41,6 +41,10 @@ sub definition {
tableName=>'Poll',
className=>'WebGUI::Asset::Wobject::Poll',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000055'
},
active=>{
fieldType=>"yesNo",
defaultValue=>1
@ -165,6 +169,10 @@ sub duplcate {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm;
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"Poll"
);
my ($i, $answers);
for ($i=1; $i<=20; $i++) {
if ($self->get('a'.$i) =~ /\C/) {
@ -346,7 +354,7 @@ sub view {
}
randomizeArray(\@answers) if ($self->get("randomizeAnswers"));
$var{answer_loop} = \@answers;
return $self->processTemplate(\%var,"Poll",$self->get("templateId"));
return $self->processTemplate(\%var,$self->get("templateId"));
}
#-------------------------------------------------------------------

View file

@ -35,6 +35,10 @@ sub definition {
tableName=>'SQLReport',
className=>'WebGUI::Asset::Wobject::SQLReport',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000059'
},
paginateAfter=>{
fieldType=>"integer",
defaultValue=>50
@ -132,6 +136,10 @@ sub definition {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"SQLReport"
);
$tabform->getTab("properties")->yesNo(
-name=>"debugMode",
-label=>WebGUI::International::get(16,"SQLReport"),
@ -253,7 +261,7 @@ sub www_view {
# Add debug loop to template vars
$var->{'debug_loop'} = $self->{_debug_loop};
#use Data::Dumper; return '<pre>'.Dumper($var).'</pre>';
return $self->processTemplate($self->get("templateId"),$var);
return $self->processTemplate($var, $self->get("templateId"));
}
#-------------------------------------------------------------------

View file

@ -40,6 +40,10 @@ sub definition {
tableName=>'SyndicatedContent',
className=>'WebGUI::Asset::Wobject::SyndicatedContent',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000065'
},
rssUrl=>{
defaultValue=>undef,
fieldType=>"url"
@ -77,6 +81,10 @@ sub getUiLevel {
sub getEditForm {
my $self = shift;
my $tabform = $self->SUPER::getEditForm();
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"SyndicatedContent"
);
$tabform->getTab("properties")->url(
-name=>"rssUrl",
-label=>WebGUI::International::get(1,"SyndicatedContent"),

View file

@ -66,6 +66,10 @@ sub definition {
tableName=>'USS',
className=>'WebGUI::Asset::Wobject::USS',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000066'
},
submissionsPerPage=>{
fieldType=>"integer",
defaultValue=>50
@ -160,6 +164,10 @@ sub duplicate {
sub getEditForm {
my $self = shift;
my $tabform = $self->getEditForm;
$tabform->getTab("display")->template(
-value=>$self->getValue('templateId'),
-namespace=>"USS"
);
$tabform->getTab("display")->template(
-name=>"submissionTemplateId",
-value=>$self->getValue("submissionTemplateId"),
@ -460,7 +468,7 @@ sub view {
}
$var{submissions_loop} = \@submission;
$p->appendTemplateVars(\%var);
return $_[0]->processTemplate(\%var,"USS",$_[0]->get("templateId"));
return $_[0]->processTemplate(\%var,$_[0]->get("templateId"));
}
#-------------------------------------------------------------------

View file

@ -46,6 +46,10 @@ sub definition {
tableName=>'USS_submission',
className=>'WebGUI::Asset::Wobject::USS_submission',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000067'
},
submissionsPerPage=>{
fieldType=>"integer",
defaultValue=>50

View file

@ -55,6 +55,10 @@ sub definition {
tableName=>'WSClient',
className=>'WebGUI::Asset::Wobject::WSClient',
properties=>{
templateId =>{
fieldType=>"template",
defaultValue=>'PBtmpl0000000000000069'
},
callMethod => {
fieldType => 'textarea',
defaultValue=>undef
@ -138,7 +142,7 @@ sub getEditForm {
$tabform->getTab("display")->template(
-name => 'templateId',
-value => $self->getValue('templateId'),
-namespace => "WSClient",
-namespace => "WSClient"
);
$tabform->getTab("display")->yesNo (
-name => 'preprocessMacros',
@ -275,7 +279,7 @@ sub view {
WebGUI::ErrorHandler::warn("disabling soap call $call");
$var{'disableWobject'} = 1;
return $self->processTemplate(\%var,"WSClient",$self->get("templateId"));
return $self->processTemplate(\%var,$self->get("templateId"));
}
# advanced use, if you want to pass SOAP results to a single, particular
@ -484,7 +488,7 @@ sub view {
}
$var{'results'} = \@result;
return $self->processTemplate(\%var, "WSClient",$self->get("templateId"));
return $self->processTemplate(\%var, $self->get("templateId"));
}