Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы » Как сделать уведомление автора о публикации новости?

Как сделать уведомление автора о публикации новости?


     21.01.2020    Общие вопросы, Общие вопросы по PHP, Модули    769

вопрос
Здравствуйте. Как можно настроить отправку приватного сообщения автору новости после проверки модератором и публикации.
Сообщение такого вида "Ваша новость проверена и была опубликована"
Сообщение может присылаться от одного пользователя бота, например, или с выбранного id.

Ответил: dj-avtosh


engine/inc/editnews.php

Найти:

if( !$approve AND $approve != $item_db[3] AND $mail_send AND $config['mail_news'] ) {


Выше вставить:

if( $approve AND $approve != $item_db[3] ) {

$time = time();
$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$_POST['new_author']}'" );
$db->query( "INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder, sendid) values 
('Новость опубликована', 
'Ваша новость была проверена и успешно опубликована', 
'{$user_row['user_id']}', 
'Admin', 
'{$time}', 
'0', 
'inbox', 
'0')" );

$newpmid = $db->insert_id();
		
$db->query( "UPDATE " . USERPREFIX . "_users SET pm_all=pm_all+1, pm_unread=pm_unread+1  WHERE user_id='{$user_row['user_id']}'" );

}




engine/inc/massactions.php

Найти:

$row = $db->super_query( "SELECT xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );


Заменить на:

$row = $db->super_query( "SELECT autor, xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );

$time = time();
$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$row['autor']}'" );

$db->query( "INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder, sendid) values 
('Новость опубликована', 
'Ваша новость была проверена и успешно опубликована', 
'{$user_row['user_id']}', 
'Admin', 
'{$time}', 
'0', 
'inbox', 
'0')" );

$newpmid = $db->insert_id();
		
$db->query( "UPDATE " . USERPREFIX . "_users SET pm_all=pm_all+1, pm_unread=pm_unread+1  WHERE user_id='{$user_row['user_id']}'" );

23 комментария

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 12:05 -

Здравствуйте, в админке новости модерируются у Вас?

Код из engine/ajax/pm.php на отправку сообщения:

$db->query( "INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder, sendid) values ('{$subj}', '{$comments}', '{$row['user_id']}', '{$member_id['name']}', '{$time}', '0', 'inbox', '{$send_id}')" );

$newpmid = $db->insert_id();
		
$db->query( "UPDATE " . USERPREFIX . "_users SET pm_all=pm_all+1, pm_unread=pm_unread+1  WHERE user_id='{$row['user_id']}'" );


В Вашем случае:
$subj = "Тема"; 
$comments = "Тело";
$row['user_id'] = "1"; // id кому сообщение
$member_id['name'] = "имя"; // имя от кого
$time = time();
$send_id = 0; // 0, так как не копируем в исходящие (иначе нужно id записи AUTO_INCREMENT копии)


Напишите, если что-то непонятно.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 21 января 2020 12:34 -

Да, новости проходят модерацию в админке. После чего пользователю должно прийти сообщение об успешной проверке. Если я в $member_id['name'] ничего не внесу он получит имя автора новости или имя от кого отправляется сообщение?

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 12:36 -

Могут быть проблемы, нужно указать существующего, допустим:

'{$member_id['name']}'


заменить на

'SMSBOT'

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 21 января 2020 12:44 -

Да, вы правы, это решить достаточно не сложно, как поступить со строчкой $row['user_id'] = "1"; насколько я понимаю автоматически она автора не подтянет, а авторы ведь каждый раз будут разные.
В engine/inc/editnews.php использовать $author
В engine/inc/massactions.php использовать $new_author или $row['name']?

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 12:52 -



$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$author}'" );

// тут будет id юзера $user_row['user_id'] 



что касается massactions, там надо получать автора каждой новости.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 21 января 2020 12:53 -

Спасибо. Будут тестировать

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 14:20 -

отпишитесь по итогу, пожалуйста.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 12:56 -

по поводу massaction

$row = $db->super_query( "SELECT xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );


заменить на

$row = $db->super_query( "SELECT autor, xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );


и ниже получить id автора так

$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$row['autor']}'" );

// тут будет id юзера $user_row['user_id'] 


https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 21 января 2020 12:12 -

По поводу одобрения новости в админке для массового одобрения вроде тут код engine/inc/massactions.php

if( $action == "mass_approve" ) {
	$field = "approve";
	$value = 1;
	$k_mass = true;
	$title = $lang['mass_edit_app_tl'];
	$lang['mass_confirm'] = $lang['mass_edit_app_fr1'];



для сингл-обновления вроде тут engine/inc/editnews.php:

найти
if( !$approve AND $approve != $item_db[3] AND $mail_send AND $config['mail_news'] ) {


выше вставить:

if( $approve AND $approve != $item_db[3] ) {

// Тут код для отправки ЛС

}


Не тестил

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 21 января 2020 22:00 -

Что вышло по итогу:

engine/inc/editnews.php
Найти
if( !$approve AND $approve != $item_db[3] AND $mail_send AND $config['mail_news'] ) {

Добавить выше
if( $approve AND $approve != $item_db[3] ) {
$time = time();
$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$_POST['new_author']}'" );
$db->query( "INSERT INTO " . USERPREFIX . "_pm (subj, text, user, user_from, date, pm_read, folder, sendid) values 
('Новость опубликована', 
'Ваша новость была проверена и успешно опубликована', 
'{$user_row['user_id']}', 
'Admin', 
'{$time}', 
'0', 
'inbox', 
'0')" );

$newpmid = $db->insert_id();
		
$db->query( "UPDATE " . USERPREFIX . "_users SET pm_all=pm_all+1, pm_unread=pm_unread+1  WHERE user_id='{$user_row['user_id']}'" );
}


Здесь пришлось изменить
$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$author}'" );
на
$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$_POST['new_author']}'" );
Так как не получал id автора.

С massactions возникли сложности, сообщение не отправляется, дело всё так же в id пользователей, так как при замене $row['user_id'] на id пользователя, сообщение успешно приходит.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 00:39 -

про massaction я не писал $row['user_id'], я писал $user_row['user_id'].

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:27 -

коммент ниже не помог? какая версия dle?

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:32 -

по поводу massaction

$row = $db->super_query( "SELECT xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );



заменить на

$row = $db->super_query( "SELECT autor, xfields FROM " . PREFIX . "_post WHERE id = '{$id}'" );



НИЖЕ вставить (именно это!):

$user_row = $db->super_query( "SELECT user_id FROM " . USERPREFIX . "_users WHERE name = '{$row['autor']}'" );


// тут будет id юзера $user_row['user_id']

ниже вставить код отправки ЛС с использованием переменной (именно так, без отсебятины!)

 $user_row['user_id'] 

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 22 января 2020 08:36 -


Я уже так делал. Не работает он должным образом

Nesterovich2797
Юзер

Nesterovich2797 - 22 января 2020 08:37 -


И эта часть в таком виде не работает

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:38 -

не надо вставлять туда где это не написано, от сегодня пост читатйте по массэкшн и делайте так.

Что касается editnews, там да, нужен $_POST...

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 22 января 2020 08:47 -

Да. massaction именно так и заработал. Спасибо. Позже скину код в ответ.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:54 -

старайтесь вчитываться в ответ, если сидите копируете просто, не думая.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 22 января 2020 09:03 -

Если бы сидел просто копировал, я бы так и бился лбом о стену с вопросом, почему не отправлялось в первом случае.
А по поводу второго, меня смутил комментарий #74557, в котором вы указали код для massaction, который, как оказалось, потом нигде не используется. Я подумал, что это одно из условий при котором новостям присваивается approve = 1 и отправка сообщения должна происходить именно там.
Но это ладно, главное что вопрос решился. Спасибо ещё раз.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:42 -

Я не думал, что вы прям в тупую будете копировать, удалите блок с if( $action == "mass_approve" ) {
и вставьте из сегодняшнего поста все друг под друга.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 00:37 -

Что-то неправильно делаете точно, должно работать.

{$_POST['new_author']} - так нельзя оставлять, нужно обернуть для защиты от sql-инъекций.

https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Nesterovich2797
Юзер

Nesterovich2797 - 22 января 2020 08:31 -

Нет. Так как вы описали для engine/inc/editnews.php. Такая конструкция не работает. Моя работает, но как я понял, она не совсем верна.
Для massaction так же не работает. Вероятно я вчера ошибся при копировании и не правильно написал $row['user_id'] вместо $user_row['user_id'].
Версия DLE 13.3. Могу скинуть плагин, который я собрал. Но данный сайт это не позволяет.

dj-avtosh
PHP-developer

dj-avtosh - 22 января 2020 08:39 -


https://elkhan.ru
По заказам пишем сюда: @Rud00y

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.):
В телегу писать сразу задачу и бюджет.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх