Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Использование базы данных MySQL в phpBB, как привильно ?

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

Использование базы данных MySQL в phpBB, как привильно ?

Сообщение msgipss »

Дописываю возможность дублирования сообщений на VM, нужно взять информацию о пользователе непосредственно из базы MySQL. Пробовал напрямую соединяться и работать - все нормально, но вижу что все модули работают через какой то класс, а как не пойму - помогите сделать правильно по шагам..
Заранее благодарен :oops:
msgipss

Сообщение msgipss »

Если кому интересно, несколько строчек кода будут дублировать все ваши сообщения помимо email еще и на VM. Правда веб сервер при этом должен на ьшсrosoft'е крутиться, хотя можно и под линуксом тока утилиту посылки сообщения надо другую.
В метод RESET объекта emailer в модуле emailer вставляем перед кодом метода, следующее:

Код: Выделить всё

   	global $db;
		$sql = "select user_msnm from phpbb_users where user_email=".chr(39).$this->addresses['to'].chr(39);
   $vm_host_name = "";
   if( !$result = $db->sql_query($sql))
	{
		message_die(GENERAL_ERROR, 'Не могу считать для VM имя машины', '', __LINE__, __FILE__, $sql);
	}
	$row = $db->sql_fetchrow($result);
	$vm_host_name = $row['user_msnm'];


	if (strlen(trim($vm_host_name))>0)	{
		$msg_new = ereg_replace(chr(10),' ',$this->msg);	// удаляем все переводы каретки #10
		$msg_new = ereg_replace('"','`',$msg_new);	// удаляем все ковычки "
		shell_exec('send.exe /i "Сообщения форума АСУТП" /n "Форум по АСУТП" '.$vm_host_name.' "'.$msg_new.'"');	// посылаем сообщение
	}
Далее в этой же папке я положил сам send.exe и одну библиотеку dll, плюс нужно иметь установленный VM, и запускать apache от имени пользователя под которым VM установлен. Если использовать другую утилиту для посылки сообщения можно избавиться от последнего гемора, я просто не нашел такой утилиты.. :( Если кто найдет скажите на msgipss@land.ru особенно если она под linux

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

А еще забыл, я использовал переменную номера под msnm для хранения имени компьютера, поэтому надо изменить еще шапку в анкете, и соответственно при заполнении данного поля сообщения будут дублироваться именно на указанный hostname, новый параметр вводить не стал - не программист я :oops:
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Зарегистрирован: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

У меня только одно небольшое замечание:

Код: Выделить всё

$sql = "select user_msnm from phpbb_users where user_email=".chr(39).$this->addresses['to'].chr(39);
Я бы использовал константу USERS_TABLE, она объявляется среди файлов, подключаемых из common.php и учитывает префикс таблиц в БД.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
crash
Former team member
Сообщения: 6517
Зарегистрирован: 19 лет 9 месяцев
Откуда: Бердск

Сообщение crash »

msgipss
для посылки сообщений из под линукса помоему нужна samba
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
msgipss

Сообщение msgipss »

Спасибо Xpert, поправлю...
Если надобность в данном форуме не отпадет, то перенесу на линукс, сенькс и насчет самбы - проверю 8)
msgipss

Сообщение msgipss »

И последние исправления, вернее переработка, весь код что писали выше отменяем, пишем следующее.
Перед методом RESET пишем следующее:
function sendvm($emailaddr) // посылка дубля сообщения через Vypress Messenger
{
global $db;

$sql = "select user_msnm from ".USERS_TABLE." where user_email=".chr(39).$emailaddr.chr(39);
$vm_host_name = "";
if( !$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Не могу считать для VM имя машины', '', __LINE__, __FILE__, $sql);
}
$row = $db->sql_fetchrow($result);
$vm_host_name = $row['user_msnm'];
if (strlen(trim($vm_host_name))>0) {
$msg_new = ereg_replace(chr(10),' ',$this->msg); // заменяем все переводы каретки #10 на пробелы
$msg_new = ereg_replace('"','`',$msg_new); // заменяем все ковычки " на '
shell_exec('send.exe /i "Сообщения форума АСУТП" /n "Форум по АСУТП" '.$vm_host_name.' "'.$msg_new.'"'); // посылаем сообщение
}
}

Далее делаем вызов нового метода из метода SEND:
Ищем
if ( $this->use_smtp )
{
if ( !defined('SMTP_INCLUDED') )
{
include($phpbb_root_path . 'includes/smtp.' . $phpEx);
}

$result = smtpmail($to, $this->subject, $this->msg, $this->extra_headers);
после вставляем- $this->sendvm($this->reply_to);
Далее ищем
else
{
$empty_to_header = ($to == '') ? TRUE : FALSE;
$to = ($to == '') ? (($board_config['sendmail_fix']) ? ' ' : 'Undisclosed-recipients:;') : $to;

$result = @mail($to, $this->subject, preg_replace("#(?<!\r)\n#s", "\n", $this->msg), $this->extra_headers);
после вставляем- $this->sendvm($this->reply_to); - теперь работает нормально...

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