Интеграция phpbb со своей CMS

Интеграция phpbb со своей CMS

Тема оказалась очень популярной в инете, сам phpbb юзал, но вот интегрировать с cms не приходилось. ББ оказалась заразой редкостной, в сети куча рецептов, но почему-то с phpbb 3, который стоит у меня не срабатывали, удалось на буржуйском сайте найти рецепт, который после напильника заработал у меня. Еще кстати очень полезный в этом деле ресурс https://wiki.phpbb.com
Итак, что мне надо от этой интеграции:

  1. чтобы при регистрации на сайте юзеры попадали в базу cms и в базу phpbb
  2. при авторизации на сайте юзер авторизовывался и на форуме
  3. при выходе на сайте, выходил бы и на форуме

Первый пункт оказался самым простым, чтобы добавить грамотно юзера в базу надо сделать 2 запроса в базу:

$user_actkey = md5(rand(0, 100) . time());
$user_actkey = substr($user_actkey, 0, rand(8, 12));
$sql  = "INSERT INTO `phpbb_users` (`user_type`, `group_id`,   `user_perm_from`, `user_ip`, `user_regdate`, `username`,  `username_clean`, `user_password`, `user_passchg`, `user_pass_convert`,   `user_email`, `user_email_hash`, `user_birthday`, `user_lastvisit`,  `user_lastmark`, `user_lastpost_time`, `user_lastpage`,   `user_last_confirm_key`, `user_last_search`,  `user_warnings`,`user_last_warning`,`user_login_attempts`,  `user_inactive_reason`, `user_inactive_time`, `user_posts`, `user_lang`,  `user_timezone`,`user_dst`,       `user_dateformat`, `user_style`,  `user_rank`, `user_colour`, `user_new_privmsg`, `user_unread_privmsg`,  `user_last_privmsg`, `user_message_rules`, `user_full_folder`,    `user_emailtime`, `user_topic_show_days`, `user_topic_sortby_type`,  `user_topic_sortby_dir`, `user_post_show_days`, `user_post_sortby_type`,  `user_post_sortby_dir`, `user_notify`, `user_notify_pm`,  `user_notify_type`, `user_allow_pm`, `user_allow_viewonline`,  `user_allow_viewemail`, `user_allow_massemail`, `user_options`,  `user_avatar`, `user_avatar_type`, `user_avatar_width`,  `user_avatar_height`,`user_sig`, `user_sig_bbcode_uid`,  `user_sig_bbcode_bitfield`, `user_from`, `user_icq`, `user_aim`,  `user_yim`, `user_msnm`, `user_jabber`, `user_website`, `user_occ`,  `user_interests`, `user_actkey`,`user_newpasswd`, `user_form_salt`,  `user_new`, `user_reminded`, `user_reminded_time`) VALUES
( 0, 2, 0, '{$_SERVER['REMOTE_ADDR']}', {$time}, '".CMS::addslashes($_POST['userLogin'])."', '".CMS::addslashes($_POST['userLogin'])."', '".md5($_POST['userPassword'])."', {$time}, 0,
'".CMS::addslashes($_POST['userEmail'])."',  ".sprintf('%u', crc32(strtolower($_POST['userEmail']))) .  strlen($_POST['userEmail']).", '', {$time},{$time}, 0, '', '', 0, 0, 0,  0, 0, 0, 0, 'ru', 0.00, 0, '|d M Y|, H:i', 1, 0, '', 0, 0, 0, 0, -3, 0,  0,
't', 'd', 0, 't', 'a', 0, 1, 0, 1, 1, 1, 1, 230271, '', 0, 0, 0,  '', '', '', '', '', '', '', '', '', '', '', '', '{$user_actkey}', '',  'badb8e6fcb48bb00', 1, 0, 0);
";
$db1 -> QueryExec( $sql );
$id = mysql_insert_id();
$sql = "INSERT INTO `phpbb_user_group` (`group_id`, `user_id`, `group_leader`, `user_pending`) VALUES
(2, {$id}, 0, 0),
(7, {$id}, 0, 0)";
$db1 -> QueryExec( $sql );

Во втором запросе group_id = 2 и 7, в вашем случае могут быть другие айдишники, у меня это айдишники из таблицы phpbb_groups, соответствуют группам REGISTERED и NEWLY_REGISTERED.

Дальше идет интеграция авторизации CMS с авторизацией форума phpBB:

Пишем функцию, да, именно функцию, иначе могут быть проблемы.

function login($id){
define('IN_PHPBB', true);
global $db, $cache, $config, $user, $phpbb_root_path, $phpEx;
$phpbb_root_path = [тут путь к папке с форумом].'/forum/';
$phpEx = "php";
include_once($phpbb_root_path.'common.'.$phpEx);
$user->session_begin();
//Signin automaticly for phpBB3
$user->session_create($id, true, true, true);
return true;
}

Перед вызовом функции делаете запрос в базу, для получения id юзера:

$sql = "SELECT user_id FROM phpbb_users WHERE username='".addslashes($_POST['login'])."'";
$res = $db1 -> Query($sql);
if( $db1 -> max > 0 ) {
login( $res[0]['user_id'] );
}

Поздравляю, вы авторизованы.

Теперь надо как то сделать общий выход. Пишем еще одну функцию:

function loginout(){
define('IN_PHPBB', true);
global $db, $cache, $config, $user, $phpbb_root_path, $phpEx;
$phpbb_root_path = $phpbb_root_path = [тут путь к папке с форумом].'/forum/';
$phpEx = "php";
include_once($phpbb_root_path.'common.'.$phpEx);
$user->session_kill();
return true;
}

Все готово, все 3 пункта выполнены, на этот левел ап у меня ушло 4 часа.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *