From 04f39ebc197b80bcc74351825c43066f8a689c99 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 19 May 2010 17:06:18 +0200 Subject: [PATCH] Adding basic per instance mailing configuration. --- lib/WebGUI/AssetAspect/Mailable.pm | 39 +++++++++-- lib/WebGUI/Mailing.pm | 63 ++++++++++++++++++ lib/WebGUI/Mailing/Admin.pm | 4 +- lib/WebGUI/Mailing/Email.pm | 6 +- .../root_import_personalnewsletter.wgpkg | Bin 1544 -> 1891 bytes 5 files changed, 104 insertions(+), 8 deletions(-) diff --git a/lib/WebGUI/AssetAspect/Mailable.pm b/lib/WebGUI/AssetAspect/Mailable.pm index 9bc1a75..6fd9790 100644 --- a/lib/WebGUI/AssetAspect/Mailable.pm +++ b/lib/WebGUI/AssetAspect/Mailable.pm @@ -5,6 +5,7 @@ use warnings; use Class::C3; use WebGUI::Macro; +use Tie::IxHash; ##---------------------------------------------------------------------------- #sub configureMailingForm { @@ -62,6 +63,33 @@ sub getIssueList { return; } +#---------------------------------------------------------------------------- +sub getSubject { + my $self = shift; + my $configuration = shift || {}; + + return $configuration->{ subject } || '(No subject)'; +} + +#---------------------------------------------------------------------------- +sub getMailingProperties { + my $self = shift; + tie my %properties, 'Tie::IxHash', ( + subject => { + fieldType => 'text', + label => 'subject', + }, + styleTemplateId => { + fieldType => 'template', + label => 'Style template', + defaultValue=> $self->get('mailStyleTemplateId'), + namespace => 'style', + }, + ); + + return \%properties; +} + #---------------------------------------------------------------------------- sub getRecipients { WebGUI::Error::OverrideMe->throw; @@ -70,9 +98,11 @@ sub getRecipients { #---------------------------------------------------------------------------- sub processContentAsUser { - my $self = shift; - my $issueId = shift; - my $userId = shift; + my $self = shift; + my $issueId = shift; + my $userId = shift; + my $configuration = shift || {}; + my $session = $self->session; my $currentUser = $session->user; @@ -81,7 +111,8 @@ sub processContentAsUser { $session->log->preventDebugOutput; my $styleTemplateId = - $self->get('mailStyleTemplateId') + $configuration->{ styleTemplateId } + || $self->get('mailStyleTemplateId') || $self->get('styleTemplateId'); # Generate email body for this user diff --git a/lib/WebGUI/Mailing.pm b/lib/WebGUI/Mailing.pm index 443b145..eb4fdbf 100644 --- a/lib/WebGUI/Mailing.pm +++ b/lib/WebGUI/Mailing.pm @@ -28,6 +28,7 @@ sub crud_definition { }, configuration => { fieldType => 'textarea', + serialize => 1, }, sendDate => { fieldType => 'dateTime', @@ -122,6 +123,68 @@ sub queueEmails { return; } + +sub www_delete { + my $self = shift; + my $session = $self->session; + + $self->delete; + + return WebGUI::Mailing::Admin->new($session)->www_view; +} + +sub www_edit { + my $self = shift; + my $session = $self->session; + + my $f = WebGUI::HTMLForm->new( $session ); + $f->hidden( + name => 'newsletter', + value => 'mailing', + ); + $f->hidden( + name => 'func', + value => 'editSave', + ); + $f->hidden( + name => 'id', + value => $self->getId, + ); + + my %fields = %{ $self->getAsset->getMailingProperties }; + my $configuration = $self->get('configuration') || {}; + while ( my( $name, $properties ) = each %fields ) { + $f->dynamicField( + name => $name, + %{ $properties }, + value => $configuration->{ $name }, + ); + } + + $f->submit; + + return WebGUI::Mailing::Admin->new($session)->getAdminConsole->render( $f->print, 'Configure mailing' ); +} + +sub www_editSave { + my $self = shift; + my $session = $self->session; + my $form = $session->form; + + my %fields = %{ $self->getAsset->getMailingProperties }; + my $configuration = {}; + while ( my( $name, $properties ) = each %fields ) { + my $value = $form->process( $name, $properties->{ fieldType }, $properties->{ defaultValue } ); + + $configuration->{ $name } = $value; + } + + #### TODO: Add error checking and required fields? + $self->update( { configuration => $configuration } ); + + return WebGUI::Mailing::Admin->new( $session )->www_view; +} + sub www_sendBatch { my $self = shift; my $session = $self->session; diff --git a/lib/WebGUI/Mailing/Admin.pm b/lib/WebGUI/Mailing/Admin.pm index e21b763..526e0a9 100644 --- a/lib/WebGUI/Mailing/Admin.pm +++ b/lib/WebGUI/Mailing/Admin.pm @@ -60,7 +60,7 @@ sub www_createMailing { active => 0, } ); - return $self->www_view; + return $mailing->www_edit; } sub www_settings { @@ -124,6 +124,8 @@ sub www_view { status => $mailing->getStatusLine, 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), }; }; diff --git a/lib/WebGUI/Mailing/Email.pm b/lib/WebGUI/Mailing/Email.pm index d6e86e4..02d01e7 100644 --- a/lib/WebGUI/Mailing/Email.pm +++ b/lib/WebGUI/Mailing/Email.pm @@ -150,8 +150,9 @@ sub send { #### TODO: Error checking my $mailing = $self->getMailing; + my $configuration = $mailing->get('configuration') || {}; my $asset = $mailing->getAsset; - my $content = $asset->processContentAsUser( $mailing->get('issueId'), $self->get('userId') ); + my $content = $asset->processContentAsUser( $mailing->get('issueId'), $self->get('userId'), $configuration ); my $body = $self->absolutifyURIs( $content, $asset->getUrl ); # Mail is a test mail but there is noone to send the result to @@ -169,7 +170,7 @@ sub send { } # Fetch subject - my $subject = '[TEST] Subject selection still needs to be implemented.'; + my $subject = $asset->getSubject( $configuration ); my $messageId = $id->toHex( $self->getId ); my $domain = $session->setting->get( 'newsletterReturnDomain' ); @@ -187,7 +188,6 @@ sub send { # And send it. my $success = $mail->send; -$session->log->warn( "Sending email to [$to]" ); if ( $success ne '1' ) { $self->error( "Mail couldn't be sent by WebGUI::Mail::Send" ); } diff --git a/sbin/packages/root_import_personalnewsletter.wgpkg b/sbin/packages/root_import_personalnewsletter.wgpkg index 484edbdb0aefb17634b34f22c376dda1724a079c..f8d796ff3b94cd9864bd4b8ab0d36b66e45639f8 100644 GIT binary patch literal 1891 zcmV-p2b}mHiwFP!00000|Ls{@Q`~IbtRFTBkJy}es&Rg@9w}|p z{QLTbMGN%s1o;8I(`sqEXMT{Hf5Yx}X6)Yrk6E+6ix$6?{a-&pQ9oeHmseng8siZ~ zV_dU(*2hnO$WJkiVhkaHnfNM)iIE;*v5y{xg!^)Mtyz=fMW2rt-@A_^%CWa2r-g~{ z=iM&F2zuT;2*BEgo(B=g6rgE08JJ>@Q#f;3agYP*-2N-!n zG-dw&p2`88meop;9je-H9I8?yK7!Na-l9-c7?x$cH7u<-Qpg?Kh z0+0634|}~Gp~YVBA{yOb7hd|2FZP@}mrp{RdT`A=&D6UdCw*;qg2Hi`CkhWfjy!Tr zl+V)qy7Yh$y!sUcE@{X?+w$*%6=c~}fmk2opuh#(pfAD=xzx9pb0ClLqvT$CxV zX6QA*VWLBGkqkl)iHw~ZiXqnT%$SoddqzGh6Ku5GdWVD^MIxe96c-Fe0G ztKD5U1f*CvWfZ>6BEC$)5Cssmxi$6T3BxL$v*?z~81Q_#tD2U?p-UfPJ}6m=qjBo* z`&*yu7a!icr`^Fp= z2$1sX$S30v_$QCzKSk%G_~SGrqy&&{nPe>D0e+5`E+EhxPUTqfE*^(ZwoeF7rfftB zzIGbW&Q{L*lOVvfv}?zO%S)jL8hQmsu-Gd*i>O+*QS^mj=2x)W?U4y*iUt%8d@{v^z2WisT}?F> zuU0L%5l7-x!)QxnB3FZ~=3kdQ`?nZr#=|TbLe>azccR5Jh05L`=*5Xcu1g%pX{7#? z4Hm!Y1aYX(Ifv6ooj03MI8vZ7cX}0IW}%@iu1woHk*`wsSXkQ_rk7U@xwxpIh`Jta z-oNLIY-Od5*7~O1-t1_Il}a1Bq+uN^R%5-LWi`tR6>#+h?<~9c&eR@k^S-{YXi=Os&d0 zMH(%3<^C$Z&!kMF$m+J6ok@HU4*NTUy^~XSJX|-6tly=Cy45jKVWEV&?Eh`@!n8ct d?U(XsMYZYW^NR*vH1IQN;D3zi+`|AQ005pEn!5l1 literal 1544 zcmV+j2KV_NiwFP!00000|Ls_9Q`76gw9Vv@kiPJ^)rC_1zY}k1y(39^sLXW<4T&wY=aK)OtDRBQB1gBFY5z+G<-E`+hb( zWEjEB+nE$tD4Tr{fkF$5;(<^27<*!A_v zqTwTmgA;SQ`h67^R{}0(spcAO%5#d{CDASP0CF zD8xAyi5T{DeDXf%ynT4OLjGTq%gRkZI2f6=gm)PgRLmlchjm@TPl)H?P@Qdo&f)xz z%!3mps_p9|BW*%B0mB}l;TZQwfN3n$qH?Wd2_7*TN2lJgNA#@w#z^2|=Hng?z~lla zcj&$q@U9pm`%|;zk#LL|5jV{5FdB3b!=V;zt?@7)G7v# z&1tjQmMAuxw{-A;hw!6AeR=21xqK4h#Dfb;tsJMBb;{R{#wZ*u^F-;vAE-y}iT0U- z`=;(TD&>Rvff11a_9wyGC+lWPWMR=wJmO-BM+9_0e0=>3Z22RJE~o(ghA0KEVBs3z zFgBsNP6vrYtYW8tB8c^g9dpWMugO=n6v5x07y45k3c(K`4ZA;>C$Yzn~E;&k|QR46K8(;Tt zFFy{i>fMuYc>L(|tFzNfqm&H5wjYhr01GgS?`wXuv?Ba^#zD1tZ3)+Gi3W>Ys(?yi zw&_Q)=q3as6?Iv_Dtl(Zs(x5O9x)OMsl%2Y3DsFarigE^zWsuPwL9`f5m@9(J@S%O zAV^$S|J6!mcfS6sl*_yN??ny0LYS`qQr_$%A)s1-G$K@PNQ=Sk>%*U01Ln%O6{X&G zb)w?t7p?(|rX1W4PzYIu?R)qh#lA4$iQEjl zm=jvEr0n~YMvlQuy=R9kD&#qgPI-jF-|q@qzyvXea313$8i(TWu8{4PSCEfcr%JWM z)_^(1#Z|}|Gkl+u3uV6)_{kaINAmFKd~OxdcWlQ{UPDQoikM=Sh)4lf+7*SDDPv)x z?lcdFL@W+{%(>I=cTTUad;Pw(*#fty(A8_R6&eliu(jl_ma+?g$y?iMrgH3i$gxk( zGRX;w8bgVo^Le|Ckt~StG=VU&0S*xHzeftkq1VGawZsI9bP>nQ5is_>auQWi8H?L< zFy-A{TSWSMW)E19#()}wcUhAi8m8E$v0B?a^^)q?h+N+_=}N$?whR2lE`CMtRIS+! z6x4lnl_zx^R&6C6N1_rB5qk_oo{a31GkpH;mWQk-&}2@B$VOs2|>~8Tpyd7 zqS-v@eK=3wj3R5=EW%STWW#T@8Mb-UncMeYc_Tf)|KejhJqH2ht7WcVDjbCr4#pT^bqDg>ivZF uzfrSjEZ6>T`sSE@R8gE!+O_s8I;Gw44uKs4I|Tk;2>c71{fr|3AOHZl+7iS7