webgui_newsletter/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm
Martin Kamerbeek dd8c91cb44 Adding icons.
2010-10-21 13:51:34 +02:00

168 lines
4.6 KiB
Perl

package WebGUI::Asset::Wobject::NewsletterCollection;
use strict;
use warnings;
use 5.010;
use Class::C3;
use WebGUI::User::SpecialState;
use base qw{
WebGUI::AssetAspect::Mailable
WebGUI::AssetAspect::Subscriber
WebGUI::Asset::Wobject
};
#----------------------------------------------------------------------------
sub definition {
my $class = shift;
my $session = shift;
my $definition = shift;
my $i18n = WebGUI::International->new( $session, 'Asset_NewsletterCollection' );
tie my %properties, 'Tie::IxHash', (
viewTemplateId => {
fieldType => 'template',
label => $i18n->get( 'template' ),
tab => 'display',
defaultValue => 'aYVYFpofaYvmRYoHwl3x4w',
namespace => 'NewsletterCollection',
},
recentIssueCount => {
fieldType => 'integer',
label => $i18n->get( 'number of recent issues' ),
tab => 'display',
defaultValue => 1,
},
);
push @{ $definition }, {
assetName => $i18n->get('assetName'),
icon => 'newsletter_collection.gif',
autoGenerateForms => 1,
tableName => 'NewsletterCollection',
className => 'WebGUI::Asset::Wobject::NewsletterCollection',
properties => \%properties,
};
return $class->SUPER::definition( $session, $definition );
}
#----------------------------------------------------------------------------
sub getIssues {
my $self = shift;
my $issues = $self->getLineage( [ 'children' ], {
returnObjects => 1,
orderByClause => 'lineage desc',
} );
return $issues;
}
#----------------------------------------------------------------------------
sub getRecipients {
my $self = shift;
my $db = $self->session->db;
return $self->getSubscriptionGroup->getAllUsers;
}
#----------------------------------------------------------------------------
sub generateEmailContent {
my $self = shift;
my $issueId = shift;
my $session = $self->session;
my $form = $session->form;
my $issue = WebGUI::Asset->newByDynamicClass( $session, $issueId );
return "Invalid issueId [$issueId]" unless $issue;
$issue->prepareView;
return $issue->view;
}
#----------------------------------------------------------------------------
sub getAssetContent {
my $self = shift;
my $asset = shift;
$asset->prepareView;
my $content = $asset->view;
return $content;
}
#----------------------------------------------------------------------------
sub prepareView {
my $self = shift;
my $session = $self->session;
$self->SUPER::prepareView;
my $template = WebGUI::Asset::Template->new( $session, $self->get('viewTemplateId') );
$template->prepare( $self->getMetaDataAsTemplateVariables );
$self->{ _viewTemplate } = $template;
return;
}
#----------------------------------------------------------------------------
sub getViewVars {
my $self = shift;
my $overrides = shift || {};
my $session = $self->session;
my $var = $self->get;
my $displayIssueId = $overrides->{ displayIssue };
my $maxRecent = $self->get('recentIssueCount');
my $recentCount = 0;
my @issues;
my $issues = $self->getIssues;
foreach my $issue ( @{ $issues } ) {
my $issueVar = $issue->get;
$issueVar->{ url } = $issue->getUrl;
my $isRecent =
( !$displayIssueId && $recentCount < $maxRecent )
|| ( $issue->getId eq $displayIssueId )
;
if ( $isRecent ) {
$issueVar->{ content } = $self->getAssetContent( $issue );
$issueVar->{ isRecent } = 1;
$recentCount++;
}
push @issues, $issueVar;
}
$var->{ recent_issue_count } = $recentCount;
$var->{ older_issue_count } = scalar( @issues ) - $recentCount;
$var->{ issue_loop } = \@issues;
$var->{ issue_count } = scalar @issues;
$var->{ issueOverridden } = ( $displayIssueId && $recentCount > 0 ) ? 1 : 0;
$self->appendSubscriptionFormVars( $var );
return $var;
}
#----------------------------------------------------------------------------
sub view {
my $self = shift;
my $form = $self->session->form;
my $var = $self->getViewVars( {
displayIssue => $form->guid('displayIssue'),
} );
return $self->processTemplate( $var, undef, $self->{_viewTemplate} );
}
1;