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 => 'Template', tab => 'display', defaultValue => 'aYVYFpofaYvmRYoHwl3x4w', namespace => 'NewsletterCollection', }, recentIssueCount => { fieldType => 'integer', label => 'Number of recent issues', tab => 'display', defaultValue => 1, }, ); push @{ $definition }, { assetName => $i18n->echo('newsletter'), icon => 'newWobject.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 => 'revisionDate desc', } ); return $issues; } #---------------------------------------------------------------------------- sub getRecipients { my $self = shift; my $db = $self->session->db; return $self->getSubscriptionGroup->getUsers; } #---------------------------------------------------------------------------- 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; my $var = $self->session->var; my $adminOn = $var->isAdminOn; $var->switchAdminOff; $asset->prepareView; my $content = $asset->view; $var->switchAdminOn if $adminOn; 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 $session = $self->session; my $var = $self->get; my $issueCount = 0; my ( @recentIssues, @olderIssues ); my $issues = $self->getIssues; foreach my $issue ( @{ $issues } ) { my $issueVar = $issue->get; $issueVar->{ url } = $issue->getUrl; $issueCount++; if ( $issueCount <= $self->get('recentIssueCount') ) { $issueVar->{ content } = $self->getAssetContent( $issue ); push @recentIssues, $issueVar; } else { push @olderIssues, $issueVar; } } $var->{ recent_issue_loop } = \@recentIssues; $var->{ recent_issue_count } = scalar @recentIssues; $var->{ older_issue_loop } = \@olderIssues; $var->{ older_issue_count } = scalar @olderIssues; $var->{ issue_count } = $issueCount; $self->appendSubscriptionFormVars( $var ); return $var; } #---------------------------------------------------------------------------- sub view { my $self = shift; my $var = $self->getViewVars; return $self->processTemplate( $var, undef, $self->{_viewTemplate} ); } 1;