webgui_newsletter/lib/WebGUI/Mailing/Admin.pm

170 lines
5.3 KiB
Perl

package WebGUI::Mailing::Admin;
use strict;
use warnings;
use Carp 'confess';
use WebGUI::Asset;
use WebGUI::AdminConsole;
#----------------------------------------------------------------------------
sub configurationComplete {
my $self = shift;
return $self->session->setting->get('newsletterReturnDomain') ? 1 : 0;
}
#----------------------------------------------------------------------------
sub getAdminConsole {
my $self = shift;
my $session = $self->session;
my $url = $session->url;
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
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=bounce;func=bounceReport' ), $i18n->get( 'bounce scores' ) );
return $ac;
}
#----------------------------------------------------------------------------
sub getMailables {
my $self = shift;
return WebGUI::Asset->getRoot( $self->session )->getLineage( ['descendants'], {
returnObjects => 1,
whereClause => 'assetData.assetId in (select distinct assetId from assetAspectMailable)',
} );
}
#----------------------------------------------------------------------------
sub new {
my $class = shift;
my $session = shift || confess 'No session passed';
bless { _session => $session }, $class;
}
#----------------------------------------------------------------------------
sub session {
return (shift)->{ _session };
}
#----------------------------------------------------------------------------
sub www_createMailing {
my $self = shift;
my $session = $self->session;
my $form = $session->form;
# TODO: test if assetId and issueId are valid.
my $assetId = $form->guid( 'assetId' );
my $issueId = $form->guid( 'issueId' );
my $mailing = WebGUI::Mailing->create( $session, {
assetId => $assetId,
issueId => $issueId,
state => 'idle',
} );
return $mailing->www_edit;
}
#----------------------------------------------------------------------------
sub www_settings {
my $self = shift;
my $session = $self->session;
my $setting = $session->setting;
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
my $f = WebGUI::HTMLForm->new( $session );
$f->hidden(
name => 'newsletter',
value => 'manage',
);
$f->hidden(
name => 'func',
value => 'settingsSave',
);
$f->text(
name => 'newsletterReturnDomain',
value => $setting->get( 'newsletterReturnDomain' ),
label => $i18n->get( 'Newsletter domain name' ),
);
$f->integer(
name => 'newsletterBounceScoreThreshold',
value => $setting->get( 'newsletterBounceScoreThreshold' ),
label => $i18n->get( 'Bounce score threshold' ),
);
$f->submit;
return $self->getAdminConsole->render($f->print, $i18n->get( 'newsletter settings' ) );
}
#----------------------------------------------------------------------------
sub www_settingsSave {
my $self = shift;
my $session = $self->session;
my ($setting, $form) = $session->quick( 'setting', 'form' );
$setting->set( 'newsletterReturnDomain', $form->get('newsletterReturnDomain') );
$setting->set( 'newsletterBounceScoreThreshold', $form->integer('newsletterBounceScoreThreshold') );
return $self->www_settings;
}
#----------------------------------------------------------------------------
sub www_view {
my $self = shift;
my $session = $self->session;
my $url = $session->url;
my $i18n = WebGUI::International->new( $session, 'MailingManager' );
return $self->www_settings unless $self->configurationComplete;
my $mailableAssets = $self->getMailables;
my @newsletterLoop;
foreach my $asset ( @{ $mailableAssets } ) {
my $assetId = $asset->getId;
my @issues;
foreach my $issue ( @{ $asset->getIssues } ) {
my $issueId = $issue->getId;
my @mailings;
my $it = WebGUI::Mailing->getAllIterator( $session, { sequenceKeyValue => $issueId } );
while ( my $mailing = $it->() ) {
push @mailings, $mailing->getViewVars;
};
push @issues, {
%{ $issue->get },
url => $issue->getUrl,
createMailingUrl => $url->page("newsletter=manage;func=createMailing;assetId=$assetId;issueId=$issueId"),
editUrl => $issue->getUrl( 'func=edit' ),
mailing_loop => \@mailings,
};
}
push @newsletterLoop, {
%{ $asset->get },
url => $asset->getUrl,
editUrl => $asset->getUrl( 'func=edit' ),
issue_loop => \@issues,
issueCount => scalar( @issues ),
};
}
my $var = { newsletter_loop => \@newsletterLoop };
my $template = WebGUI::Asset::Template->new( $self->session, 'FTfNhWI8KJOwLzFUl5rYeQ' );
return $self->getAdminConsole->render( $template->process( $var ), $i18n->get( 'manage mailings' ) );
}
1;