168 lines
4.6 KiB
Perl
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;
|
|
|