Skip to content

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

Например есть два форума 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.

 

 

 

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

 

 

 

 

Featured Replies

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

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

  • Author

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

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

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

 

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

  • Author

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

"Member ID in Use"

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

 

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

Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.