From bcb265e188ca70fc3e3ae17d0f1cd85a7b720a8e Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Fri, 28 May 2010 09:36:41 +0200 Subject: [PATCH] Add unsubscribe confirmation. --- lib/WebGUI/AssetAspect/Subscriber.pm | 47 +++++++++++++++++++++------- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index 338aee8..ed0511d 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -254,7 +254,7 @@ sub sendSubscriptionConfirmation { my $session = $self->session; my $var = $self->getEmailVars( $user ); - my $url = $session->url->getSiteURL . $self->getUrl( "func=confirmSubscription;code=$code" ); + my $url = $session->url->getSiteURL . $self->getUrl( "func=confirmMutation;code=$code" ); $var->{ confirmUrl } = $url; $var->{ code } = $code; @@ -376,7 +376,7 @@ sub subscribe { my $code = $self->session->id->generate; $self->logRequest( 'subscribe', $user, $code ); - $self->sendSubscriptionConfirmation( $user, $code ); + $self->sendSubscriptionConfirmation( $user, $code, 'subscribe' ); } } else { @@ -391,28 +391,53 @@ sub subscribe { sub unsubscribe { my $self = shift; my $user = shift || $self->session->user; + my $requireConfirm = shift // $self->get('alwaysConfirmSubscription'); - $self->getSubscriptionGroup->deleteUsers( [ $user->getId ] ); - $self->logRequest( 'unsubscribe', $user ); + my $session = $self->session; + + if ( $requireConfirm ) { + if ( !$user->isInGroup( $self->getSubscriptionGroup->getId ) ) { + $self->sendNoMutationEmail( $user, 'unsubscribe' ); + $self->logRequest( 'already_unsubscribed', $user ); + } + else { + my $code = $self->session->id->generate; + $self->logRequest( 'unsubscribe', $user, $code ); + + $self->sendSubscriptionConfirmation( $user, $code, 'unsubscribe' ); + } + } + else { + $self->getSubscriptionGroup->deleteUsers( [ $user->getId ] ); + $self->logRequest( 'unsubscribe', $user ); + } return; } #---------------------------------------------------------------------------- -sub www_confirmSubscription { +sub www_confirmMutation { my $self = shift; my ($form, $db) = $self->session->quick( 'form', 'db' ); my $code = $form->get('code'); return unless $code; - my $userId = $db->quickScalar( 'select userId from assetAspectSubscriber_log where confirmed=? and code=?', [ - 0, - $code, - ] ); + my ($userId, $type) = $db->quickArray( + 'select userId, type from assetAspectSubscriber_log where confirmed=? and code=?', + [ + 0, + $code, + ] + ); if ( $userId ) { - $self->getSubscriptionGroup->addUsers( [ $userId ] ); + if ( $type eq 'subscribe' ) { + $self->getSubscriptionGroup->addUsers( [ $userId ] ); + } + elsif ( $type eq 'unsubscribe' ) { + $self->getSubscriptionGroup->deleteUsers( [ $userId ] ); + } $self->logConfirmation( $code ); } @@ -448,7 +473,7 @@ sub www_processSubscription { my $emailUser = WebGUI::User::SpecialState->newByEmail( $session, $email ); if ( $action eq 'unsubscribe' && defined $emailUser ) { - $self->unsubscribe( $emailUser ); + $self->unsubscribe( $emailUser, 1 ); } if ( $action eq 'subscribe' ) { if ( !defined $emailUser ) {