Интеграция IPB 2.1.6 в PHP-Nuke 7.9 (или наоборот)
Если у Вас уже есть рабочий форум на IPB и Вы хотите сохранить всю информацию, то следует воспользоваться конвертором, который можно взять с официального сайта поддержки IPB. В базе данных необходимо поменять имя таблицы nuke_users на nuke_bbusers. В коверторе указать тип форума PHPBB 2, префикс nuke_bb и конвертировать базы. Затем:В config.php определить переменную
$ipb_prefix = "Ваш_префикс_форума";
Выполнить запрос:
//////////////////////////////////
ALTER TABLE `Ваш_префикс_форума_members` ADD `points` INT NOT NULL AFTER `mgroup` ;
//////////////////////////////////
----------------
mainfile.php
----------------
Находим
######################
if(isset($user) && $user == $_COOKIE['user'])
{
$user = base64_decode($user);
$user = addslashes($user);
$user = base64_encode($user);
}######################
Заменяем на
######################
$user = $_COOKIE['pass_hash'];######################
Функция is_user
######################
function is_user($user) {
if (!$user) return 0;
if (isset($userSave)) return $userSave;
if ($user && $_COOKIE['member_id'])
{
global $db, $ipb_prefix;
if ($db->sql_numrows($db->sql_query("SELECT id FROM ".$ipb_prefix."members WHERE id='$_COOKIE[member_id]' AND member_login_key='$user'")))
{
static $userSave;
return $userSave = 1;
}
else
{
static $userSave;
return $userSave = 0;
}
}
else
{
static $userSave;
return $userSave = 0;
}
}######################
Функция is_group
######################
function is_group($user, $name) {
global $prefix, $db, $ipb_prefix, $cookie, $user;
if (is_user($user)) {
$uid = $_COOKIE['member_id'];
$result = $db->sql_query("SELECT points FROM ".$ipb_prefix."members WHERE id='$uid'");
list($points) = $db->sql_fetchrow($result);
$points = intval($points);
$db->sql_freeresult($result);
$result2 = $db->sql_query("SELECT mod_group FROM ".$prefix."_modules WHERE title='$name'");
list($mod_group) = $db->sql_fetchrow($result2);
$mod_group = intval($mod_group);
$db->sql_freeresult($result2);
$result3 = $db->sql_query("SELECT points FROM ".$prefix."_groups WHERE id='$mod_group'");
list($rpoints) = $db->sql_fetchrow($result3);
$grp = intval($rpoints);
$db->sql_freeresult($result3);
if (($points >= 0 AND $points >= $grp) OR $mod_group == 0) {
return 1;
}
}
return 0;
}######################
Функция update_points
######################
function update_points($id) {
global $ipb_prefix, $prefix, $db, $user;
if (is_user($user)) {
if(!is_array($user)) {
$cookie = cookiedecode($user);
$username = trim($cookie[1]);
} else {
$username = trim($user[1]);
}
if ($db->sql_numrows($db->sql_query("SELECT * FROM ".$prefix."_groups")) > '0') {
$id = intval($id);
$result = $db->sql_query("SELECT points FROM ".$prefix."_groups_points WHERE id='$id'");
list($points) = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
$rpoints = intval($points);
$db->sql_query("UPDATE ".$ipb_prefix."members SET points=points+".$rpoints." WHERE name='$username'");
}
}
}######################
Функция cookiedecode
######################
function cookiedecode($user) {
global $db, $ipb_prefix, $prefix, $cookie;
if (!is_user($user)) return false;
$member_id = $_COOKIE['member_id'];
$cookie[0] = $member_id;
$usr = $db->sql_fetchrow($db->sql_query("SELECT name, legacy_password FROM ".$ipb_prefix."members WHERE id='$member_id' AND member_login_key='$user'"));
$cookie[1] = $usr['name'];
$cookie[2] = $usr['legacy_password'];
$cfg = $db->sql_fetchrow($db->sql_query("SELECT Default_Theme, commentlimit, storyhome FROM ".$prefix."_config"));
$cookie[3] = $cfg['storyhome'];
$cookie[4] = "";
$cookie[5] = 0;
$cookie[6] = 0;
$cookie[7] = 0;
$cookie[8] = 0;
$cookie[9] = $cfg['Default_Theme'];
$cookie[10] = $cfg['commentlimit'];
return $cookie;
}######################
Функция getusrinfo
######################
function getusrinfo($user) {
global $ipb_prefix, $db, $userinfo, $cookie;
if (!$user OR empty($user)) {
return NULL;
}
cookiedecode($user);
$user = $cookie;
if (isset($userrow) AND is_array($userrow)) {
if ($userrow['username'] == $user[1] && $userrow['user_password'] == $user[2]) {
return $userrow;
}
}
$sql = "SELECT * FROM ".$ipb_prefix."member WHERE name='$user[1]' AND legacy_password='$user[2]'";
$result = $db->sql_query($sql);
if ($db->sql_numrows($result) == 1) {
static $userrow;
$userrow = $db->sql_fetchrow($result);
return $userinfo = $userrow;
}
$db->sql_freeresult($result);
unset($userinfo);
}######################
----------------
modules.php
----------------
Удалить
######################
if (is_user($user)) {
$nukeuser = base64_decode($user);
$nukeuser = addslashes($nukeuser);
} else {
$nukeuser = "";
}######################
Также необходимо переделать несколько блоков. А именно: User_Info и Forums. Первый отвечает за логин, регистрацию и т.д. Второй показывает последние сообщения с форума.
Кому лень дорабатывать - вот ссылка на блоки для интеграции ipb и php-nuke.
|
опубликовано: 2006-08-03 18:19
Отличная информация! Спасибо!
— Mike 25 мая 2008, 14:33 #