Проблема с отображением сообщений форума

Проблемы с установкой или работой phpBB 3.0.x? Получите помощь здесь!
С 1 января 2017 года phpBB Group прекращает поддержку phpBB версии 3.0.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.0 до 1 июля 2017 года.
Подробнее: Окончание поддержки phpBB 3.0.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Petja
phpBB 1.2.0
Сообщения: 10
Стаж: 13 лет 11 месяцев
Благодарил (а): 3 раза

Проблема с отображением сообщений форума

Сообщение Petja »

Форум phpBB: 3.0.11
Сделал свой плагин авторизации includes/auth/auth_modx.php
Выбрал его в админке (Админ панель -> ОБЩИЕ -> Средства связи -> Аутентификация), и сообщения форума стали выводиться как бы вне шаблона, вот примеры:

Изображение
Изображение
Изображение
Изображение

Если ставить стандартный метод аутентификации Db, то сообщения отображаются нормально:

Изображение
Изображение
Изображение

Что нужно сделать, чтобы сообщения стали отображаться нормально?
Заранее благодарю за помощь!
Аватара пользователя
Pazh
Former team member
Сообщения: 2317
Стаж: 16 лет 10 месяцев
Благодарил (а): 42 раза
Поблагодарили: 506 раз

Re: Проблема с отображением сообщений форума

Сообщение Pazh »

Petja писал(а):Сделал свой плагин авторизации includes/auth/auth_modx.php
а код твоего плагина мы должны сами угадать? Извини, у нас пасмурно и какие-то помехи на линии - код нечитаемый
Помощь в ЛС/email только за WM или ЮMoney
Petja
phpBB 1.2.0
Сообщения: 10
Стаж: 13 лет 11 месяцев
Благодарил (а): 3 раза

Re: Проблема с отображением сообщений форума

Сообщение Petja »

Сильно извиняюсь! Забыл...
Вот : includes/auth/auth_modx.php

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

<?php
/**
 * Created by JetBrains PhpStorm.
 * User: Petja
 * Date: 29.10.12
 * Time: 11:46
 * To change this template use File | Settings | File Templates.
 */

# /forum/includes/auth/auth_modx.php

if (!defined('IN_PHPBB')){
    exit;
}

/**
 * возвращает информацию о текущем пользователе
 */
function get_user_data(){
    // Подключаем
    define('MODX_API_MODE', true);
    require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; // у меня форум лежит в /forum

    // берем пользователя
    //if(($modx->user->get('id') != 0) && ($modx->user->get('id') != 1)){ // Если не anonimous и не root
    if($modx->user->get('id') != 0){ // Если не anonimous
        $result['username'] = $modx->user->get('username');
        $profile = $modx->user->getOne('Profile');
        $result['user_email'] = $profile->get('email');
        $fields = $profile->get('extended');
        $result['user_from'] = $fields['region'];
        // Сюда можно добавить другие поля профиля, например:
        // $result['имя_столбца_в_БД_форума_в_таблице_users'] = Значение_поля_из_БД_modx;
    }

    return $result;
}

/**
 * Функция, отвечающая за авторизацию.
 */
function login_modx(){
    $auth = get_user_data();
    // если авторизация невозможна
    if (!is_array($auth) || empty($auth))
    {
        return array(
            'status' => LOGIN_ERROR_USERNAME,
            // сообщение по ключу ACCESS_DIRECTLY_DENIDED следует добавить в файлах language/<language>/common.php
            'error_msg' => 'ACCESS_DIRECTLY_DENIDED',
            'user_row' => array('user_id' => ANONYMOUS),
        );
    }

    global $db;
    $sql = 'SELECT user_id, username, user_password, user_email, user_from, user_type
           FROM ' . USERS_TABLE . "
           WHERE username_clean = '" . $db->sql_escape($auth['username']) . "'";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);

    if ($row){
        $res = array(
            'status'     => LOGIN_SUCCESS,
            'error_msg'  => false,
            'user_row'     => array(
                'user_id' => $row['user_id'],
                'username'       => $row['username'],  // Отображаемое имя пользователя
                //'user_password'  => $row['user_password'],  // phpbb-хеш пароля
                'user_email'     => $row['user_email'],  // E-mail пользователя, если существует
                'user_from'     => $row['user_from'],
                'user_type'      => 0,
                'group_id' => 2
            )
        );
        return $res;
    }

    // Сообщаем, что авторизация прошла успешно.
    $res = array(
        'status'     => LOGIN_SUCCESS_CREATE_PROFILE,
        'error_msg'  => false,
        'user_row'     => array(
            "username"       => $auth['username'],  // Отображаемое имя пользователя
            //"user_password"  => phpbb_hash($auth['user_password']),  // phpbb-хеш пароля
            "user_email"     => $auth['user_email'],  // E-mail пользователя, если существует
            "user_from"     => $auth['user_from'],
            "user_type"      => 0,
            "group_id" => 2
        ),
    );
    return $res;

}

/**
 * Функция, отвечающая за регистрацию и авторизацию пользователя при первом посещении.
 */
function autologin_modx(){
    $user_row = login_modx();
    // если пользователь еще не зарегистрирован
    if ($user_row['status'] == LOGIN_SUCCESS_CREATE_PROFILE)
    {
        global $phpbb_root_path, $phpEx;
        if (!function_exists('user_add'))
        {
            include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
        }
        $user_row['user_row']['user_id'] = user_add($user_row['user_row']);
    }
    // возвращаем данные пользователя
    global $db;
    $sql = 'SELECT * FROM ' . USERS_TABLE . " WHERE user_id = '" . $db->sql_escape($user_row['user_row']['user_id']) . "'";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    return $row;
}

/**
 * Функция сравнивает поля пользователя modx и поля пользователя форума, если в modx значение поля изменилось, то обновляет это поле и в форуме
 */
function validate_session_modx()
{
    if($auth = get_user_data()){
        if($auth['username'] == 'admin') return true; // Пользователь, который админ на форуме (такой же пользователь есть в modx с таким же паролем)
        // Данные прользователя modx лежат в $auth
        // Взять данные пользователя phpbb
        global $db;
        // Добавить в запрос поля, которые должны обновляться из modx
        $sql = 'SELECT user_id, user_email, user_from
           FROM ' . USERS_TABLE . "
           WHERE username_clean = '" . $db->sql_escape($auth['username']) . "'";
        $result = $db->sql_query($sql);
        $row = $db->sql_fetchrow($result);
        $db->sql_freeresult($result);

        if ($row){

            foreach($auth as $auK => $auV){
                if($row[$auK] != $auV){ // Если поле пользователя форма не равно полю из modx (хотябы одно)
                    // Сделать UPDATE
                    unset($auth['username']);
                    $sql = "UPDATE " . USERS_TABLE . " SET " . $db->sql_build_array('UPDATE', $auth) .
                        " WHERE user_id = '" . $db->sql_escape($row['user_id']) . "'";
                    $db->sql_query($sql);
                    break;
                }
            }
        }
    }
}
Petja
phpBB 1.2.0
Сообщения: 10
Стаж: 13 лет 11 месяцев
Благодарил (а): 3 раза

Re: Проблема с отображением сообщений форума

Сообщение Petja »

Пробовал отключать все функции кроме login_modx
Выдает безшаблонно при логине,
и нормально при логоуте... Вообще с одной функцией login_modx особо не проверить, т.к. паролей у юзеров нет.
Petja
phpBB 1.2.0
Сообщения: 10
Стаж: 13 лет 11 месяцев
Благодарил (а): 3 раза

Re: Проблема с отображением сообщений форума

Сообщение Petja »

Все, проблема решена! При подключении в функции get_user_data API cms (modx revolution) - перекрывался обработчик ошибок, поэтому надо было добавить строку, после подключения api:

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

function get_user_data(){
    // Подключаем
    define('MODX_API_MODE', true);
    require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php'; // у меня форум лежит в /forum

    set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); // --- ДОБАВЛЕННАЯ СТРОКА

    // берем пользователя
    //if(($modx->user->get('id') != 0) && ($modx->user->get('id') != 1)){ // Если не anonimous и не root
    if($modx->user->get('id') != 0){ // Если не anonimous
        $result['username'] = $modx->user->get('username');
        $profile = $modx->user->getOne('Profile');
        $result['user_email'] = $profile->get('email');
        $fields = $profile->get('extended');
        $result['user_from'] = $fields['region'];
        // Сюда можно добавить другие поля профиля, например:
        // $result['имя_столбца_в_БД_форума_в_таблице_users'] = Значение_поля_из_БД_modx;
    }

    return $result;
}
И все заработало!

Вернуться в «Поддержка phpBB 3.0.х»