From 218ebbbad6fad74dbaed85f7c9e53eab648a7460 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 26 May 2010 18:24:17 +0200 Subject: [PATCH] Make NewslettCollaboration templatable, and add concept of recent issues. --- .../Asset/Wobject/NewsletterCollection.pm | 121 ++++++++++++------ lib/WebGUI/AssetAspect/Subscriber.pm | 32 +++-- sbin/install_newsletter.pl | 42 ++++++ .../root_import_personalnewsletter.wgpkg | Bin 2901 -> 3571 bytes 4 files changed, 147 insertions(+), 48 deletions(-) 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 8e8e9c388913363bf2bca0f3cbcc4a0d69f63804..22cb124846daf4656eb85ef5f398167fd4fb7d7d 100644 GIT binary patch literal 3571 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 literal 2901 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