Call prepareView on child assets in the prepareView phase to prevent their head tags showing up in our body.

This commit is contained in:
Martin Kamerbeek 2010-11-24 13:23:26 +01:00
parent d325e7a301
commit fffdb9d1a0

View file

@ -8,7 +8,7 @@ use Class::C3;
use WebGUI::User::SpecialState; use WebGUI::User::SpecialState;
use base qw{ use base qw{
WebGUI::AssetAspect::Mailable WebGUI::AssetAspect::Mailable
WebGUI::AssetAspect::Subscriber WebGUI::AssetAspect::Subscriber
WebGUI::Asset::Wobject WebGUI::Asset::Wobject
}; };
@ -35,7 +35,7 @@ sub definition {
defaultValue => 1, defaultValue => 1,
}, },
); );
push @{ $definition }, { push @{ $definition }, {
assetName => $i18n->get('assetName'), assetName => $i18n->get('assetName'),
icon => 'newsletter_collection.gif', icon => 'newsletter_collection.gif',
@ -52,12 +52,16 @@ sub definition {
sub getIssues { sub getIssues {
my $self = shift; my $self = shift;
my $issues = $self->getLineage( [ 'children' ], { # Caching of instanciated assets is not for speed, but is requied since prepareView is called on them, and we
returnObjects => 1, # need them again in that state in getViewVars.
orderByClause => 'lineage desc', unless ( $self->{ _issues } ) {
} ); $self->{ _issues } = $self->getLineage( [ 'children' ], {
returnObjects => 1,
return $issues; orderByClause => 'lineage desc',
} );
}
return $self->{ _issues };
} }
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
@ -88,7 +92,8 @@ sub getAssetContent {
my $self = shift; my $self = shift;
my $asset = shift; my $asset = shift;
$asset->prepareView; # Do not call prepareView on $asset here but rather do this in our own prepareView to prevent head tags being
# written to body.
my $content = $asset->view; my $content = $asset->view;
return $content; return $content;
@ -106,6 +111,11 @@ sub prepareView {
$self->{ _viewTemplate } = $template; $self->{ _viewTemplate } = $template;
# Call prepareview on issues here, to prevent head tags ending up in the body.
foreach my $issue ( @{ $self->getIssues } ) {
$issue->prepareView;
}
return; return;
} }
@ -126,7 +136,7 @@ sub getViewVars {
foreach my $issue ( @{ $issues } ) { foreach my $issue ( @{ $issues } ) {
my $issueVar = $issue->get; my $issueVar = $issue->get;
$issueVar->{ url } = $issue->getUrl; $issueVar->{ url } = $issue->getUrl;
my $isRecent = my $isRecent =
( !$displayIssueId && $recentCount < $maxRecent ) ( !$displayIssueId && $recentCount < $maxRecent )
|| ( $issue->getId eq $displayIssueId ) || ( $issue->getId eq $displayIssueId )
@ -157,7 +167,7 @@ sub view {
my $self = shift; my $self = shift;
my $form = $self->session->form; my $form = $self->session->form;
my $var = $self->getViewVars( { my $var = $self->getViewVars( {
displayIssue => $form->guid('displayIssue'), displayIssue => $form->guid('displayIssue'),
} ); } );