Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
LE_TALLEC

Синхронизация пользователей нескольких форумов.

Recommended Posts

Например есть два форума A и B..

 

 

Открываем conf_global.php форума A, находим:

 

$INFO['sql_host']			=	'localhost';
$INFO['sql_database']			=	'ForumsA';
$INFO['sql_user']			=	'ForumsA';
$INFO['sql_pass']			=	'ForumsA';
$INFO['sql_tbl_prefix']			=	'ibf_';

 

Добавляем ниже:

 

$INFO['sql_host2']			=	'localhost';
$INFO['sql_database2']			=	'ForumsB';
$INFO['sql_user2']			=	'ForumsB';
$INFO['sql_pass2']			=	'ForumsB';
$INFO['sql_tbl_prefix2']			=	'ibf_';

 

Сохраняем, закачиваем обратно на сервер.

 

 

Открываем файл ./modules/ipb_member_sync.php, находим:

 

function on_create_account($member, $converge)
{
	global $ipsclass;

 

Добавляем после:

 

$ipsclass->DB2 = new db_driver;

	$ipsclass->DB2->obj['sql_database']	 = $ipsclass->vars['sql_database2'];
	$ipsclass->DB2->obj['sql_user']		 = $ipsclass->vars['sql_user2'];
	$ipsclass->DB2->obj['sql_pass']		 = $ipsclass->vars['sql_pass2'];
	$ipsclass->DB2->obj['sql_host']		 = $ipsclass->vars['sql_host2'];
	$ipsclass->DB2->obj['sql_tbl_prefix']   = $ipsclass->vars['sql_tbl_prefix2'];
	$ipsclass->DB2->obj['use_shutdown']	 = USE_SHUTDOWN;
	$ipsclass->DB2->connect();

	$ipsclass->DB2->do_insert( 'members_converge', $converge );

	//-----------------------------------------
	// Insert: MEMBERS
	//-----------------------------------------
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'id','from'=>'members','where'=>"id=".$this->ipsclass->member['id']));
if($check['id'])
{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
	$this->ipsclass->lang['asdf'] = "";
	$this->ipsclass->Error(array('MSG'=>'Member ID in Use!'));
}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'name','from'=>'members','where'=>"name=".$this->ipsclass->member['name']));
if($check['name'])
{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
	$this->ipsclass->lang['asdf'] = "";
	$this->ipsclass->Error(array('MSG'=>'Member Name in Use!'));
}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'members_display_name','from'=>'members','where'=>"members_display_name=".$this->ipsclass->member['members_display_name']));
if($check['members_display_name'])
{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
	$this->ipsclass->lang['asdf'] = "";
	$this->ipsclass->Error(array('MSG'=>'Member Display Name in Use!'));
}
$check = $this->ipsclass->DB2->build_and_exec_query(array('select'=>'email','from'=>'members','where'=>"id=".$this->ipsclass->member['email']));
if($check['email'])
{
$this->ipsclass->DB2->close_db();
$this->ipsclass->DB->connect();
	$this->ipsclass->lang['asdf'] = "";
	$this->ipsclass->Error(array('MSG'=>'Email Address in Use!'));
}

	$ipsclass->DB2->force_data_type = array( 'name' => 'string' );
	$ipsclass->DB2->do_insert( 'members', $member );

	$ipsclass->DB2->close_db();

 

 

Сохраняем, закачиваем обратно на сервер.

 

 

Открываем файл ./sources/action_public/register.php, ищем:

 

$member['password'] = trim($this->ipsclass->input['PassWord']);

		$this->modules->on_create_account($member);

 

Меняем на:

 

$this->modules->on_create_account($member, $converge); $member['password'] = trim($this->ipsclass->input['PassWord']);

 

 

Сохраняем, закачиваем обратно на сервер.

 

 

Получаем информацию о пользователях из форума A и добавляем ее в базу данных форума B.

 

 

Открываем файл ./modules/ipb_member_sync.php, находим:

 

function on_group_change( $id, $new_group )
{
	global $ipsclass;
			 if ($new_group != 3) {
				   return;
			  }
	//---- START

 

Добавляем после:

 

$ipsclass->DB2 = new db_driver;

	$ipsclass->DB2->obj['sql_database']	 = $ipsclass->vars['sql_database2'];
	$ipsclass->DB2->obj['sql_user']		 = $ipsclass->vars['sql_user2'];
	$ipsclass->DB2->obj['sql_pass']		 = $ipsclass->vars['sql_pass2'];
	$ipsclass->DB2->obj['sql_host']		 = $ipsclass->vars['sql_host2'];
	$ipsclass->DB2->obj['sql_tbl_prefix']   = $ipsclass->vars['sql_tbl_prefix2'];
	$ipsclass->DB2->obj['use_shutdown']	 = USE_SHUTDOWN;
	$ipsclass->DB2->connect();

	$ipsclass->DB2->do_update( 'members', array( 'mgroup' => intval($new_group) ), 'id='.intval($id) );
	$uptime = time()+300;
	$ipsclass->DB2->do_update('task_manager', array('task_next_run' => $uptime), 'task_id=3');

	$ipsclass->DB2->close_db();

 

Сохраняем..

 

 

Это обновление групп форума B, когда пользователю на форуме A изменяют членскую группу.

 

 

 

Указанные изменения производят синхронизацию в "одну сторону". Если вы хотите сделать ее для обеих форумов то выполните указания выше и для форума B.

 

 

 

Указанным выше методом можно сделать синхронизацию и для трех и для четырех форумов по аналогии.

 

 

 

 

Share this post


Link to post
Share on other sites
Указанные изменения производят синхронизацию в "одну сторону". Если вы хотите сделать ее для обеих форумов то выполните указания выше и для форума B.

А если и там и там есть одни и те же пользователи. Или имя пользователя разное, а емейл один?

Share this post


Link to post
Share on other sites

при новой регистрации с уже использующимся адресом эл. почты и именем должно появиться сообщение об ошибке.

Share this post


Link to post
Share on other sites

Это понятно. Но есть два форума. Форум А и Б. Которые надо синхронизовать между собой. На обоих форумах есть одни и те же пользователи. На другом форумах человек может зарегистрироваться под другим именем (есть и под тем же именем) но емейл оставить старый.

Как произойдет синхронизация таких пользователей? Если логин один и тот же, то один убьется? Если логин разный, то будет два пользователя с одним емейлом?

 

Ситуация реальная.

Share this post


Link to post
Share on other sites

Если ID найден процесс синхронизации вернет ошибку:

"Member ID in Use"

Если ID не найден продолжение процесса синхронизации.

 

Также и с почтой и с ником и с отображаемым именем.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...