Домой Каталог: Дополнения WP-Recall Rcl Chat Разблокировка юзера (блэклист)
10ответ(ов) в теме
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
1
14:36

Доброго времени суток.

В очередной раз требуется помощь. 🙂

Суть такова:
При добавлении оппонента в блэклист отправлять ему сообщения в чате возможно. Но сам оппонент их прочесть не может. 🙁
Подскажите, к чему прицепится для автоматической разблокировки оппонента при отправке ему сообщения?

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
2
14:44

пробуйте прицепиться к экшну rcl_chat_add_message он принимает массив данных отправленного сообщения
В этом хуке проверьте значение пользовательского поля
$user_block = get_user_meta($user_1,'rcl_black_list:'.$user_2);
тут проверяется заблокирован ли пользователь $user_2 у пользователя $user_1, если да, то снимаем блок:
delete_user_meta($user_1,'rcl_black_list:'.$user_2);

0
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
3
11:34

В очередной раз огромное мерси 🙂

Итак, готовое решение.
В файле function.php вашей темы добавляем функцию:

/**
 * [chat_unblock     FRONT-OFFICE: Unblock private user chat]
 * @return [none]    [No return]
 */
function chat_unblock( $user_ID ) {

    $user_1 = $user_ID['user_id']; // ID current user

    /* Если надо блокировать/разблокировать по ролям, раскомментировать... */
    // $user_info = get_userdata( $user_1 );
    // $role = $user_info->roles[0];
    // $user_info = get_userdata( $user_id ); // user role
    // $role = $user_info->roles[0];
    
    // if ( $role == 'author' ) {
    //    return;
    // }
    /* ...строки */

    $user_2 = $user_ID['private_key']; // ID opponent
    $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false)
    if ( $user_block ) {
        delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 );
    }
}
add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );

...finita la commedia 🙂

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
4
11:54

функция принимает аргумент со странным названием $user_ID, может сбить с толку, лучше использовать $message

0
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
5
12:02

Андрей CS сказал(а)

функция принимает аргумент со странным названием $user_ID, может сбить с толку, лучше использовать $message

Полность согласен.

Обновленный код:

/**
 * [amconsoft_chat_unblock     FRONT-OFFICE: Unblock private user chat]
 * @param  [array] $message    [Message data]
 * @return [none]              [No return]
 */
function amconsoft_chat_unblock( $message ) {

    $user_1 = $message['user_id']; // ID current user

    /* Если надо блокировать/разблокировать по ролям, раскомментировать... */
    // $user_info = get_userdata( $user_1 );
    // $role = $user_info->roles[0];
    // $user_info = get_userdata( $user_id ); // user role
    // $role = $user_info->roles[0];
    
    // if ( $role == 'author' ) {
    //    return;
    // }
    /* ...строки */

    $user_2 = $message['private_key']; // ID opponent
    $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false)
    if ( $user_block ) {
        delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 );
    }
}
add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
6
12:04

Думаю, данная функция весьма полезна и логична, может рассмотреть возможность ее внедрения в ядро дополнения?

0
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
7
12:09

Андрей, вы автор - вам и решать 🙂
Хотя да, функционал вполне логичен.
Кстати, необходимо будет еще решить вопрос со сменой статуса на самой кнопке блокировки 🙂
И было б не плохо менять у нее кроме самого текста еще и класс для кастомизации.

1
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
8
12:13

... да что-ж со мной сегодня, сплошные ошибки в коде 🙁

Финальная версия кода функции:

/**
 * [chat_unblock     FRONT-OFFICE: Unblock private user chat]
 * @param  [array] $message    [Message data]
 * @return [none]              [No return]
 */
function chat_unblock( $message ) {

    $user_1 = $message['user_id']; // ID current user

    /* Если надо блокировать/разблокировать по ролям, раскомментировать... */
    // $user_info = get_userdata( $user_1 );
    // $role = $user_info->roles[0];
    
    // if ( $role == 'author' ) { // указать роль, которая не может разблокировать чат
    //    return;
    // }
    /* ...строки */

    $user_2 = $message['private_key']; // ID opponent
    $user_block = get_user_meta( $user_1, 'rcl_black_list:' . $user_2 ); // blocked/unblocked opponent status (true/false)
    if ( $user_block ) {
        delete_user_meta( $user_1, 'rcl_black_list:' . $user_2 );
    }
}
add_action( 'rcl_chat_add_message', 'chat_unblock', 1 );

0
Андрей CS
не в сети 3 дня
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16936
9
12:40

насчет смены класса я посмотрю, а вот вносить изменения в код элементов на странице можно используя новый функционал хуков в js, при удачной отправке сообщения в чат срабатывает событие "rcl_chat_add_message", оно принимает объект данных о сообщении и текущем чате, при его срабатывании можно проверять статус кнопки блокирования пользователя и вносить изменения в эту кнопку при совпадении определенных условий. Пробуйте.

0
Rob Roy
не в сети 7 лет
На сайте с 15.07.2016
Участник
10
12:59

Да у меня кастомная кнопка и я решил простой проверкой на содержание текста на кнопке, значении textarea и keyup / click 🙂

0
Тема закрыта. Публикация новых сообщений запрещена.