From 87bb4c3dd29684015e419dae3da44880e672b101 Mon Sep 17 00:00:00 2001 From: SVarlamov Date: Sat, 11 Jun 2016 10:55:55 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8C=20=D0=A0=D0=B0?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20/=20=D0=9F=D0=BE=D0=B4?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 + class.mailer.php | 1153 ++++++++++++++++++++++++++++++++ index.php | 4 + lang/index.php | 4 + lang/ru.txt | 211 ++++++ module.php | 196 ++++++ sql.php | 101 +++ templates/admin_count_mail.tpl | 136 ++++ templates/admin_edit_list.tpl | 276 ++++++++ templates/admin_edit_mail.tpl | 428 ++++++++++++ templates/admin_multi_add.tpl | 164 +++++ templates/admin_show_lists.tpl | 95 +++ templates/admin_show_mails.tpl | 313 +++++++++ templates/index.php | 4 + templates/public_form.tpl | 64 ++ templates/public_result.tpl | 1 + 16 files changed, 3166 insertions(+) create mode 100644 README.md create mode 100644 class.mailer.php create mode 100644 index.php create mode 100644 lang/index.php create mode 100644 lang/ru.txt create mode 100644 module.php create mode 100644 sql.php create mode 100644 templates/admin_count_mail.tpl create mode 100644 templates/admin_edit_list.tpl create mode 100644 templates/admin_edit_mail.tpl create mode 100644 templates/admin_multi_add.tpl create mode 100644 templates/admin_show_lists.tpl create mode 100644 templates/admin_show_mails.tpl create mode 100644 templates/index.php create mode 100644 templates/public_form.tpl create mode 100644 templates/public_result.tpl diff --git a/README.md b/README.md new file mode 100644 index 0000000..029184f --- /dev/null +++ b/README.md @@ -0,0 +1,16 @@ +## mailer + +# Модуль Рассылка / Подписка v2.2.1 + +### адаптирован для AVE.CMS 3.0 v1.5 + +## Данный модуль позволяет создавать внутренние (по группам пользователей сайта), внешние (по спискам) и комбинированные рассылки. + + * Для вывода в публичной части сайта формы подписки на рассылку, используйте системный тег [mod_subscribe:XXX], где XXX - идентификатор списка рассылки, в который будет добавлен подписчик. + + +## Перед копированием модуля в папку modules, удалите файл README.md, копируйте только корневую папку mailer со всем ее содержимым внутри! + +## Changelog: + +29.06.2014 - версия 2.2.1 \ No newline at end of file diff --git a/class.mailer.php b/class.mailer.php new file mode 100644 index 0000000..8edc2a0 --- /dev/null +++ b/class.mailer.php @@ -0,0 +1,1153 @@ +@,\\\\\/]+@[^ <>@,\\\\\/]+\.[^ <>@,\\\\\/]+$/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 = '{t}'; + $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 = '{t}'; + $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 = '{t}'; + $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')); + } +} +?> \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..4ca25aa --- /dev/null +++ b/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/lang/index.php b/lang/index.php new file mode 100644 index 0000000..4ca25aa --- /dev/null +++ b/lang/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/lang/ru.txt b/lang/ru.txt new file mode 100644 index 0000000..a3a7340 --- /dev/null +++ b/lang/ru.txt @@ -0,0 +1,211 @@ +[public] +MAILER_EMAIL = "E-mail" +MAILER_LNAME = "Фамилия" +MAILER_FNAME = "Имя" +MAILER_MNAME = "Отчество" +MAILER_SUBSCRIBE = "Подписаться" +MAILER_UNSUBSCRIBE = "Отписаться" + +MAILER_WRONG_EMAIL = "Неверный синтаксис email-а!" +MAILER_DELETED = "Получатель %email% успешно удалён из списка рассылки!" +MAILER_DEL_NO = "Получатель %email% отсутствует в списке рассылки!
Возможно, вы уже отправляли заявку на удаление." +MAILER_SUBSCRIBED = "Получатель %email% успешно добавлен в список рассылки!" +MAILER_SUBSCRIBE_EXIST = "Получатель %email% уже есть в списке рассылки!
Возможно, вы отправляли заявку ранее. Поля ФИО были обновлены." + +[admin] +MAILER_MODULE_NAME = "Рассылка" +MAILER_MODULE_INFO = "На этой странице вы можете написать новое письмо и просмотреть список выполненных рассылок. Для отправки внешней рассылки необходимо сначала создать список рассылки в соответствующем разделе модуля." +MAILER_MANAGE_MAILS = "Управление рассылками" +MAILER_MANAGE_LISTS = "Управление списками рассылки" +MAILER_NEW_MAIL = "Создать рассылку" +MAILER_NEW_LIST = "Создать список рассылки" +MAILER_YES = "да" +MAILER_NO = "нет" +MAILER_OR = "или" +MAILER_MAILS_CTRL = "Для выбора нескольких используйте Ctrl" +MAILER_ADD_BTN = "Создать список рассылки" +MAILER_ADD_CONT_BTN = "Создать и продолжить (CTRL+S)" +MAILER_EDIT_BTN = "Сохранить изменения" +MAILER_EDIT_CONT_BTN = "Сохранить и продолжить (CTRL+S)" +MAILER_SAVED = "Сохранено" +MAILER_ACTIONS = "Действия" +MAILER_ACTIONS_EDIT = "Редактировать" +MAILER_ACTIONS_COPY = "Копировать" +MAILER_ACTIONS_SHOW = "Показать письмо в новой вкладке" +MAILER_ACTIONS_HOWSAVE = "Для сохранения нажмите одну из кнопок под таблицей" +MAILER_ACTIONS_DEL = "Удалить" +MAILER_ACTIONS_DOWNLOAD = "Загрузить в формате csv" +MAILER_ACTIONS_WIPE = "Очистить
(удалить всех получателей)" +MAILER_ACTIONS_WIPE_2 = "Удалить всех получателей из списка" +MAILER_INPUT_ADD_ROW = "Добавить ряд" +MAILER_SAVING = "Сохранение..." +MAILER_SENDING = "Отправка..." +MAILER_DELETING = "Удаление..." +MAILER_SHOWING = "Просмотр..." +MAILER_ADDING = "Добавление..." +MAILER_SENDING_TEST = "Тестовая отправка..." +MAILER_WIPING = "Очистка..." +MAILER_SHOW_AUTHOR_TIT = "Просмотреть учётную запись пользователя" +MAILER_WRITE_EMAIL = "Написать письмо" +MAILER_LOOK = "Посмотреть" +MAILER_LOOK_LIST = "Посмотреть список" +MAILER_ER_EMAIL_SYN = "Неверный синтаксис email-а!" +MAILS_SAVED = "Сохранено" +MAILER_EMAIL_OK = "Правильный email" +MAILER_SENT_OK = "Рассылка успешно отправлена" +MAILER_SENT_OK_TEXT = "Рассылка была успешно отправлена и сохранена в список 'Выполненных рассылок'." +MAILER_SENT_OK_LINK = "Вернуться к рассылкам" +MAILER_NOFILE = "Файл не найден!" + +MAILER_MAILS_HEAD = "Выполненные рассылки" +MAILER_MAILS_TPL_H = "Сохранённые рассылки (черновики)" +MAILER_MAILS_AUTHOR = "Автор" +MAILER_MAILS_SUBJECT = "Тема" +MAILER_MAILS_DATE = "Дата отправки" +MAILER_MAILS_CREATED = "Дата создания" +MAILER_MAILS_FROM = "Отправитель" +MAILER_MAILS_FORMAT = "Формат" +MAILER_MAILS_REC_ADD = "Дополнительные получатели" +MAILER_MAILS_REC_ADD_I = "Здесь можно через точку с запятой указать дополнительные email-ы только для этой рассылки" +MAILER_MAILS_RECIEVERS = "Получатели" +MAILER_MAILS_ATTACHS = "Прикреплённые файлы" +MAILER_MAILS_NOITEMS = "Нет выполненных рассылок" +MAILER_MAILS_TPL_NO = "Нет сохранённых рассылок" +MAILER_MAILS_ADD_TITLE = "Создание рассылки" +MAILER_MAILS_EDIT_TITLE = "Редактирование рассылки" +MAILER_MAILS_NEW_TITLE = "Новая рассылка" +MAILER_MAILS_HEAD_MAIL = "Параметры письма" +MAILER_MAILS_HEAD_SET = "Параметры отправки" +MAILER_MAILS_REC_GROUPS = "группы пользователей сайта" +MAILER_MAILS_REC_LISTS = "списки рассылки" +MAILER_MAILS_FROM_NAME = "Имя отправителя" +MAILER_MAILS_FROM_EMAIL = "Адрес отправителя" +MAILER_MAILS_FROM_COPY = "Поставить отправителя в копию" +MAILER_MAILS_APPEAL = "Обращение к получателю" +MAILER_MAILS_APPEAL_I = "Подставляется в %NAME%, если ФИО пустое" +MAILER_MAILS_APPEAL_D = "уважаемый клиент" +MAILER_MAILS_TEXT = "Текст" +MAILER_MAILS_TEXT_I = "Шаблоны:
%NAME% = ФИО
%ID% = {№ рассылки} {C|G|L|A} {id получателя},
где C - сам отправитель, G - из группы, L - из списка, A - доп. получатель
%SHOW% = ссылка для просмотра письма в браузере при неправильном отображении" +MAILER_MAILS_TEXT_D = "Здравствуйте, %NAME%!" +MAILER_MAILS_ATTACH = "Прикрепить файлы" +MAILER_MAILS_ATTACH_A = "Добавить файл" +MAILER_MAILS_ATTACH_I = "Прикрепляйте файлы только если собираетесь отправить эту рассылку прямо сейчас" +MAILER_MAILS_SAVEATTACH = "Сохранить файлы после отправки?" +MAILER_MAILS_TEST_BTN = "Тестовая отправка" +MAILER_MAILS_SEND_BTN = "Отправить" +MAILER_MAILS_SAVE_BTN = "Сохранить черновик" +MAILER_MAILS_SAVE_BTN_C = "Сохранить и продолжить (Ctrl+S)" +MAILER_MAILS_SEND_Q = "Вы уверены, что расслылка готова к отправке?" +MAILER_MAILS_SEND_TEST = "Отправить тестовое письмо на следующие адреса
(разделяйте точкой с запятой)" +MAILER_MAILS_TEST_OK = "Тестовое письмо было успешно отправлено адресатам:" +MAILER_MAILS_FINAL_REC = "Финальный список рассылки" +MAILER_MAILS_FINAL_TXT = "Сохраните черновик перед просмотром Ctrl+S" +MAILER_MAILS_MAKE_FIN = "Просмотреть" +MAILER_MAILS_FIN_INFO = "Список откроется во всплывающем окне (разблокируйте)" +MAILER_MAILS_DEL_Q = "Удалить черновик рассылки" +MAILER_MAILS_SHOW = "Показать письмо в новой вкладке (%SHOW%)" +MAILER_MAILS_SHOW_ALERT = "Сохраните рассылку первый раз перед просмотром!" +MAILER_MAILS_TIMING = "Способ отправки" +MAILER_MAILS_TIM_ALL = "Все сразу" +MAILER_MAILS_TIM_100 = "По 100 писем в час" +MAILER_MAILS_TIM_200 = "По 200 писем в час" +MAILER_MAILS_TIM_300 = "По 300 писем в час" +MAILER_MAILS_DELAY = "Задержка 1 час, отправка следующей порции писем: . Чтобы продолжить прямо сейчас, нажмите Ctrl+G" +MAILER_MAILS_STOP = "Чтобы остановить процесс отправки, нажмите Ctrl+Q" + +MAILER_MAILS_SEARCH = "Найти" +MAILER_SEARCHING = "Поиск..." +MAILER_MAILS_FIND = "Поиск выполненных рассылок по полям:" +MAILER_MAILS_FIND_NO = "Ничего не найдено" +MAILER_MAILS_FIND_IN = "Введите слово или фрагмент текста для поиска" +MAILER_ERR_SEACRH_WORDS = "Введите слово для поиска!" +MAILER_ERR_SEACRH = "Выберите хотя бы одно поле!" +MAILER_SEARCH_FROM_E = "Email отправителя" +MAILER_SEARCH_FROM_N = "Имя отправителя" +MAILER_SEARCH_SUB = "Тема" +MAILER_SEARCH_BODY = "Текст" +MAILER_SEARCH_REC = "Получатели (только по email-ам)" + +MAILER_ERR_FROM_NAME = "Введите имя отправителя!" +MAILER_ERR_FROM_EMAIL = "Укажите правильный email отправителя!" +MAILER_ERR_TO = "Выберите хотя бы один список рассылки или группу получателей,
либо укажите дополнительные email-ы!" +MAILER_ERR_TO_ADD = "Проверьте правильность введённых email-ов!" +MAILER_ERR_SUBJECT = "Укажите тему рассылки!" +MAILER_ERR_BODY = "Введите текст письма!" +MAILER_ALERT_ATTACH = "Выбранные Вами файлы вложений сохранены не будут.
Указывайте вложения только перед отправкой письма!" + +MAILER_LISTS_INFO = "В этом разделе выводятся все списки рассылки" +MAILER_LISTS_EDIT_INFO = "Здесь вы можете отредактировать и дополнить список рассылки. Чтобы добавить сразу несколько получателей, нажмите крестик справа от полей для ввода информации. Добавление/изменение получателей осуществляется по нажатию кнопок сохранения; удаление выполняется без перезагрузки страницы.
Для массового добавления получателей в список используйте раздел 'Импорт получателей'." +MAILER_LISTS_HEAD = "Списки рассылки" +MAILER_LIST_HEAD = "Список" +MAILER_LISTS_TITLE = "Название" +MAILER_LISTS_DESCR = "Описание" +MAILER_LISTS_AUTHOR = "Автор" +MAILER_LISTS_DATE = "Дата создания" +MAILER_LISTS_NUMBER = "Кол-во" +MAILER_LISTS_NUMBER_F = "Кол-во получателей в списке" +MAILER_LISTS_DELCHECK = "Удалить выбранные" +MAILER_LISTS_NOITEMS = "Нет списков рассылки" + +MAILER_LISTS_ADD = "Добавить список" +MAILER_LISTS_ADD_NAME = "Название списка рассылки" +MAILER_LISTS_CREATE = "Создать список рассылки" +MAILER_LISTS_CREATE_T = "Новый список" +MAILER_LISTS_CREATE_MES = "Укажите название списка рассылки!" +MAILER_LISTS_FIND = "Найти список" + +MAILER_LISTS_ADD_TITLE = "Создание списка рассылки" +MAILER_LISTS_EDIT_TITLE = "Редактирование списка рассылки" +MAILER_LISTS_SET_COM = "Общие настройки списка рассылки" +MAILER_LISTS_SET_REC = "Получатели" +MAILER_LISTS_DESCR_INFO = "Напишите, пожалуйста, подробное описание списка рассылки" +MAILER_LISTS_NOTITLE = "Укажите название списка рассылки!" + +MAILER_LISTS_IMPORT = "Импорт получателей" +MAILER_LISTS_IMPORT_T = "Прямой ввод" +MAILER_LISTS_IMPORT_T_1 = "Разделитель получателей:" +MAILER_LISTS_IMPORT_T_2 = "Разделителей полей:" +MAILER_LISTS_IMPORT_T_H = "Если разделитель - новая строка, используйте \r\n" +MAILER_LISTS_IMPORT_F = "Импорт из файла CSV" +MAILER_LISTS_IMPORT_F_I = "Возможен импорт из файлов CSV кодировок cp1251 и UTF-8." +MAILER_LISTS_IMPORT_F_H = "Внимание! Некоторые версии MS Excel сохраняют csv с разделителем ; независимо от выбранного формата.
Перед импортом проверяйте файл в блокноте." +MAILER_LISTS_IMPORT_F_D = "Разделитель столбцов:" + +MAILER_REC_STATUS_I = "Письмо получат только отмеченные получатели. Сняв флажок, Вы можете временно отключить адресата от рассылки.
Если чекбокс запрещён, это означает, что подписчик отказался от рассылки" +MAILER_REC_STATUS_I2 = "Письмо получат только отмеченные получатели. Сняв флажок, Вы можете временно отключить адресата от рассылки." +MAILER_REC_EMAIL = "Email" +MAILER_REC_LASTN = "Фамилия" +MAILER_REC_FIRSTN = "Имя" +MAILER_REC_MIDN = "Отчество" +MAILER_REC_COMMENTS = "Комментарии" +MAILER_REC_NOITEMS = "Список получателей пуст" +MAILER_REC_EMAIL_OK = "Данный email можно добавить в список" +MAILER_REC_EMAIL_NO = "Ошибка! Данный email уже есть в текущем списке рассылки" +MAILER_REC_DEL = "Удалить получателя" +MAILER_REC_DELETED = "Получатель был успешно удалён из списка рассылки" +MAILER_REC_REFUSED = "Получатель отказался от рассылки" +MAILER_REC_UNCHECKED = "Получатель был исключён из списка рассылки вручную" +MAILER_REC_DATE_ADD = "Добавлен:" + +MAILER_MULTI_HINT = "Позволяет за раз добавить нескольких получателей в несколько списков" +MAILER_MULTI_INFO = "Здесь Вы можете за один раз добавить нескольких получателей в несколько списков" +MAILER_MULTI_TITLE = "Мульти-добавление получателей" +MAILER_MULTI_LISTS = "Списки" +MAILER_MULTI_TITLE2 = "Мульти-добавление адресатов в списки" +MAILER_MULTI_BTN = "Добавить получателей" +MAILER_MULTI_BTN_CTRL = "Добавить и продолжить (CTRL+S)" +MAILER_MULTI_NOLIST = "Выберите хотя бы один список!" +MAILER_MULTI_EMAIL_OK = "Правильный синтаксис email-а" + +MAILER_COUNT_TITLE = "Просмотр финального списка получателей рассылки" +MAILER_GROUPS = "Группы" +MAILER_GROUP = "Группа" +MAILER_LOGIN = "Логин" +MAILER_COUNT_INFO = "Если строка получателя выделена красным, значит, он по каким-то причинам не попадёт в финальный список рассылки" +MAILER_COUNT_ER_REPEAT = "Получатель с таким email-ом уже вошёл в фиальный список. См. таблицу выше." +MAILER_COUNT_NOLISTS = "Отсутствуют получатели из списков рассылки" +MAILER_COUNT_NOGROUPS = "Отсутствуют получатели из групп пользователей сайта" +MAILER_COUNT_NOADD = "Отсутствуют дополнительные получатели" +MAILER_COUNT_SUM = "Итого" +MAILER_COUNT_ALL = "Всего получателей" +MAILER_COUNT_ALL_INFO = "За вычетом красных строк" \ No newline at end of file diff --git a/module.php b/module.php new file mode 100644 index 0000000..302a00d --- /dev/null +++ b/module.php @@ -0,0 +1,196 @@ +[mod_subscribe:XXX], где XXX - идентификатор списка рассылки, в который будет добавлен подписчик.'; + $modul['ModuleAutor'] = 'val005'; + $modul['ModuleCopyright'] = '© 2007-2013 AVE.CMS'; + $modul['ModuleIsFunction'] = 1; + $modul['ModuleTemplate'] = 1; + $modul['ModuleAdminEdit'] = 1; + $modul['ModuleFunction'] = 'mod_subscribe'; + $modul['ModuleTag'] = '[mod_subscribe:XXX]'; + $modul['ModuleTagLink'] = null; + $modul['ModuleAveTag'] = '#\\\[mod_subscribe:(\\\d+)]#'; + $modul['ModulePHPTag'] = ""; +} + +/** + * Обработка тега модуля + * + * @param int $list_id идентификатор списка рассылки + */ +function mod_subscribe($list_id) +{ + include_once(BASE_DIR . '/modules/mailer/class.mailer.php'); + $mailer = new mailer; + $mailer->tpl_dir = BASE_DIR . '/modules/mailer/templates/'; + + global $AVE_Template; + $lang_file = BASE_DIR . '/modules/mailer/lang/' . $_SESSION['user_language'] . '.txt'; + $AVE_Template->config_load($lang_file, 'public'); + + $list_id = (int)preg_replace('/\D/', '', $list_id); + $_POST['email'] = trim($_POST['email']); + + switch ($_POST['action']) + { + case 'subscribe': + $result = $mailer->mailerSubscribe(); + switch ($result) + { + case 0: + $mes = $AVE_Template->get_config_vars('MAILER_WRONG_EMAIL'); + break; + + case 1: + $mes = str_replace('%email%',$_POST['email'],$AVE_Template->get_config_vars('MAILER_SUBSCRIBED')); + $AVE_Template->assign('hide_sub',true); + break; + + case 2: + $mes = str_replace('%email%',$_POST['email'],$AVE_Template->get_config_vars('MAILER_SUBSCRIBE_EXIST')); + $AVE_Template->assign('hide_sub',true); + break; + } + break; + + case 'unsubscribe': + $result = $mailer->mailerUnsubscribe(); + switch ($result) + { + case 0: + $mes = str_replace('%email%',$_POST['email'],$AVE_Template->get_config_vars('MAILER_DEL_NO')); break; + case 1: + $mes = str_replace('%email%',$_POST['email'],$AVE_Template->get_config_vars('MAILER_DELETED')); break; + } + $AVE_Template->assign('hide_unsub',true); + break; + } + $AVE_Template->assign('message', $mes); + $AVE_Template->assign('action', $_POST['action']); + $AVE_Template->assign('list_id', $list_id); + $AVE_Template->display($mailer->tpl_dir . 'public_form.tpl'); +} + +/** + * Внешнее обращение + */ +if (!defined('ACP') && $_REQUEST['module'] == 'mailer') +{ + global $AVE_DB; + switch ($_REQUEST['action']) + { + case 'show': + $mail = $AVE_DB->Query(" + SELECT body, appeal, type + FROM " . PREFIX . "_module_mailer_mails + WHERE id = " . $_REQUEST['id'] + )->FetchRow(); + $body = str_replace( + array('%NAME%' ,'%SHOW%'), + array($mail->appeal ,'#'), + $mail->body); + echo ($mail -> type == 'text') ? '
'.$body.'
' : $body; + } +} + +/** + * Админка + */ +if (defined('ACP') && $_REQUEST['mod'] == 'mailer') +{ + include_once(BASE_DIR . '/modules/mailer/class.mailer.php'); + $mailer = new mailer; + $mailer->tpl_dir = BASE_DIR . '/modules/mailer/templates/'; + + $lang_file = BASE_DIR . '/modules/mailer/lang/' . $_SESSION['admin_language'] . '.txt'; + $AVE_Template->config_load($lang_file, 'admin'); + + switch ($_REQUEST['moduleaction']) + { + // Вывод списка рассылок + case '': + case '1': + $mailer->mailerShowMails(); + break; + + // Загрузка вложения из отправленной рассылки + case 'getfile': + if (file_exists($_REQUEST['file'])) + { + if ($_REQUEST['check']) exit('1'); + else $mailer->_mailerGetFile($_REQUEST['file']); + } + exit; + + // Вывод списка рассылок + case 'editmail': + include_once(BASE_DIR . '/class/class.user.php'); + $AVE_User = new AVE_User; + $mailer->mailerEditMail(); + break; + + case 'savemail': + include_once(BASE_DIR . '/class/class.user.php'); + $AVE_User = new AVE_User; + $mailer->mailerSaveMail($_REQUEST['id'],$_REQUEST['act']); + break; + + case 'countmail': + $mailer->mailerCountMail($_REQUEST['id']); + break; + + case 'testsend': + $emails = $mailer->mailerTestSend($_REQUEST['id'],$_REQUEST['emails']); + echo implode(', ',$emails); + exit; + + case 'sendmail': + $mailer->mailerSendMail(); + break; + + case 'showlists': + $mailer->mailerShowLists(); + break; + + case 'editlist': + $mailer->mailerEditList(); + break; + + case 'savelist': + $mailer->mailerSaveList(); + break; + + case 'multiadd': + $mailer->mailerMultiAdd(); + break; + + case 'multisave': + $mailer->mailerMultiSave(); + break; + + case 'delreceiver': + $mailer->_mailerDelReceiver($_REQUEST['rec_id']); + break; + + case 'checkemail': + echo $mailer->_mailerCheckEmail(trim($_REQUEST['email']),(int)trim($_REQUEST['list_id'])); + exit; + } +} + +?> \ No newline at end of file diff --git a/sql.php b/sql.php new file mode 100644 index 0000000..238188f --- /dev/null +++ b/sql.php @@ -0,0 +1,101 @@ + \ No newline at end of file diff --git a/templates/admin_count_mail.tpl b/templates/admin_count_mail.tpl new file mode 100644 index 0000000..e729e27 --- /dev/null +++ b/templates/admin_count_mail.tpl @@ -0,0 +1,136 @@ +
+
{#MAILER_COUNT_TITLE#} '{$count_mail.title}'
+
+
+
+
{#MAILER_LISTS_HEAD#}
+
+ + + + + + + + + + + + + + + + + + + {foreach from=$count_mail.lists key=title item=list} + {foreach from=$list item=rec} + + + + + + + + + {/foreach} + {/foreach} + +
{#MAILER_LIST_HEAD#}{#MAILER_REC_EMAIL#}{#MAILER_REC_LASTN#}{#MAILER_REC_FIRSTN#}{#MAILER_REC_COMMENTS#}
{if $rec->s}{/if}{$title|escape}{$rec->email}{$rec->lastname|escape}{$rec->firstname|escape}{$rec->comments|escape}
+ {if !$count_mail.lists} +
+
    +
  • {#MAILER_COUNT_NOLISTS#}
  • +
+
+ {/if} +
+
+
+
{#MAILER_GROUPS#}
+
+ + + + + + + + + + + + + + + + + + + {foreach from=$count_mail.groups key=title item=group} + {foreach from=$group item=rec} + s} class="red"{/if}> + + + + + + + + {/foreach} + {/foreach} + +
{#MAILER_GROUP#}{#MAILER_REC_EMAIL#}{#MAILER_LOGIN#}{#MAILER_REC_LASTN#}{#MAILER_REC_FIRSTN#}
{if $rec->s}{/if}{$title|escape}{$rec->email}{$rec->user_name|escape}{$rec->lastname|escape}{$rec->firstname|escape}
+ {if !$count_mail.groups} +
+
    +
  • {#MAILER_COUNT_NOGROUPS#}
  • +
+
+ {/if} +
+
+
+
{#MAILER_MAILS_REC_ADD#}
+
+ + + + + + + + + + + {foreach from=$count_mail.add item=rec} + + + + + {/foreach} + +
{#MAILER_REC_EMAIL#}
{if $rec.s}{/if}{$rec.email}{if $rec.from} ({#MAILER_MAILS_FROM#}){/if}
+ {if !$count_mail.add} +
+
    +
  • {#MAILER_COUNT_NOADD#}
  • +
+
+ {/if} +
+
+
+
{#MAILER_COUNT_SUM#}
+
+ + + + + +
{#MAILER_COUNT_ALL#}
{#MAILER_COUNT_ALL_INFO#}
+
+ {$count_mail.number} +
+
+
\ No newline at end of file diff --git a/templates/admin_edit_list.tpl b/templates/admin_edit_list.tpl new file mode 100644 index 0000000..f4ca823 --- /dev/null +++ b/templates/admin_edit_list.tpl @@ -0,0 +1,276 @@ +
+
{if !$smarty.request.id}{#MAILER_LISTS_ADD_TITLE#}{else}{#MAILER_LISTS_EDIT_TITLE#}{/if}
+
+
+
+ {#MAILER_LISTS_EDIT_INFO#} +
+
+ +
+
+
+
{#MAILER_LISTS_SET_COM#}
+
+ + + + + + + + + +
{#MAILER_LISTS_TITLE#}
+ +
{#MAILER_LISTS_DESCR#}
+ +
+
+ +   + +
+
+ + {if $page_nav} + + {/if} + +
+
+
{#MAILER_LISTS_SET_REC#}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {foreach from=$receivers item=rec} + + + + + + + + + + + + {/foreach} + +
{#MAILER_REC_EMAIL#}{#MAILER_REC_LASTN#}{#MAILER_REC_FIRSTN#}{#MAILER_REC_MIDN#}{#MAILER_REC_COMMENTS#}{#MAILER_ACTIONS#}
+ +
+ + status=="1"}checked="checked"{elseif $rec->status=="2"} disabled="disabled" title="{#MAILER_REC_REFUSED#}"{/if}/>{$rec->email}{$rec->lastname|escape}{$rec->firstname|escape}{$rec->middlename|escape}{$rec->comments|escape}
+ {if !$receivers} +
+
    +
  • {#MAILER_REC_NOITEMS#}
  • +
+
+ {/if} +
+ + {if $page_nav} + + {/if} + +
+
+
{#MAILER_LISTS_IMPORT#}
+
+ + + + + + + + + +
{#MAILER_LISTS_IMPORT_T#}
{#MAILER_LISTS_IMPORT_T_I#}
+
+ +
+
+ + +
+
+ {#MAILER_LISTS_IMPORT_T_H#} +
+
{#MAILER_LISTS_IMPORT_F#}
{#MAILER_LISTS_IMPORT_F_I#}
+
+ +
+
+ +
+
+ {#MAILER_LISTS_IMPORT_F_H#} +
+
+
+ +   + + +
+
+
+ + \ No newline at end of file diff --git a/templates/admin_edit_mail.tpl b/templates/admin_edit_mail.tpl new file mode 100644 index 0000000..0b236ef --- /dev/null +++ b/templates/admin_edit_mail.tpl @@ -0,0 +1,428 @@ +
+
{if !$smarty.request.id}{#MAILER_MAILS_ADD_TITLE#}{else}{#MAILER_MAILS_EDIT_TITLE#}{/if}
+
+{*
+
+ {#MAILER_MAILS_ADD_INFO#} +
+
*} + +
+
+
+
{#MAILER_MAILS_HEAD_MAIL#}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
{#MAILER_MAILS_SUBJECT#}
+ +
{#MAILER_MAILS_FORMAT#}
+ type!='text'}checked="checked"{/if}/> + + type=='text'}checked="checked"{/if}/> + +
{#MAILER_MAILS_TEXT#}
{#MAILER_MAILS_TEXT_I#}
+
+ +
+
+ +
+ +
{#MAILER_MAILS_APPEAL#}
{#MAILER_MAILS_APPEAL_I#}
+ +
{#MAILER_MAILS_ATTACH#}
{#MAILER_MAILS_ATTACH_I#}
+
+ +
+
{#MAILER_MAILS_SAVEATTACH#}
+ saveattach}checked="checked"{/if} /> + + saveattach}checked="checked"{/if} /> + +
+
+ +   + +
+
+ +
+
+
{#MAILER_MAILS_HEAD_SET#}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{#MAILER_MAILS_FROM_NAME#}
+ +
{#MAILER_MAILS_FROM_EMAIL#}
+ +
{#MAILER_MAILS_FROM_COPY#}
+ from_copy} checked{/if} /> +
{#MAILER_MAILS_RECIEVERS#}: {#MAILER_MAILS_REC_GROUPS#} "{$mail->site_name}"
+ {#MAILER_MAILS_CTRL#}
+ +
{#MAILER_MAILS_RECIEVERS#}: {#MAILER_MAILS_REC_LISTS#}
+ {#MAILER_MAILS_CTRL#}
+ +
{#MAILER_MAILS_REC_ADD#}
{#MAILER_MAILS_REC_ADD_I#}
+ +
{#MAILER_MAILS_FINAL_REC#}
+   ({#MAILER_MAILS_FINAL_TXT#}) +
{#MAILER_MAILS_TIMING#}
+ +
+
+ +   + +   + +   + + + +
{if $mail->sent}{$mail->date|date_format:$TIME_FORMAT|pretty_date}  {/if}{#MAILER_SENT_OK_TEXT#} + » {#MAILER_SENT_OK_LINK#}
+
+
+
+ + +{include file="$codemirror_connect"} +{include file="$codemirror_editor" conn_id="rsc" textarea_id='codemirror' height=500} \ No newline at end of file diff --git a/templates/admin_multi_add.tpl b/templates/admin_multi_add.tpl new file mode 100644 index 0000000..6218a6f --- /dev/null +++ b/templates/admin_multi_add.tpl @@ -0,0 +1,164 @@ +
+
{#MAILER_MULTI_TITLE#}
+
+
+
+ {#MAILER_MULTI_INFO#} +
+
+ +
+
+
+
{#MAILER_MULTI_TITLE2#}
+
+ + + + + +
{#MAILER_MULTI_LISTS#}
+ {#MAILER_MAILS_CTRL#}
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
{#MAILER_REC_EMAIL#}{#MAILER_REC_LASTN#}{#MAILER_REC_FIRSTN#}{#MAILER_REC_MIDN#}{#MAILER_REC_COMMENTS#}
+ +
+
+   + +
+
+
+ + \ No newline at end of file diff --git a/templates/admin_show_lists.tpl b/templates/admin_show_lists.tpl new file mode 100644 index 0000000..d1ceb11 --- /dev/null +++ b/templates/admin_show_lists.tpl @@ -0,0 +1,95 @@ +
+
{#MAILER_MANAGE_LISTS#}
+
+{*
+
+ {#MAILER_LISTS_INFO#} +
+
*} + +
+
+
{#MAILER_LISTS_HEAD#}
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + {foreach from=$lists item=list} + + + + + + + + + + + + + {/foreach} + +
id{#MAILER_LISTS_TITLE#}{#MAILER_LISTS_DESCR#}{#MAILER_LISTS_AUTHOR#}{#MAILER_LISTS_DATE#}{#MAILER_LISTS_NUMBER#}{#MAILER_ACTIONS#}
{$list->id} + {$list->title} + +
{$list->descr}
{$list->author_name|escape}{$list->date|date_format:$TIME_FORMAT|pretty_date}{$list->number}
+ {if !$lists} +
+
    +
  • {#MAILER_LISTS_NOITEMS#}
  • +
+
{/if} +
+{if $page_nav} + +{/if} \ No newline at end of file diff --git a/templates/admin_show_mails.tpl b/templates/admin_show_mails.tpl new file mode 100644 index 0000000..6e2c6c8 --- /dev/null +++ b/templates/admin_show_mails.tpl @@ -0,0 +1,313 @@ +
+
{#MAILER_MANAGE_MAILS#}
+
+
+
+ {#MAILER_MODULE_INFO#} +
+
+ +
+
+
{#MAILER_MAILS_TPL_H#}
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + {foreach from=$mails.tpl item=mail} + + + + + + + + + + + + {/foreach} + +
Id{#MAILER_MAILS_SUBJECT#}{#MAILER_MAILS_AUTHOR#}{#MAILER_MAILS_CREATED#}{#MAILER_MAILS_FROM#}{#MAILER_MAILS_RECIEVERS#}{#MAILER_ACTIONS#}
{$mail->id}{$mail->subject|escape}{$mail->author_name}{$mail->date|date_format:$TIME_FORMAT|pretty_date}{$mail->from_email|escape}
{$mail->from_name|escape}
+
+ {if $mail->from_copy}{#MAILER_MAILS_FROM#} + {if $mail->to_groups || $mail->to_lists || $mail->to_add}
{/if} + {/if} + {foreach from=$mail->to_groups item=group name=foreach} + {$group->user_group_name|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_groups && ($mail->to_lists || $mail->to_add)}
{/if} + {foreach from=$mail->to_lists item=list name=foreach} + {$list->title|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_lists && $mail->to_add}
{/if} + {foreach from=$mail->to_add item=add name=foreach} + {$add|escape}{if !$smarty.foreach.foreach.last}, {/if} + {/foreach} +
+
+ {if !$mails.tpl} +
+
    +
  • {#MAILER_MAILS_TPL_NO#}
  • +
+
+ {/if} +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + {foreach from=$mails.sent item=mail} + + + + + + + + + + + + + {/foreach} + +
Id{#MAILER_MAILS_SUBJECT#}{#MAILER_MAILS_AUTHOR#}{#MAILER_MAILS_DATE#}{#MAILER_MAILS_FROM#}{#MAILER_MAILS_RECIEVERS#}{#MAILER_MAILS_ATTACHS#}{#MAILER_ACTIONS#}
{$mail->id}{$mail->subject|escape}{$mail->author_name|escape}{$mail->date|date_format:$TIME_FORMAT|pretty_date}{$mail->from_email|escape}
{$mail->from_name|escape}
+
+ {if $mail->from_copy}{#MAILER_MAILS_FROM#} + {if $mail->to_groups || $mail->to_lists || $mail->to_add}
{/if} + {/if} + {foreach from=$mail->to_groups item=group name=foreach} + {$group->user_group_name|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_groups && ($mail->to_lists || $mail->to_add)}
{/if} + {foreach from=$mail->to_lists item=list name=foreach} + {$list->title|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_lists && $mail->to_add}
{/if} + {foreach from=$mail->to_add item=add name=foreach} + {$add|escape}{if !$smarty.foreach.foreach.last}, {/if} + {/foreach} +
+
+
+ {if $mail->saveattach !='1'} + {foreach from=$mail->attach item=attachment name=foreach} + {$attachment.name}{if !$smarty.foreach.foreach.last},
{/if} + {/foreach} + {else} + {foreach from=$mail->attach item=attachment name=foreach} + {$attachment.name}{if !$smarty.foreach.foreach.last},
{/if} + {/foreach} + {/if} +
+
+ {if !$mails.sent} +
+
    +
  • {#MAILER_MAILS_NOITEMS#}
  • +
+
+ {/if} +
+
+
+ + {if $search} + + + + + + + + + + + + + + + + + + + + + + + + + {foreach from=$mails.find item=mail} + + + + + + + + + + + + {/foreach} + +
Id{#MAILER_MAILS_SUBJECT#}{#MAILER_MAILS_AUTHOR#}{#MAILER_MAILS_DATE#}{#MAILER_MAILS_FROM#}{#MAILER_MAILS_RECIEVERS#}{#MAILER_MAILS_ATTACHS#}{#MAILER_ACTIONS#}
{$mail->id}{$mail->subject|escape}{$mail->author_name|escape}{$mail->date|date_format:$TIME_FORMAT|pretty_date}{$mail->from_email|escape}
{$mail->from_name|escape}
+
+ {if $mail->from_copy}{#MAILER_MAILS_FROM#} + {if $mail->to_groups || $mail->to_lists || $mail->to_add}
{/if} + {/if} + {foreach from=$mail->to_groups item=group name=foreach} + {$group->user_group_name|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_groups && ($mail->to_lists || $mail->to_add)}
{/if} + {foreach from=$mail->to_lists item=list name=foreach} + {$list->title|escape}{if !$smarty.foreach.foreach.last}, {/if}{/foreach} + {if $mail->to_lists && $mail->to_add}
{/if} + {foreach from=$mail->to_add item=add name=foreach} + {$add|escape}{if !$smarty.foreach.foreach.last}, {/if} + {/foreach} +
+
+
+ {if $mail->saveattach !='1'} + {foreach from=$mail->attach item=attachment name=foreach} + {$attachment.name}{if !$smarty.foreach.foreach.last},
{/if} + {/foreach} + {else} + {foreach from=$mail->attach item=attachment name=foreach} + {$attachment.name}{if !$smarty.foreach.foreach.last},
{/if} + {/foreach} + {/if} +
+
+ {if !$mails.find} +
+
    +
  • {#MAILER_MAILS_FIND_NO#}
  • +
+
+ {/if} + {/if} +
+
+
+{if $page_nav} + +{/if} + \ No newline at end of file diff --git a/templates/index.php b/templates/index.php new file mode 100644 index 0000000..4ca25aa --- /dev/null +++ b/templates/index.php @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/templates/public_form.tpl b/templates/public_form.tpl new file mode 100644 index 0000000..15d96db --- /dev/null +++ b/templates/public_form.tpl @@ -0,0 +1,64 @@ +
+

{#MAILER_SUBSCRIBE#}

+
+ {if $action=="subscribe"} +
+ {$message} +

+ {/if} + {if !$hide_sub} +
+ + + + + + + + + + + + + + + + + + + + + + +
{#MAILER_EMAIL#}*:
{#MAILER_LNAME#}:
{#MAILER_FNAME#}:
{#MAILER_MNAME#}:
+ +
+
+ {/if} +
+

{#MAILER_UNSUBSCRIBE#}

+
+ {if $action=="unsubscribe"} +
+ {$message} +

+ {/if} + {if !$hide_unsub} +
+ + + + + + + + + + +
{#MAILER_EMAIL#}*:
+ +
+
+ {/if} +
+
diff --git a/templates/public_result.tpl b/templates/public_result.tpl new file mode 100644 index 0000000..f64e9fb --- /dev/null +++ b/templates/public_result.tpl @@ -0,0 +1 @@ +{$message} \ No newline at end of file