function notify_subscribers($digest_notify_list, $email_template = '') { // This function parses $digest_notify_list, an array of user_ids that represent users that had their digest subscriptions changed, and sends them an email // letting them know an action has occurred. global $phpbb_root_path, $phpEx, $config, $user, $db, $phpbb_log; $emails_sent = 0; if (isset($digest_notify_list) && sizeof($digest_notify_list) > 0) { if (!class_exists('messenger')) { include $phpbb_root_path . 'includes/functions_messenger.' . $phpEx; // Used to send emails } $sql_array = array('SELECT' => 'username, user_email, user_lang, user_digest_type, user_digest_format', 'FROM' => array(USERS_TABLE => 'u'), 'WHERE' => $db->sql_in_set('user_id', $digest_notify_list)); $sql = $db->sql_build_query('SELECT', $sql_array); $result = $db->sql_query($sql); $rowset = $db->sql_fetchrowset($result); foreach ($rowset as $row) { // E-mail setup $messenger = new \messenger(); switch ($email_template) { case 'digests_subscription_edited': $digest_notify_template = $email_template; $digest_email_subject = $user->lang('DIGESTS_SUBSCRIBE_EDITED'); break; default: // Mass subscribe/unsubscribe $digest_notify_template = $config['phpbbservices_digests_subscribe_all'] ? 'digests_subscribe' : 'digests_unsubscribe'; $digest_email_subject = $config['phpbbservices_digests_subscribe_all'] ? $user->lang('DIGESTS_SUBSCRIBE_SUBJECT') : $user->lang('DIGESTS_UNSUBSCRIBE_SUBJECT'); break; } // Set up associations between digest types as constants and their language equivalents switch ($row['user_digest_type']) { case constants::DIGESTS_DAILY_VALUE: $digest_type_text = strtolower($user->lang('DIGESTS_DAILY')); break; case constants::DIGESTS_WEEKLY_VALUE: $digest_type_text = strtolower($user->lang('DIGESTS_WEEKLY')); break; case constants::DIGESTS_MONTHLY_VALUE: $digest_type_text = strtolower($user->lang('DIGESTS_MONTHLY')); break; case constants::DIGESTS_NONE_VALUE: $digest_type_text = strtolower($user->lang('DIGESTS_NONE')); break; default: $digest_type_text = strtolower($user->lang('DIGESTS_DAILY')); break; } // Set up associations between digest formats as constants and their language equivalents switch ($row['user_digest_format']) { case constants::DIGESTS_HTML_VALUE: $digest_format_text = $user->lang('DIGESTS_FORMAT_HTML'); break; case constants::DIGESTS_HTML_CLASSIC_VALUE: $digest_format_text = $user->lang('DIGESTS_FORMAT_HTML_CLASSIC'); break; case constants::DIGESTS_PLAIN_VALUE: $digest_format_text = $user->lang('DIGESTS_FORMAT_PLAIN'); break; case constants::DIGESTS_PLAIN_CLASSIC_VALUE: $digest_format_text = $user->lang('DIGESTS_FORMAT_PLAIN_CLASSIC'); break; case constants::DIGESTS_TEXT_VALUE: $digest_format_text = strtolower($user->lang('DIGESTS_FORMAT_TEXT')); break; default: $digest_format_text = $user->lang('DIGESTS_FORMAT_HTML'); break; } $messenger->template('@phpbbservices_digests/' . $digest_notify_template, $row['user_lang']); $messenger->to($row['user_email']); $from_addr = $config['phpbbservices_digests_from_email_address'] == '' ? $config['board_email'] : $config['phpbbservices_digests_from_email_address']; $from_name = $config['phpbbservices_digests_from_email_name'] == '' ? $config['board_contact'] : $config['phpbbservices_digests_from_email_name']; // SMTP delivery must strip text names due to likely bug in messenger class if ($config['smtp_delivery']) { $messenger->from($from_addr); } else { $messenger->from($from_addr . ' <' . $from_name . '>'); } $messenger->replyto($from_addr); $messenger->subject($digest_email_subject); $messenger->assign_vars(array('DIGESTS_FORMAT' => $digest_format_text, 'DIGESTS_TYPE' => $digest_type_text, 'DIGESTS_UCP_LINK' => generate_board_url() . '/' . 'ucp.' . $phpEx, 'FORUM_NAME' => $config['sitename'], 'USERNAME' => $row['username'])); $mail_sent = $messenger->send(NOTIFY_EMAIL, false); if (!$mail_sent) { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_DIGESTS_NOTIFICATION_ERROR', false, array($row['user_email'])); } else { $phpbb_log->add('admin', $user->data['user_id'], $user->ip, 'LOG_CONFIG_DIGESTS_NOTIFICATION_SENT', false, array($row['user_email'], $row['username'])); $emails_sent++; } $messenger->reset(); } $db->sql_freeresult($result); // Query be gone! } return $emails_sent; }