magasoft 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) Модуль обратной связи в нынешнем виде, без дополнительных параметров, выводит список всех пользователей групп меньше 4 (админов, редакторов, журналистов) которым можно отправить письмо. Очень часто необходимо чтобы письмо присылалось на один или два заранее определенных email'a. Можно всячески извращаться с настройками, в принципе, нынешний вид модуля довольно гибок и предназначен "на широкий круг лиц", и реализовать такое возможно, но все же решил сделать небольшую модификацию для задания конкретных адресов. К тому же она будет экономить 1 запрос. Выкладываю весь текст модуля для версии 5.3 ибо изменений внесено много, задокументирую позже. файл engine/feedback.php <?php if(!defined('DATALIFEENGINE')) { die("Hacking attempt!"); } if (!$user_group[$member_id['user_group']]['allow_feed']) { $lang['feed_error'] = str_replace('{group}', $user_group[$member_id['user_group']]['group_name'], $lang['feed_error']); msgbox ($lang['all_info'], $lang['feed_error']); } else { if (isset($_POST['send'])) { $stop = ""; if ($is_logged) { $name = $member_id['name']; $email = $member_id['email']; } else { $name = $db->safesql($_POST['name']); $email = $db->safesql($_POST['email']); } $subject = stripslashes($_POST['subject']); $message = stripslashes($_POST['message']); $recip = $_POST['recip']; function check_email($value) { return eregi("^([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)$", $value); } if (empty($name)) { $stop .= $lang['feed_err_1']; } if (empty($email)) { $stop .= $lang['feed_err_2']; } elseif (!check_email($email)) { $stop .= $lang['feed_err_3']; } if (empty($subject)) { $stop .= $lang['feed_err_4']; } if (empty($message)) { $stop .= $lang['feed_err_5']; } if ( $_POST['sec_code'] != $_SESSION['sec_code_session'] OR !$_SESSION['sec_code_session']) { $stop .= $lang['reg_err_19']; } $_SESSION['sec_code_session'] = false; if ($stop) { msgbox ($lang['all_err_1'], "$stop<br><br><a href=\"java script:history.go(-1)\">$lang[all_prev]</a>"); } else { include_once ENGINE_DIR.'/inc/mail.class.php'; $mail = new dle_mail ($config); if (!check_email($recip)) { $recipient = $db->super_query("SELECT name, email, fullname FROM " . PREFIX . "_users WHERE user_id='".intval($recip)."'"); if (empty($recipient['fullname'])) $recipient['fullname'] = $recipient['name']; $rfullname = $recipient['fullname']; $remail = $recipient['email']; $rname = $recipient['name']; } else { $remail = $recip; $rfullname = $recip; } $row = $db->super_query("SELECT template FROM " . PREFIX . "_email where name='feed_mail' LIMIT 0,1"); $row['template'] = stripslashes($row['template']); $row['template'] = str_replace("{%username_to%}",$rfullname, $row['template']); $row['template'] = str_replace("{%username_from%}",$name, $row['template']); $row['template'] = str_replace("{%text%}",$message, $row['template']); $mail->from = $email; $mail->send ($remail, $subject, $row['template']); if ($mail->send_error) msgbox ($lang['all_info'], $mail->smtp_msg); else msgbox($lang['feed_ok_1'], "$lang[feed_ok_2] ".$rname." $lang[feed_ok_3] <a href=\"{$config['http_home_url']}\">$lang[feed_ok_4]</a>"); } } else { if (isset($_REQUEST['user'])) $user = intval($_GET['user']); else $user = ""; if (!$user) { $empf ="<select name=\"recip\"><option selected value=\"xexoi@kexat.ce\">Support</option>\n<option selected value=\"kugalxoi@kexat.ce\">Administration</option>\n</select>"; } else { $db->query("SELECT name, user_group, user_id FROM " . PREFIX . "_users where user_id = '$user' AND allow_mail = '1' ORDER BY user_group"); if ($db->num_rows()>0) { $empf = "<select name=\"recip\">"; $i = 1; while ($row = $db->get_array()) { $str = $row['name']." (".stripslashes($user_group[$row['user_group']]['group_name']).")"; if ($i == 1) { $empf .= "<option selected value=\"".$row["user_id"]."\">".$str."</option>\n"; } else { $empf .= "<option value=\"".$row["user_id"]."\">".$str."</option>\n"; } $i++; } $empf .="</select>"; $db->free(); } } $tpl->load_template('feedback.tpl'); $tpl->set('{recipient}',$empf); $tpl->set('{code}',"<img src=\"engine/modules/antibot.php\" alt=\"${lang['sec_image']}\" border=\"0\">"); if (!$is_logged) { $tpl->set('[not-logged]',""); $tpl->set('[/not-logged]',""); } else $tpl->set_block("'\\[not-logged\\].*?\\[/not-logged\\]'si",""); $tpl->copy_template = "<form method=\"post\" name=\"sendmail\" onsubmit=\"if(document.sendmail.subject.value == '' || document.sendmail.message.value == ''){alert('{$lang['comm_req_f']}');return false}\"action=\"\">\n".$tpl->copy_template." <input name=\"send\" type=hidden value=\"send\"> </form>"; $tpl->compile('content'); $tpl->clear(); } } ?> Обратите внимание на эту строку: $empf ="<select name=\"recip\"><option selected value=\"xexoi@kexat.ce\">Support</option>\n<option selected value=\"kugalxoi@kexat.ce\">Administration</option>\n</select>"; здесь вместо xexoi@kexat.ce и kugalxoi@kexat.ce ставим свои адреса так же и с Support и Administration, если надо добавить еще один элемент списка добавляем <option selected value=\"kugalxoi@kexat.ce\">Administration</option>\n т.е. если три элемента то будет так: $empf ="<select name=\"recip\"><option selected value=\"xexoi@kexat.ce\">Support</option>\n<option selected value=\"kugalxoi@kexat.ce\">Administration</option>\n<option selected value=\"kugalxoi2@kexat.ce\">Administration2</option>\n</select>"; после этих модификаций при открытии index.php?do=feedback у вас в строке адресата будет не список админов/модеров а указанные вами email'ы. Изменено 19 февраля 2007 пользователем MagaSoft Цитата Ссылка на сообщение Поделиться на других сайтах
Гость Автоответчик Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 <#thank#> Цитата Ссылка на сообщение Поделиться на других сайтах
gun 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) Не хотелось бы выставлять e-mail адреса напоказ. А зашифровать их как нибудь можно? Изменено 19 февраля 2007 пользователем gun Цитата Ссылка на сообщение Поделиться на других сайтах
magasoft 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 Автор Если перемудрить боюсь веб-монстры наши не просекут как мыло добавлять свое, а вообще надо будет подумать конечно. Цитата Ссылка на сообщение Поделиться на других сайтах
nickon 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) $empf ="<select name=\"recip\"><option selected value=\"xexoi@kexat.ce\">Support</option>\n<option selected value=\"kugalxoi@kexat.ce\">Administration</option>\n<option selected value=\"kugalxoi2@kexat.ce\">Administration2</option>\n</select>"; думаю это не есть гуд ! лучше заранее определить массив email адресов, например $mails = array ( '0' => 'xexoi@kexat.ce', '1' => 'kugalxoi@kexat.ce', '2' => 'kugalxoi2@kexat.ce', ); и меняем меню: $empf ="<select name=\"recip\"><option selected value=\"0\">Support</option>\n<option selected value=\"1\">Administration</option>\n<option selected value=\"2\">Administration2</option>\n</select>"; далее при отправке получаем мыло: $recip = intval($_POST['recip']); $mail = $mails[$recip]; таким образом добиваемся скрытия email адресов в теле страницы Изменено 19 февраля 2007 пользователем ·•°:nick-on:°•· Цитата Ссылка на сообщение Поделиться на других сайтах
magasoft 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 Автор ·•°:nick-on:°•·, уже думал об этом, тогда придется и логику хака менять. сейчас там все пляшет от проверки того что в ресипе, если мыло то упрощенный код, если число (т.е.) id юзверя в нашем случае, то идет как письмо на мыло лично юзверю. т.ч. надо будет еще условие это приспособить под скрытие. Цитата Ссылка на сообщение Поделиться на других сайтах
nickon 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) ·•°:nick-on:°•·, уже думал об этом, тогда придется и логику хака менять. сейчас там все пляшет от проверки того что в ресипе, если мыло то упрощенный код, если число (т.е.) id юзверя в нашем случае, то идет как письмо на мыло лично юзверю. т.ч. надо будет еще условие это приспособить под скрытие. ну так яже получил "то что в ресипе" $recip = intval($_POST['recip']); $mail = $mails[$recip]; от него далее и пляши )) если нужно id юзера так в массив мона загнать idшники... но всё енто жутко негибко Изменено 19 февраля 2007 пользователем ·•°:nick-on:°•· Цитата Ссылка на сообщение Поделиться на других сайтах
magasoft 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) Автор ·•°:nick-on:°•·, feedback.php используется и для отправки писем на мыло пользователей друг другу и для отправки в администрацию. Вот если щас в этот код вставить то что ты предлагаешь, он при проверке этого "ресипа" вот тут: if (!check_email($recip)) { $recipient = $db->super_query("SELECT name, email, fullname FROM " . PREFIX . "_users WHERE user_id='".intval($recip)."'"); if (empty($recipient['fullname'])) $recipient['fullname'] = $recipient['name']; $rfullname = $recipient['fullname']; $remail = $recipient['email']; $rname = $recipient['name']; } else { $remail = $recip; $rfullname = $recip; } резонно предположит что это ему послано не мыло и пойдет по первому пути, проще говоря мыло отправится челу с id=0 или 1 или 2 и т.д. поэтому в массиве надо использовать другие индексы, либо менять условие проверки это. Изменено 19 февраля 2007 пользователем MagaSoft Цитата Ссылка на сообщение Поделиться на других сайтах
nickon 0 Опубликовано: 19 февраля 2007 Рассказать Опубликовано: 19 февраля 2007 (изменено) лооол я не предлагаю код для полной реализации фидбека .. я просто даю идею ... дальше каждый сам для себя делает... MagaSoft, зачем придерживаться стандартного кода? пиши свой и не парься убираешь все запросы, оставляешь тока получение шаблона письма и делаешь вывод юзеров из массива проще некуда... Изменено 19 февраля 2007 пользователем ·•°:nick-on:°•· Цитата Ссылка на сообщение Поделиться на других сайтах
dimonn_s 0 Опубликовано: 20 февраля 2007 Рассказать Опубликовано: 20 февраля 2007 А скажите можно ли кто сделать несколько форм ... например одну оставить стандартную... а на отдельной странице сделать расширенную форму с большим количеством полей ..типа анкеты? Очень бы хотелось такую штуку))) Цитата Ссылка на сообщение Поделиться на других сайтах
googlo 0 Опубликовано: 20 февраля 2007 Рассказать Опубликовано: 20 февраля 2007 Хочу написать простую форму(анкету), на что следует обратить внимание, чтобы написать максимум безопасно? Цитата Ссылка на сообщение Поделиться на других сайтах
dimonn_s 0 Опубликовано: 20 февраля 2007 Рассказать Опубликовано: 20 февраля 2007 jungle Когда напишешь поделись а...... Мне тоже такая нужна Цитата Ссылка на сообщение Поделиться на других сайтах
magasoft 0 Опубликовано: 20 февраля 2007 Рассказать Опубликовано: 20 февраля 2007 Автор лооол я не предлагаю код для полной реализации фидбека .. я просто даю идею ... дальше каждый сам для себя делает... зачем придерживаться стандартного кода? пиши свой и не парься убираешь все запросы, оставляешь тока получение шаблона письма и делаешь вывод юзеров из массива проще некуда... Спасибо конечно и за идеи и за советы. Но вопрос не в сложности, просто необходимости в этом не вижу. Цель была переделать мод для отправки писем по определенным адресам, цель выполнена, вопрос о скрытии этих адресов, для меня лично и для того кто просил сделать, остро не стоял. Может при обновлении до 5.5 для галочки сделаю. А скажите можно ли кто сделать несколько форм ... например одну оставить стандартную... а на отдельной странице сделать расширенную форму с большим количеством полей ..типа анкеты? Очень бы хотелось такую штуку))) Можно. Т.к. каждый случай индивидуален, в своем индивидуальном случае берете какой-нить мануал из тех тысяч об отправке данных через форму на мыло, пишите форму, пишите обработчик для отсылки письма и наступает счастье. Цитата Ссылка на сообщение Поделиться на других сайтах
farlep 0 Опубликовано: 21 июня 2007 Рассказать Опубликовано: 21 июня 2007 (изменено) Интересует такая модификация. Написал отдельный модуль и два шаблона к нему. disk.php disk.tpl diskfeedback.tpl в diskfeedback.tpl и disk.php немного подправил убрал код безопасности.. Хотел бы еще убрать всех админов в этом шаблоне и оставить одного определенного. В каком месте подправить? Версия движка 5.7 Изменено 21 июня 2007 пользователем farlep Цитата Ссылка на сообщение Поделиться на других сайтах
farlep 0 Опубликовано: 21 июня 2007 Рассказать Опубликовано: 21 июня 2007 Нашел ответ на свой вопрос здесь Цитата Ссылка на сообщение Поделиться на других сайтах
logan-fatality 0 Опубликовано: 14 ноября 2007 Рассказать Опубликовано: 14 ноября 2007 выложи плз фидбек без кода безопасноит Цитата Ссылка на сообщение Поделиться на других сайтах
-(www)- 0 Опубликовано: 7 февраля 2008 Рассказать Опубликовано: 7 февраля 2008 (изменено) как убрать из формы журналистов итд, оставить только админов? все нашел.. Изменено 7 февраля 2008 пользователем -(www)- Цитата Ссылка на сообщение Поделиться на других сайтах
kolodenko 0 Опубликовано: 9 июня 2009 Рассказать Опубликовано: 9 июня 2009 А как просто добавить к списку администраторы и главные редакторы еще "Журналистов"? Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.