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

Автоматическая отправка ЛС скриптом

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Автоматическая отправка ЛС скриптом

Сообщение Garret_Dark »

Всем доброго времени!

Возник вопрос по сабжу. На phpbb.com и здесь не нашел нормального решения.

Суть такова, есть мод (допиливаю в данный момент), хочется прикрутить уведомление отправляющееся через ЛС пользователю.
Посмотрел в БД, на то как выглядят новые ЛСки, в принципе ничего сложного, на первый взгляд. В результате добавляем в таблицу phpbb_privmsgs новую строку содержащую уведомление (Все необходимые поля заполняем нужными данными), потом в таблице phpbb_users обновляем кол-во новых и непрочитанных ЛС на +1 (Прибавляем единицу).
Так вот, все вроде работает (ЛС появляется в папке, как и положено, все манипуляции с ним работают), но вот всплывающего окна при получении нового ЛС таким образом, нет.
На локалке было, через раз, но было (Почему через раз, я так и не понял)
На хосте же никогда не появляется окошко, да и кол-во новых сообщений в шапке остается "Новых ЛС: 0".

Так собственно, разве окошко не появляется после того как я добавил 1 к значению столбцов user_new_privmsg и user_unread_privmsg?


Возможно есть где-то мануал по этому поводу (пусть и на англ.) ?
Или есть мод где можно хорошо просмотреть рабочий пример кода?

Заранее спасибо :)
Аватара пользователя
HAMMER663
Former team member
Сообщения: 2032
Стаж: 13 лет 11 месяцев
Откуда: Зеленоград
Благодарил (а): 77 раз
Поблагодарили: 249 раз
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение HAMMER663 »

Garret_Dark в моде Палыча реализована отправка ЛС при изменении списка благодарностей за сообщения
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Sheer »

Garret_Dark
Используй стандартную функцию submit_pm()
Пример

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

            include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
            include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);
$message = 'Какой-то там текст :)';
            $pm_data = array(
                'from_user_id'            => $user->data['user_id'],
                'from_user_ip'            => $user->ip,
                'from_username'            => $user->data['username'],
                'enable_sig'            => false,
                'enable_bbcode'            => true,
                'enable_smilies'        => true,
                'enable_urls'            => false,
                'icon_id'                => 0,
                'bbcode_bitfield'        => $message_parser->bbcode_bitfield,
                'bbcode_uid'            => $message_parser->bbcode_uid,
                'message'                => $message,
                'address_list'            => array('u' => array($uid => 'to')),
            );

            submit_pm('post', $user->lang['INVITE_POST'], $pm_data, false); 
Вместо $user->lang['INVITE_POST'] какой-то свой текст - сабж, то бишь тема ЛС-ки

Добавлено спустя 14 минут 51 секунду:
А... и к стати.
Garret_Dark писал(а):В результате добавляем в таблицу phpbb_privmsgs новую строку содерж
Там не одна таблица использутся, а несколько, еще
phpbb_privmsgs_folder
phpbb_privmsgs_rules
phpbb_privmsgs_to
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Garret_Dark »

Sheer, спасибо, только не совсем понял куда и как подставляется ID получателя?
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Sheer »

Garret_Dark писал(а):куда и как подставляется ID получателя?

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

'address_list'            => array('u' => array($uid => 'to')) 
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Garret_Dark »

Sheer, я понял, что туда, но вопрос "как?"... Если не сложно, подскажи. Я пробовал по разному подставлять ID, чтото не получилось, все выдает trigger_error NO_RECEPIENT (Нет получателя)
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение MIT »

В переменную $uid :roll:
Аватара пользователя
Garret_Dark
phpBB 2.0.16
Сообщения: 1096
Стаж: 15 лет 2 месяца
Откуда: root/world/russia/
Благодарил (а): 126 раз
Поблагодарили: 206 раз
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Garret_Dark »

MIT, спасибо. А то я перемудрил))

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

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

            include_once($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
            include_once($phpbb_root_path . 'includes/message_parser.' . $phpEx);

            $message = 'Текст сообщения';
            $uid = 'recepient_id';

            $pm_data = array(
                'from_user_id'            => $user->data['user_id'],
                'from_user_ip'            => $user->ip,
                'from_username'            => $user->data['username'],
                'enable_sig'            => false,
                'enable_bbcode'            => true,
                'enable_smilies'        => true,
                'enable_urls'            => false,
                'icon_id'                => 0,
                'bbcode_bitfield'        => '',
                'bbcode_uid'            => '',
                'message'                => $message,
                'address_list'            => array('u' => array($uid => 'to')),
            );

            submit_pm('post', 'Тема сообщения', $pm_data, false); 
demon201984
phpBB 1.4.4
Сообщения: 105
Стаж: 13 лет 1 месяц
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Автоматическая отправка ЛС скриптом

Сообщение demon201984 »

Никак не пойму как в перменную $uid можно передать сразу список id юзеров, чтобы ушло одно сообщение на определенный список пользователей.

У меня получилось лишь разослать каждому юзеру свое личное сообщение - но для этого приходится в цикле запускать функцию отедльно по каждому юзеру.
И еще отправленное сообщение появляется в личных сообщениях лишь у получателя, а у отправителя оно в Отправленных не отражается, так как в таблицу phpbb_privmsgs_to соответствующая запись по отправителю не вставляется.

Подскажите, пожалуйста, если знаете как можно решить данные моменты.
demon201984
phpBB 1.4.4
Сообщения: 105
Стаж: 13 лет 1 месяц
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Автоматическая отправка ЛС скриптом

Сообщение demon201984 »

Может кто в курсе как распарсить созданное подобным образом ЛС. Самое главное для меня чтобы ссылка, отправленная подобным образом отображалась в виде ссылки, а не просто в виде текста.
Пробовал указать тут:

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

'enable_urls'			=> false,
вместо false true не помогло
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Sheer »

demon201984 писал(а):И еще отправленное сообщение появляется в личных сообщениях лишь у получателя, а у отправителя оно в Отправленных не отражается,
Заменить тут

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

submit_pm('post', 'Тема сообщения', $pm_data, false); 
false на true

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

submit_pm('post', 'Тема сообщения', $pm_data, true); 
demon201984 писал(а):как в перменную $uid можно передать сразу список id
В цикле заполнять массив $uid или

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

$uid = array(2, 208, 234, 678);
demon201984 писал(а): чтобы ссылка, отправленная подобным образом отображалась в виде ссылки
А как ты вставляешь ее в тело сообщения?
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
demon201984
phpBB 1.4.4
Сообщения: 105
Стаж: 13 лет 1 месяц
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Автоматическая отправка ЛС скриптом

Сообщение demon201984 »

заменить false на true

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

submit_pm('post', 'Тема сообщения', $pm_data, true); 
Спасибо большущее, а ларчик-то оказывается просто открывался)

Sheer писал(а):А как ты вставляешь ее в тело сообщения?
Методом POST данные передаются скрипту обработчику. Вставляю просто к примеру так: http://yandex.ru
Пробовал сразу передавать данные из формы в переменную $message POSTом

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

'message'				=> $message,
Пробовал, но совершенно не понимая, сделать так как это вроде реализовано в стандартных функциях phpbb:
- вставляю в скрипте обработчике код:

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

$message_parser->message = $row['draft_message'];
$message_parser->message = utf8_normalize_nfc(request_var('message', '', true));
- после передаю в скрипт рассылки, как:

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

'message'				=> $message_parser->message,
При этом в обоих варинтах ссылка отправляется лишь в виде текста, не преобразуясь в ссылку. Посмотрел в базе - при отпрвке ЛС из обычной стандартной формы она в БД выглядет, как

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

<!-- m --><a class="postlink" href="http://yandex.ru">http://yandex.ru</a><!-- m -->
а при отправке скриптом, даже при включенном параметре

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

	'enable_urls'			=> true,
передается в базу лишь в виде простого текста.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Sheer »

Ну потому что функция message_parser() (вернее вызываемая ею bbcode_parse_code() ) вырезает html-сущности

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

437                  $code = htmlspecialchars_decode($code);
Ссылку надо обрамлять bb-кодом [url]
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
demon201984
phpBB 1.4.4
Сообщения: 105
Стаж: 13 лет 1 месяц
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Автоматическая отправка ЛС скриптом

Сообщение demon201984 »

Да я бы с удовольствием включил поддержку BBCode, но вот тоже не знаю как это сделать. А так я хотел использовать автозамену ссылок, которую делает phpbb сам, т.е. без обрамления тегами (ввел корректно ссылку и все система сама ее воспринимает как ссылку).

Если обрамить ссылку BBCode, то она у меня передается так как есть:

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

[url]http://yandex.ru[/url]
а должна бы преобразоваться в [url:3738kthh]http&#58;//yandex&#46;ru[/url:3738kthh]
и при этом в БД должны еще заполнится поля:
- bbcode_bitfield - у меня заполнилось значением EA== (вроде как это значение постоянно одно и тоже при использовании тега url)
- bbcode_uid - у меня заполнилось значением 3738kthh (значение всегда разное)

Я так понимаю данные должны передаваться этими полями, но что там указывать не совсем понятно.

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

'bbcode_bitfield'		=> '',
'bbcode_uid'			=> '',
Последний раз редактировалось demon201984 09.01.2013 0:04, всего редактировалось 1 раз.
Аватара пользователя
Sheer
Former team member
Сообщения: 12113
Стаж: 17 лет 1 месяц
Откуда: Калининград не Кенигсберг
Благодарил (а): 54 раза
Поблагодарили: 2752 раза
Контактная информация:

Re: Автоматическая отправка ЛС скриптом

Сообщение Sheer »

Текст сообщения нужно предварительно подготовить, примерно так

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

$text = 'какой-то[url]http://www.fff.com[/url]';
generate_text_for_storage($text, $uid, 'QA==', false, true, true, true);
и

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

'message'				=> $message_parser->message,
уже не надо.
Изображение
Общие ошибки новичков (07.11.2005) & Как задавать вопросы
Мини FAQ
Если ничто другое не помогает, прочтите, наконец, инструкцию!
"Никакая инструкция не может перечислить всех обязанностей должностного лица, предусмотреть все отдельные случаи и дать вперёд соответствующие указания, а поэтому господа инженеры должны проявить инициативу и, руководствуясь знаниями своей специальности и пользой дела, принять все усилия для оправдания своего назначения".
Циркуляр Морского технического комитета №15 от 29.11.1910 г.
Закрыто

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