Please make sure IN_MYBB is defined.");
}
require_once MYBB_ROOT."/inc/functions_massmail.php";
require_once MYBB_ROOT."inc/datahandlers/pm.php";
function task_massmail($task)
{
global $db, $mybb, $lang, $plugins;
$query = $db->simple_select("massemails", "*", "senddate <= '".TIME_NOW."' AND status IN (1,2)");
while($mass_email = $db->fetch_array($query))
{
if(is_object($plugins))
{
$args = array(
'task' => &$task,
'mass_email' => &$mass_email
);
$plugins->run_hooks('task_massmail', $args);
}
if($mass_email['status'] == 1)
{
$db->update_query("massemails", array('status' => 2), "mid='{$mass_email['mid']}'");
}
$sentcount = 0;
if(!$mass_email['perpage'])
{
$mass_email['perpage'] = 50;
}
if(strpos($mass_email['htmlmessage'], '
') === false && strpos($mass_email['htmlmessage'], '
') === false)
{
$mass_email['htmlmessage'] = nl2br($mass_email['htmlmessage']);
}
$mass_email['orig_message'] = $mass_email['message'];
$mass_email['orig_htmlmessage'] = $mass_email['htmlmessage'];
// Need to perform the search to fetch the number of users we're emailing
$member_query = build_mass_mail_query(my_unserialize($mass_email['conditions']));
$count_query = $db->simple_select("users u", "COUNT(uid) AS num", $member_query);
$mass_email['totalcount'] = $db->fetch_field($count_query, "num");
$query2 = $db->simple_select("users u", "u.uid, u.language, u.pmnotify, u.lastactive, u.username, u.email", $member_query, array('limit_start' => $mass_email['sentcount'], 'limit' => $mass_email['perpage'], 'order_by' => 'u.uid', 'order_dir' => 'asc'));
while($user = $db->fetch_array($query2))
{
$replacement_fields = array(
"{uid}" => $user['uid'],
"{username}" => $user['username'],
"{email}" => $user['email'],
"{bbname}" => $mybb->settings['bbname'],
"{bburl}" => $mybb->settings['bburl'],
"[".$lang->massmail_username."]" => $user['username'],
"[".$lang->email_addr."]" => $user['email'],
"[".$lang->board_name."]" => $mybb->settings['bbname'],
"[".$lang->board_url."]" => $mybb->settings['bburl']
);
foreach($replacement_fields as $find => $replace)
{
$mass_email['message'] = str_replace($find, $replace, $mass_email['message']);
$mass_email['htmlmessage'] = str_replace($find, $replace, $mass_email['htmlmessage']);
}
// Private Message
if($mass_email['type'] == 1)
{
$pm_handler = new PMDataHandler();
$pm_handler->admin_override = true;
$pm = array(
"subject" => $mass_email['subject'],
"message" => $mass_email['message'],
"fromid" => $mass_email['uid'],
"options" => array("savecopy" => 0),
);
$pm['to'] = explode(",", $user['username']);
$pm_handler->set_data($pm);
if(!$pm_handler->validate_pm())
{
$friendly_errors = implode('\n', $pm_handler->get_friendly_errors());
add_task_log($task, $lang->sprintf($lang->task_massmail_ran_errors, htmlspecialchars_uni($user['username']), $friendly_errors));
$friendly_errors = "";
}
else
{
$pm_handler->insert_pm();
}
}
// Normal Email
else
{
switch($mass_email['format'])
{
case 2:
$format = "both";
$text_message = $mass_email['message'];
$mass_email['message'] = $mass_email['htmlmessage'];
break;
case 1:
$format = "html";
$text_message = "";
$mass_email['message'] = $mass_email['htmlmessage'];
break;
default:
$format = "text";
$text_message = "";
}
my_mail($user['email'], $mass_email['subject'], $mass_email['message'], "", "", "", false, $format, $text_message);
}
++$sentcount;
$mass_email['message'] = $mass_email['orig_message'];
$mass_email['htmlmessage'] = $mass_email['orig_htmlmessage'];
}
$update_array = array();
$update_array['sentcount'] = $mass_email['sentcount'] + $sentcount;
$update_array['totalcount'] = $mass_email['totalcount'];
if($update_array['sentcount'] >= $mass_email['totalcount'])
{
$update_array['status'] = 3;
}
$db->update_query("massemails", $update_array, "mid='{$mass_email['mid']}'");
}
add_task_log($task, $lang->task_massmail_ran);
}