diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm index 7ae8b26..547adf8 100644 --- a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -21,6 +21,19 @@ sub definition { 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 }, { @@ -29,7 +42,7 @@ sub definition { autoGenerateForms => 1, tableName => 'NewsletterCollection', className => 'WebGUI::Asset::Wobject::NewsletterCollection', - properties => \%properties + properties => \%properties, }; return $class->SUPER::definition( $session, $definition ); @@ -70,48 +83,82 @@ sub generateEmailContent { return $issue->view; } -##---------------------------------------------------------------------------- -#sub prepareView { -# my $self = shift; -# $self->SUPER::prepareView(); -# my $template = WebGUI::Asset::Template->new( $self->session, $self->get("templateIdView") ); -# $template->prepare($self->getMetaDataAsTemplateVariables); -# $self->{_viewTemplate} = $template; -#} +#---------------------------------------------------------------------------- +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 $session = $self->session; - my $output = $self->getToolbar if $session->var->isAdminOn; + my $var = $self->getViewVars; - my $issues = $self->getIssues; - return $output . "No issues yet" unless scalar @{ $issues }; - - $output .= $self->getSubscriptionForm; -# $output .= $self->isSubscribed -# ? '

Unsubscribe

' -# : '

Subscribe

' -# ; - - $output .= '

Issues:

'; - - $issues->[0]->prepareView; - $output .= $issues->[0]->view; - - return $output; + return $self->processTemplate( $var, undef, $self->{_viewTemplate} ); } 1; diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index a830eb2..a51b347 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -151,11 +151,13 @@ sub isSubscribed { } #---------------------------------------------------------------------------- -sub getSubscriptionForm { +sub appendSubscriptionFormVars { my $self = shift; + my $var = shift || {}; my $session = $self->session; my $i18n = WebGUI::International->new( $session, 'Asset_NewsletterCollection' ); + # Setup form controls my $formHeader = WebGUI::Form::formHeader( $session, { action => $self->getUrl } ) . WebGUI::Form::hidden( $session, { name => 'func', value => 'processSubscription' } ) @@ -167,20 +169,28 @@ sub getSubscriptionForm { my $emailBox = WebGUI::Form::email( $session, { name => 'email', value => '' } ); my $formFooter = WebGUI::Form::formFooter( $session ); - my $output = ''; + # Compose default subscription form for current user + my $form = ''; if ( $session->user->isRegistered ) { - $output .= $subscribeButton if $self->canSubscribe; - $output .= $unsubscribeButton if $self->canUnsubscribe; - - return unless $output; - return $formHeader . $output . $formFooter; + $form .= $subscribeButton if $self->canSubscribe; + $form .= $unsubscribeButton if $self->canUnsubscribe; } - #### TODO: anonymousAllowed - else { - return $formHeader . $emailBox . $subscribeButton . $unsubscribeButton . $formFooter; + elsif ( $self->get('allowAnonymousSubscription') ) { + $form = $emailBox . $subscribeButton . $unsubscribeButton; } - return; + # Setup tmpl_vars + $var->{ subscriptionForm_form } = "$formHeader $form $formFooter" if $form; + $var->{ subscriptionForm_header } = $formHeader; + $var->{ subscriptionForm_footer } = $formFooter; + $var->{ subscriptionForm_subscribeButton } = $subscribeButton; + $var->{ subscriptionForm_unsubscribeButton } = $unsubscribeButton; + $var->{ subscrittionForm_emailBox } = $emailBox; + $var->{ user_canSubscribe } = $self->canSubscribe; + $var->{ user_canUnsubscribe } = $self->canUnsubscribe; + $var->{ user_isRegistered } = $session->user->isRegistered; + + return $var; } #---------------------------------------------------------------------------- diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl index 5425b3b..896a920 100644 --- a/sbin/install_newsletter.pl +++ b/sbin/install_newsletter.pl @@ -28,6 +28,8 @@ installMailingTables( $session ); installNewsletterInAdminConsole( $session ); installNewsletterSettings( $session ); addPluginsToConfigFile( $session ); +addTemplateColumnToNewsletterCollection( $session ); +addRecentColumnToNewsletterCollection( $session ); finish($session); @@ -106,6 +108,46 @@ EOSQL print "Done.\n"; } +#---------------------------------------------------------------------------- +sub addTemplateColumnToNewsletterCollection { + my $session = shift; + my $db = $session->db; + print "\tAdding view template column to NewletterCollection..."; + + my $hasColumn = $db->quickScalar( 'show columns from NewsletterCollection where Field=?', [ 'viewTemplateId' ] ); + + unless ( $hasColumn ) { + $db->write( 'alter table NewsletterCollection add column viewTemplateId char(22) binary not null default ?', [ + 'aYVYFpofaYvmRYoHwl3x4w' + ] ); + $db->write( 'update NewsletterCollection set viewTemplateId=?', [ + 'aYVYFpofaYvmRYoHwl3x4w', + ] ); + } + + print "Done.\n"; +} + +#---------------------------------------------------------------------------- +sub addRecentColumnToNewsletterCollection { + my $session = shift; + my $db = $session->db; + print "\tAdding recent issues column to NewletterCollection..."; + + my $hasColumn = $db->quickScalar( 'show columns from NewsletterCollection where Field=?', [ 'recentIssueCount' ] ); + + unless ( $hasColumn ) { + $db->write( 'alter table NewsletterCollection add column recentIssueCount int(3) not null default ?', [ + 1, + ] ); + $db->write( 'update NewsletterCollection set recentIssueCount=?', [ + 1 + ] ); + } + + print "Done.\n"; +} + #---------------------------------------------------------------------------- sub installMailingTables { my $session = shift; diff --git a/sbin/packages/root_import_personalnewsletter.wgpkg b/sbin/packages/root_import_personalnewsletter.wgpkg index 8e8e9c3..22cb124 100644 Binary files a/sbin/packages/root_import_personalnewsletter.wgpkg and b/sbin/packages/root_import_personalnewsletter.wgpkg differ