|
|
| |
1. website integration example |
|
Reply |
|
|
 Dawid Makowski | 2009-02-23 16:37:48 |
hello!
I have integrated phpBB3 with my running site (it has it's own auth system).
This is original class with some bug fixes found here and on internet + other + some more features - like avatar integration.
WARNING : this class assumes that Your website has an email as a login and a nickname which is used as a forum login. (On my forum I just redirect forum login form to my web login form). I also loads recent forum topics etc.
Examples of usage (user data update):
$phpbb_vars = array(
'user_id' => $phpbb_user->user_id,
'username' => $this->post_data['user']['nickname'],
'user_website' => $this->post_data['user']['url'],
'user_icq' => $this->post_data['user']['icq_login'],
'user_interests' => $this->post_data['user']['about_me_note'],
'user_from' => $this->post_data['user']['city'],
'user_birthday' => $this->post_data['user']['birth_date'],
);
$phpbb_result = $this->phpbb3_connector->user_update($phpbb_vars, $phpbb_user->username);
if ( isset($this->post_data['delete']) ) $_POST['delete'] = true;
$phpbb_av_result = $this->phpbb3_connector->avatar_upload();
Class code:
<?php
/**
PHPBB Forum manipulation Class
Idea By Felix Manea (felix.manea@gmail.com)
Licensed under LGPL
NOTE: You are required to leave this header intact.
Minor changes & (a lot of) bug fixes : Dawid Makowski http://neart.pl/ dawid@neart.pl
*/
class phpbb {
//various table fields
public $table_fields = array();
//constructor
// public function __construct($path, $php_extension = "php"){ // original constructor
// $params = array(); // NOT NULL!
// $params['phpbb3_path'] = '??';
// $params['php_scripts_extensions'] = 'php';
public function __construct($params){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
define('IN_PHPBB', true);
$phpbb_root_path = $params['phpbb3_path'];
$phpEx = $params['php_scripts_extensions'];
}
//initialize phpbb
public function init($prepare_for_login = false){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
if($prepare_for_login && !defined("IN_LOGIN")) define("IN_LOGIN", true);
require_once($phpbb_root_path.'common.'.$phpEx);
//session management
$user->session_begin();
$auth->acl($user->data);
}
//user_login
public function user_login($phpbb_vars)
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//prezumtia de fail
$phpbb_result = 'FAIL';
//general info
$this->init(true);
if(!isset($phpbb_vars['autologin'])) $phpbb_vars['autologin'] = false;
if(!isset($phpbb_vars['viewonline'])) $phpbb_vars['viewonline'] = 1;
if(!isset($phpbb_vars['admin'])) $phpbb_vars['admin'] = 0;
//validate and authenticate
$validation = login_db($phpbb_vars['username'], $phpbb_vars['password']);
if(
$validation['status'] == 3
&& $auth->login(
$phpbb_vars['username'],
$phpbb_vars['password'],
$phpbb_vars['autologin'],
$phpbb_vars['viewonline'],
$phpbb_vars['admin']
)
) $phpbb_result = 'SUCCESS';
return $phpbb_result;
}
//user_logout
public function user_logout(){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//prezumtia de fail
$phpbb_result = "FAIL";
//general info
$this->init(true);
//session management
$user->session_begin();
$auth->acl($user->data);
//destroy session if needed
if($user->data['user_id'] != ANONYMOUS){
$user->session_kill();
$user->session_begin();
$phpbb_result = "SUCCESS";
}
return $phpbb_result;
}
//user_loggedin
public function user_loggedin()
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//fail presumtion
$phpbb_result = "FAIL";
//general info
$this->init(false);
//session management
$user->session_begin();
if(is_array($user->data) && $user->data["user_id"] != ANONYMOUS && $user->data["user_id"] > 0) $phpbb_result = "SUCCESS";
//if(is_array($user->data) && isset($user->data["user_id"]) && $user->data["user_id"] > 0) $phpbb_result = "SUCCESS";
return $phpbb_result;
}
public function get_user_data()
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//general info
$this->init(false);
//session management
$user->session_begin();
return $user->data;
}
public function get_avatar_real_filename($user_avatar)
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
$this->init(false);
require_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$rv = null;
if ( isset($user_avatar) && strlen($user_avatar) ) {
$rv = get_avatar_filename($user_avatar);
}
return $rv;
}
public function avatar_upload()
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
$this->init(false);
require_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$error = null;
avatar_process_user($error);
return $error;
}
//user_add
public function user_add($phpbb_vars){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//fail presumtion
$phpbb_result = "FAIL";
//if the mandatory parameters are not given fail
if(@empty($phpbb_vars['username']) || !isset($phpbb_vars['group_id']) || !isset($phpbb_vars['user_email']) )
return $phpbb_result;
//general info
$this->init(false);
//user functions
require_once($phpbb_root_path ."includes/functions_user.".$phpEx);
//default user info
$user_row = array(
"username" => $phpbb_vars["username"],
"user_password" => $phpbb_vars["password"],
"user_email" => $phpbb_vars["user_email"],
"group_id" => !isset($phpbb_vars["group_id"])?"2":$phpbb_vars["group_id"],
"user_timezone" => "1.00",
"user_dst" => 0,
"user_lang" => "pl",
"user_type" => !isset($phpbb_vars["user_type"])?"0":$phpbb_vars["user_type"],
"user_actkey" => "",
"user_dateformat" => "D M d, Y g:i a",
"user_style" => "1",
"user_regdate" => time(),
"user_colour" => "",
);
//replace default values with the ones in phpbb_vars array (not yet tested / implemented)
//foreach($user_row as $key => $value) if(isset($phpbb_vars[$key])) $user_row[$key] = $phpbb_vars[$key];
//register user
if($phpbb_user_id = user_add($user_row)) $phpbb_result = "SUCCESS";
//update the rest of the fields
$this->user_update($phpbb_vars);
return $phpbb_result;
}
//user_delete
public function user_delete($phpbb_vars){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//fail presumtion
$phpbb_result = "FAIL";
//general info
$this->init(false);
//user functions
require_once($phpbb_root_path ."includes/functions_user.".$phpEx);
//get user_id if possible
if(!isset($phpbb_vars["user_id"]))
if(!$phpbb_vars["user_id"] = $this->get_user_id_from_name($phpbb_vars["username"]))
return $phpbb_result;
//delete user (always returns false)
user_delete("remove", $phpbb_vars["user_id"]);
$phpbb_result = "SUCCESS";
return $phpbb_result;
}
//user_update
public function user_update($phpbb_vars, $old_name)
{
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//fail presumtion
$phpbb_result = "FAIL";
//general info
$this->init(false);
//user functions
require_once($phpbb_root_path ."includes/functions_user.".$phpEx);
//get user_id if possible
// w produkcjach Hanza/Neart Email jest niezmienny
if(!isset($phpbb_vars["user_id"]))
if(!$phpbb_vars["user_id"] = $this->get_user_id_from_name($phpbb_vars["username"]))
return $phpbb_result;
$this->get_table_fields(USERS_TABLE);
$phpbb_vars['username_clean'] = utf8_clean_string($phpbb_vars['username']);
$ignore_fields = array("user_id");
//if(isset($phpbb_vars["user_password"])) $phpbb_vars["user_password"] = md5($phpbb_vars["user_password"]);
if(isset($phpbb_vars["user_newpasswd"])) $phpbb_vars["user_newpasswd"] = md5($phpbb_vars["user_newpasswd"]);
$sql = "";
//generate sql
for($i = 0;$i < count($this->table_fields[USERS_TABLE]); $i++)
if(isset($phpbb_vars[$this->table_fields[USERS_TABLE][$i]]) && !in_array($this->table_fields[USERS_TABLE][$i], $ignore_fields))
$sql .= ", ".$this->table_fields[USERS_TABLE][$i]." = '".$db->sql_escape($phpbb_vars[$this->table_fields[USERS_TABLE][$i]])."'";
if(strlen($sql) != 0){
$db->sql_query("UPDATE ".USERS_TABLE." SET ".substr($sql, 2)." WHERE user_id = '".$phpbb_vars["user_id"]."'");
$phpbb_result = "SUCCESS";
}
user_update_name($old_name, $phpbb_vars["username"]);
update_last_username();
return $phpbb_result;
}
//user_change_password
public function user_change_password($phpbb_vars){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//fail presumtion
$phpbb_result = "FAIL";
//general info
$this->init(false);
//user functions
require_once($phpbb_root_path ."includes/functions_user.".$phpEx);
//get user_id if possible
if(!isset($phpbb_vars["user_id"]))
if(!$phpbb_vars["user_id"] = $this->get_user_id_from_name($phpbb_vars["username"]))
return $phpbb_result;
$db->sql_query("UPDATE ".USERS_TABLE." SET user_password = '".md5($phpbb_vars["password"])."' WHERE user_id = '".$phpbb_vars["user_id"]."'");
$phpbb_result = "SUCCESS";
return $phpbb_result;
}
private function get_table_fields($table){
//if already got table fields once
if(isset($this->table_fields[$table])) return true;
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//general info
$this->init(false);
//get table fields
$this->table_fields[$table] = array();
/* CODE for MYSQL:
* $sql = "SHOW FIELDS FROM ".$table;
* if(!$result = $db->sql_query($sql)) return false;
while($row = $db->sql_fetchrow($result)) $this->table_fields[$table][] = $row["Field"];
*/
$sql = 'SELECT column_name ' .
'FROM information_schema.columns ' .
'WHERE table_name =\'' . $table . '\'';
if(!$result = $db->sql_query($sql)) return false;
while($row = $db->sql_fetchrow($result)) $this->table_fields[$table][] = $row["column_name"];
$db->sql_freeresult($result);
return true;
}
//get user id if we know username
public function get_user_id_from_name($username){
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//user functions
require_once($phpbb_root_path ."includes/functions_user.".$phpEx);
$user_id = false;
if(!isset($username)) return false;
user_get_id_name($user_id, $username);
if(!isset($user_id[0])) return false;
return $user_id[0];
}
public function get_recent_topics($topics_count = 10)
{
$rv = array();
global $phpbb_root_path, $phpEx, $db, $config, $user, $auth, $cache, $template;
//general info
$this->init(false);
$sql = 'SELECT * FROM phpbb_topics ORDER BY topic_time DESC LIMIT ' . $topics_count;
if(!$result = $db->sql_query($sql)) return false;
while($row = $db->sql_fetchrow($result)) $rv[] = $row;
$db->sql_freeresult($result);
return $rv;
}
}
|
| |
2. Re: website integration example |
|
Reply |
|
|
 Felix Manea | 2009-06-16 06:37:00 - In reply to message 1 from Dawid Makowski |
| Thank you for this class update. If you want, you can send it to me with the update specifications (if possible) and I can make a beta upgrade to the real class so users can test it and enjoy the new features you have added. Of course you will be credited for all the additions :). |
| |
3. Re: website integration example |
|
Reply |
|
|
 Bhupesh Upadhyay | 2009-11-04 06:15:52 - In reply to message 2 from Felix Manea |
sir,
i want to know where i put these class. i have my own website with some user authentication and phpbb3 have its own user authentication . so i want when a user login through my website it automatically logged in the forum .Is that possible ? if it is please reply .
thanks in advance |
| |
4. Re: website integration example |
|
Reply |
|
|
 Tim Mikula | 2010-02-11 16:29:05 - In reply to message 1 from Dawid Makowski |
This class is just what I need, but reading all the forum posts, I am not sure where the latest and most bug free code can be found. Is it the post by Dawid Makowski on 2/23/09? Of the author's code post on 4/27/09 as part of the package? Or is there a better version. I don't want to fix all the bugs from the community again.
Thanks in advance,
Tim
tmikula@lakesidecoders.com
|
|