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;