1
0
mirror of https://github.com/e107inc/e107.git synced 2025-07-31 20:00:37 +02:00

Merged core mailout routine into e107_plugins/user/e_mailout.php. Fixed pop3 error messages from phpmailer. Corrected email preview when no template selected. Corrected mailout Email source names.

This commit is contained in:
Cameron
2016-04-11 18:39:19 -07:00
parent b762c10ecc
commit 84d7271d10
8 changed files with 359 additions and 61 deletions

View File

@@ -81,7 +81,7 @@ include_lan(e_LANGUAGEDIR.e_LANGUAGE.'/admin/lan_mailout.php');
require_once(e_HANDLER.'ren_help.php'); require_once(e_HANDLER.'ren_help.php');
require_once(e_HANDLER.'userclass_class.php'); require_once(e_HANDLER.'userclass_class.php');
require_once(e_HANDLER.'mailout_class.php'); // Class handler for core mailout functions // require_once(e_HANDLER.'mailout_class.php'); // Class handler for core mailout functions
require_once(e_HANDLER.'mailout_admin_class.php'); // Admin tasks handler require_once(e_HANDLER.'mailout_admin_class.php'); // Admin tasks handler
require_once(e_HANDLER.'mail_manager_class.php'); // Mail DB API require_once(e_HANDLER.'mail_manager_class.php'); // Mail DB API
@@ -291,9 +291,9 @@ class mailout_main_ui extends e_admin_ui
'mail_source_id' => array('title' => LAN_MAILOUT_137, 'width' =>'5%', 'thclass' => 'center', 'class'=>'center', 'forced' => TRUE), 'mail_source_id' => array('title' => LAN_MAILOUT_137, 'width' =>'5%', 'thclass' => 'center', 'class'=>'center', 'forced' => TRUE),
'mail_selectors' => array('title' => LAN_MAILOUT_03, 'type'=>'method', 'data'=>false, 'nolist' => true, 'writeParms'=>'nolabel=0'), 'mail_selectors' => array('title' => LAN_MAILOUT_03, 'type'=>'method', 'data'=>false, 'nolist' => true, 'writeParms'=>'nolabel=0'),
'mail_title' => array('title' => LAN_TITLE, 'type'=>'text', 'forced' => TRUE, 'data'=>'str', 'inline'=>true, 'writeParms'=>'size=xxlarge&required=1', 'help'=>'whatever'), 'mail_title' => array('title' => LAN_TITLE, 'type'=>'text', 'forced' => TRUE, 'data'=>'str', 'inline'=>true, 'writeParms'=>'size=xxlarge&required=1', 'help'=>''),
'mail_sender_name' => array('title' => LAN_MAILOUT_150, 'type'=>'method', 'data'=>false), 'mail_sender_name' => array('title' => LAN_MAILOUT_150, 'type'=>'method', 'data'=>false),
'mail_sender_email' => array('title' => LAN_ID,'type'=>'method','data'=>false), 'mail_sender_email' => array('title' => LAN_MAILOUT_149,'type'=>'method','data'=>false),
'mail_copy_to' => array('title' => LAN_MAILOUT_151,'tab'=>1, 'type'=>'method','data'=>false), 'mail_copy_to' => array('title' => LAN_MAILOUT_151,'tab'=>1, 'type'=>'method','data'=>false),
'mail_bcopy_to' => array('title' => LAN_MAILOUT_152,'tab'=>1, 'type'=>'method','data'=>false), 'mail_bcopy_to' => array('title' => LAN_MAILOUT_152,'tab'=>1, 'type'=>'method','data'=>false),
'mail_subject' => array('title' => LAN_MAILOUT_06, 'type'=>'text', 'forced' => TRUE,'data'=>'str', 'inline'=>true, 'writeParms'=>'size=xxlarge&required=1'), 'mail_subject' => array('title' => LAN_MAILOUT_06, 'type'=>'text', 'forced' => TRUE,'data'=>'str', 'inline'=>true, 'writeParms'=>'size=xxlarge&required=1'),
@@ -1063,15 +1063,16 @@ class mailout_main_ui extends e_admin_ui
$mail_enable = explode(',',vartrue($pref['mailout_enabled'],'core')); $mail_enable = explode(',',vartrue($pref['mailout_enabled'],'core'));
$coreCheck = (in_array('core',$mail_enable)) ? "checked='checked'" : ""; $coreCheck = (in_array('core',$mail_enable)) ? "checked='checked'" : "";
$text .= $frm->checkbox('mail_mailer_enabled[]','core', $coreCheck, 'users'); // $text .= $frm->checkbox('mail_mailer_enabled[]','core', $coreCheck, 'users');
if(!empty($pref['e_mailout_list'])) if(!empty($pref['e_mailout_list']))
{ {
foreach ($pref['e_mailout_list'] as $mailer => $v) foreach ($pref['e_mailout_list'] as $mailer => $v)
{ {
$addon = e107::getAddon($v,'e_mailout');
$name = $addon->mailerName;
$check = (in_array($mailer,$mail_enable)) ? "checked='checked'" : ""; $check = (in_array($mailer,$mail_enable)) ? "checked='checked'" : "";
$text .= $frm->checkbox('mail_mailer_enabled[]',$mailer,$check,$mailer); $text .= $frm->checkbox('mail_mailer_enabled[]',$mailer,$check,$name);
// $text .= "&nbsp;<input type='checkbox' name='mail_mailer_enabled[]' value='{$mailer}' {$check} /> {$mailer}<br />";
} }
} }
@@ -1398,6 +1399,12 @@ class mailout_main_ui extends e_admin_ui
$temp['mailout_enabled'] = implode(',', varset($_POST['mail_mailer_enabled'], '')); $temp['mailout_enabled'] = implode(',', varset($_POST['mail_mailer_enabled'], ''));
$temp['mail_log_options'] = intval($_POST['mail_log_option']).','.intval($_POST['mail_log_email']); $temp['mail_log_options'] = intval($_POST['mail_log_option']).','.intval($_POST['mail_log_email']);
if(empty($temp['mailout_enabled']))
{
$temp['mailout_enabled'] = 'user';
}
foreach ($temp as &$t) foreach ($temp as &$t)
{ {
@@ -1434,6 +1441,7 @@ class mailout_admin_form_ui extends e_admin_form_ui
break; break;
case 'write': case 'write':
return $this->getController()->mailAdmin->emailSelector('all', varset($data['mail_selectors'], FALSE)); return $this->getController()->mailAdmin->emailSelector('all', varset($data['mail_selectors'], FALSE));
break; break;

View File

@@ -697,9 +697,16 @@ class e107Email extends PHPMailer
} }
} }
$text = $this->Body; $text = $this->Body;
if($eml['template'] == 'textonly')
{
$text = strip_tags($text);
}
if(!empty($this->previewAttachments)) if(!empty($this->previewAttachments))
{ {
$text .= "<hr />Attachments:"; $text .= "<hr />Attachments:";
@@ -710,7 +717,12 @@ class e107Email extends PHPMailer
$text .= "</div>"; $text .= "</div>";
} }
} }
if($eml['template'] == 'texthtml' || $eml['template'] == 'textonly' )
{
$text = "<body style='background-color:#FFFFFF'>".$text."</body>";
}
return $text; return $text;
} }
@@ -1192,6 +1204,9 @@ class e107Email extends PHPMailer
} }
} // End of e107Mailer class } // End of e107Mailer class

View File

@@ -544,16 +544,18 @@ class mailoutAdminClass extends e107MailManager
{ {
$pref = e107::getPref(); $pref = e107::getPref();
$pref['mailout_enabled'] = str_replace('core','user',$pref['mailout_enabled']); // BC fix.
$ret = 0; $ret = 0;
$toLoad = explode(',', $options); $toLoad = explode(',', $options);
$active_mailers = explode(',', varset($pref['mailout_enabled'], 'core')); $active_mailers = explode(',', varset($pref['mailout_enabled'], 'user'));
if((in_array('core', $toLoad) || ($options == 'all')) && in_array('core', $active_mailers)) if((in_array('core', $toLoad) || ($options == 'all')) && in_array('core', $active_mailers))
{ {
require_once (e_HANDLER . 'mailout_class.php'); // require_once (e_HANDLER . 'mailout_class.php');
$this->mailHandlers['core'] = new core_mailout; // Start by loading the core mailout class // $this->mailHandlers['core'] = new core_mailout; // Start by loading the core mailout class
$ret++; // $ret++;
} }
if(empty($pref['e_mailout_list'])) if(empty($pref['e_mailout_list']))
@@ -627,7 +629,7 @@ class mailoutAdminClass extends e107MailManager
if(is_array($content)) if(is_array($content))
{ {
$text = "<table class='table ' style='width:100%;margin-left:0px'> $text = "<table class='table table-bordered table-striped ' style='margin-bottom:0;margin-left:0; margin-top:10px'>
<colgroup span='2'> <colgroup span='2'>
<col class='col-label' /> <col class='col-label' />
<col class='col-control' /> <col class='col-control' />
@@ -638,7 +640,7 @@ class mailoutAdminClass extends e107MailManager
{ {
$text .= " $text .= "
<tr> <tr>
<td style='padding-left:0px'>" . $var['caption'] . "</td> <td>" . $var['caption'] . "</td>
<td class='form-inline'>" . $var['html'] . "</td> <td class='form-inline'>" . $var['html'] . "</td>
</tr>"; </tr>";
} }

View File

@@ -8,20 +8,10 @@
* *
* Mailout handling - selector for 'core' users * Mailout handling - selector for 'core' users
* *
* $Source: /cvs_backup/e107_0.8/e107_handlers/mailout_class.php,v $
* $Revision: 11315 $
* $Date: 2010-02-10 18:18:01 +0000 (Wed, 10 Feb 2010) $
* $Author: secretr $
* *
*/ */
/**
* e107 Mail handling - core selector for users
*
* @package e107
* @subpackage e107_handlers
* @version $Id: mailout_class.php 11315 2010-02-10 18:18:01Z secretr $;
*/
if (!defined('e107_INIT')) { exit; } if (!defined('e107_INIT')) { exit; }

View File

@@ -1309,8 +1309,7 @@ class e_db_mysql
} }
// e107::getMessage()->addDebug("MySQL Missing Field-Type: ".$type);
e107::getMessage()->addDebug("MySQL Missing Field-Type: ".$type);
return PDO::PARAM_STR; return PDO::PARAM_STR;
} }

View File

@@ -368,11 +368,11 @@ class POP3
{ {
$this->errors[] = $error; $this->errors[] = $error;
if ($this->do_debug >= 1) { if ($this->do_debug >= 1) {
echo '<pre>'; // echo '<pre>';
foreach ($this->errors as $error) { foreach ($this->errors as $error) {
print_r($error); // print_r($error);
} }
echo '</pre>'; // echo '</pre>';
} }
} }

View File

@@ -317,7 +317,7 @@ class faq_main_ui extends e_admin_ui
} }
public function beforeCreate($new_data) public function beforeCreate($new_data, $old_data)
{ {
// trim spaces // trim spaces
if(!empty($new_data['faq_tags'])) if(!empty($new_data['faq_tags']))

View File

@@ -12,57 +12,49 @@
*/ */
/**
* e107 Newsletter plugin
*
* @package e107_plugins
* @subpackage newsletter
* @version $Id$;
*/
if (!defined('e107_INIT')) { exit; } if (!defined('e107_INIT')) { exit; }
/* /*
Class for newsletter mailout function Class for user mailout function
Allows admins to send mail to those subscribed to one or more newsletters Allows admins to send mail to those subscribed to one or more newsletters
*/ */
// These variables determine the circumstances under which this class is loaded (only used during loading, and may be overwritten later) // These variables determine the circumstances under which this class is loaded (only used during loading, and may be overwritten later)
$mailerIncludeWithDefault = TRUE; // Mandatory - if false, show only when mailout for this specific plugin is enabled $mailerIncludeWithDefault = true; // Mandatory - if false, show only when mailout for this specific plugin is enabled
$mailerExcludeDefault = FALSE; // Mandatory - if TRUE, when this plugin's mailout is active, the default (core) isn't loaded $mailerExcludeDefault = false; // Mandatory - if TRUE, when this plugin's mailout is active, the default (core) isn't loaded
class user_mailout class user_mailout
{ {
// protected $mailCount = 0; public $mailerSource = 'user'; // Plugin name (core mailer is special case) Must be directory for this file
// protected $mailRead = 0; public $mailerName = LAN_MAILOUT_68; // Text to identify the source of selector (displayed on left of admin page)
//public $mailerSource = 'newsletter'; // Plugin name (core mailer is special case) Must be directory for this file public $mailerEnabled = true; // Mandatory - set to FALSE to disable this plugin (e.g. due to permissions restrictions)
public $mailerName = LAN_PLUGIN_NEWSLETTER_NAME; // Text to identify the source of selector (displayed on left of admin page)
public $mailerEnabled = TRUE; // Mandatory - set to FALSE to disable this plugin (e.g. due to permissions restrictions) protected $mailCount = 0;
// private $selectorActive = FALSE; // Set TRUE if we've got a valid selector to start returning entries protected $mailRead = 0;
// private $targets = array(); // Used to store potential recipients
// private $ourDB; // List of fields used by selectors
private $selectFields = array('email_to',
'extended_1_name','extended_1_value',
'extended_2_name', 'extended_2_value',
'user_search_name', 'user_search_value',
'last_visit_match', 'last_visit_date'
);
// Constructor
public function __construct()
{
// BAD FOR PERFORMANCE
//$this->e107 = e107::getInstance();
//$this->adminHandler = e107::getRegistry('_mailout_admin'); // Get the mailer admin object - we want to use some of its functions
}
/** /**
* Manage Bounces. * Manage Bounces.
*/ */
public function bounce($data) public function bounce($data)
{ {
e107::getLog()->add('Newsletter Bounce', $data, E_LOG_INFORMATIVE, 'BOUNCE'); e107::getLog()->add('User Bounce', $data, E_LOG_INFORMATIVE, 'BOUNCE');
} }
/** /**
* @param $mode - check || process * @param $mode - check || process
* @param array $data - usually email, date, id - but dependent on unsubscribe link above. * @param array $data - usually email, date, id - but dependent on unsubscribe link above.
@@ -90,6 +82,298 @@ class user_mailout
} }
/**
* Return data representing the user's selection criteria as entered in the $_POST array.
*
* The value returned can be as simple as an array of chosen fields from the $_POST array, or it may be processed to make it more
* convenient to use later. (In general, at least basic sanitising should be performed)
* Conflicting selection criteria can also be resolved here.
* The returned data is stored in the DB with a saved email. (Just return an empty string or array if this is undesirable)
* The returned value is passed back to selectInit() and showSelect when needed.
*
* @return mixed Selection data - may be string, array or whatever suits
*/
public function returnSelectors()
{
$tp = e107::getParser();
$res = array();
foreach ($this->selectFields as $k)
{
if (vartrue($_POST[$k]))
{
$res[$k] = $tp->toDB($_POST[$k]);
}
}
return $res;
}
/**
* Called to initialise data selection routine.
* Needs to save any queries or other information into internal variables, do initial DB queries as appropriate.
* Could in principle read all addresses and buffer them for later routines, if this is more convenient
*
* @param mixed $selectVals - selection criteria as returned by returnSelectors() (so format is whatever is chosen by the coder)
*
* @return int|boolean number of records available (or 1 if unknown) on success, FALSE on failure
*/
public function selectInit($selectVals = FALSE)
{
$sql = e107::getDb();
$where = array();
$incExtended = array();
$emailTo = vartrue($selectVals['email_to'], false);
switch ($emailTo)
{
// Build the query for the user database
case 'all' :
$where[] = 'u.`user_ban`=0';
break;
case 'admin' :
$where[] = 'u.`user_admin`=1';
break;
case 'unverified' :
$where[] = 'u.`user_ban`=2';
break;
case 'self' :
$where[] = 'u.`user_id`='.USERID;
break;
default :
if (is_numeric($selectVals['email_to']))
{
$where[] = "u.`user_class` REGEXP concat('(^|,)',{$selectVals['email_to']},'(,|$)')";
}
}
if (vartrue($selectVals['extended_1_name']) && vartrue($selectVals['extended_1_value']))
{
$where[] = '`'.$selectVals['extended_1_name']."` = '".$selectVals['extended_1_value']."' ";
$incExtended[] = $selectVals['extended_1_name'];
}
if (vartrue($selectVals['extended_2_name']) && vartrue($selectVals['extended_2_value']))
{
$where[] = "ue.`".$selectVals['extended_2_name']."` = '".$selectVals['extended_2_value']."' ";
$incExtended[] = $selectVals['extended_2_name'];
}
if (vartrue($selectVals['user_search_name']) && vartrue($selectVals['user_search_value']))
{
$where[]= "u.`".$selectVals['user_search_name']."` LIKE '%".$selectVals['user_search_value']."%' ";
}
if (vartrue($selectVals['last_visit_match']) && vartrue($selectVals['last_visit_date']))
{
foreach(array(':', '-', ',') as $sep)
{
if (strpos($selectVals['last_visit_date'], ':'))
{
$tmp = explode($sep, $selectVals['last_visit_date']);
break;
}
}
$lvDate = gmmktime(0, 0, 0, $tmp[1], $tmp[0], $tmp[2]); // Require dd-mm-yy for now
if (($lvDate > 0) && ($lvDate <= time()))
{
switch ($selectVals['last_visit_match'])
{
case '<' :
case '>' :
$where[]= "u.`user_lastvisit`".$selectVals['last_visit_match'].$lvDate;
break;
case '=' :
$where[]= "u.`user_lastvisit`>=".$lvDate;
$where[]= "u.`user_lastvisit`<=".intval($lvDate + 86400);
break;
}
}
}
if(empty($where) && empty($incExtended))
{
$this->mail_read = 0;
$this->mail_count = 0;
return $this->mail_count;
}
$where[] = "u.`user_email` != ''"; // Ignore all records with empty email address
// Now assemble the query from the pieces
// Determine which fields we actually need (u.user_sess is the signup link)
$qry = 'SELECT u.user_id, u.user_name, u.user_email, u.user_loginname, u.user_sess, u.user_lastvisit';
if (count($incExtended))
{
foreach ($incExtended as $if)
{
$qry .= ', ue.`'.$if.'`';
}
}
$qry .= " FROM `#user` AS u ";
if (count($incExtended))
{
$qry .= "LEFT JOIN `#user_extended` AS ue ON ue.`user_extended_id` = u.`user_id`";
}
$qry .= ' WHERE '.implode(' AND ',$where).' ORDER BY u.user_name';
// echo "Selector query: ".$qry.'<br />';
e107::getMessage()->addDebug("Selector query: ".$qry);
if (!( $this->mail_count = $sql->gen($qry))) return FALSE;
$this->mail_read = 0;
return $this->mail_count;
}
/**
* Return one email address to add to the recipients list. Return FALSE if no more addresses to add
*
* @return boolean|array FALSE if no more addresses available; else an array:
* 'mail_recipient_id' - non-zero if a registered user, zero if a non-registered user. (Always non-zero from this class)
* 'mail_recipient_name' - user name
* 'mail_recipient_email' - email address to use
* 'mail_target_info' - array of info which might be substituted into email, usually using the codes defined by the editor.
* Array key is the code within '|...|', value is the string for substitution
*/
public function selectAdd()
{
$sql = e107::getDb();
if (!($row = $sql->fetch())) return FALSE;
$ret = array('mail_recipient_id' => $row['user_id'],
'mail_recipient_name' => $row['user_name'], // Should this use realname?
'mail_recipient_email' => $row['user_email'],
'mail_target_info' => array(
'USERID' => $row['user_id'],
'DISPLAYNAME' => $row['user_name'],
'SIGNUP_LINK' => $row['user_sess'],
'USERNAME' => $row['user_loginname'],
'USERLASTVISIT' => $row['user_lastvisit']
)
);
$this->mail_read++;
return $ret;
}
/**
* Called once all email addresses read, to do any housekeeping needed
*
* @return none
*/
public function select_close()
{
// Nothing to do here
}
/**
* Called to show current selection criteria, and optionally allow edit
*
* @param $allow_edit is TRUE to allow user to change the selection; FALSE to just display current settings
* @param $selectVals is the current selection information - in the same format as returned by returnSelectors()
*
* @return Returns HTML which is displayed in a table cell. Typically we return a complete table
*/
public function showSelect($allow_edit = FALSE, $selectVals = FALSE)
{
$frm = e107::getForm();
$sql = e107::getDb();
$admin = e107::getRegistry('_mailout_admin');
$var = array();
$var[0]['caption'] = LAN_USERCLASS; // User class select
if ($allow_edit)
{
$u_array = array('user_name'=>LAN_MAILOUT_43,'user_login'=>LAN_MAILOUT_44,'user_email'=>LAN_MAILOUT_45);
$var[0]['html'] = $admin->userClassesTotals('email_to', varset($selectVals['email_to'], ''));
$var[1]['html'] = $frm->select('user_search_name', $u_array, varset($selectVals['user_search_name'], ''),'',TRUE)." ".LAN_MAILOUT_47." ".$frm->text('user_search_value', varset($selectVals['user_search_value'], ''));
//$var[2]['html'] = $admin->comparisonSelect('last_visit_match', varset($selectVals['last_visit_match'], ''))." ".$frm->text('last_visit_date', varset($selectVals['last_visit_date'], 0));
$var[2]['html'] = $admin->comparisonSelect('last_visit_match', varset($selectVals['last_visit_match'], ''))." ".$admin->makeCalendar('last_visit_date', varset($selectVals['last_visit_date'], 0));
$var[1]['caption'] = LAN_MAILOUT_46; // User Search Field.
$var[2]['caption'] = LAN_MAILOUT_56; // User last visit
$extFields = $admin->ret_extended_field_list('extended_1_name', varset($selectVals['extended_1_name'], ''), TRUE);
if ($extFields !== FALSE) // Only display next bit if UEFs defined
{
$var[3]['html'] = $extFields.LAN_MAILOUT_48." ".$frm->text('extended_1_value',varset($selectVals['extended_1_value'], ''));
$var[4]['html'] = $admin->ret_extended_field_list('extended_2_name', varset($selectVals['extended_2_name'], ''), TRUE).LAN_MAILOUT_48." ".$frm->text('extended_2_value',varset($selectVals['extended_2_value'],''));
$var[3]['caption'] = LAN_MAILOUT_46; // Extended user field
$var[4]['caption'] = LAN_MAILOUT_46; // Extended user field
}
}
else // Display existing values
{
if (!vartrue($selectVals['email_to']))
{
return null;
}
if (is_numeric($selectVals['email_to']))
{
$_to = LAN_MAILOUT_23.e107::getUserClass()->uc_get_classname(intval($selectVals['email_to']));
}
else
{
$_to = $selectVals['email_to'];
}
$var_0 = $_to.'&nbsp;';
if ($selectVals['email_to'] == 'self')
{
$var_0 .= '&lt;'.USEREMAIL.'&gt;';
}
$var[0]['html'] = $var_0;
if (vartrue($selectVals['user_search_name']) && vartrue($selectVals['user_search_value']))
{
$var[1]['html'] = $selectVals['user_search_name'].' '.$selectVals['user_search_value'];
$var[1]['caption'] = LAN_MAILOUT_46; // User Search Field.
}
if (vartrue($selectVals['last_visit_match']) && vartrue($selectVals['last_visit_date']))
{
$var[2]['html'] = $selectVals['last_visit_match'].' '.gmstrftime("%D-%M-%Y",$selectVals['last_visit_date']); //FIXME use e107 date function.
$var[2]['caption'] = LAN_MAILOUT_56; // User last visit
}
$extFields = $admin->ret_extended_field_list('extended_1_name', varset($selectVals['extended_1_name'], ''), TRUE);
if ($extFields !== FALSE)
{
if (vartrue($selectVals['extended_1_name']) && vartrue($selectVals['extended_1_value']))
{
$var[3]['html'] = $selectVals['extended_1_name'].' '.$selectVals['extended_1_value'];
$var[3]['caption'] = LAN_MAILOUT_46; // Extended user field
}
if (vartrue($selectVals['extended_2_name']) && vartrue($selectVals['extended_2_value']))
{
$var[4]['html'] = $selectVals['extended_2_name'].' '.$selectVals['extended_2_value'];
$var[4]['caption'] = LAN_MAILOUT_46; // Extended user field
}
}
}
return $var;
}
} }