You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1153 lines
33 KiB
1153 lines
33 KiB
9 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Класс работы с рассылками
|
||
|
*
|
||
|
* @package AVE.cms
|
||
|
* @subpackage module_mailer
|
||
|
* @filesource
|
||
|
*/
|
||
|
|
||
|
class mailer
|
||
|
{
|
||
|
/**
|
||
|
* Данные
|
||
|
*/
|
||
|
// Путь к директории с шаблонами модуля
|
||
|
var $tpl_dir;
|
||
|
|
||
|
/**
|
||
|
* Внутренние методы класса
|
||
|
*/
|
||
|
/**
|
||
|
* Метод проверки на синтаксис и уникальность email-а внутри списка рассылки
|
||
|
*
|
||
|
* @param string $email e-mail
|
||
|
* @param int $list_id id списка рассылки
|
||
|
*
|
||
|
* @return int
|
||
|
* 0: неверный синтаксис или пустой запрос
|
||
|
* 1: всё отлично
|
||
|
* 2: email уже есть в базе
|
||
|
*/
|
||
|
function _mailerCheckEmail($email='',$list_id=null)
|
||
|
{
|
||
|
if (!$email || !preg_match('/^[^ <>@,\\\\\/]+@[^ <>@,\\\\\/]+\.[^ <>@,\\\\\/]+$/i',$email))
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
$list_id = (int)trim($list_id);
|
||
|
if ($list_id)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
$check = (int)$AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE email = '" . $email . "' AND list_id=" . $list_id
|
||
|
)->NumRows();
|
||
|
return (($check==0) ? 1 : 2);
|
||
|
}
|
||
|
else return 1;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод сохранения вложений из $_FILES['attach']
|
||
|
*
|
||
|
* @return array $attach массив путей к файлам
|
||
|
*/
|
||
|
function _mailerAttach()
|
||
|
{
|
||
|
// проверяем наличие файлов в форме
|
||
|
if ($_FILES['attach']) $files = $_FILES['attach'];
|
||
|
else return false;
|
||
|
//$maxsize = 5000 * 1024; // 5mb
|
||
|
$attach = array();
|
||
|
$attach_dir = BASE_DIR . '/' . ATTACH_DIR . '/';
|
||
|
|
||
|
foreach ($files['tmp_name'] as $i => $file)
|
||
|
{
|
||
|
if ($file)
|
||
|
{
|
||
|
// проверяем ограничение на размер
|
||
|
if ($maxsize && filesize($file) > $maxsize) continue;
|
||
|
// преобразуем имя файла
|
||
|
$file_name = str_replace(' ','',mb_strtolower(trim($files['name'][$i])));
|
||
|
// проверяем на наличие файла с таким же именем в папке назначения
|
||
|
if (file_exists($attach_dir . $file_name))
|
||
|
{
|
||
|
$file_name = rand(1000, 9999) . '_' . $file_name;
|
||
|
}
|
||
|
// перекидываем файл из врем. дир. в папку назначения
|
||
|
$file_path = $attach_dir . $file_name;
|
||
|
@move_uploaded_file($file, $file_path);
|
||
|
$attach[] = $file_path;
|
||
|
}
|
||
|
}
|
||
|
return $attach;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод получения прикреплённого файла
|
||
|
*
|
||
|
* @param string $file имя файла
|
||
|
*/
|
||
|
function _mailerGetFile($file)
|
||
|
{
|
||
|
@ob_start();
|
||
|
header('Pragma: public');
|
||
|
header('Expires: 0');
|
||
|
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||
|
header('Cache-Control: private',false);
|
||
|
header('Content-Type: application/octet-stream');
|
||
|
header('Content-Disposition: attachment; filename=' . basename($file));
|
||
|
header('Content-Transfer-Encoding: binary');
|
||
|
header('Content-Length: ' . @filesize($file));
|
||
|
@set_time_limit(0);
|
||
|
@readfile($file);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод удаления получателя
|
||
|
*
|
||
|
* @param string $id id получателя
|
||
|
*/
|
||
|
function _mailerDelReceiver($id=null,$public=false)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
if ($public)
|
||
|
{
|
||
|
$email = $AVE_DB->Query("
|
||
|
SELECT email
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE id = ". $id
|
||
|
)->FetchRow()->email;
|
||
|
}
|
||
|
$AVE_DB->Query("
|
||
|
DELETE
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE id = ". $id
|
||
|
);
|
||
|
if ($public) return $email;
|
||
|
else exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод добавления получателя в список
|
||
|
*/
|
||
|
function _mailerAddReceiver($list_id,$status,$email,$lname=null,$fname=null,$mname=null,$com=null,$update=false)
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
$check = $this->_mailerCheckEmail(trim($email),$list_id);
|
||
|
if($check == 1)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
INSERT
|
||
|
INTO " . PREFIX . "_module_mailer_receivers
|
||
|
SET
|
||
|
list_id = '" . (int)$list_id . "',
|
||
|
status = '" . (int)$status . "',
|
||
|
email = '" . trim($email) . "',
|
||
|
lastname = '" . trim($lname) . "',
|
||
|
firstname = '" . trim($fname) . "',
|
||
|
middlename = '" . trim($mname) . "',
|
||
|
comments = '" . trim($com) . "',
|
||
|
date = '" . time() . "'
|
||
|
");
|
||
|
}
|
||
|
elseif($check == 2 && $update)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_receivers
|
||
|
SET
|
||
|
status = '" . (int)$status . "',
|
||
|
lastname = '" . trim($lname) . "',
|
||
|
firstname = '" . trim($fname) . "',
|
||
|
middlename = '" . trim($mname) . "',
|
||
|
comments = '" . trim($com) . "',
|
||
|
date = '" . time() . "'
|
||
|
WHERE list_id=" . $list_id . " AND email='" . trim($email) . "'
|
||
|
");
|
||
|
}
|
||
|
return $check;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Внешние методы класса
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Вывод списка рассылок
|
||
|
*/
|
||
|
function mailerShowMails()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
// Постраничная навигация
|
||
|
$limit = 20;
|
||
|
$num = $AVE_DB->Query("
|
||
|
SELECT COUNT(*)
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE sent='1'
|
||
|
ORDER BY date DESC
|
||
|
")->GetCell();
|
||
|
$pages = @ceil($num / $limit);
|
||
|
$start = get_current_page() * $limit - $limit;
|
||
|
|
||
|
// Поиск
|
||
|
if ($_POST['search'])
|
||
|
{
|
||
|
$AVE_Template->assign('search', $_POST['search']);
|
||
|
$AVE_Template->assign('search_words', $_POST['search_words']);
|
||
|
foreach ($_POST['search'] as $field => $true)
|
||
|
{
|
||
|
if ($true) $where[] = $field . " LIKE '%" . $_POST['search_words'] . "%'";
|
||
|
}
|
||
|
$where = implode(' OR ',$where);
|
||
|
$mails_var = array('tpl','sent','find');
|
||
|
}
|
||
|
else $mails_var = array('tpl','sent');
|
||
|
|
||
|
// Создаём три переменные с письмами
|
||
|
foreach ($mails_var as $mail_var)
|
||
|
{
|
||
|
// Запросы к бд
|
||
|
switch ($mail_var)
|
||
|
{
|
||
|
// Черновики
|
||
|
case 'tpl':
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE sent='0'
|
||
|
ORDER BY id DESC
|
||
|
");
|
||
|
break;
|
||
|
|
||
|
// Отправленные
|
||
|
case 'sent':
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE sent='1'
|
||
|
ORDER BY date DESC
|
||
|
LIMIT " . $start . "," . $limit
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// Поиск
|
||
|
case 'find':
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE sent='1' AND (" . $where . ")
|
||
|
");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
while ($row = $sql->FetchRow())
|
||
|
{
|
||
|
// получатели из групп
|
||
|
$s = $AVE_DB->Query("
|
||
|
SELECT user_group_name
|
||
|
FROM " . PREFIX . "_user_groups
|
||
|
WHERE user_group = '" . implode(' OR user_group = ', explode(';', $row->to_groups)) . "'
|
||
|
");
|
||
|
$e = array();
|
||
|
while ($r = $s->FetchRow())
|
||
|
{
|
||
|
array_push($e, $r);
|
||
|
}
|
||
|
$row->to_groups = $e;
|
||
|
// получатели из списков
|
||
|
$s = $AVE_DB->Query("
|
||
|
SELECT id, title
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id = '" . implode(' OR id = ', explode(';', $row->to_lists)) . "'
|
||
|
");
|
||
|
$e = array();
|
||
|
while ($r = $s->FetchRow())
|
||
|
{
|
||
|
array_push($e, $r);
|
||
|
}
|
||
|
$row->to_lists = $e;
|
||
|
// доп. получатели
|
||
|
if ($row->to_add) $row->to_add = explode(';',$row->to_add);
|
||
|
// вложения
|
||
|
$attach = explode(';',$row->attach);
|
||
|
$row->attach = array();
|
||
|
foreach ($attach as $attachment)
|
||
|
{
|
||
|
array_push($row->attach,array('name' => basename($attachment),'path'=>$attachment));
|
||
|
}
|
||
|
// имя автора рассылки
|
||
|
$row->author_name = get_username_by_id($row->author_id);
|
||
|
$mails[$mail_var][] = $row;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($num > $limit)
|
||
|
{
|
||
|
$page_nav = '<a class="pnav" href="index.php?do=modules&action=modedit&mod=mailer&moduleaction=1&page={s}&cp=' . SESSION . '">{t}</a>';
|
||
|
$page_nav = get_pagination($pages, 'page', $page_nav);
|
||
|
$AVE_Template->assign('page_nav', $page_nav);
|
||
|
}
|
||
|
$AVE_Template->assign('mails', $mails);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_show_mails.tpl'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод создания новой рассылки
|
||
|
*/
|
||
|
function mailerEditMail()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template, $AVE_User;
|
||
|
|
||
|
if (!$_REQUEST['id'] && !$_REQUEST['copy_id'])
|
||
|
{
|
||
|
$mail -> from_name = get_settings('mail_from_name');
|
||
|
$mail -> from_email = get_settings('mail_from');
|
||
|
$mail -> type = 'html';
|
||
|
$mail -> body = $AVE_Template->get_config_vars('MAILER_MAILS_TEXT_D') . "\r\n\r\n\r\n\r\n" . get_settings('mail_signature');
|
||
|
$mail -> appeal = $AVE_Template->get_config_vars('MAILER_MAILS_APPEAL_D');
|
||
|
$mail -> saveattach = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$mail = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE id=" . (($_REQUEST['id']) ? $_REQUEST['id'] : $_REQUEST['copy_id'])
|
||
|
) -> FetchRow();
|
||
|
|
||
|
if ($_REQUEST['copy_id'])
|
||
|
{
|
||
|
$mail->id = null;
|
||
|
$mail->sent = 0;
|
||
|
}
|
||
|
$mail -> to_groups = explode(';',$mail -> to_groups);
|
||
|
$mail -> to_lists = explode(';',$mail -> to_lists);
|
||
|
}
|
||
|
|
||
|
$mail -> site_name = get_settings('site_name');
|
||
|
$mail -> usergroups = $AVE_User->userGroupListGet(2);
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
ORDER BY id DESC
|
||
|
");
|
||
|
$lists = array();
|
||
|
while ($row = $sql -> FetchRow())
|
||
|
{
|
||
|
$lists[$row->id] = $row->title;
|
||
|
}
|
||
|
$mail -> lists = $lists;
|
||
|
|
||
|
$_SESSION['use_editor'] = get_settings('use_editor');
|
||
|
$AVE_Template->assign('mail', $mail);
|
||
|
$AVE_Template->assign('test_email', get_user_rec_by_id($_SESSION['user_id'])->email);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_edit_mail.tpl'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод сохранения/удаления/подготовки к отправке рассылки
|
||
|
*/
|
||
|
function mailerSaveMail($mail_id=null, $act='')
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template, $AVE_User;
|
||
|
|
||
|
// удаление
|
||
|
if ($act=='delete' && $mail_id)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
DELETE
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE id=" . $mail_id
|
||
|
);
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=1&cp=' . SESSION . ($_REQUEST['page']?'&page='.$_REQUEST['page']:''));
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// сохранение, отправка
|
||
|
|
||
|
// записываем вложения, если оправка
|
||
|
if ($act == 'send') $attach = $this->_mailerAttach();
|
||
|
|
||
|
if (!$mail_id)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
INSERT
|
||
|
INTO " . PREFIX . "_module_mailer_mails
|
||
|
SET
|
||
|
id = '',
|
||
|
author_id = '" . $_SESSION['user_id'] . "',
|
||
|
date = '" . time() . "',
|
||
|
from_name = '" . trim($_POST['from_name']) . "',
|
||
|
from_email = '" . trim($_POST['from_email']) . "',
|
||
|
from_copy = '" . $_POST['from_copy'] . "',
|
||
|
to_groups = '" . implode(';',$_POST['to_groups']) . "',
|
||
|
to_lists = '" . implode(';',$_POST['to_lists']) . "',
|
||
|
to_add = '" . $_POST['to_add'] . "',
|
||
|
subject = '" . trim($_POST['subject']) . "',
|
||
|
type = '" . $_POST['type'] . "',
|
||
|
appeal = '" . trim($_POST['appeal']) . "',
|
||
|
body = '" . trim($_POST['body']) . "',
|
||
|
saveattach = '" . $_POST['saveattach'] . "',
|
||
|
timing = '" . $_POST['timing'] . "',
|
||
|
attach = '" . @implode(';',$attach) . "',
|
||
|
sent = '0'
|
||
|
");
|
||
|
$mail_id = $AVE_DB->Query("
|
||
|
SELECT LAST_INSERT_ID(id)
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
ORDER BY id DESC LIMIT 1
|
||
|
")->GetCell();
|
||
|
|
||
|
reportLog($_SESSION['user_name'] . ' - создал(а) рассылку "' . trim($_POST['subject']) . '" (' . $mail_id . ')', 2, 2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_mails
|
||
|
SET
|
||
|
from_name = '" . trim($_POST['from_name']) . "',
|
||
|
from_email = '" . trim($_POST['from_email']) . "',
|
||
|
from_copy = '" . $_POST['from_copy'] . "',
|
||
|
to_groups = '" . implode(';',$_POST['to_groups']) . "',
|
||
|
to_lists = '" . implode(';',$_POST['to_lists']) . "',
|
||
|
to_add = '" . $_POST['to_add'] . "',
|
||
|
subject = '" . trim($_POST['subject']) . "',
|
||
|
type = '" . $_POST['type'] . "',
|
||
|
appeal = '" . trim($_POST['appeal']) . "',
|
||
|
body = '" . trim($_POST['body']) . "',
|
||
|
saveattach = '" . $_POST['saveattach'] . "',
|
||
|
timing = '" . $_POST['timing'] . "',
|
||
|
attach = '" . @implode(';',$attach) . "',
|
||
|
sent = '0'
|
||
|
WHERE id=" . $mail_id
|
||
|
);
|
||
|
reportLog($_SESSION['user_name'] . ' - отредактировал(а) рассылку "' . trim($_POST['subject']) . '" (' . $mail_id . ')', 2, 2);
|
||
|
}
|
||
|
|
||
|
// отправка
|
||
|
if ($act == 'send') {
|
||
|
|
||
|
// Сохраняем все данные в одну переменную
|
||
|
unset($_SESSION['mailer'][$mail_id]);
|
||
|
$mailer = $_POST;
|
||
|
|
||
|
// номер рассылки
|
||
|
$mailer['id'] = $mail_id;
|
||
|
|
||
|
// сохраняем вложения
|
||
|
$mailer['attach'] = $attach;
|
||
|
|
||
|
// создаём массив получателей
|
||
|
$mailer['receivers'] = array();
|
||
|
$receivers = array();
|
||
|
|
||
|
// получатели из списков
|
||
|
if($mailer['to_lists'])
|
||
|
{
|
||
|
$rec_lists = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id = " . implode(' OR list_id = ',$mailer['to_lists'])
|
||
|
);
|
||
|
while ($rec = $rec_lists->FetchRow())
|
||
|
{
|
||
|
if(!in_array($rec->email,$receivers) && (int)$rec->status == 1)
|
||
|
{
|
||
|
$rec -> id = 'L' . $rec -> id;
|
||
|
array_push($mailer['receivers'], $rec);
|
||
|
array_push($receivers, $rec->email);
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
}
|
||
|
|
||
|
// получатели из групп
|
||
|
if($mailer['to_groups'])
|
||
|
{
|
||
|
$rec_groups = $AVE_DB->Query("
|
||
|
SELECT id,email,lastname,firstname,user_group
|
||
|
FROM " . PREFIX . "_users
|
||
|
WHERE user_group = " . implode(' OR user_group = ',$mailer['to_groups'])
|
||
|
);
|
||
|
|
||
|
while ($rec = $rec_groups->FetchRow())
|
||
|
{
|
||
|
if(!in_array($rec->email,$receivers))
|
||
|
{
|
||
|
$rec -> id = 'G' . $rec -> id;
|
||
|
array_push($mailer['receivers'], $rec);
|
||
|
array_push($receivers, $rec->email);
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
}
|
||
|
|
||
|
// дополнительные получатели
|
||
|
$rec_add = explode(';',$mailer['to_add']);
|
||
|
foreach ($rec_add as $rec_add_num => $rec_add_1)
|
||
|
{
|
||
|
$rec_add_1 = trim($rec_add_1);
|
||
|
if($rec_add_1 && !in_array($rec_add_1,$receivers) && $this->_mailerCheckEmail($rec_add_1) == 1)
|
||
|
{
|
||
|
$rec = array();
|
||
|
$rec['id'] = 'A' . $rec_add_num;
|
||
|
$rec['email'] = $rec_add_1;
|
||
|
$rec = array2object($rec);
|
||
|
array_push($mailer['receivers'], $rec);
|
||
|
array_push($receivers, $rec->email);
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
|
||
|
// отправитель в копию, если просили
|
||
|
if ($mailer['from_copy'] && !in_array($mailer['from_email'],$receivers))
|
||
|
{
|
||
|
$rec = array();
|
||
|
$rec['id'] = 'C' . $mailer['author_id'];
|
||
|
$rec['email'] = trim($mailer['from_email']);
|
||
|
$rec = array2object($rec);
|
||
|
array_push($mailer['receivers'], $rec);
|
||
|
}
|
||
|
|
||
|
// считаем получателей
|
||
|
$mailer['number'] = count($mailer['receivers']);
|
||
|
$mailer['count'] = 1;
|
||
|
|
||
|
// записываем все данные в сессию
|
||
|
$_SESSION['mailer'][$mail_id] = $mailer;
|
||
|
|
||
|
reportLog($_SESSION['user_name'] . ' - запустил(а) процесс отправки рассылки "' . trim($mailer['subject']) . '" (' . $mail_id . ')', 2, 2);
|
||
|
}
|
||
|
|
||
|
// если сохранение через ajax, выходим
|
||
|
if ($act == 'ajaxsave' || $act == 'send')
|
||
|
{
|
||
|
echo $mail_id;
|
||
|
exit;
|
||
|
}
|
||
|
elseif ($act == 'go' || $act == 'delete')
|
||
|
{
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=1&cp='.SESSION);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод отправки рассылки
|
||
|
*/
|
||
|
function mailerSendMail() {
|
||
|
global $AVE_DB;
|
||
|
|
||
|
// получаем id рассылки
|
||
|
$mail_id = $_REQUEST['mail_id'];
|
||
|
|
||
|
// шлём письмо, используя данные сессии
|
||
|
if ($_SESSION['mailer'][$mail_id]['count'] <= $_SESSION['mailer'][$mail_id]['number'])
|
||
|
{
|
||
|
//берём следующего получателя
|
||
|
$rec = array_shift($_SESSION['mailer'][$mail_id]['receivers']);
|
||
|
|
||
|
// Уникальный id письма: %номер рассылки%-%id получателя%
|
||
|
$id = $_SESSION['mailer'][$mail_id]['id'] . '-' . $rec -> id;
|
||
|
|
||
|
// Обращение к получателю
|
||
|
$name = trim($rec->lastname . ' ' . $rec->firstname . ' ' . $rec->middlename);
|
||
|
if (!$name)
|
||
|
{
|
||
|
$name = $_SESSION['mailer'][$mail_id]['appeal'];
|
||
|
}
|
||
|
$body = str_replace(
|
||
|
array('%NAME%' ,'%ID%' ,'%SHOW%'),
|
||
|
array($name ,$id ,'http://'.$_SERVER['SERVER_NAME'].'/index.php?module=mailer&action=show&id='.$mail_id.'&onlycontent=1'),
|
||
|
$_SESSION['mailer'][$mail_id]['body']);
|
||
|
|
||
|
// Посылаем письмо
|
||
|
send_mail(
|
||
|
$rec->email,
|
||
|
$body,
|
||
|
trim($_SESSION['mailer'][$mail_id]['subject']),
|
||
|
trim($_SESSION['mailer'][$mail_id]['from_email']),
|
||
|
trim($_SESSION['mailer'][$mail_id]['from_name']),
|
||
|
trim($_SESSION['mailer'][$mail_id]['type']),
|
||
|
$_SESSION['mailer'][$mail_id]['attach'],
|
||
|
false,false
|
||
|
);
|
||
|
|
||
|
// записываем отправленных в базу, чтобы если что знать, кому уже отправились письма
|
||
|
$_SESSION['mailer'][$mail_id]['done'][] = $rec->email;
|
||
|
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_mails
|
||
|
SET
|
||
|
date = '" . time() . "',
|
||
|
done = '" . implode(';',$_SESSION['mailer'][$mail_id]['done']) . "',
|
||
|
sent = '1'
|
||
|
WHERE id=" . $mail_id
|
||
|
);
|
||
|
|
||
|
$count = (int)$_SESSION['mailer'][$mail_id]['count'];
|
||
|
$timing = (int)$_SESSION['mailer'][$mail_id]['timing'];
|
||
|
$number = (int)$_SESSION['mailer'][$mail_id]['number'];
|
||
|
|
||
|
// округлённый процент выполнения
|
||
|
$result = floor($count / $number * 100);
|
||
|
|
||
|
// если просили отсылать по частям и осталось много писем, ставим процесс на паузу)
|
||
|
if($timing != 0 && $count % $timing == 0 && $number - $count > 10) $result = 'pause';
|
||
|
|
||
|
// считаем
|
||
|
$_SESSION['mailer'][$mail_id]['count']++;
|
||
|
|
||
|
// возвращаем в AJAX число
|
||
|
echo $result;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Удаляем вложения, если просили
|
||
|
if ($_SESSION['mailer'][$mail_id]['attach'] && !(int)$_SESSION['mailer'][$mail_id]['saveattach'])
|
||
|
{
|
||
|
foreach ($_SESSION['mailer'][$mail_id]['attach'] as $file)
|
||
|
{
|
||
|
@unlink($file);
|
||
|
}
|
||
|
}
|
||
|
reportLog($_SESSION['user_name'] . ' - процесс отправки рассылки "' . trim($_SESSION['mailer']['subject']) . '" (' . $mail_id . ') завершён', 2, 2);
|
||
|
unset ($_SESSION['mailer'][$mail_id]);
|
||
|
echo 'finish';
|
||
|
}
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Вывод списков рассылок
|
||
|
*/
|
||
|
function mailerShowLists()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
if ($_POST['del'])
|
||
|
{
|
||
|
foreach ($_POST['del'] as $id => $del)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
DELETE
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id = '". $id ."'
|
||
|
");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$limit = 20;
|
||
|
$num = $AVE_DB->Query("
|
||
|
SELECT COUNT(*)
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
ORDER BY id DESC
|
||
|
")->GetCell();
|
||
|
$pages = @ceil($num / $limit);
|
||
|
$start = get_current_page() * $limit - $limit;
|
||
|
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
ORDER BY id DESC
|
||
|
LIMIT " . $start . "," . $limit . "
|
||
|
");
|
||
|
|
||
|
$lists = array();
|
||
|
while ($row = $sql->FetchRow())
|
||
|
{
|
||
|
$count = $AVE_DB->Query("
|
||
|
SELECT COUNT(*)
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $row->id
|
||
|
)->GetCell();
|
||
|
$row -> number = (($count) ? $count : 0);
|
||
|
$row -> author_name = get_username_by_id($row->author_id);
|
||
|
array_push($lists, $row);
|
||
|
}
|
||
|
if ($num > $limit)
|
||
|
{
|
||
|
$page_nav = '<a class="pnav" href="index.php?do=modules&action=modedit&mod=mailer&moduleaction=showlists&page={s}&cp=' . SESSION . '">{t}</a>';
|
||
|
$page_nav = get_pagination($pages, 'page', $page_nav);
|
||
|
$AVE_Template->assign('page_nav', $page_nav);
|
||
|
}
|
||
|
$AVE_Template->assign('lists',$lists);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_show_lists.tpl'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод загрузки/удаления/создания/редактирования списка рассылки
|
||
|
*/
|
||
|
function mailerEditList()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
if ($_REQUEST['wipe'] && $_REQUEST['id'])
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
DELETE
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $_REQUEST['id']
|
||
|
);
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=showlists&cp=' . SESSION . ($_REQUEST['page']?'&page='.$_REQUEST['page']:''));
|
||
|
exit;
|
||
|
}
|
||
|
elseif ($_REQUEST['download'] && $_REQUEST['id'])
|
||
|
{
|
||
|
$listname = $AVE_DB->Query("
|
||
|
SELECT title
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id=" . $_REQUEST['id']
|
||
|
)->GetCell();
|
||
|
$file = '';
|
||
|
|
||
|
$receivers = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $_REQUEST['id']
|
||
|
);
|
||
|
while ($rec = $receivers->FetchRow())
|
||
|
{
|
||
|
$file .= $rec->email . ';' . $rec->lastname . ';' . $rec->firstname . ';' . $rec->middlename . ';' . $rec->comments . "\r\n";
|
||
|
}
|
||
|
|
||
|
header('Content-Type: text/plain');
|
||
|
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
|
||
|
header('Content-Disposition: attachment; filename=' . $listname . '.csv');
|
||
|
header('Content-Length: ' . strlen($file));
|
||
|
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||
|
header('Pragma: public');
|
||
|
echo $file;
|
||
|
exit;
|
||
|
}
|
||
|
elseif ($_REQUEST['delete'] && $_REQUEST['id'])
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
DELETE
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id=" . $_REQUEST['id']
|
||
|
);
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=showlists&cp=' . SESSION . ($_REQUEST['page']?'&page='.$_REQUEST['page']:''));
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
if ($_REQUEST['id'])
|
||
|
{
|
||
|
$list = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id=" . $_REQUEST['id']
|
||
|
)->FetchRow();
|
||
|
|
||
|
$limit = 20;
|
||
|
$num = $AVE_DB->Query("
|
||
|
SELECT COUNT(*)
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $_REQUEST['id'] . "
|
||
|
ORDER BY id DESC
|
||
|
")->GetCell();
|
||
|
$pages = @ceil($num / $limit);
|
||
|
$start = get_current_page() * $limit - $limit;
|
||
|
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $_REQUEST['id'] . "
|
||
|
ORDER BY id DESC
|
||
|
LIMIT " . $start . ',' . $limit . "
|
||
|
");
|
||
|
|
||
|
$receivers = array();
|
||
|
while ($row = $sql->FetchRow())
|
||
|
{
|
||
|
array_push($receivers,$row);
|
||
|
}
|
||
|
|
||
|
if ($num > $limit)
|
||
|
{
|
||
|
$page_nav = '<a class="pnav" href="index.php?do=modules&action=modedit&mod=mailer&moduleaction=editlist&id=' . $_REQUEST['id'] . '&page={s}&cp=' . SESSION . '">{t}</a>';
|
||
|
$page_nav = get_pagination($pages, 'page', $page_nav);
|
||
|
$AVE_Template->assign('page_nav', $page_nav);
|
||
|
}
|
||
|
|
||
|
$AVE_Template->assign('list',$list);
|
||
|
$AVE_Template->assign('receivers',$receivers);
|
||
|
}
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_edit_list.tpl'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод сохранения списка рассылки
|
||
|
*/
|
||
|
function mailerSaveList()
|
||
|
{
|
||
|
global $AVE_DB,$AVE_Template;
|
||
|
if (!$_REQUEST['id'])
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
INSERT
|
||
|
INTO " . PREFIX . "_module_mailer_lists
|
||
|
SET
|
||
|
id = '',
|
||
|
title = '" . trim($_POST['title']) . "',
|
||
|
descr = '" . $_POST['descr'] . "',
|
||
|
author_id = '" . (int)$_SESSION['user_id'] . "',
|
||
|
date = '" . time() . "'
|
||
|
");
|
||
|
$list_id = $AVE_DB->Query("
|
||
|
SELECT LAST_INSERT_ID(id)
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
ORDER BY id DESC LIMIT 1
|
||
|
")->GetCell();
|
||
|
|
||
|
reportLog($_SESSION['user_name'] . ' - создал(а) список рассылки "' . trim($_POST['title']) . '" (' . $list_id . ')', 2, 2);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$list_id = $_REQUEST['id'];
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_lists
|
||
|
SET
|
||
|
title = '" . trim($_POST['title']) . "',
|
||
|
descr = '" . $_POST['descr'] . "'
|
||
|
WHERE id=" . $list_id
|
||
|
);
|
||
|
reportLog($_SESSION['user_name'] . ' - отредактировал(а) список рассылки "' . trim($_POST['title']) . '" (' . $list_id . ')', 2, 2);
|
||
|
}
|
||
|
if ($_POST['status'])
|
||
|
{
|
||
|
foreach ($_POST['status'] as $rec_id => $status)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_receivers
|
||
|
SET
|
||
|
status = '" . $status . "'
|
||
|
WHERE id=" . $rec_id
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
if ($_POST['new'])
|
||
|
{
|
||
|
foreach ($_POST['new'] as $rec_id => $rec_row)
|
||
|
{
|
||
|
$rec_row['email'] = trim($rec_row['email']);
|
||
|
$this -> _mailerAddReceiver($list_id,$rec_row['status'],$rec_row['email'],$rec_row['lastn'],$rec_row['firstn'],$rec_row['midn'],$rec_row['comments']);
|
||
|
}
|
||
|
}
|
||
|
if ($_POST['edit'])
|
||
|
{
|
||
|
foreach ($_POST['edit'] as $rec_id => $rec_row)
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE " . PREFIX . "_module_mailer_receivers
|
||
|
SET
|
||
|
lastname = '" . $rec_row['lastn'] . "',
|
||
|
firstname = '" . $rec_row['firstn'] . "',
|
||
|
middlename = '" . $rec_row['midn'] . "',
|
||
|
comments = '" . $rec_row['comments'] . "'
|
||
|
WHERE id=" . $rec_id
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
if ($_POST['import'] && $_POST['import_delim_1'] && $_POST['import_delim_2'] && $_POST['import_delim_1'] != $_POST['import_delim_2'])
|
||
|
{
|
||
|
$delim_1 = stripslashes($_POST['import_delim_1']);
|
||
|
$delim_2 = stripslashes($_POST['import_delim_2']);
|
||
|
|
||
|
if ($delim_1 == "\\r\\n") $delim_1 = "\r\n";
|
||
|
if ($delim_2 == "\\r\\n") $delim_2 = "\r\n";
|
||
|
|
||
|
$import = explode($delim_1,$_POST['import']);
|
||
|
foreach ($import as $receiver)
|
||
|
{
|
||
|
$receiver = explode($delim_2,$receiver);
|
||
|
$this->_mailerAddReceiver($list_id,1,$receiver[0],$receiver[1],$receiver[2],$receiver[3],$receiver[4]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ($_FILES['import_file'])
|
||
|
{
|
||
|
$file_type = end(explode('.',$_FILES['import_file']['name']));
|
||
|
|
||
|
if ($file_type == 'csv')
|
||
|
{
|
||
|
$import = file_get_contents($_FILES['import_file']['tmp_name']);
|
||
|
$file_ok = true;
|
||
|
if (mb_check_encoding($import,'UTF-8') || mb_check_encoding($import,'cp1251'))
|
||
|
{
|
||
|
if (mb_check_encoding($import,'cp1251'))
|
||
|
{
|
||
|
$import = @iconv('cp1251','UTF-8',$import);
|
||
|
}
|
||
|
else $file_ok = false;
|
||
|
}
|
||
|
if ($file_ok)
|
||
|
{
|
||
|
$import = explode("\r\n",$import);
|
||
|
foreach ($import as $receiver)
|
||
|
{
|
||
|
$receiver = explode(($_POST['import_file_delim']) ? $_POST['import_file_delim'] : ';',$receiver);
|
||
|
$this->_mailerAddReceiver($list_id,1,$receiver[0],$receiver[1],$receiver[2],$receiver[3],$receiver[4]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$_SESSION['mailer']['list_import_delim_1'] = $_POST['import_delim_1'];
|
||
|
$_SESSION['mailer']['list_import_delim_2'] = $_POST['import_delim_2'];
|
||
|
$_SESSION['mailer']['list_import_delim_csv'] = $_POST['import_file_delim'];
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=' . (($_REQUEST['return'] == 1) ? 'editlist&id=' . $list_id : 'showlists') . ($_POST['page']?'&page='.$_POST['page']:'') . '&cp=' . SESSION);
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод подписки
|
||
|
*/
|
||
|
function mailerSubscribe()
|
||
|
{
|
||
|
global $AVE_DB,$AVE_Template;
|
||
|
|
||
|
$result = $this->_mailerAddReceiver($_POST['list_id'],1,$_POST['email'],$_POST['lname'],$_POST['fname'],$_POST['mname']);
|
||
|
|
||
|
if ($result == 2)
|
||
|
{
|
||
|
$rec = $AVE_DB->Query("
|
||
|
SELECT id, status
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id=" . $_POST['list_id'] . " AND email = '" . trim($_POST['email']) . "'
|
||
|
")->FetchRow();
|
||
|
if ((int)$rec->status == 2) $result = 1;
|
||
|
|
||
|
$this->_mailerAddReceiver($_POST['list_id'],1,$_POST['email'],$_POST['lname'],$_POST['fname'],$_POST['mname'],'',true);
|
||
|
}
|
||
|
return $result;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод "отписки"
|
||
|
*/
|
||
|
function mailerUnsubscribe()
|
||
|
{
|
||
|
global $AVE_DB,$AVE_Template;
|
||
|
|
||
|
$list_id = trim($_POST['list_id']);
|
||
|
$email = trim($_POST['email']);
|
||
|
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT id, status
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id = ". $list_id . " AND email = '" . $email . "'
|
||
|
")->FetchRow();
|
||
|
|
||
|
if (!$sql || (int)$sql->status == 2)
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$AVE_DB->Query("
|
||
|
UPDATE ". PREFIX . "_module_mailer_receivers
|
||
|
SET
|
||
|
status = '2'
|
||
|
WHERE id = ". $sql->id
|
||
|
);
|
||
|
return 1;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод тестовой отправки
|
||
|
*/
|
||
|
function mailerTestSend($id,$emails)
|
||
|
{
|
||
|
global $AVE_DB,$AVE_Template;
|
||
|
|
||
|
// Сохраняем письмо перед отправкой
|
||
|
$this->mailerSaveMail($id);
|
||
|
|
||
|
// Отправляем каждому адресату, если правильный email
|
||
|
foreach (explode(';',$emails) as $email)
|
||
|
{
|
||
|
$email = trim($email);
|
||
|
if ($this->_mailerCheckEmail($email) == 1)
|
||
|
{
|
||
|
// Формируем тело
|
||
|
$body = str_replace(
|
||
|
array('%NAME%' ,'%SHOW%'),
|
||
|
array($_POST['appeal'] ,'http://'.$_SERVER['SERVER_NAME'].'/index.php?module=mailer&action=show&id='.$id.'&onlycontent=1'),
|
||
|
$_POST['body']);
|
||
|
|
||
|
// Отправляем с вложениями
|
||
|
send_mail(
|
||
|
$email,
|
||
|
$body,
|
||
|
trim($_POST['subject']),
|
||
|
trim($_POST['from_email']),
|
||
|
trim($_POST['from_name']),
|
||
|
trim($_POST['type']),
|
||
|
$this->_mailerAttach(),
|
||
|
false,false
|
||
|
);
|
||
|
$emails_new[] = $email;
|
||
|
}
|
||
|
}
|
||
|
reportLog($_SESSION['user_name'] . ' - разослал(а) тестовую рассылку "' . trim($_POST['subject']) . '" (' . $id . ') по адресам: ' . implode(', ',$emails_new), 2, 2);
|
||
|
return $emails_new;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод мульти-добавления получателей
|
||
|
*/
|
||
|
function mailerMultiAdd()
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
$sql = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
ORDER BY id DESC
|
||
|
");
|
||
|
while ($row = $sql->FetchRow())
|
||
|
{
|
||
|
$lists[] = $row;
|
||
|
}
|
||
|
|
||
|
$AVE_Template->assign('lists', $lists);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_multi_add.tpl'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод сохранения получателей из мульти-добавления
|
||
|
*/
|
||
|
function mailerMultiSave()
|
||
|
{
|
||
|
global $AVE_DB;
|
||
|
foreach ($_POST['lists'] as $list_id)
|
||
|
{
|
||
|
foreach ($_POST['new'] as $rec)
|
||
|
{
|
||
|
$this->_mailerAddReceiver($list_id,$rec['status'],$rec['email'],$rec['lastn'],$rec['firstn'],$rec['midn'],$rec['comments'],false);
|
||
|
}
|
||
|
}
|
||
|
$_SESSION['mailer']['multi_add'] = $_POST['lists'];
|
||
|
reportLog($_SESSION['user_name'] . ' - выполнил(а) мульти-добавление получателей в списки: ' . implode(', ',$_POST['lists']), 2, 2);
|
||
|
header('Location:index.php?do=modules&action=modedit&mod=mailer&moduleaction=' . ($_REQUEST['return'] ? 'multiadd' : 'showlists') . '&cp=' . SESSION);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Метод подсчёта получателей при создании рассылки
|
||
|
*/
|
||
|
function mailerCountMail($mail_id)
|
||
|
{
|
||
|
global $AVE_DB, $AVE_Template;
|
||
|
|
||
|
$mailer = $AVE_DB->Query("
|
||
|
SELECT subject, to_lists, to_groups, to_add, from_email, from_copy
|
||
|
FROM " . PREFIX . "_module_mailer_mails
|
||
|
WHERE id=" . $mail_id
|
||
|
)->FetchRow();
|
||
|
$mailer->to_lists = explode(';',$mailer->to_lists);
|
||
|
$mailer->to_groups = explode(';',$mailer->to_groups);
|
||
|
$mailer->to_add = explode(';',$mailer->to_add);
|
||
|
|
||
|
// получатели из списков
|
||
|
foreach ($mailer->to_lists as $list_id)
|
||
|
{
|
||
|
$list_name = $AVE_DB->Query("
|
||
|
SELECT title
|
||
|
FROM " . PREFIX . "_module_mailer_lists
|
||
|
WHERE id = " . $list_id
|
||
|
)->GetCell();
|
||
|
$rec_lists = $AVE_DB->Query("
|
||
|
SELECT *
|
||
|
FROM " . PREFIX . "_module_mailer_receivers
|
||
|
WHERE list_id = " . $list_id
|
||
|
);
|
||
|
while ($rec = $rec_lists->FetchRow())
|
||
|
{
|
||
|
if(!in_array($rec->email,$rec_clean) && (int)$rec->status == 1)
|
||
|
{
|
||
|
$rec_clean[] = $rec->email;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$rec->s = true;
|
||
|
}
|
||
|
$rec_all['lists'][$list_name][] = $rec;
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
|
||
|
// получатели из групп
|
||
|
foreach ($mailer->to_groups as $group_id)
|
||
|
{
|
||
|
$group_name = $AVE_DB->Query("
|
||
|
SELECT user_group_name
|
||
|
FROM " . PREFIX . "_user_groups
|
||
|
WHERE user_group = " . $group_id
|
||
|
)->GetCell();
|
||
|
$rec_groups = $AVE_DB->Query("
|
||
|
SELECT id,email,lastname,firstname,user_group,user_name
|
||
|
FROM " . PREFIX . "_users
|
||
|
WHERE user_group = " . $group_id
|
||
|
);
|
||
|
while ($rec = $rec_groups->FetchRow())
|
||
|
{
|
||
|
if(!in_array($rec->email,$rec_clean))
|
||
|
{
|
||
|
$rec_clean[] = $rec->email;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$rec->s = true;
|
||
|
}
|
||
|
$rec_all['groups'][$group_name][] = $rec;
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
|
||
|
// дополнительные получатели
|
||
|
foreach ($mailer->to_add as $email)
|
||
|
{
|
||
|
$rec = array();
|
||
|
$email = trim($email);
|
||
|
if ($email)
|
||
|
{
|
||
|
if(!in_array($email,$rec_clean) && $this->_mailerCheckEmail($email) == 1)
|
||
|
{
|
||
|
$rec_clean[] = $email;
|
||
|
}
|
||
|
elseif($this->_mailerCheckEmail($email) != 1)
|
||
|
{
|
||
|
$rec['s'] = 2;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$rec['s'] = 1;
|
||
|
}
|
||
|
$rec['email'] = $email;
|
||
|
$rec_all['add'][] = $rec;
|
||
|
}
|
||
|
}
|
||
|
unset($rec);
|
||
|
|
||
|
// отправитель
|
||
|
if ($mailer->from_copy)
|
||
|
{
|
||
|
$rec = array();
|
||
|
$rec['email'] = trim($mailer->from_email);
|
||
|
if(in_array($rec['email'],$rec_clean)) $rec['s'] = 1;
|
||
|
if($this->_mailerCheckEmail($rec['email']) != 1) $rec['s'] = 2;
|
||
|
$rec['from'] = true;
|
||
|
$rec_all['add'][] = $rec;
|
||
|
}
|
||
|
|
||
|
$count_mail = $rec_all;
|
||
|
$count_mail['title'] = $mailer->subject;
|
||
|
$count_mail['number'] = count($rec_clean);
|
||
|
$AVE_Template->assign('count_mail', $count_mail);
|
||
|
$AVE_Template->assign('content', $AVE_Template->fetch($this->tpl_dir . 'admin_count_mail.tpl'));
|
||
|
}
|
||
|
}
|
||
|
?>
|