Блог разработчиков XS2
Случай доброкачественного паразитарного сопряжения (XS2+PHPB3)
15.05 '2008 18:19arsenicum
arsenicum, phpbb, интеграция, форум
Многие разработчики на XS2 сталкивались с необходимостью сопряжения XS2 с форумом PHPBB и многие демонстрировали при этом чудеса смекалки. PHPBB не имеет никакого API для манипулирования пользователями из внешних приложений, что сильно усложняет интеграцию с ним. В этом посте мы приводим пример кошерного сопряжения с PHPBB. При интеграции с XS2 часто встает задача синхронизации пользователей модуля XS2 users. Иными словами при создании новых объектов user необходимо создавать иденитичные аккаунты в PHPBB, при их удалении нужно синхронно удалять пользователей форума. Кроме того, часто необходимо выводить информацию о количестве личных сообщений или ранге пользователя PHPBB в шаблонах XS2. Изрядно попотев на кодом PHPBB мы написали простенький процессор, содержащий функции, которые позволяет информацию о пользователе, добавлять и удалять пользователей PHPBB. Вот он:
<?
define('IN_PHPBB', true);
//путь к форуму относительно корня сайта
$phpbb_root_path = 'forum/';
$phpEx = 'php';
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
//Функция возвращает информацию о PHPBB-юзере
function login_user($username,$password){
global $auth,$user,$phpEx;
$auth->login($username,$password);
return $user;
}
//это функция позволяет добавить нового пользователя
//при этом мы передаем в нее урл аватары, уже хранящейся в объекте user - в этом случае картинка не будет хранится на сервере два раза
function add_user($username, $password, $email, $avatar_url, $group_id=2){
$user_id = user_add(array(
'username'=>$username,
'user_password'=>phpbb_hash($password),
'group_id'=>$group_id,
'user_type'=>USER_NORMAL,
'user_email'=>$email
));
if ($user_id && $avatar_url){
$_REQUEST['remotelink']=$avatar_url;
$ar = avatar_process_user($error, array('user_id'=>$user_id));
if(sizeof($error)>0 || !$av){
return 0;
}
}
else{
return 0;
}
return $user_id;
}
//эта функция удаляет пользователя
function delete_user($user_id,$post_username=false){
return user_delete('remove',$user_id,$post_username);
}
?>
Коментарий
|