Интеграция на phpbb в уебсайт базиран на CodeIgniter
Забелязах, че във форумите на framework-а CodeIgniter има доста теми свързани с интеграцията на phpbb. Все пак има една библиотека постната във форумите – тук, но тя не изпълняваше моите изисквания. Всъщност единственото нещо, което беше полезно за мен е частта с логването, т.е.конструктора. Тази част от кода е почти еднаква и тук трябва да благодаря на Tomaž Muraus за тези първоначални насоки. Моите добавки към библиотеката са останалите полезни функции. Така че в крайна сметка направих една простичка библиотека за CodeIgniter, която управлява изпълнението на отдалечен логин, отдалечено добавяне на потребител, редакция (смяна на парола) и изтриване на потребител. Ще ви покажа кода тук и ще го орежа малко, защото в текущия си вид съдържа някои допълнителни неща свързани с конкретните нужди на проекта, за който направих библиотеката.
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter phpBB3 Bridge
* @author Georgi Budinov, credits to Tomaž Muraus at http://www.tomaz-muraus.info
* @link georgi.budinov.com
*/
class Phpbb_bridge
{
public $CI;
protected $_user;
/**
* Constructor.
*/
public function __construct()
{
if (!isset($this->CI))
{
$this->CI =& get_instance();
}
// Set the variables scope
global $phpbb_root_path, $phpEx, $user, $auth, $cache, $db, $config, $template, $table_prefix;
$rootPath = $this->CI->config->item('root_path');
define('IN_PHPBB', TRUE);
define('FORUM_ROOT_PATH', $rootPath.'forum/');
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : FORUM_ROOT_PATH;
$phpEx = substr(strrchr(__FILE__, '.'), 1);
// Include needed files
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'config.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx);
include($phpbb_root_path . 'includes/functions_posting.' . $phpEx);
// Initialize phpBB user session
$user->session_begin();
$auth->acl($user->data);
$user->setup();
// Save user data into $_user variable
$this->_user = $user;
}
/**
* @param $email
* @param $username
* @param $password
* @return unknown_type</pre>
*/
public function user_add($email, $username, $password)
{
$user_row = array(
'username' => $username,
'user_password' => phpbb_hash($password),
'user_email' => $email,
'group_id' => 2, // by default, the REGISTERED user group is id 2
'user_timezone' => (float) date('T'),
'user_lang' => 'bg',
'user_type' => USER_NORMAL,
'user_ip' => $_SERVER['REMOTE_ADDR'],
'user_regdate' => time(),
);
return user_add($user_row, false);
}
/**
* @param $username
* @param $password
* @return bool
*/
public function user_edit($username, $password)
{
return user_edit($username, $password);
}
/*
* Logins the user in forum
*/
public function user_login($username, $password)
{
$auth = new auth();
return $auth->login($username, $password);
}
public function user_logout()
{
$this->_user->session_kill();
$this->_user->session_begin();
}
/**
* @param $user_id
* @return unknown_type
*/
public function user_delete($user_id)
{
return user_delete('remove', $user_id, false);
}
}
Още нещо трябва да отбележа: user_edit функцията не съществува в phpbb3. Затова аз дефинирах такава в includes/functions_user.php:
/**
* Change password
*
* @param string $username
* @param string $newPassword
* @return boolean
*/
function user_edit($username, $newPassword)
{
global $db, $user, $auth, $config, $phpbb_root_path, $phpEx;
if (empty($username) || empty($newPassword))
{
return false;
}
$sql = 'UPDATE ' . USERS_TABLE . ' SET user_password=\'' . $db->sql_escape(md5($newPassword)) . '\' WHERE username = \''.$db->sql_escape($username).'\'';
$db->sql_query($sql);
return true;
}
И не на последно място ще трябва да решите по какъв начин да се справите с повторението на функцията redirect. Аз я замених в CodeIgniter framework-а, тъй като беше по-лесно за мен.
Enjoy!
НОВО 1:
За версия на PHPBB по-голяма или равна на 3.0.8. трябва да бъде променено името на cache класа от cache на cache_phpbb. Файловете са както следва:
./common.php , ./style.php , ./download/file.php и ./includes/cache.php
НОВО 2:
За да работи правилно библиотеката трябва да бъде избран различен драйвер за конекция към базата данни от този който сте избрали за CI. Например mysql за CI и mysqli за PHPBB (настройва се от ./config.php)
Прочети статията на: English











English
Bulgarian 

Мерси много.
Ето нещо над което да помислиш
088 public function user_login($username, $password)
089 {
090 $auth = new auth();
091
092 return $auth->login($username, $password);
093 }
В тази функция, ако да речем потребителя е баннат по IP или потребителско име, какво ще се случи?