Adding subscription confirmation.

This commit is contained in:
Martin Kamerbeek 2010-05-12 13:30:35 +02:00
parent 8abcb9a10e
commit 12e6ba8735
2 changed files with 63 additions and 7 deletions

View file

@ -2,6 +2,7 @@ package WebGUI::Asset::Wobject::NewsletterCollection;
use strict; use strict;
use warnings; use warnings;
use 5.010;
use Class::C3; use Class::C3;
use WebGUI::User::SpecialState; use WebGUI::User::SpecialState;
@ -53,6 +54,12 @@ sub definition {
my $i18n = WebGUI::International->new( $session, 'Asset_NewsletterCollection' ); my $i18n = WebGUI::International->new( $session, 'Asset_NewsletterCollection' );
tie my %properties, 'Tie::IxHash', ( tie my %properties, 'Tie::IxHash', (
alwaysConfirmSubscription => {
fieldType => 'yesNo',
defaultValue => 0,
label => 'Always require subscription confirmation',
tab => 'mailable',
},
); );
push @{ $definition }, { push @{ $definition }, {
@ -195,17 +202,46 @@ sub view {
return $output; return $output;
} }
#----------------------------------------------------------------------------
sub sendSubscriptionConfirmation {
my $self = shift;
my $userId = shift;
my $code = shift;
my $session = $self->session;
my $user = WebGUI::User->new( $session, $userId );
my $url = $session->url->getSiteURL . $self->getUrl( "func=confirmSubscription;code=$code" );
my $mail = WebGUI::Mail::Send->create( $self->session, {
to => $user->get('email'),
subject => 'Confirm your subscription',
} );
$mail->addText( "Click here: $url" );
$mail->send;
return;
}
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
sub subscribe { sub subscribe {
my $self = shift; my $self = shift;
my $userId = shift || $self->session->user->getId; my $userId = shift || $self->session->user->getId;
my $requireConfirm = shift // $self->get('alwaysConfirmSubscription');
my $session = $self->session;
my $db = $self->session->db; my $db = $self->session->db;
$db->write( 'replace into NewsletterCollection_subscriptions set assetId=?, userId=?', [ my $code = $self->session->id->generate if $requireConfirm;
$db->write( 'replace into NewsletterCollection_subscriptions set assetId=?, userId=?, code=?, confirmed=?', [
$self->getId, $self->getId,
$userId, $userId,
$code,
$requireConfirm ? 0 : 1,
] ); ] );
$self->sendSubscriptionConfirmation( $userId, $code ) if $requireConfirm;
return; return;
} }
@ -223,6 +259,21 @@ sub unsubscribe {
return; return;
} }
#----------------------------------------------------------------------------
sub www_confirmSubscription {
my $self = shift;
my ($form, $db) = $self->session->quick( 'form', 'db' );
my $code = $form->get('code');
return unless $code;
$db->write( 'update NewsletterCollection_subscriptions set confirmed=1, code=NULL where code=?', [
$code
] );
return $self->processStyle( 'U bent aangemeld voor deze newsbrief' );
}
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
sub www_processSubscription { sub www_processSubscription {
my $self = shift; my $self = shift;
@ -245,6 +296,7 @@ sub www_processSubscription {
my $email = $form->email( 'email' ); my $email = $form->email( 'email' );
return 'no email' unless $email; return 'no email' unless $email;
#### TODO: Break this out in seperate sub.
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 ) {
$session->log->warn( 'unsub anon' ); $session->log->warn( 'unsub anon' );
@ -260,7 +312,7 @@ sub www_processSubscription {
$emailUser->addSpecialState( 'Newsletter', $self->getId ); $emailUser->addSpecialState( 'Newsletter', $self->getId );
$session->log->warn( 'sub anon ' . $emailUser->username); $session->log->warn( 'sub anon ' . $emailUser->username);
$self->subscribe( $emailUser->getId ); $self->subscribe( $emailUser->getId, 1 );
} }
} }

View file

@ -52,6 +52,7 @@ sub installNewsletterCollection {
create table if not exists NewsletterCollection ( create table if not exists NewsletterCollection (
assetId char(22) binary not null, assetId char(22) binary not null,
revisionDate bigint(20) not null, revisionDate bigint(20) not null,
alwaysConfirmSubscription tinyint(1) not null default 0,
primary key( assetId, revisionDate ) primary key( assetId, revisionDate )
); );
EOSQL EOSQL
@ -60,6 +61,9 @@ EOSQL
create table if not exists NewsletterCollection_subscriptions ( create table if not exists NewsletterCollection_subscriptions (
assetId char(22) binary not null, assetId char(22) binary not null,
userId char(22) binary not null, userId char(22) binary not null,
confirmed tinyint(1) default 0,
code char(22) default null,
creationDate timestamp default CURRENT_TIMESTAMP,
primary key( assetId, userId ) primary key( assetId, userId )
); );
EOSQL2 EOSQL2