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 $ac = WebGUI::AdminConsole->new( $session ); $ac->addSubmenuItem( $url->page( 'newsletter=manage' ), 'Manage mailings' ); $ac->addSubmenuItem( $url->page( 'newsletter=manage;func=settings' ), 'Newsletter settings' ); $ac->addSubmenuItem( $url->page( 'newsletter=bounce;func=bounceReport' ), '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 $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 => 'Newsletter domain name', ); $f->integer( name => 'newsletterBounceScoreThreshold', value => $setting->get( 'newsletterBounceScoreThreshold' ), label => 'Bounce score threshold', ); $f->submit; return $self->getAdminConsole->render($f->print, '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; return $self->www_settings unless $self->configurationComplete; my $mailables = $self->getMailables; my @newsletterLoop; foreach my $mailing ( @{ $mailables } ) { my $mailingId = $mailing->getId; my @issues; foreach my $issue ( @{ $mailing->getIssues } ) { my $issueId = $issue->getId; my @mailings; my $it = WebGUI::Mailing->getAllIterator( $session, { sequenceKeyValue => $issueId } ); while ( my $mailing = $it->() ) { my $state = $mailing->get('state'); push @mailings, { %{ $mailing->get }, status => $mailing->getStatusLine, "is$state" => 1, sendTestUrl => $url->page('newsletter=mailing;func=sendTestEmails;id='.$mailing->getId ), sendUrl => $url->page('newsletter=mailing;func=sendBatch;id='.$mailing->getId ), editUrl => $url->page('newsletter=mailing;func=edit;id='.$mailing->getId ), deleteUrl => $url->page('newsletter=mailing;func=delete;id='.$mailing->getId ), previewUrl => $url->page('newsletter=mailing;func=previewEmail;id='.$mailing->getId ), cancelUrl => $url->page('newsletter=mailing;func=cancel;id='.$mailing->getId ), }; }; push @issues, { %{ $issue->get }, url => $issue->getUrl, createMailingUrl => $url->page("newsletter=manage;func=createMailing;assetId=$mailingId;issueId=$issueId"), editUrl => $issue->getUrl( 'func=edit' ), sendUrl => '', sendTestUrl => '', mailing_loop => \@mailings, }; } push @newsletterLoop, { %{ $mailing->get }, url => $mailing->getUrl, editUrl => $mailing->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 ), 'Manage newsletters' ); } 1;