О блоге

@nger-блог - блог, где я выкладываю свои мысли в основном на технические темы, перемежая их с разными философствованиями.

Интеграция 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

  1. Отличная информация! Спасибо!


    Mike    25 мая 2008, 14:33    #
  Помощь по Textile

<- Предыдущая статья
Советы по езде в FlatOut 2
Следующая статья ->
Обзор Prey