Add distinction between mailing managers and admins.
This commit is contained in:
parent
a1d8ab6f70
commit
36a51a17a3
6 changed files with 152 additions and 23 deletions
|
|
@ -72,6 +72,7 @@ sub getMailingProperties {
|
|||
subject => {
|
||||
fieldType => 'text',
|
||||
label => $i18n->get( 'subject' ),
|
||||
defaultValue=> $self->getTitle,
|
||||
},
|
||||
styleTemplateId => {
|
||||
fieldType => 'template',
|
||||
|
|
|
|||
|
|
@ -9,6 +9,13 @@ use JSON qw{ to_json };
|
|||
|
||||
use base 'WebGUI::Crud';
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub admin {
|
||||
my $self = shift;
|
||||
|
||||
return WebGUI::Mailing::Admin->new( $self->session );
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub canCancel {
|
||||
my $self = shift;
|
||||
|
|
@ -333,6 +340,8 @@ sub www_cancel {
|
|||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
if ( $self->canCancel ) {
|
||||
$self->cancel;
|
||||
|
||||
|
|
@ -356,6 +365,8 @@ sub www_delete {
|
|||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
$self->delete;
|
||||
|
||||
return WebGUI::Mailing::Admin->new($session)->www_view;
|
||||
|
|
@ -367,6 +378,8 @@ sub www_edit {
|
|||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $f = WebGUI::HTMLForm->new( $session );
|
||||
$f->hidden(
|
||||
name => 'newsletter',
|
||||
|
|
@ -384,22 +397,33 @@ sub www_edit {
|
|||
my %fields = %{ $self->getAsset->getMailingProperties };
|
||||
my $configuration = $self->get('configuration') || {};
|
||||
while ( my( $name, $properties ) = each %fields ) {
|
||||
$f->dynamicField(
|
||||
name => $name,
|
||||
%{ $properties },
|
||||
value => $configuration->{ $name },
|
||||
$properties->{ name } = $name;
|
||||
$properties->{ value } = $configuration->{ $name } if exists $properties->{ value };
|
||||
|
||||
my $formField = WebGUI::Form::DynamicField->new( $session, %{ $properties } );
|
||||
my $html = $self->admin->canOverride
|
||||
? $formField->toHtml
|
||||
: $formField->getValueAsHtml
|
||||
;
|
||||
|
||||
$f->readOnly(
|
||||
label => $properties->{ label },
|
||||
value => $html,
|
||||
);
|
||||
}
|
||||
|
||||
$f->submit;
|
||||
|
||||
return WebGUI::Mailing::Admin->new($session)->getAdminConsole->render( $f->print, $i18n->get('configure mailing') );
|
||||
return $self->renderInConsole( $f->print, $i18n->get('configure mailing') );
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub www_previewContent {
|
||||
my $self = shift;
|
||||
my $form = $self->session->form;
|
||||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $issueId = $self->get('issueId');
|
||||
my $userId = $form->get('userId');
|
||||
|
|
@ -414,6 +438,8 @@ sub www_previewEmail {
|
|||
my ( $form, $url ) = $session->quick( 'form', 'url' );
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $asset = $self->getAsset;
|
||||
|
||||
my $manageUrl = $url->page('newsletter=manage');
|
||||
|
|
@ -516,12 +542,19 @@ sub www_editSave {
|
|||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my %fields = %{ $self->getAsset->getMailingProperties };
|
||||
my $configuration = {};
|
||||
while ( my( $name, $properties ) = each %fields ) {
|
||||
my $value = $form->process( $name, $properties->{ fieldType }, $properties->{ defaultValue } );
|
||||
if ( $self->admin->canOverride ) {
|
||||
while ( my( $name, $properties ) = each %fields ) {
|
||||
my $value = $form->process( $name, $properties->{ fieldType }, $properties->{ defaultValue } );
|
||||
|
||||
$configuration->{ $name } = $value;
|
||||
$configuration->{ $name } = $value;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$configuration = \%fields;
|
||||
}
|
||||
|
||||
#### TODO: Add error checking and required fields?
|
||||
|
|
@ -536,6 +569,8 @@ sub www_sendBatch {
|
|||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $f = WebGUI::HTMLForm->new( $session );
|
||||
$f->hidden(
|
||||
name => 'newsletter',
|
||||
|
|
@ -596,6 +631,8 @@ sub www_sendBatchConfirm {
|
|||
my $form = $session->form;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $scheduled = $form->dateTime( 'sendDate' );
|
||||
|
||||
return $self->www_sendBatch unless $scheduled;
|
||||
|
|
@ -620,7 +657,8 @@ sub www_sendTestEmails {
|
|||
my $session = $self->session;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $asset = WebGUI::Asset->newByDynamicClass( $session, $self->get('assetId') );
|
||||
croak "Cannot instanciate asset " . $self->get('assetId') unless $asset;
|
||||
|
||||
|
|
@ -678,6 +716,8 @@ sub www_sendTestEmailsConfirm {
|
|||
my $form = $session->form;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->admin->canManage;
|
||||
|
||||
my $to = $form->get( 'to' );
|
||||
my @userIds = $form->selectList( 'userIds' );
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,21 @@ use Carp 'confess';
|
|||
use WebGUI::Asset;
|
||||
use WebGUI::AdminConsole;
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub canManage {
|
||||
my $self = shift;
|
||||
|
||||
return $self->isAdmin || $self->isManager;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub canOverride {
|
||||
my $self = shift;
|
||||
my $setting = $self->session->setting;
|
||||
|
||||
return $self->isAdmin || $setting->get( 'mailingManagersCanOverrideDefault' ) && $self->isManager;
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub configurationComplete {
|
||||
my $self = shift;
|
||||
|
|
@ -21,10 +36,12 @@ sub getAdminConsole {
|
|||
my $url = $session->url;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
my $isAdmin = $self->isAdmin;
|
||||
|
||||
my $ac = WebGUI::AdminConsole->new( $session );
|
||||
|
||||
$ac->addSubmenuItem( $url->page( 'newsletter=manage' ), $i18n->get( 'manage mailings' ) );
|
||||
$ac->addSubmenuItem( $url->page( 'newsletter=manage;func=settings' ), $i18n->get( 'newsletter settings' ) );
|
||||
$ac->addSubmenuItem( $url->page( 'newsletter=manage;func=settings' ), $i18n->get( 'newsletter settings' ) ) if $isAdmin;
|
||||
$ac->addSubmenuItem( $url->page( 'newsletter=bounce;func=bounceReport' ), $i18n->get( 'bounce scores' ) );
|
||||
|
||||
return $ac;
|
||||
|
|
@ -40,6 +57,24 @@ sub getMailables {
|
|||
} );
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub isAdmin {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
|
||||
return $session->user->isInGroup( $setting->get('mailingAdminGroupId' ) );
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub isManager {
|
||||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
my $setting = $session->setting;
|
||||
|
||||
return $session->user->isInGroup( $setting->get('mailingManagerGroupId' ) );
|
||||
}
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
sub new {
|
||||
my $class = shift;
|
||||
|
|
@ -59,6 +94,8 @@ sub www_createMailing {
|
|||
my $session = $self->session;
|
||||
my $form = $session->form;
|
||||
|
||||
return $session->privilege->insufficient unless $self->canManage;
|
||||
|
||||
# TODO: test if assetId and issueId are valid.
|
||||
my $assetId = $form->guid( 'assetId' );
|
||||
my $issueId = $form->guid( 'issueId' );
|
||||
|
|
@ -79,6 +116,8 @@ sub www_settings {
|
|||
my $setting = $session->setting;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->isAdmin;
|
||||
|
||||
my $f = WebGUI::HTMLForm->new( $session );
|
||||
$f->hidden(
|
||||
name => 'newsletter',
|
||||
|
|
@ -105,6 +144,26 @@ sub www_settings {
|
|||
label => $i18n->get( 'manage mailings template' ),
|
||||
namespace => 'Mailing/Manage',
|
||||
);
|
||||
$f->group(
|
||||
name => 'mailingAdminGroupId',
|
||||
value => $setting->get( 'mailingAdminGroupId' ),
|
||||
defaultValue => 3,
|
||||
label => $i18n->get( 'mailing admin group' ),
|
||||
excludeGroups => [ 1, 2, 7 ],
|
||||
);
|
||||
$f->group(
|
||||
name => 'mailingManagerGroupId',
|
||||
value => $setting->get( 'mailingManagerGroupId' ),
|
||||
defaultValue => 3,
|
||||
label => $i18n->get( 'mailing manager group' ),
|
||||
excludeGroups => [ 1, 2, 7 ],
|
||||
);
|
||||
$f->yesNo(
|
||||
name => 'mailingManagersCanOverrideDefault',
|
||||
value => $setting->get( 'mailingManagersCanOverrideDefault' ),
|
||||
defaultValue => 0,
|
||||
label => $i18n->get( 'mailing managers can override' ),
|
||||
);
|
||||
$f->submit;
|
||||
|
||||
return $self->getAdminConsole->render($f->print, $i18n->get( 'newsletter settings' ) );
|
||||
|
|
@ -116,11 +175,16 @@ sub www_settingsSave {
|
|||
my $self = shift;
|
||||
my $session = $self->session;
|
||||
|
||||
return $session->privilege->insufficient unless $self->isAdmin;
|
||||
|
||||
my ($setting, $form) = $session->quick( 'setting', 'form' );
|
||||
|
||||
$setting->set( 'newsletterReturnDomain', $form->get('newsletterReturnDomain') );
|
||||
$setting->set( 'newsletterBounceScoreThreshold', $form->integer('newsletterBounceScoreThreshold') );
|
||||
$setting->set( 'mailingManagerTemplateId', $form->template('mailingManagerTemplateId') );
|
||||
$setting->set( 'mailingAdminGroupId', $form->group('mailingAdminGroupId') );
|
||||
$setting->set( 'mailingManagerGroupId', $form->group('mailingManagerGroupId') );
|
||||
$setting->set( 'mailingManagersCanOverrideDefault', $form->yesNo('mailingManagersCanOverrideDefault') );
|
||||
|
||||
return $self->www_settings;
|
||||
}
|
||||
|
|
@ -133,6 +197,8 @@ sub www_view {
|
|||
my $setting = $session->setting;
|
||||
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
|
||||
|
||||
return $session->privilege->insufficient unless $self->canManage;
|
||||
|
||||
return $self->www_settings unless $self->configurationComplete;
|
||||
|
||||
my $mailableAssets = $self->getMailables;
|
||||
|
|
|
|||
|
|
@ -87,6 +87,15 @@ our $I18N = {
|
|||
message => 'Mailing beheer sjabloon',
|
||||
},
|
||||
|
||||
'mailing admin group' => {
|
||||
message => 'Mailing admins',
|
||||
},
|
||||
'mailing manager group' => {
|
||||
message => 'Maling managers',
|
||||
},
|
||||
'mailing managers can override' => {
|
||||
message => 'Mogen managers mailing defaults aanpassen?',
|
||||
},
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -87,6 +87,15 @@ our $I18N = {
|
|||
message => 'Manage mailings template',
|
||||
},
|
||||
|
||||
'mailing admin group' => {
|
||||
message => 'Mailing admins',
|
||||
},
|
||||
'mailing manager group' => {
|
||||
message => 'Maling managers',
|
||||
},
|
||||
'mailing managers can override' => {
|
||||
message => 'Allow managers to override mailing defaults',
|
||||
},
|
||||
};
|
||||
|
||||
1;
|
||||
|
|
|
|||
|
|
@ -157,10 +157,10 @@ sub installMailingTables {
|
|||
# Remname tables from a previous (bad) name to a new (good) one.
|
||||
# Must be done before the crudCreateOrUpdate calls to prevent creation of stale tables.
|
||||
my @tables = $db->buildArray( 'show tables' );
|
||||
if ( grep { $_ eq 'WGMailing' } @tables ) {
|
||||
if ( scalar grep { $_ eq 'WGMailing' } @tables ) {
|
||||
$db->write( 'rename table WGMailing to Mailing' );
|
||||
}
|
||||
if ( grep { $_ eq 'WGMailing_queue' } @tables ) {
|
||||
if ( scalar grep { $_ eq 'WGMailing_queue' } @tables ) {
|
||||
$db->write( 'rename table WGMailing_queue to Mailing_email' );
|
||||
}
|
||||
|
||||
|
|
@ -180,7 +180,7 @@ sub installNewsletterInAdminConsole {
|
|||
|
||||
print "\tAdding newsletter admin console section...";
|
||||
$session->config->set( 'adminConsole/mailable', {
|
||||
groupSetting => "admins",
|
||||
groupSetting => "mailingManagerGroupId",
|
||||
icon => "newsletter.gif",
|
||||
title => "Newsletter",
|
||||
uiLevel => 7,
|
||||
|
|
@ -197,14 +197,18 @@ sub installNewsletterSettings {
|
|||
|
||||
print "\tInstalling newsletter setting slots...";
|
||||
|
||||
$setting->add( 'newsletterReturnDomain', undef )
|
||||
unless $setting->has( 'newsletterReturnDomain' );
|
||||
my %settings = (
|
||||
newsletterReturnDomain => undef,
|
||||
newsletterBounceScoreThreshold => 0,
|
||||
mailingManagerTemplateId => 'FTfNhWI8KJOwLzFUl5rYeQ',
|
||||
mailingAdminGroupId => 3,
|
||||
mailingManagerGroupId => 3,
|
||||
mailingManagersCanOverrideDefault => 0,
|
||||
);
|
||||
|
||||
$setting->add( 'newsletterBounceScoreThreshold', 0 )
|
||||
unless $setting->has( 'newsletterBounceScoreThreshold' );
|
||||
|
||||
$setting->add( 'mailingManagerTemplateId', 'FTfNhWI8KJOwLzFUl5rYeQ' )
|
||||
unless $setting->has( 'mailingManagerTemplateId' );
|
||||
while ( my ($name, $value) = each %settings ) {
|
||||
$setting->add( $name => $value ) unless $setting->has( $name );
|
||||
}
|
||||
|
||||
print "Done.\n";
|
||||
}
|
||||
|
|
@ -221,13 +225,13 @@ sub addPluginsToConfigFile {
|
|||
} );
|
||||
|
||||
my @handlers = @{ $session->config->get('contentHandlers') };
|
||||
if ( !grep { $_ eq 'WebGUI::Content::NewsletterManager' } @handlers ) {
|
||||
if ( !scalar grep { $_ eq 'WebGUI::Content::NewsletterManager' } @handlers ) {
|
||||
insert_after_string 'WebGUI::Content::Shop', 'WebGUI::Content::NewsletterManager', @handlers;
|
||||
$session->config->set( 'contentHandlers', \@handlers );
|
||||
}
|
||||
|
||||
my @workflows = @{ $session->config->get('workflowActivities/None') };
|
||||
if ( !grep { $_ eq 'WebGUI::Workflow::Activity::SendQueuedMailings' } @workflows ) {
|
||||
if ( !scalar grep { $_ eq 'WebGUI::Workflow::Activity::SendQueuedMailings' } @workflows ) {
|
||||
push @workflows, 'WebGUI::Workflow::Activity::SendQueuedMailings';
|
||||
$session->config->set( 'workflowActivities/None', \@workflows );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue