Интеграция с PunBB
Скрещиваем LiveStreet и PunBB
Итак, что имеем:
1) LiveStreet, установлен в /
2) PunBB, установлен в /forum/
3) База одна и та же
Итак, начнем.
В файл /classes/modules/user/User.class.php в функцию Authorization добавляем
сразу после следующего кода:
И еще один грязный хак — идем в forum/include/functions.php и меняем функцию forum_setcookie на эту:
Теперь обработаем логаут
в /classes/actions/ActionLogin.class.php
функцию EventExit заменить на эту:
Минус способа в том, что для регистрации юзеров в форуме надо их всех разлогинить (т.к. мы при логине проверяем существование юзера в базе punbb). Не забудьте удалить файлы регистрации и логаута форума (ну или die(); туда прописать в начало) — login.php, register.php
Итак, что имеем:
1) LiveStreet, установлен в /
2) PunBB, установлен в /forum/
3) База одна и та же
Итак, начнем.
В файл /classes/modules/user/User.class.php в функцию Authorization добавляем
/**=================================
* PunBB Integration
*==================================*/
define('FORUM_ROOT', '/var/www/forum/'); // а здесь у нас директория с форумом, полный путь
require_once FORUM_ROOT.'config.php';
require_once FORUM_ROOT.'include/dblayer/common_db.php';
require_once FORUM_ROOT.'include/functions.php';
$login = $oUser->getLogin();
$myhash = md5($oUser->getPassword().'abacabadabacabaeabacabadabacaba'); //сюда НАДО БЫ вписать что-нибудь уникальное, ну на всякий случай
$id = $forum_db->result($forum_db->query(
sprintf("SELECT id FROM `".$db_prefix."users` WHERE `username` = '%s'",
$forum_db->escape($login))
));
if (!$id) {
$forum_db->query(sprintf("INSERT INTO `".$db_prefix."users` (`username`,`password`,`email`,`registered`,`registration_ip`,`last_visit`, `style`)
VALUES ('%s', '%s', '%s', %d, '%s', %d, 'Oxygen')",
$forum_db->escape($login), $forum_db->escape($myhash), '', time(), $_SERVER['REMOTE_ADDR'], time()));
$id = $forum_db->insert_id();
}
$hash = $forum_db->result($forum_db->query(
sprintf("SELECT password FROM `".$db_prefix."users` WHERE `username` = '%s'",
$forum_db->escape($login))
));
if ($hash != $myhash) {
$hash = $myhash;
$forum_db->query("UPDATE `".$db_prefix."users` SET password='$hash' WHERE id=$id");
}
$expire = time() + 31536000;
$salt = '';
//echo base64_encode($id.'|'.$hash.'|'.$expire.'|'.sha1($salt.$hash.forum_hash($expire, $salt)));
//die();
forum_setcookie($cookie_name, base64_encode($id.'|'.$hash.'|'.$expire.'|'.sha1($salt.$hash.forum_hash($expire, $salt))), $expire);
/**=================================
* <<<END>>> PunBB desIntegration
*==================================*/
сразу после следующего кода:
if (!$oUser->getId() or !$oUser->getActivate()) {
return false;
}
/**
* Генерим новый ключ авторизаии для куков
*/
$sKey=md5(func_generator().time().$oUser->getLogin());
/**
* Создаём новую сессию
*/
if (!$this->CreateSession($oUser,$sKey)) {
return false;
}
/**
* Запоминаем в сесси юзера
*/
$this->Session_Set('user_id',$oUser->getId());
$this->oUserCurrent=$oUser;
/**
* Ставим куку
*/
if ($bRemember) {
setcookie('key',$sKey,time()+60*60*24*3,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));
}
И еще один грязный хак — идем в forum/include/functions.php и меняем функцию forum_setcookie на эту:
function forum_setcookie($name, $value, $expire)
{
global $cookie_path, $cookie_domain, $cookie_secure;
$cookie_path = '/';
$cookie_domain = '';
$return = ($hook = get_hook('fn_forum_setcookie_start')) ? eval($hook) : null;
if ($return != null)
return;
// Enable sending of a P3P header
header('P3P: CP="CUR ADM"');
if (version_compare(PHP_VERSION, '5.2.0', '>='))
setcookie($name, $value, $expire, $cookie_path, $cookie_domain, $cookie_secure, true);
else
setcookie($name, $value, $expire, $cookie_path.'; HttpOnly', $cookie_domain, $cookie_secure);
}
Теперь обработаем логаут
в /classes/actions/ActionLogin.class.php
функцию EventExit заменить на эту:
protected function EventExit() {
$this->Security_ValidateSendForm();
$this->User_Logout();
/**=================================
* PunBB Integration
*==================================*/
define('FORUM_ROOT', '/var/www/forum/');
require_once FORUM_ROOT.'config.php';
require_once FORUM_ROOT.'include/functions.php';
forum_setcookie($cookie_name, '', time());
/**=================================
* <<<END>>> PunBB desIntegration
*==================================*/
$this->Viewer_Assign('bRefreshToHome',true);
}
Минус способа в том, что для регистрации юзеров в форуме надо их всех разлогинить (т.к. мы при логине проверяем существование юзера в базе punbb). Не забудьте удалить файлы регистрации и логаута форума (ну или die(); туда прописать в начало) — login.php, register.php
14 комментариев
Первое делается просто, только подмен ссылок.
Второе ещё не знаю.
Третье, пока не знаю
Результат:
очистить в базе табличку сессий надо и кеш
В файл /classes/modules/user/User.class.php после
вставляем строчку:
Ну и дальше при инсерте:
вместо '', — $email