From 0fa97d2d9db48dda806850e91a3f2af2628b2c20 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 22 Apr 2010 14:56:19 +0200 Subject: [PATCH] Make NewsletterCollection subscribable. --- .../Asset/Wobject/NewsletterCollection.pm | 134 +++++++++++++++++- lib/WebGUI/AssetAspect/Mailable.pm | 22 +++ sbin/install_newsletter.pl | 8 ++ 3 files changed, 157 insertions(+), 7 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm index af38050..af0b398 100644 --- a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -10,6 +10,40 @@ use base qw{ WebGUI::Asset::Wobject }; +#---------------------------------------------------------------------------- +sub canSubscribe { + my $self = shift; + + return !$self->session->user->isVisitor && !$self->isSubscribed; +} + +#---------------------------------------------------------------------------- +sub canUnsubscribe { + my $self = shift; + + return !$self->session->user->isVisitor && $self->isSubscribed; +} + +#---------------------------------------------------------------------------- +sub configureMailingForm { + my $self = shift; + my $f = $self->next::method; + + tie my %issues, 'Tie::IxHash', ( + '' => 'Choose issue...', + map { $_->getId => $_->getTitle } + @{ $self->getIssues } + ); + + $f->selectBox( + name => $issue, + label => 'Issue', + options => $self->getIssues + ); + + return $f; +} + #---------------------------------------------------------------------------- sub definition { my $class = shift; @@ -32,6 +66,29 @@ sub definition { return $class->SUPER::definition( $session, $definition ); } +#---------------------------------------------------------------------------- +sub getIssues { + my $self = shift; + + my $issues = $self->getLineage( [ 'children' ], { + returnObjects => 1, + orderByClause => 'revisionDate desc', + } ); + + return $issues; +} + +#---------------------------------------------------------------------------- +sub getRecipients { + my $self = shift; + + my @subscribers = $db->buildArray( 'select userId from NewsletterCollection_subscriptions where assetId=?', [ + $self->getId, + ] ); + + return \@subscribers; +} + #---------------------------------------------------------------------------- sub generateEmailContent { my $self = shift; @@ -47,7 +104,19 @@ sub generateEmailContent { return $issue->view; } -##------------------------------------------------------------------- +#---------------------------------------------------------------------------- +sub isSubscribed { + my $self = shift; + my $userId = shift || $self->session->user->getId; + my $db = $self->session->db; + + return $db->quickScalar( 'select 1 from NewsletterCollection_subscriptions where assetId=? and userId=?', [ + $self->getId, + $userId, + ] ); +} + +##---------------------------------------------------------------------------- #sub prepareView { # my $self = shift; # $self->SUPER::prepareView(); @@ -56,20 +125,21 @@ sub generateEmailContent { # $self->{_viewTemplate} = $template; #} -#------------------------------------------------------------------- +#---------------------------------------------------------------------------- sub view { my $self = shift; my $session = $self->session; - my $issues = $self->getLineage( [ 'children' ], { - returnObjects => 1, - orderByClause => 'revisionDate desc', - } ); - my $output = $self->getToolbar if $session->var->isAdminOn; + my $issues = $self->getIssues; return $output . "No issues yet" unless scalar @{ $issues }; + $output .= $self->isSubscribed + ? '

Unsubscribe

' + : '

Subscribe

' + ; + $output .= '

Issues: