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