diff --git a/lib/WebGUI/Content/NewsletterManager.pm b/lib/WebGUI/Content/NewsletterManager.pm index 02b2e00..33030d0 100644 --- a/lib/WebGUI/Content/NewsletterManager.pm +++ b/lib/WebGUI/Content/NewsletterManager.pm @@ -12,13 +12,11 @@ sub handler { my $module = $form->get('newsletter'); my $class = - $module eq 'manage' ? 'WebGUI::Newsletter::Admin' + $module eq 'manage' ? 'WebGUI::Mailing::Admin' : $module eq 'mailing' ? 'WebGUI::Mailing' : return ; -# return unless $form->get('newsletter') eq 'manage'; - my $func = 'www_' . ( $form->get('func') || 'view' ); my $id = $form->get('id'); @@ -26,11 +24,6 @@ sub handler { return $object->$func if $object->can( $func ); return; - -# my $nl = WebGUI::Newsletter::Admin->new( $session ); -# return unless $nl->can( $func ); -# -# return $nl->$func; } 1; diff --git a/lib/WebGUI/Mailing.pm b/lib/WebGUI/Mailing.pm index 43d415a..d0a8259 100644 --- a/lib/WebGUI/Mailing.pm +++ b/lib/WebGUI/Mailing.pm @@ -4,7 +4,7 @@ use strict; use warnings; use Carp; -use WebGUI::Newsletter::Admin; +use WebGUI::Mailing::Admin; use base 'WebGUI::Crud'; @@ -155,12 +155,13 @@ sub www_sendTestEmailsConfirm { my $session = $self->session; my $form = $session->form; - my $to = $form->email( 'to' ); +# my $to = $form->email( 'to' ); + my $to = $form->get( 'to' ); my @userIds = $form->selectList( 'userIds' ); $self->queueTestEmails( $to, \@userIds ); - return WebGUI::Newsletter::Admin->new( $session )->www_view; + return WebGUI::Mailing::Admin->new( $session )->www_view; } diff --git a/lib/WebGUI/Mailing/Admin.pm b/lib/WebGUI/Mailing/Admin.pm new file mode 100644 index 0000000..1dbb065 --- /dev/null +++ b/lib/WebGUI/Mailing/Admin.pm @@ -0,0 +1,155 @@ +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;func=settings' ), 'Newsletter settings' ); + + 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, + active => 0, + } ); + + return $self->www_view; +} + +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->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') ); + + 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 $letters = $self->getMailables; + + my @newsletterLoop; + foreach my $letter ( @{ $letters } ) { + my $letterId = $letter->getId; + + my @issues; + foreach my $issue ( @{ $letter->getIssues } ) { + my $issueId = $issue->getId; + + my @mailings; + my $it = WebGUI::Mailing->getAllIterator( $session, { sequenceKeyValue => $issueId } ); + while ( my $mailing = $it->() ) { + push @mailings, { + %{ $mailing->get }, + status => $mailing->getStatusLine, + sendTestUrl => $url->page('newsletter=mailing;func=sendTestEmails;id='.$mailing->getId), + }; + }; + + push @issues, { + %{ $issue->get }, + url => $issue->getUrl, + createMailingUrl => $url->page("newsletter=manage;func=createMailing;assetId=$letterId;issueId=$issueId"), + previewUrl => $letter->getUrl( "func=previewEmail;issueId=$issueId" ), + editUrl => $issue->getUrl( 'func=edit' ), + sendUrl => '', + sendTestUrl => '', + mailing_loop => \@mailings, + }; + } + + push @newsletterLoop, { + %{ $letter->get }, + 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; + diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl index 0c5b83c..4a4cded 100644 --- a/sbin/install_newsletter.pl +++ b/sbin/install_newsletter.pl @@ -24,6 +24,7 @@ installMailableAspectTable( $session ); installNewsletterCollection( $session ); installMailingTables( $session ); installNewsletterInAdminConsole( $session ); +installNewsletterSettings( $session ); finish($session); @@ -103,6 +104,17 @@ sub installNewsletterInAdminConsole { print "Done.\n"; } +#---------------------------------------------------------------------------- +sub installNewsletterSettings { + my $session = shift; + my $setting = $session->setting; + + print "\tInstalling newsletter setting slots..."; + + $setting->add( 'newsletterReturnDomain', undef ) unless $setting->has( 'newsletterReturnDomain' ); + + print "Done.\n"; +} #---------------------------------------------------------------------------- sub start {