mirror of
https://github.com/e107inc/e107.git
synced 2025-08-20 21:32:09 +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:
@@ -12,57 +12,49 @@
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* e107 Newsletter plugin
|
||||
*
|
||||
* @package e107_plugins
|
||||
* @subpackage newsletter
|
||||
* @version $Id$;
|
||||
*/
|
||||
|
||||
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
|
||||
*/
|
||||
// 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
|
||||
$mailerExcludeDefault = FALSE; // Mandatory - if TRUE, when this plugin's mailout is active, the default (core) isn't loaded
|
||||
$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
|
||||
|
||||
class user_mailout
|
||||
{
|
||||
// protected $mailCount = 0;
|
||||
// protected $mailRead = 0;
|
||||
//public $mailerSource = 'newsletter'; // Plugin name (core mailer is special case) Must be directory for this file
|
||||
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)
|
||||
// private $selectorActive = FALSE; // Set TRUE if we've got a valid selector to start returning entries
|
||||
// private $targets = array(); // Used to store potential recipients
|
||||
// private $ourDB;
|
||||
public $mailerSource = 'user'; // Plugin name (core mailer is special case) Must be directory for this file
|
||||
public $mailerName = LAN_MAILOUT_68; // 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;
|
||||
protected $mailRead = 0;
|
||||
|
||||
// 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.
|
||||
*/
|
||||
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 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.' ';
|
||||
if ($selectVals['email_to'] == 'self')
|
||||
{
|
||||
$var_0 .= '<'.USEREMAIL.'>';
|
||||
}
|
||||
|
||||
$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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user