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