Пропустить

Уведомление об ответе

Форум для авторов модов для phpBB 2.0.x.

Уведомление об ответе

Сообщение AEC » 01.11.2004 18:28

доработал функцию сообщений по e-mail о новых ответах на подписаные сообщения.

вот код файла topic_notify.tpl:
Subject: Уведомление об ответе - {TOPIC_TITLE}
Charset: windows-1251
<html><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<base href="http://aeclub.net.ua">
<style type="text/css">
.n {font-family: Verdana, Tahoma, Arial; font-size: 10pt}
.s {font-family: Verdana, Tahoma, Arial; font-size: 9pt; color : #000033; background: #F3F4FD}
</style>
<body  bgcolor=#FFFFFF text="#000000" link="#000080" alink="#800000" vlink="#2f2f4f" marginheight=10 marginwidth=10 topmargin=10 leftmargin=10 rightmargin=10 class=n>
Здравствуйте, {USERNAME}!<br><br>
{POSTER_NAME} ответил на сообщение "<a href={U_TOPIC} target=_blank>{TOPIC_TITLE}</a>" на сайте <a href=http://aeclub.net.ua target=_blank>{SITENAME}</a>.<br>
<br><br>
Текст ответа:<br><hr>
<div class=s>{MESSAGE}</div><hr><br><br>
Если вы больше не хотите следить за темой, то щёлкните по ссылке "<a href={U_STOP_WATCHING_TOPIC} target=_blank>перестать следить за темой</a>" внизу страницы. <br><br>

С уважением, администрация форума <a href=http://aeclub.net.ua target=_blank>{SITENAME}</a>.
</body></html>


но в итоге BBCode не переводится в автомате в HTML, а хотелось бы...
не подскажете как это реализовать?

вот как выглядит полученное письмо:

Текст ответа:

--------------------------------------------------------------------------------

[b:9ed140929a]BioByte[/b:9ed140929a] Проделывал такое давно, но хорошо помню сколько гимороя это стоило. В уроке написано все правильно. Читай внимательно последний абзац
[quote:9ed140929a]И в заключении еще один совет от автора руководства: На этапе настройки число ежесекундно генерируемых частиц установите поменьше. Для настройки вам должно хватить и меньшего количества, а уж на времени просчета это отразится в лучшую сторону. [/quote:9ed140929a]

AEC
 

Сообщение Xpert » 04.11.2004 13:53

AEC
Необходимо применять функцию bbencode_second_pass из файла includes/bbcode.php для корректного преобразования bbcode в html-код.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 04.11.2004 15:03

Xpert, "помедленнее, пожалуйста, я записываю"
я не знаю как это осуществить. памагиииите!

AEC
 

Сообщение Xpert » 04.11.2004 15:30

AEC
Покажите, как вы формируете {MESSAGE}.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 04.11.2004 15:39

Xpert, чтобы я долго не ковырялся в файлах, напомните мне, пожалуйста, в каком файле формируется {MESSAGE}?

AEC
 

Сообщение Xpert » 04.11.2004 19:08

AEC
function user_notification (functions_post.php)
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 04.11.2004 19:14

function user_notification($mode, &$post_data, &$topic_title, &$post_message, &$forum_id, &$topic_id, &$post_id, &$notify_user)
{
	global $board_config, $lang, $db, $phpbb_root_path, $phpEx;
	global $userdata, $user_ip;

	$current_time = time();

	if ($mode == 'delete')
	{
		$delete_sql = (!$post_data['first_post'] && !$post_data['last_post']) ? " AND user_id = " . $userdata['user_id'] : '';
		$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . " WHERE topic_id = $topic_id" . $delete_sql;
		if (!$db->sql_query($sql))
		{
			message_die(GENERAL_ERROR, 'Could not change topic notify data', '', __LINE__, __FILE__, $sql);
		}
	}
	else 
	{
		if ($mode == 'reply')
		{
			$sql = "SELECT ban_userid 
				FROM " . BANLIST_TABLE;
			if (!($result = $db->sql_query($sql)))
			{
				message_die(GENERAL_ERROR, 'Could not obtain banlist', '', __LINE__, __FILE__, $sql);
			}

			$user_id_sql = '';
			while ($row = $db->sql_fetchrow($result))
			{
				if (isset($row['ban_userid']) && !empty($row['ban_userid']))
				{
					$user_id_sql .= ', ' . $row['ban_userid'];
				}
			}

			$sql = "SELECT u.user_id, u.user_email, u.user_lang, u.username 
				FROM " . TOPICS_WATCH_TABLE . " tw, " . USERS_TABLE . " u 
				WHERE tw.topic_id = $topic_id 
					AND tw.user_id NOT IN (" . $userdata['user_id'] . ", " . ANONYMOUS . $user_id_sql . ") 
					AND u.user_id = tw.user_id";
			if (!($result = $db->sql_query($sql)))
			{
				message_die(GENERAL_ERROR, 'Could not obtain list of topic watchers', '', __LINE__, __FILE__, $sql);
			}

			$update_watched_sql = '';
			$bcc_list_ary = array();
			
			if ($row = $db->sql_fetchrow($result))
			{
				$username=$row['username'];
				// Sixty second limit
				@set_time_limit(60);

				do
				{
					if ($row['user_email'] != '')
					{
						$bcc_list_ary[$row['user_lang']][] = $row['user_email'];
					}
					$update_watched_sql .= ($update_watched_sql != '') ? ', ' . $row['user_id'] : $row['user_id'];
				}
				while ($row = $db->sql_fetchrow($result));

				//
				// Let's do some checking to make sure that mass mail functions
				// are working in win32 versions of php.
				//
				if (preg_match('/[c-z]:\\\.*/i', getenv('PATH')) && !$board_config['smtp_delivery'])
				{
					$ini_val = (@phpversion() >= '4.0.0') ? 'ini_get' : 'get_cfg_var';

					// We are running on windows, force delivery to use our smtp functions
					// since php's are broken by default
					$board_config['smtp_delivery'] = 1;
					$board_config['smtp_host'] = @$ini_val('SMTP');
				}

				if (sizeof($bcc_list_ary))
				{
					include($phpbb_root_path . 'includes/emailer.'.$phpEx);
					$emailer = new emailer($board_config['smtp_delivery']);

					$script_name = preg_replace('/^\/?(.*?)\/?$/', '\1', trim($board_config['script_path']));
					$script_name = ($script_name != '') ? $script_name . '/viewtopic.'.$phpEx : 'viewtopic.'.$phpEx;
					$server_name = trim($board_config['server_name']);
					$server_protocol = ($board_config['cookie_secure']) ? 'https://' : 'http://';
					$server_port = ($board_config['server_port'] <> 80) ? ':' . trim($board_config['server_port']) . '/' : '/';

					$orig_word = array();
					$replacement_word = array();
					obtain_word_list($orig_word, $replacement_word);

					$emailer->from($board_config['board_email']);
					$emailer->replyto($board_config['board_email']);

					$topic_title = (count($orig_word)) ? preg_replace($orig_word, $replacement_word, unprepare_message($topic_title)) : unprepare_message($topic_title);

					@reset($bcc_list_ary);
					while (list($user_lang, $bcc_list) = each($bcc_list_ary))
					{
						$emailer->use_template('topic_notify', $user_lang);
		
						for ($i = 0; $i < count($bcc_list); $i++)
						{
							$emailer->bcc($bcc_list[$i]);
						}

						// The Topic_reply_notification lang string below will be used
						// if for some reason the mail template subject cannot be read 
						// ... note it will not necessarily be in the posters own language!
						$emailer->set_subject($lang['Topic_reply_notification']); 
						
						// This is a nasty kludge to remove the username var ... till (if?)
						// translators update their templates
						// $emailer->msg = preg_replace('#[ ]?{USERNAME}#', '', $emailer->msg);

						$emailer->assign_vars(array(
							'EMAIL_SIG' => (!empty($board_config['board_email_sig'])) ? str_replace('<br />', "\n", "-- \n" . $board_config['board_email_sig']) : '',
							'SITENAME' => $board_config['sitename'],
							'USERNAME'=>$username,
							'TOPIC_TITLE' => $topic_title, 
							'POSTER_NAME' => $userdata['username'],
							'MESSAGE' => nl2br($post_message),
							'U_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_POST_URL . "=$post_id#$post_id",
							'U_STOP_WATCHING_TOPIC' => $server_protocol . $server_name . $server_port . $script_name . '?' . POST_TOPIC_URL . "=$topic_id&unwatch=topic")
						);

						$emailer->send("text/html");
						$emailer->reset();
					}
				}
			}
			$db->sql_freeresult($result);

			if ($update_watched_sql != '')
			{
				$sql = "UPDATE " . TOPICS_WATCH_TABLE . "
					SET notify_status = " . TOPIC_WATCH_NOTIFIED . "
					WHERE topic_id = $topic_id
						AND user_id IN ($update_watched_sql)";
				$db->sql_query($sql);
			}
		}

		$sql = "SELECT topic_id 
			FROM " . TOPICS_WATCH_TABLE . "
			WHERE topic_id = $topic_id
				AND user_id = " . $userdata['user_id'];
		if (!($result = $db->sql_query($sql)))
		{
			message_die(GENERAL_ERROR, 'Could not obtain topic watch information', '', __LINE__, __FILE__, $sql);
		}

		$row = $db->sql_fetchrow($result);

		if (!$notify_user && !empty($row['topic_id']))
		{
			$sql = "DELETE FROM " . TOPICS_WATCH_TABLE . "
				WHERE topic_id = $topic_id
					AND user_id = " . $userdata['user_id'];
			if (!$db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not delete topic watch information', '', __LINE__, __FILE__, $sql);
			}
		}
		else if ($notify_user && empty($row['topic_id']))
		{
			$sql = "INSERT INTO " . TOPICS_WATCH_TABLE . " (user_id, topic_id, notify_status)
				VALUES (" . $userdata['user_id'] . ", $topic_id, 0)";
			if (!$db->sql_query($sql))
			{
				message_die(GENERAL_ERROR, 'Could not insert topic watch information', '', __LINE__, __FILE__, $sql);
			}
		}
	}
}

AEC
 

Сообщение Xpert » 04.11.2004 19:57

AEC
Пробуй:
[open]
includes/functions_post.php

[find]
function user_notification($mode, &$post_data, &$topic_title, &$forum_id, &$topic_id, &$post_id, &$notify_user)

[in-line, find]
, &$post_data

[in-line, after add]
, &$bbcode_uid

[find]
'MESSAGE' => nl2br($post_message),

[replace with]
'MESSAGE' => nl2br(bbencode_second_pass($post_message, $bbcode_uid)),

[open]
posting.php

[find]
user_notification($mode, $post_data, $post_info['topic_title'], $forum_id, $topic_id, $post_id, $notify_user);

[in-line, find]
, $post_data

[in-line, after add]
, $bbcode_uid
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 04.11.2004 20:24

вот такая вот ошибка теперь при создании сообщений на форуме...

Warning: Missing argument 9 for user_notification() in /usr/home/aeclub/www/www.aeclub.net.ua/includes/functions_post.php on line 651

AEC
 

Сообщение Xpert » 04.11.2004 20:49

AEC
А что у тебя в 651-й и близлежащих строках?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 05.11.2004 14:24

xpert, я решил выложить тебе полностью файл functions_post.php

AEC
 

Сообщение Xpert » 05.11.2004 15:23

Так этот файл без описанных мной модификаций... он глючит?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 05.11.2004 15:25

да, это без модификаций. он не глючит, он как раз работает :P

AEC
 

Сообщение Xpert » 05.11.2004 15:35

Мне пожалуйста комбинацию глючных functions_post.php и posting.php :)
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
Xpert
phpBB Guru
phpBB Guru
 
Сообщения: 5492
Зарегистрирован: 13.03.2004 22:27
Откуда: msk.ru
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Сообщение AEC » 05.11.2004 15:58

пожалуйста

Добавлено спустя 14 минут 49 секунд:

Xpert, проверил снова, работает! извини, что морочу голову.

однако есть мелкие неудобства. может сможешь их устранить...

текст отмеченный как цитата имеет большой размер шрифта (на форуме обычно наоборот), что делает его более выразительным чем основной текст.

спасибо за код

AEC
 

След.

Вернуться в Для авторов (phpBB 2.0.x)

 

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы