package WebGUI::Mailing::Bounce; use strict; use warnings; use WebGUI::Mailing::Admin; #---------------------------------------------------------------------------- sub bounceScoreOk { my $self = shift; my $address = shift; my $setting = $self->session->setting; my $threshold = $setting->get('newsletterBounceScoreThreshold'); return 1 unless $threshold; return $self->getBounceScore( $address ) < $threshold; } #---------------------------------------------------------------------------- sub getBounceScore { my $self = shift; my $address = shift; my $session = $self->session; my $it = WebGUI::Mailing::Email->getAllIterator( $session, { constraints => [ { 'sentTo=?' => [ $address ] }, { 'status<>?' => [ 'queued' ] }, ], orderBy => 'sendDate desc', limit => 10, } ); my $score = 0; while ( my $email = $it->() ) { $score += 1 if $email->get('status') eq 'bounced'; } return $score; } #---------------------------------------------------------------------------- sub new { my $class = shift; my $session = shift; bless { _session => $session }, $class; } #---------------------------------------------------------------------------- sub session { return (shift)->{ _session }; } #---------------------------------------------------------------------------- sub www_bounceReport { my $self = shift; my $session = $self->session; my $db = $session->db; my $i18n = WebGUI::International->new( $session, 'MailingManager' ); my $windowSize = 10; my $sql = <read( $sql, [ $windowSize, $windowSize - 1 ] ); 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 ) . '
'; $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;