Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
LE_TALLEC

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

Рекомендованные сообщения

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

 

 

 

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

 

 

 

 

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

Поделиться сообщением


Ссылка на сообщение

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

"Member ID in Use"

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

 

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

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...