Сильно извиняюсь! Забыл...
Вот : 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;
}
}
}
}
}