From d08136669d400c6b8a36b1be7882dcfa96a25648 Mon Sep 17 00:00:00 2001 From: Arjan Widlak Date: Wed, 3 Nov 2010 18:16:20 +0100 Subject: [PATCH 01/27] updated required_modules --- docs/required_modules | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/required_modules b/docs/required_modules index f1d1dac..b8200dc 100644 --- a/docs/required_modules +++ b/docs/required_modules @@ -1,3 +1,3 @@ -Mail::DeliveryStatus::BounceParser -Class::InsideOut +Mail::DeliveryStatus::BounceParser (v 1.525) +Class::InsideOut (v 1.10) From 745addd5d167ade07ca2ae212cefd6842c4c19af Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 18 Nov 2010 15:21:44 +0100 Subject: [PATCH 02/27] Template confirm mutation screen. --- lib/WebGUI/AssetAspect/Subscriber.pm | 24 +++++++++++--- .../i18n/Dutch/AssetAspect_Subscriber.pm | 13 +++++--- .../i18n/English/AssetAspect_Subscriber.pm | 14 ++++---- sbin/install_newsletter.pl | 30 ++++++++++++++++++ .../root_import_personalnewsletter.wgpkg | Bin 3699 -> 4068 bytes 5 files changed, 66 insertions(+), 15 deletions(-) diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index 204ffbd..e02f616 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -87,6 +87,13 @@ sub definition { namespace => 'Subscriber/NoMutationEmail', tab => 'subscription', }, + confirmMutationTemplateId => { + fieldType => 'template', + defaultValue => 'WUk-wEhGiF8dcEogrJfrfg', + label => $i18n->get( 'confirm mutation template' ), + namespace => 'Subscriber/MutationConfirmation', + tab => 'subscription', + } ); push( @{ $definition }, { @@ -527,21 +534,30 @@ sub www_confirmMutation { ] ); + my $var = { + message => $i18n->get( 'wrong code' ), + returnUrl => $self->getUrl, + isSuccess => 0, + "is$type" => 1, + }; if ( $userId ) { $self->logConfirmation( $code ); if ( $type eq 'subscribe' ) { $self->getSubscriptionGroup->addUsers( [ $userId ] ); - return $self->processStyle( sprintf $i18n->get( 'subscription successful'), $self->getUrl ); + + $var->{ message } = sprintf $i18n->get( 'subscription successful'), $self->getUrl; + $var->{ isSuccess } = 1; } elsif ( $type eq 'unsubscribe' ) { $self->getSubscriptionGroup->deleteUsers( [ $userId ] ); - return $self->processStyle( sprintf $i18n->get( 'unsubscription successful' ), $self->getUrl ); + + $var->{ message } = sprintf $i18n->get( 'unsubscription successful' ), $self->getUrl; + $var->{ isSuccess } = 1; } } - return $self->processStyle( $i18n->get( 'wrong code' ) ); - + return $self->processTemplate( $var, $self->get('confirmMutationTemplateId') ); } #---------------------------------------------------------------------------- diff --git a/lib/WebGUI/i18n/Dutch/AssetAspect_Subscriber.pm b/lib/WebGUI/i18n/Dutch/AssetAspect_Subscriber.pm index ee759a2..e6e8995 100644 --- a/lib/WebGUI/i18n/Dutch/AssetAspect_Subscriber.pm +++ b/lib/WebGUI/i18n/Dutch/AssetAspect_Subscriber.pm @@ -3,7 +3,7 @@ package WebGUI::i18n::Dutch::AssetAspect_Subscriber; use strict; our $I18N = { - 'Subscription group' => { + 'Subscription group' => { message => 'Abonnee groep', }, 'Enable subscription' => { @@ -24,7 +24,7 @@ our $I18N = { 'confirmation email template' => { message => 'Verificatie email: sjabloon', }, - 'no mutation subject' => { + 'no mutation subject' => { message => 'Geen wijziging email: onderwerp', }, 'no mutation template' => { @@ -52,16 +52,19 @@ our $I18N = { 'anonnymous not allowed' => { message => 'Anonieme inschrijvingen zijn niet toegestaan. Log in om in- of uit te schrijven.', }, - + 'subscription successful' => { - message => 'Uw inschrijving is geslaagd. Terug naar de site', + message => 'Uw inschrijving is geslaagd.', }, 'unsubscription successful' => { - message => 'Uw uitschrijving is geslaagd. Terug naar de site', + message => 'Uw uitschrijving is geslaagd.', }, 'wrong code' => { message => 'De verificatiecode in de link is onbekend, al gebruikt of verlopen. Als u zich wilt in- of uitschrijven probeer dit dan opnieuw of neem contact op met de websitebeheerders.', }, + 'confirm mutation template' => { + message => 'Mutatie bevestigings template', + }, }; 1; diff --git a/lib/WebGUI/i18n/English/AssetAspect_Subscriber.pm b/lib/WebGUI/i18n/English/AssetAspect_Subscriber.pm index f330260..cc5b9e5 100644 --- a/lib/WebGUI/i18n/English/AssetAspect_Subscriber.pm +++ b/lib/WebGUI/i18n/English/AssetAspect_Subscriber.pm @@ -3,7 +3,7 @@ package WebGUI::i18n::English::AssetAspect_Subscriber; use strict; our $I18N = { - 'Subscription group' => { + 'Subscription group' => { message => 'Subscription group', }, 'Enable subscription' => { @@ -24,7 +24,7 @@ our $I18N = { 'confirmation email template' => { message => 'Confirmation email template', }, - 'no mutation subject' => { + 'no mutation subject' => { message => 'No mutation email subject', }, 'no mutation template' => { @@ -34,7 +34,6 @@ our $I18N = { message => 'Subscription', }, - 'subscribe' => { message => 'Subscribe', }, @@ -52,17 +51,20 @@ our $I18N = { 'anonnymous not allowed' => { message => 'Anonymous subscription is not allowed. Please log in to (un)subscribe', }, - + 'subscription successful' => { - message => 'You are succesfully subscribed. Back to site', + message => 'You are succesfully subscribed.', }, 'unsubscription successful' => { - message => 'You are succesfully unsubscribed. Back to site', + message => 'You are succesfully unsubscribed.', }, 'wrong code' => { message => 'The verification code you supplied is either unknown, already used or expired. Please try again to (un)subscribe or contact the site administrators.', }, + 'confirm mutation template' => { + message => 'Mutation confirmation template', + }, }; 1; diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl index 2d07aea..ced5510 100644 --- a/sbin/install_newsletter.pl +++ b/sbin/install_newsletter.pl @@ -34,9 +34,39 @@ renamespaceTemplates( $session ); addSpecialStateTable( $session ); addListNameColumn( $session ); addRegistrationSteps( $session ); +addConfirmationTemplateColumn( $session ); finish($session); +#---------------------------------------------------------------------------- +sub addConfirmationTemplateColumn { + my $session = shift; + my $db = $session->db; + + print "\tAdding column for mutation confirmation template..."; + + my $hasColumn = $db->quickScalar( 'show columns from assetAspectSubscriber where Field = ?', [ + 'confirmMutationTemplateId', + ] ); + + unless ( $hasColumn ) { + $db->write( + 'alter table assetAspectSubscriber add column confirmMutationTemplateId char(22) binary not null default ?', + [ + 'WUk-wEhGiF8dcEogrJfrfg', + ] + ); + + $db->write( + 'update assetAspectSubscriber set confirmMutationTemplateId=? where confirmMutationTemplateId is null', + [ + 'WUk-wEhGiF8dcEogrJfrfg', + ] + ); + } + + print "Done.\n"; +} #---------------------------------------------------------------------------- sub addListNameColumn { diff --git a/sbin/packages/root_import_personalnewsletter.wgpkg b/sbin/packages/root_import_personalnewsletter.wgpkg index a96e715f939d9a3ebf384ee7753971a2b5f75cb5..badf6e3a000fa7dd735bb4ed6c0a7daf484507d6 100644 GIT binary patch literal 4068 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 WlJZglO9}i9CGbE0%_3m{WB>qmg!I4w literal 3699 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 R1pbB+_#d*wNwxr5000dFG(P|U From 4fdc8b1798279f5cc0d005fd9629e704181e945e Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Fri, 19 Nov 2010 13:11:42 +0100 Subject: [PATCH 03/27] Allow empty senderIp and default to 127.0.0.1. --- sbin/newsletter-transport.pl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sbin/newsletter-transport.pl b/sbin/newsletter-transport.pl index beedd33..db49696 100755 --- a/sbin/newsletter-transport.pl +++ b/sbin/newsletter-transport.pl @@ -34,11 +34,9 @@ my $webguiRoot = '/data/WebGUI'; my $session = openSession( $webguiRoot, $configFile ); no warnings 'once'; *{ WebGUI::Session::Env::getIp } = sub { - return $senderIp; + return $senderIp || '127.0.0.1'; }; - $session->log->warn( "IP is : [$senderIp][" .$session->env->getIp ."]"); - WebGUI::MailCommand::processCommand( $session, $command, $id, $sender ); closeSession( $session ); @@ -65,7 +63,7 @@ sub getCredentials { warn "--domain parameter is required" && exit( $WRONG_USAGE ) unless $domain; warn "--user parameter is required" && exit( $WRONG_USAGE ) unless $user; warn "--sender parameter is required" && exit( $WRONG_USAGE ) unless $sender; - warn "--senderIp parameter is required" && exit( $WRONG_USAGE ) unless $senderIp; + #warn "--senderIp parameter is required" && exit( $WRONG_USAGE ) unless $senderIp; my $dispatch = WebGUI::Config->new( $webguiRoot, 'mailing_dispatch.config' ) || warn "Cannot open $webguiRoot/etc/mailing_dispatch.config" && exit( $CONFIG_ERROR ); From 80e1f1e0ea14badfd4bbe86c781f40b6f70547e9 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 24 Nov 2010 10:32:00 +0100 Subject: [PATCH 04/27] Don't absolutify # and mailto hrefs --- lib/WebGUI/Mailing/Email.pm | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/Mailing/Email.pm b/lib/WebGUI/Mailing/Email.pm index 7598656..9445285 100644 --- a/lib/WebGUI/Mailing/Email.pm +++ b/lib/WebGUI/Mailing/Email.pm @@ -54,7 +54,7 @@ sub crud_definition { }, ); - $definition->{ properties } = { + $definition->{ properties } = { %{ $definition->{ properties } || {} }, %properties, }; @@ -128,20 +128,19 @@ sub absolutifyURIs { my $tb = HTML::TreeBuilder->new; my $root = $tb->parse( $content ); - foreach my $link ( @{ $root->extract_links } ) { + foreach my $link ( @{ $root->extract_links } ) { my ($uri, $element, $attr, $tag) = @{ $link }; - - if ( $uri !~ m{ ^ [a-z]+:// }xmsi ) { - my $new = + if ( $uri !~ m{ ^ (?: [a-z]+:// | \# | mailto: ) }xmsi ) { + my $new = ( $uri =~ m{ ^ / }xmsi ) # Is url absolute? ? $siteUrl . $uri : $siteUrl . $pageUrl . '/' . $uri ; - + # replace attribute $element->attr( $attr, $new ); } - } + } return $tb->as_HTML; } @@ -167,7 +166,7 @@ sub send { #### TODO: Error checking my $mailing = $self->getMailing; unless ( $mailing ) { - $session->log->error( 'Cannot send because getMailing doesn\'t return one.' ); + $session->log->error( 'Cannot send because getMailing doesn\'t return one.' ); return; } @@ -193,7 +192,7 @@ sub send { # Check bounce score my $bounceScoreOk = WebGUI::Mailing::Bounce->new( $session )->bounceScoreOk( $to ); if ( !$self->get( 'isTest' ) && !$bounceScoreOk ) { - $self->update( { + $self->update( { status => 'skipped', sendDate => time, errorMessage => "Bounce score for $to too high", @@ -228,14 +227,14 @@ sub send { } } - # And send it. + # And send it. my $success = $mail->send; if ( $success ne '1' ) { $self->error( "Mail couldn't be sent by WebGUI::Mail::Send" ); } else { - $self->update( { + $self->update( { status => 'sent', sendDate => time, sentTo => $to, From 0843bec5e0a59eff7374eb2d256efaf48eaabed2 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 24 Nov 2010 10:37:42 +0100 Subject: [PATCH 05/27] www_confirmMutaton dd not process style template. --- lib/WebGUI/AssetAspect/Subscriber.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index e02f616..13d2d08 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -557,7 +557,7 @@ sub www_confirmMutation { } } - return $self->processTemplate( $var, $self->get('confirmMutationTemplateId') ); + return $self->processStyle( $self->processTemplate( $var, $self->get('confirmMutationTemplateId') ) ); } #---------------------------------------------------------------------------- From d325e7a3014949d625523288991fec84994456cb Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Fri, 12 Nov 2010 18:02:50 +0100 Subject: [PATCH 06/27] Unslow bounce report generation and add some extra info as a bonus! --- lib/WebGUI/Mailing/Bounce.pm | 44 +++++++++++++++++++---- lib/WebGUI/i18n/Dutch/MailingManager.pm | 10 +++++- lib/WebGUI/i18n/English/MailingManager.pm | 10 +++++- sbin/install_newsletter.pl | 12 +++++++ 4 files changed, 68 insertions(+), 8 deletions(-) diff --git a/lib/WebGUI/Mailing/Bounce.pm b/lib/WebGUI/Mailing/Bounce.pm index 7a4fe33..c76b572 100644 --- a/lib/WebGUI/Mailing/Bounce.pm +++ b/lib/WebGUI/Mailing/Bounce.pm @@ -57,13 +57,45 @@ sub session { sub www_bounceReport { my $self = shift; my $session = $self->session; + my $db = $session->db; my $i18n = WebGUI::International->new( $session, 'MailingManager' ); - my $sth = $session->db->read( 'select distinct sentTo from Mailing_email where sentTo is not null' ); - - my $output = ''; - while ( my ($email) = $sth->array ) { - my $score = $self->getBounceScore( $email ); - $output .= ""; + + my $windowSize = 10; + + my $sql = <read( $sql, [ $windowSize, $windowSize - 1 ] ); + + my $output = '
'.$i18n->get('email').''.$i18n->get('bounce score').'
$email$score
'; + while ( my $values = $sth->arrayRef ) { + $output .= ''; } $output .= '
' + . join( '', + $i18n->get('email'), + $i18n->get('bounce score'), + $i18n->get('bounce reason'), + $i18n->get('bounce message') + ) + . '
'. join( '', @$values ) . '
'; diff --git a/lib/WebGUI/i18n/Dutch/MailingManager.pm b/lib/WebGUI/i18n/Dutch/MailingManager.pm index 4dc165b..31892b7 100644 --- a/lib/WebGUI/i18n/Dutch/MailingManager.pm +++ b/lib/WebGUI/i18n/Dutch/MailingManager.pm @@ -26,7 +26,7 @@ our $I18N = { 'bounce score' => { message => 'Bounce score', }, - + 'cannot cancel' => { message => 'Mailing \'%s\' kan niet worden afgebroken.', }, @@ -100,6 +100,14 @@ our $I18N = { 'generate mailing' => { message => 'Genereer mailing', }, + + 'bounce reason' => { + message => 'Laatste bounce oorzaak', + }, + + 'bounce message' => { + message => 'Laatste bounce omschrijving', + }, }; 1; diff --git a/lib/WebGUI/i18n/English/MailingManager.pm b/lib/WebGUI/i18n/English/MailingManager.pm index 51798f1..e8aebca 100644 --- a/lib/WebGUI/i18n/English/MailingManager.pm +++ b/lib/WebGUI/i18n/English/MailingManager.pm @@ -26,7 +26,7 @@ our $I18N = { 'bounce score' => { message => 'Bounce score', }, - + 'error' => { message => 'An error occurred', }, @@ -100,6 +100,14 @@ our $I18N = { 'generate mailing' => { message => 'Generate mailing', }, + + 'bounce reason' => { + message => 'Latest bounce reason', + }, + + 'bounce message' => { + message => 'Latest bounce message', + }, }; 1; diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl index ced5510..c044a0f 100644 --- a/sbin/install_newsletter.pl +++ b/sbin/install_newsletter.pl @@ -35,6 +35,7 @@ addSpecialStateTable( $session ); addListNameColumn( $session ); addRegistrationSteps( $session ); addConfirmationTemplateColumn( $session ); +addSentToIndex( $session ); finish($session); @@ -63,6 +64,17 @@ sub addConfirmationTemplateColumn { 'WUk-wEhGiF8dcEogrJfrfg', ] ); + +sub addSentToIndex { + my $session = shift; + my $db = $session->db; + + print "\tAdding index to column Mailing_email.sentTo..."; + + my @indexes = $db->buildArray('show indexes from Mailing_email where Column_name=?',['sentTo']); + + if ( @indexes == 0 ) { + $db->write('alter table Mailing_email add index(sentTo)'); } print "Done.\n"; From fffdb9d1a0af58c5fb1122cc95c242c2f73cb54e Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 24 Nov 2010 13:23:26 +0100 Subject: [PATCH 07/27] Call prepareView on child assets in the prepareView phase to prevent their head tags showing up in our body. --- .../Asset/Wobject/NewsletterCollection.pm | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm index d35d745..cce6d01 100644 --- a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -8,7 +8,7 @@ use Class::C3; use WebGUI::User::SpecialState; use base qw{ - WebGUI::AssetAspect::Mailable + WebGUI::AssetAspect::Mailable WebGUI::AssetAspect::Subscriber WebGUI::Asset::Wobject }; @@ -35,7 +35,7 @@ sub definition { defaultValue => 1, }, ); - + push @{ $definition }, { assetName => $i18n->get('assetName'), icon => 'newsletter_collection.gif', @@ -52,12 +52,16 @@ sub definition { sub getIssues { my $self = shift; - my $issues = $self->getLineage( [ 'children' ], { - returnObjects => 1, - orderByClause => 'lineage desc', - } ); - - return $issues; + # Caching of instanciated assets is not for speed, but is requied since prepareView is called on them, and we + # need them again in that state in getViewVars. + unless ( $self->{ _issues } ) { + $self->{ _issues } = $self->getLineage( [ 'children' ], { + returnObjects => 1, + orderByClause => 'lineage desc', + } ); + } + + return $self->{ _issues }; } #---------------------------------------------------------------------------- @@ -88,7 +92,8 @@ sub getAssetContent { my $self = shift; my $asset = shift; - $asset->prepareView; + # Do not call prepareView on $asset here but rather do this in our own prepareView to prevent head tags being + # written to body. my $content = $asset->view; return $content; @@ -106,6 +111,11 @@ sub prepareView { $self->{ _viewTemplate } = $template; + # Call prepareview on issues here, to prevent head tags ending up in the body. + foreach my $issue ( @{ $self->getIssues } ) { + $issue->prepareView; + } + return; } @@ -126,7 +136,7 @@ sub getViewVars { foreach my $issue ( @{ $issues } ) { my $issueVar = $issue->get; $issueVar->{ url } = $issue->getUrl; - + my $isRecent = ( !$displayIssueId && $recentCount < $maxRecent ) || ( $issue->getId eq $displayIssueId ) @@ -157,7 +167,7 @@ sub view { my $self = shift; my $form = $self->session->form; - my $var = $self->getViewVars( { + my $var = $self->getViewVars( { displayIssue => $form->guid('displayIssue'), } ); From 595e340515d0b83e3b869367e1e4a3a42ef5905b Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 24 Nov 2010 15:01:21 +0100 Subject: [PATCH 08/27] Fix syntax error resulting from merge. --- sbin/install_newsletter.pl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sbin/install_newsletter.pl b/sbin/install_newsletter.pl index c044a0f..9745c38 100644 --- a/sbin/install_newsletter.pl +++ b/sbin/install_newsletter.pl @@ -64,7 +64,12 @@ sub addConfirmationTemplateColumn { 'WUk-wEhGiF8dcEogrJfrfg', ] ); + } + + print "Done.\n"; +} +#---------------------------------------------------------------------------- sub addSentToIndex { my $session = shift; my $db = $session->db; From 0d1b0fe7ac62f179ed3458d8ae4739ed58068a51 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 9 Dec 2010 14:10:19 +0100 Subject: [PATCH 09/27] Add sortable YUI data table to bounce score overview. --- lib/WebGUI/Mailing/Bounce.pm | 62 ++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/lib/WebGUI/Mailing/Bounce.pm b/lib/WebGUI/Mailing/Bounce.pm index c76b572..422cc23 100644 --- a/lib/WebGUI/Mailing/Bounce.pm +++ b/lib/WebGUI/Mailing/Bounce.pm @@ -86,21 +86,77 @@ EOSQL my $sth = $db->read( $sql, [ $windowSize, $windowSize - 1 ] ); - my $output = '
' + my $output = '
'; + . ''; while ( my $values = $sth->arrayRef ) { $output .= ''; } - $output .= '
' . join( '', $i18n->get('email'), $i18n->get('bounce score'), $i18n->get('bounce reason'), $i18n->get('bounce message') ) - . '
'. join( '', @$values ) . '
'; + $output .= '
'; + + $self->addBounceScoreTableJS; return WebGUI::Mailing::Admin->new( $session )->getAdminConsole->render( $output, $i18n->get( 'bounce scores' ) ); } +sub addBounceScoreTableJS { + my $self = shift; + my ($style, $url) = $self->session->quick( qw{ style url } ); + my $i18n = WebGUI::International->new( $self->session, 'MailingManager' ); + + my $emailLabel = $i18n->get('email'); + my $scoreLabel = $i18n->get('bounce score'); + my $reasonLabel = $i18n->get('bounce reason'); + my $messageLabel= $i18n->get('bounce message'); + + my $js = < + // + +EOJS + + $style->setLink( $url->extras('yui/build/datatable/assets/skins/sam/datatable.css'), { type => 'text/css', rel => 'stylesheet' } ); + $style->setScript( $url->extras('yui/build/yahoo-dom-event/yahoo-dom-event.js'), { type => 'text/javascript' } ); + $style->setScript( $url->extras('yui/build/element/element-min.js'), { type => 'text/javascript' } ); + $style->setScript( $url->extras('yui/build/datasource/datasource-min.js'), { type => 'text/javascript' } ); + $style->setScript( $url->extras('yui/build/datatable/datatable-min.js'), { type => 'text/javascript' } ); + $style->setRawHeadTags( $js ); + + return; +} + + 1; From 3ffb43bd6815de61f46e8614857a84e256ad60dc Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 15 Dec 2010 17:19:42 +0100 Subject: [PATCH 10/27] Make newsletter settable --- .../Registration/Step/MailingSubscribe.pm | 70 +++++++++++-------- 1 file changed, 40 insertions(+), 30 deletions(-) diff --git a/lib/WebGUI/Registration/Step/MailingSubscribe.pm b/lib/WebGUI/Registration/Step/MailingSubscribe.pm index deff855..19eebd5 100644 --- a/lib/WebGUI/Registration/Step/MailingSubscribe.pm +++ b/lib/WebGUI/Registration/Step/MailingSubscribe.pm @@ -15,12 +15,15 @@ sub getAvailableMailings { my $self = shift; my $session = $self->session; - my $availableMailings = WebGUI::Asset->getRoot( $session )->getLineage( ['descendants'], { - returnObjects => 1, - isa => 'WebGUI::Asset::Wobject::NewsletterCollection', - } ); + my $mailingIds = $self->get( 'includeMailings' ); - return $availableMailings; + my @mailings = + grep { defined $_ } + map { WebGUI::Asset->newByDynamicClass( $session, $_ ) } + ref $mailingIds eq 'ARRAY' ? @{ $mailingIds } : $mailingIds + ; + + return \@mailings; } #------------------------------------------------------------------- @@ -31,7 +34,7 @@ sub apply { my $subscribeTo = { map { $_ => 1 } @{ $self->getConfigurationData->{ subscribeMailings } || [] } }; - + my $availableMailings = $self->getAvailableMailings; my $sendNotification = 0; @@ -49,22 +52,32 @@ sub apply { return; } -##------------------------------------------------------------------- -#sub crud_definition { -# my $class = shift; -# my $session = shift; -# my $definition = $class->SUPER::crud_definition( $session ); -# my $i18n = WebGUI::International->new( $session, 'Registration_Step_Homepage' ); -# -# -# $definition->{ dynamic }->{ urlStorageField } = { -# fieldType => 'selectBox', -# label => 'Store homepage url in field', -# options => \%profileFields, -# }; -# -# return $definition; -#} +#------------------------------------------------------------------- +sub crud_definition { + my $class = shift; + my $session = shift; + my $definition = $class->SUPER::crud_definition( $session ); + my $i18n = WebGUI::International->new( $session, 'Registration_Step_Homepage' ); + + tie my %mailings, 'Tie::IxHash', ( + map { $_->getId => $_->getTitle } + @{ + WebGUI::Asset->getRoot( $session )->getLineage( ['descendants'], { + returnObjects => 1, + isa => 'WebGUI::Asset::Wobject::NewsletterCollection', + } ) + } + ); + + $definition->{ dynamic }->{ includeMailings } = { + fieldType => 'checkList', + label => 'Store homepage url in field', + options => \%mailings, + vertical => 1, + }; + + return $definition; +} #------------------------------------------------------------------- sub getSummaryTemplateVars { @@ -77,7 +90,7 @@ sub getSummaryTemplateVars { # Fetch preferred homepage url my $mailings = $self->getConfigurationData->{ subscribeMailings }; - my @assets = + my @assets = grep { defined $_ } map { WebGUI::Asset->newByDynamicClass( $session, $_ ) } @{ $mailings }; @@ -89,12 +102,12 @@ sub getSummaryTemplateVars { # Setup tmpl_var my $var = { - field_loop => \@fields, + field_loop => \@fields, category_label => $self->get('title'), category_edit_url => $self->changeStepDataUrl, }; - return ( $var ); + return ( $var ); } #------------------------------------------------------------------- @@ -119,7 +132,7 @@ sub getViewVars { } else { # The step hasn't been done yet. - @subscribeMailings = grep { $_->isSubscribed( $user ) } @{ $availableMailings }; + @subscribeMailings = map { $_->getId } grep { $_->isSubscribed( $user ) } @{ $availableMailings }; } # Create lookup table @@ -171,10 +184,7 @@ sub updateFromFormPost { my $self = shift; my $session = $self->session; - $self->SUPER::updateFromFormPost; - -# $self->update( { -# } ); + return $self->SUPER::updateFromFormPost; } #------------------------------------------------------------------- From efb7a004acb5f30531a79375827f0e7b13c27084 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 16 Dec 2010 13:39:15 +0100 Subject: [PATCH 11/27] Make subscribe buttons ie proof. --- lib/WebGUI/AssetAspect/Subscriber.pm | 34 ++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index 13d2d08..f1c1750 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -203,12 +203,32 @@ sub appendSubscriptionFormVars { WebGUI::Form::formHeader( $session, { action => $self->getUrl } ) . WebGUI::Form::hidden( $session, { name => 'func', value => 'processSubscription' } ) ; - my $subscribeButton = - sprintf '', $i18n->get('subscribe'); - my $unsubscribeButton = - sprintf '', $i18n->get('unsubscribe'); - my $emailBox = WebGUI::Form::email( $session, { name => 'email', value => '' } ); my $formFooter = WebGUI::Form::formFooter( $session ); + my $subscribeButton = + $formHeader + . WebGUI::Form::hidden( $session, { name => 'action', value => 'subscribe' } ) + . WebGUI::Form::submit( $session, { value => $i18n->get('subscribe') } ) + . $formFooter + ; + my $unsubscribeButton = + $formHeader + . WebGUI::Form::hidden( $session, { name => 'action', value => 'unsubscribe' } ) + . WebGUI::Form::submit( $session, { value => $i18n->get('unsubscribe') } ) + . $formFooter + ; + my $emailBox = + $formHeader + . WebGUI::Form::email( $session, { name => 'email', value => '' } ) + . WebGUI::Form::radioList( $session, { + name => 'action', + options => { + subscribe => $i18n->get('subscribe'), + unsubscribe => $i18n->get('unsubscribe'), + } + } ) + . WebGUI::Form::submit( $session ) + . $formFooter + ; # Compose default subscription form for current user my $form = ''; @@ -217,11 +237,11 @@ sub appendSubscriptionFormVars { $form .= $unsubscribeButton if $self->canUnsubscribe; } elsif ( $self->get('allowAnonymousSubscription') ) { - $form = $emailBox . $subscribeButton . $unsubscribeButton; + $form = $emailBox; } # Setup tmpl_vars - $var->{ subscriptionForm_form } = "$formHeader $form $formFooter" if $form; + $var->{ subscriptionForm_form } = $form if $form; $var->{ subscriptionForm_header } = $formHeader; $var->{ subscriptionForm_footer } = $formFooter; $var->{ subscriptionForm_subscribeButton } = $subscribeButton; From 98c3c699598675f56c0417f053080daf205bd15e Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 16 Dec 2010 13:42:35 +0100 Subject: [PATCH 12/27] Fix typo. --- lib/WebGUI/AssetAspect/Subscriber.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/AssetAspect/Subscriber.pm b/lib/WebGUI/AssetAspect/Subscriber.pm index f1c1750..a48a51b 100644 --- a/lib/WebGUI/AssetAspect/Subscriber.pm +++ b/lib/WebGUI/AssetAspect/Subscriber.pm @@ -246,7 +246,7 @@ sub appendSubscriptionFormVars { $var->{ subscriptionForm_footer } = $formFooter; $var->{ subscriptionForm_subscribeButton } = $subscribeButton; $var->{ subscriptionForm_unsubscribeButton } = $unsubscribeButton; - $var->{ subscrittionForm_emailBox } = $emailBox; + $var->{ subscriptionForm_emailBox } = $emailBox; $var->{ user_canSubscribe } = $self->canSubscribe; $var->{ user_canUnsubscribe } = $self->canUnsubscribe; $var->{ user_isRegistered } = $session->user->isRegistered; From c6d7fe913ddc392e96e7b0a40e959959e6cb317f Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Thu, 16 Dec 2010 16:50:19 +0100 Subject: [PATCH 13/27] Fix invalid label. --- lib/WebGUI/Registration/Step/MailingSubscribe.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/Registration/Step/MailingSubscribe.pm b/lib/WebGUI/Registration/Step/MailingSubscribe.pm index 19eebd5..965f452 100644 --- a/lib/WebGUI/Registration/Step/MailingSubscribe.pm +++ b/lib/WebGUI/Registration/Step/MailingSubscribe.pm @@ -71,7 +71,7 @@ sub crud_definition { $definition->{ dynamic }->{ includeMailings } = { fieldType => 'checkList', - label => 'Store homepage url in field', + label => 'Include newsletters', options => \%mailings, vertical => 1, }; From 1d35a471e870405218a64b475ac264f9bef5343d Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 22 Dec 2010 10:30:53 +0100 Subject: [PATCH 14/27] Prevent warning. --- lib/WebGUI/Asset/Wobject/NewsletterCollection.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm index cce6d01..594f2a8 100644 --- a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -138,7 +138,7 @@ sub getViewVars { $issueVar->{ url } = $issue->getUrl; my $isRecent = - ( !$displayIssueId && $recentCount < $maxRecent ) + ( ! defined $displayIssueId && $recentCount < $maxRecent ) || ( $issue->getId eq $displayIssueId ) ; From e209e0104a1f635482f4d5e72b2a46a150f6c104 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 22 Dec 2010 10:40:53 +0100 Subject: [PATCH 15/27] Fix missing i18n messages. --- lib/WebGUI/Registration/Step/MailingSubscribe.pm | 4 ++-- lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm | 3 +++ lib/WebGUI/i18n/English/RegistrationStep_MailingSubscribe.pm | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/WebGUI/Registration/Step/MailingSubscribe.pm b/lib/WebGUI/Registration/Step/MailingSubscribe.pm index 965f452..997d8b8 100644 --- a/lib/WebGUI/Registration/Step/MailingSubscribe.pm +++ b/lib/WebGUI/Registration/Step/MailingSubscribe.pm @@ -57,7 +57,7 @@ sub crud_definition { my $class = shift; my $session = shift; my $definition = $class->SUPER::crud_definition( $session ); - my $i18n = WebGUI::International->new( $session, 'Registration_Step_Homepage' ); + my $i18n = WebGUI::International->new( $session, 'RegistrationStep_MailingSubscribe' ); tie my %mailings, 'Tie::IxHash', ( map { $_->getId => $_->getTitle } @@ -71,7 +71,7 @@ sub crud_definition { $definition->{ dynamic }->{ includeMailings } = { fieldType => 'checkList', - label => 'Include newsletters', + label => $i18n->get('Include newsletters'), options => \%mailings, vertical => 1, }; diff --git a/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm b/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm index 957d7f1..698a399 100644 --- a/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm +++ b/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm @@ -9,6 +9,9 @@ our $I18N = { 'Subscribe to this mailing' => { message => 'Abonneer op deze nieuwsbrief', }, + 'Include newsletters' => { + message => 'Selecteerbare nieuwsbrieven', + }, }; 1; diff --git a/lib/WebGUI/i18n/English/RegistrationStep_MailingSubscribe.pm b/lib/WebGUI/i18n/English/RegistrationStep_MailingSubscribe.pm index 9b6df53..71534e4 100644 --- a/lib/WebGUI/i18n/English/RegistrationStep_MailingSubscribe.pm +++ b/lib/WebGUI/i18n/English/RegistrationStep_MailingSubscribe.pm @@ -9,6 +9,9 @@ our $I18N = { 'Subscribe to this mailing' => { message => 'Subscribe to this mailing', }, + 'Include newsletters' => { + message => 'Include newsletters', + }, }; 1; From cc02178bb7cec17aadca5134c2b88354777261f2 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 22 Dec 2010 15:24:14 +0100 Subject: [PATCH 16/27] Now prevent warning even morerest. --- lib/WebGUI/Asset/Wobject/NewsletterCollection.pm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm index 594f2a8..fd581ed 100644 --- a/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm +++ b/lib/WebGUI/Asset/Wobject/NewsletterCollection.pm @@ -137,10 +137,10 @@ sub getViewVars { my $issueVar = $issue->get; $issueVar->{ url } = $issue->getUrl; - my $isRecent = - ( ! defined $displayIssueId && $recentCount < $maxRecent ) - || ( $issue->getId eq $displayIssueId ) - ; + my $isRecent = defined $displayIssueId + ? $issue->getId eq $displayIssueId + : $recentCount < $maxRecent + ; if ( $isRecent ) { $issueVar->{ content } = $self->getAssetContent( $issue ); From b5348ea49e77558491edfdb8e857d6b4a735e211 Mon Sep 17 00:00:00 2001 From: Arjan Widlak Date: Wed, 12 Jan 2011 15:10:04 +0100 Subject: [PATCH 17/27] Changed some i18n text --- lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm b/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm index 698a399..5d08975 100644 --- a/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm +++ b/lib/WebGUI/i18n/Dutch/RegistrationStep_MailingSubscribe.pm @@ -4,10 +4,10 @@ use strict; our $I18N = { 'Subscribe to mailings' => { - message => 'Abonneren op nieuwsbrieven', + message => 'Ontvang op nieuwsbrieven', }, 'Subscribe to this mailing' => { - message => 'Abonneer op deze nieuwsbrief', + message => 'Ontvang op deze nieuwsbrief', }, 'Include newsletters' => { message => 'Selecteerbare nieuwsbrieven', From 95d0f9fedbeb09eea2f59994c50a618c2c3cc2f8 Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Fri, 14 Jan 2011 14:32:15 +0100 Subject: [PATCH 18/27] Set a flag when rendering mailings --- lib/WebGUI/AssetAspect/Mailable.pm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/lib/WebGUI/AssetAspect/Mailable.pm b/lib/WebGUI/AssetAspect/Mailable.pm index 90bc717..5efa6c7 100644 --- a/lib/WebGUI/AssetAspect/Mailable.pm +++ b/lib/WebGUI/AssetAspect/Mailable.pm @@ -2,7 +2,7 @@ package WebGUI::AssetAspect::Mailable; use strict; use warnings; -use Class::C3; +use Class::C3; use WebGUI::Macro; use Tie::IxHash; @@ -115,13 +115,15 @@ sub processContentAsUser { $session->user( { userId => $userId } ); $session->log->preventDebugOutput; - my $styleTemplateId = - $configuration->{ styleTemplateId } - || $self->get('mailStyleTemplateId') + my $styleTemplateId = + $configuration->{ styleTemplateId } + || $self->get('mailStyleTemplateId') || $self->get('styleTemplateId'); + $session->stow->set( 'mailing_rendering' => 1 ); + # Generate email body for this user - my $content = $session->style->process( + my $content = $session->style->process( $self->generateEmailContent( $issueId, $configuration ), $styleTemplateId, ); @@ -129,10 +131,13 @@ sub processContentAsUser { # Process macros WebGUI::Macro::process( $session, \$content ); + $session->stow->delete( 'mailing_rendering' ); + # Become ourselves again. $session->user( { userId => $currentUser->getId } ); $var->switchAdminOn if $adminOn; + return $content; } From 2a6e8f6193dbc385e53df9d0fc5ffc8e4a4f2152 Mon Sep 17 00:00:00 2001 From: Arjan Widlak Date: Wed, 19 Jan 2011 12:38:19 +0100 Subject: [PATCH 19/27] Added option to add existing users to another group than new users. Added documentation. --- sbin/importSpecialState.pl | 46 +++++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 10 deletions(-) diff --git a/sbin/importSpecialState.pl b/sbin/importSpecialState.pl index 91a0158..ff20fb1 100644 --- a/sbin/importSpecialState.pl +++ b/sbin/importSpecialState.pl @@ -1,7 +1,7 @@ #!/usr/bin/env perl $|++; # disable output buffering -our ($webguiRoot, $configFile, $state, $emailFile, $groupId ); +our ($webguiRoot, $configFile, $state, $emailFile, $groupId, $existingUsersGroupId ); BEGIN { $webguiRoot = ".."; @@ -15,12 +15,16 @@ use WebGUI::Session; use WebGUI::User; use WebGUI::User::SpecialState; +# Set default value +$existingUsersGroupId = ''; + # Get parameters here, including $help GetOptions( - 'configFile=s' => \$configFile, - 'groupId=s' => \$groupId, - 'state=s' => \$state, - 'emailFile=s' => \$emailFile, + 'configFile=s' => \$configFile, + 'groupId=s' => \$groupId, + 'existingUsersGroupId=s' => \$existingUsersGroupId, + 'state=s' => \$state, + 'emailFile=s' => \$emailFile, ); my $session = start( $webguiRoot, $configFile ); @@ -40,18 +44,24 @@ while ( my $email = <$fh> ) { my $user = WebGUI::User->newByEmail( $session, $email ); if ( $user ) { print "\tEmail already has account. Skipping.\n"; + if ( $existingUsersGroupId ) { + print "\tAdding user to group $existingUsersGroupId\n"; + $user->addToGroups( [ $existingUsersGroupId ] ); + } + else { + print "\tAdding user to group $groupId\n"; + $user->addToGroups( [ $groupId ] ); + } } else { print "\tEmail has no account, creating special state $state.\n"; $user = WebGUI::User::SpecialState->create( $session ); $user->update( { email => $email } ); $user->addSpecialState( $state ); + print "\tAdding user to group $groupId\n"; + $user->addToGroups( [ $groupId ] ); } - print "\tAdding user to group $groupId\n"; - - $user->addToGroups( [ $groupId ] ); - } print "Done\n\n"; @@ -120,6 +130,22 @@ The WebGUI config file to use. Only the file name needs to be specified, since it will be looked up inside WebGUI's configuration directory. This parameter is required. +=item B<--groupId> + +Add users to this group. If no existingUsersGroupId is given, all users, both new and existing users, are added to this group. If the --existingUsersGroupId is given, new users are added to this group, existing users are added to the existingUsersGroupId. + +=item B<--existingUsersGroupId> + +Add existing users to this group. + +=item B<--state> + +Set the so called specialState for this user. For all users disabeled accounts are created. SpecialState accounts can be transformed into regular accounts using the webgui_registration content handler. The special states are crm or Subscriber, for a user added via the crm or a newsletter subscription respectively. + +=item B<--emailFile> + +A text file with an emailadress on every line. + =item B<--help> Shows a short summary and usage @@ -132,7 +158,7 @@ Shows this document =head1 AUTHOR -Copyright 2001-2009 Plain Black Corporation. +Copyright 2010-2011 United Knowledge B.V. =cut From 87139a7498c55986f8367160e8850a2a9af9309b Mon Sep 17 00:00:00 2001 From: Martin Kamerbeek Date: Wed, 15 Jun 2011 04:56:23 +0200 Subject: [PATCH 20/27] Fixed bug where generate mailing would generate two mailings before even saving the form. --- lib/WebGUI/Mailing.pm | 84 +++++++++++++++++++++---------------- lib/WebGUI/Mailing/Admin.pm | 74 ++++++++++++++++++++++++++++---- 2 files changed, 113 insertions(+), 45 deletions(-) diff --git a/lib/WebGUI/Mailing.pm b/lib/WebGUI/Mailing.pm index 31ced29..93d8124 100644 --- a/lib/WebGUI/Mailing.pm +++ b/lib/WebGUI/Mailing.pm @@ -40,7 +40,7 @@ sub cancel { ); }; - $self->update( { + $self->update( { state => 'idle', sendDate => undef, } ); @@ -65,7 +65,7 @@ sub crud_definition { assetId => { fieldType => 'guid', }, - + issueId => { fieldType => 'guid', }, @@ -83,7 +83,7 @@ sub crud_definition { }, ); - $definition->{ properties } = { + $definition->{ properties } = { %{ $definition->{ properties } || {} }, %properties, }; @@ -94,7 +94,7 @@ sub crud_definition { #---------------------------------------------------------------------------- sub delete { my $self = shift; - + $self->deleteQueuedEmails; return $self->SUPER::delete; @@ -103,12 +103,12 @@ sub delete { #---------------------------------------------------------------------------- sub deleteQueuedEmails { my $self = shift; - + my $it = $self->getQueuedEmailIterator; while ( my $email = $it->() ) { $email->delete; } - + $it = $self->getQueuedTestEmailIterator; while ( my $email = $it->() ) { $email->delete; @@ -180,8 +180,8 @@ sub getStatusLine { my $self = shift; my $db = $self->session->db; - my $sth = $db->read( - 'select status, isTest, count( status ) as cnt from Mailing_email where mailingId=? group by status,isTest', + my $sth = $db->read( + 'select status, isTest, count( status ) as cnt from Mailing_email where mailingId=? group by status,isTest', [ $self->getId, ], @@ -260,7 +260,7 @@ sub queue { $state, ); }; - + $self->queueEmails( $self->getAsset->getRecipients ); $self->update( { @@ -285,7 +285,7 @@ sub queueEmails { recipientEmail => undef, isTest => 0, } ); - + } return; @@ -334,7 +334,7 @@ sub send { $state, ); }; - + $self->update( { state => 'sending' } ); my $complete = $self->sendQueuedEmails( $timeLimit ); @@ -361,7 +361,7 @@ sub sendQueuedEmails { $email->send; } - + return 1; } @@ -380,7 +380,7 @@ sub www_cancel { $i18n->get('cancel mailing success'), $i18n->get('cancel mailing'), ); - } + } else { return $self->renderInConsole( $i18n->get('cancel mailing failure'), @@ -415,13 +415,13 @@ sub www_delete { #---------------------------------------------------------------------------- sub www_edit { - my $self = shift; - my $session = $self->session; - my $i18n = WebGUI::International->new( $session, 'MailingManager' ); + my $self = shift; + my $session = $self->session; + my $i18n = WebGUI::International->new( $session, 'MailingManager' ); return $session->privilege->insufficient unless $self->admin->canManage; - my $f = WebGUI::HTMLForm->new( $session ); + my $f = $self->getEditForm; $f->hidden( name => 'newsletter', value => 'mailing', @@ -435,6 +435,16 @@ sub www_edit { value => $self->getId, ); + return $self->renderInConsole( $f->print, $i18n->get('configure mailing') ); +} + +#---------------------------------------------------------------------------- +sub getEditForm { + my $self = shift; + my $session = $self->session; + my $i18n = WebGUI::International->new( $session, 'MailingManager' ); + my $f = WebGUI::HTMLForm->new( $session ); + my %fields = %{ $self->getAsset->getMailingProperties( $self ) }; my $configuration = $self->get('configuration') || {}; while ( my( $name, $properties ) = each %fields ) { @@ -444,7 +454,7 @@ sub www_edit { my $formField = WebGUI::Form::DynamicField->new( $session, %{ $properties } ); my $element = $formField->toHtml; # Works around a bug in WG::Form::Template in < 7.9.8 my $readonly = $formField->getValueAsHtml; # where getValueAsHtml wouldn't set the correct options hashref - + my $html = $self->admin->canOverride || $properties->{ managerCanEdit } ? $element : $readonly @@ -458,12 +468,12 @@ sub www_edit { $f->submit( value => $i18n->get( 'generate mailing' ) ); my $cancelUrl = $session->url->page( 'newsletter=manage' ); - $f->button( + $f->button( value => $i18n->get( 'cancel' ), extras => qq{onclick="window.location='$cancelUrl'" class="backwardButton"}, ); - return $self->renderInConsole( $f->print, $i18n->get('configure mailing') ); + return $f; } #---------------------------------------------------------------------------- @@ -486,7 +496,7 @@ sub www_previewEmail { my $session = $self->session; my ( $form, $url ) = $session->quick( 'form', 'url' ); my $i18n = WebGUI::International->new( $session, 'MailingManager' ); - + return $session->privilege->insufficient unless $self->admin->canManage; my $asset = $self->getAsset; @@ -494,7 +504,7 @@ sub www_previewEmail { my $manageUrl = $url->page('newsletter=manage'); my $subject = $asset->getSubject( $self->get('configuration') ); - my $userSelection = + my $userSelection = qq{

Terug naar de mailing manager.

@@ -516,11 +526,11 @@ sub www_previewEmail { } - - - - - + + + + +