Перейти к публикации

Рекомендованные сообщения

Модуль обратной связи в нынешнем виде, без дополнительных параметров, выводит список всех пользователей групп меньше 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'ы.

Изменено пользователем MagaSoft
Ссылка на сообщение
Поделиться на других сайтах

Не хотелось бы выставлять e-mail адреса напоказ. А зашифровать их как нибудь можно?

Изменено пользователем gun
Ссылка на сообщение
Поделиться на других сайтах

Если перемудрить боюсь веб-монстры наши не просекут как мыло добавлять свое, а вообще надо будет подумать конечно.

Ссылка на сообщение
Поделиться на других сайтах

$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 адресов в теле страницы ;)

Изменено пользователем ·•°:nick-on:°•·
Ссылка на сообщение
Поделиться на других сайтах

·•°:nick-on:°•·, уже думал об этом, тогда придется и логику хака менять. сейчас там все пляшет от проверки того что в ресипе, если мыло то упрощенный код, если число (т.е.) id юзверя в нашем случае, то идет как письмо на мыло лично юзверю. т.ч. надо будет еще условие это приспособить под скрытие.

Ссылка на сообщение
Поделиться на других сайтах

·•°:nick-on:°•·, уже думал об этом, тогда придется и логику хака менять. сейчас там все пляшет от проверки того что в ресипе, если мыло то упрощенный код, если число (т.е.) id юзверя в нашем случае, то идет как письмо на мыло лично юзверю. т.ч. надо будет еще условие это приспособить под скрытие.

ну так яже получил "то что в ресипе" :lol:

$recip = intval($_POST['recip']);

$mail = $mails[$recip];

от него далее и пляши ))

если нужно id юзера так в массив мона загнать idшники... но всё енто жутко негибко

Изменено пользователем ·•°:nick-on:°•·
Ссылка на сообщение
Поделиться на других сайтах

·•°: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 и т.д.

поэтому в массиве надо использовать другие индексы, либо менять условие проверки это.

Изменено пользователем MagaSoft
Ссылка на сообщение
Поделиться на других сайтах

лооол я не предлагаю код для полной реализации фидбека .. я просто даю идею ... B) дальше каждый сам для себя делает...

MagaSoft,

зачем придерживаться стандартного кода? пиши свой и не парься ;) убираешь все запросы, оставляешь тока получение шаблона письма и делаешь вывод юзеров из массива проще некуда...

Изменено пользователем ·•°:nick-on:°•·
Ссылка на сообщение
Поделиться на других сайтах

А скажите можно ли кто сделать несколько форм ... например одну оставить стандартную... а на отдельной странице сделать расширенную форму с большим количеством полей ..типа анкеты?

Очень бы хотелось такую штуку)))

Ссылка на сообщение
Поделиться на других сайтах

лооол я не предлагаю код для полной реализации фидбека .. я просто даю идею ... B) дальше каждый сам для себя делает... зачем придерживаться стандартного кода? пиши свой и не парься ;) убираешь все запросы, оставляешь тока получение шаблона письма и делаешь вывод юзеров из массива проще некуда...

Спасибо конечно и за идеи и за советы. Но вопрос не в сложности, просто необходимости в этом не вижу. Цель была переделать мод для отправки писем по определенным адресам, цель выполнена, вопрос о скрытии этих адресов, для меня лично и для того кто просил сделать, остро не стоял. Может при обновлении до 5.5 для галочки сделаю.

А скажите можно ли кто сделать несколько форм ... например одну оставить стандартную... а на отдельной странице сделать расширенную форму с большим количеством полей ..типа анкеты?

Очень бы хотелось такую штуку)))

Можно. Т.к. каждый случай индивидуален, в своем индивидуальном случае берете какой-нить мануал из тех тысяч об отправке данных через форму на мыло, пишите форму, пишите обработчик для отсылки письма и наступает счастье.

Ссылка на сообщение
Поделиться на других сайтах
  • 4 месяца спустя...

Интересует такая модификация.

Написал отдельный модуль и два шаблона к нему.

disk.php

disk.tpl

diskfeedback.tpl

в diskfeedback.tpl и disk.php немного подправил убрал код безопасности..

Хотел бы еще убрать всех админов в этом шаблоне и оставить одного определенного. В каком месте подправить?

Версия движка 5.7

Изменено пользователем farlep
Ссылка на сообщение
Поделиться на других сайтах
  • 4 месяца спустя...
  • 2 месяца спустя...

как убрать из формы журналистов итд, оставить только админов?

все нашел..

Изменено пользователем -(www)-
Ссылка на сообщение
Поделиться на других сайтах
  • 1 год спустя...

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...