Add distinction between mailing managers and admins.

This commit is contained in:
Martin Kamerbeek 2010-06-04 15:17:26 +02:00
parent a1d8ab6f70
commit 36a51a17a3
6 changed files with 152 additions and 23 deletions

View file

@ -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;