Make NewslettCollaboration templatable, and add concept of recent issues.

This commit is contained in:
Martin Kamerbeek 2010-05-26 18:24:17 +02:00
parent e82b8fe088
commit 218ebbbad6
4 changed files with 147 additions and 48 deletions

View file

@ -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
# ? '<p><a href="' . $self->getUrl( 'func=unsubscribe' ) . '">Unsubscribe</a></p>'
# : '<p><a href="' . $self->getUrl( 'func=subscribe' ) . '">Subscribe</a></p>'
# ;
$output .= '<p>Issues: <ul>';
$output .=
join '',
map {
'<li>'
.'<a href="' . $_->getUrl . '">' . $_->get('title') . '</a>'
.' :: '
.' <a href="' .$self->getUrl('func=previewEmail;issueId='.$_->getId.';userId=3').'">preview</a>'
.'</li>'
}
@{ $issues };
$output .= '</ul></p>';
$issues->[0]->prepareView;
$output .= $issues->[0]->view;
return $output;
return $self->processTemplate( $var, undef, $self->{_viewTemplate} );
}
1;

View file

@ -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;
}
#----------------------------------------------------------------------------

View file

@ -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;