Add unsubscribe confirmation.

This commit is contained in:
Martin Kamerbeek 2010-05-28 09:36:41 +02:00
parent c4e909556a
commit bcb265e188

View file

@ -254,7 +254,7 @@ sub sendSubscriptionConfirmation {
my $session = $self->session; my $session = $self->session;
my $var = $self->getEmailVars( $user ); 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->{ confirmUrl } = $url;
$var->{ code } = $code; $var->{ code } = $code;
@ -376,7 +376,7 @@ sub subscribe {
my $code = $self->session->id->generate; my $code = $self->session->id->generate;
$self->logRequest( 'subscribe', $user, $code ); $self->logRequest( 'subscribe', $user, $code );
$self->sendSubscriptionConfirmation( $user, $code ); $self->sendSubscriptionConfirmation( $user, $code, 'subscribe' );
} }
} }
else { else {
@ -391,28 +391,53 @@ sub subscribe {
sub unsubscribe { sub unsubscribe {
my $self = shift; my $self = shift;
my $user = shift || $self->session->user; my $user = shift || $self->session->user;
my $requireConfirm = shift // $self->get('alwaysConfirmSubscription');
$self->getSubscriptionGroup->deleteUsers( [ $user->getId ] ); my $session = $self->session;
$self->logRequest( 'unsubscribe', $user );
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; return;
} }
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
sub www_confirmSubscription { sub www_confirmMutation {
my $self = shift; my $self = shift;
my ($form, $db) = $self->session->quick( 'form', 'db' ); my ($form, $db) = $self->session->quick( 'form', 'db' );
my $code = $form->get('code'); my $code = $form->get('code');
return unless $code; return unless $code;
my $userId = $db->quickScalar( 'select userId from assetAspectSubscriber_log where confirmed=? and code=?', [ my ($userId, $type) = $db->quickArray(
0, 'select userId, type from assetAspectSubscriber_log where confirmed=? and code=?',
$code, [
] ); 0,
$code,
]
);
if ( $userId ) { 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 ); $self->logConfirmation( $code );
} }
@ -448,7 +473,7 @@ sub www_processSubscription {
my $emailUser = WebGUI::User::SpecialState->newByEmail( $session, $email ); my $emailUser = WebGUI::User::SpecialState->newByEmail( $session, $email );
if ( $action eq 'unsubscribe' && defined $emailUser ) { if ( $action eq 'unsubscribe' && defined $emailUser ) {
$self->unsubscribe( $emailUser ); $self->unsubscribe( $emailUser, 1 );
} }
if ( $action eq 'subscribe' ) { if ( $action eq 'subscribe' ) {
if ( !defined $emailUser ) { if ( !defined $emailUser ) {