Создание объединенной системы регистрации на DLE 9.3 и IPB 3.1.4
Описание: Данная интеграция позволяет регистрируясь на DLE движке авторизироваться с этим же аккаунтов на форуме IPB.
Открываем: dle/engine/modules/
register.php
Находим:
	PHP код:
 
	
		
			
require_once ENGINE_DIR . '/classes/parse.class.php'; 
		
	
 Добавляем ниже:
	PHP код:
 
	
		
			
 $ipb_dle_lan[0] = "Данное имя уже используется на форуме.";
 $db_ipb_user = "пользователь";
 $db_ipb_password = "пароль";
 $db_ipb_namedb = "имя_базы";
 $db_ipb_local = "localhost";
 $db_ipb_error = 1; // 1 - показывать ошибки в соединении с бд форума, 0 - нет
 $db_prefix_ipb = "префикс_если_его_нету_оставить_пустым";
 $ipb = new db;
 $ipb->connect($db_ipb_user, $db_ipb_password, $db_ipb_namedb, $db_ipb_local, $db_ipb_error); 
		
	
 Находим:
	PHP код:
 
	
		
			
global $lang, $db, $banned_info, $relates_word; 
		
	
 Меняем на:
	PHP код:
 
	
		
			
global $lang, $db, $banned_info, $relates_word, $ipb, $ipb_dle_lan, $db_prefix_ipb; 
		
	
 Находим:
	PHP код:
 
	
		
			
$row = $db->super_query( "SELECT COUNT(*) as count FROM " . USERPREFIX . "_users WHERE email = '$email' OR LOWER(name) REGEXP '[[:<:]]{$search_name}[[:>:]]' OR name = '$name'" ); 
		
	
 Добавляем ниже:
	PHP код:
 
	
		
			
$ipb_test_name = $ipb->super_query ("SELECT COUNT(*) as count FROM {$db_prefix_ipb}members where name = '".strtolower($name)."'");
 if ($ipb_test_name ['count'] > 0) $stop .= $ipb_dle_lan[0]; 
		
	
 Находим:
	PHP код:
 
	
		
			
$db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '" . $config['reg_group'] . "', '', '', '', '', '" . $_IP . "')" ); 
		
	
 Добавляем ниже:
	PHP код:
 
	
		
			
 $ipb_dle = new ipb_dle;
 $salt = $ipb_dle->generate_password_salt(5);
 $salt = addslashes($salt);
 $ph = $ipb_dle->generate_compiled_passhash($salt, md5($_POST['password1']) ); // для бакланозавров и копипастеров, это взято с bormotuhi.net
 $insert_ipb = $ipb->insert_id(); //ид вставки
 $member_key = $ipb_dle->generate_auto_log_in_key();
 $key_expire = $member_key * 60 * 60 * 24;
 $ipb->query("INSERT INTO `{$db_prefix_ipb}members` (
 member_id,
 name,
 members_l_username,
 members_display_name,
 members_l_display_name,
 members_seo_name,
 member_login_key,
 member_login_key_expire,
 email,
 member_group_id,
 joined,
 ip_address,
 time_offset,
 allow_admin_mails,
 language,
 msg_show_notification,
 members_auto_dst,
 members_pass_hash,
 members_pass_salt
 )
 VALUES (
 0,
 '$name',
 '".strtolower($name)."',
 '$name',
 '".strtolower($name)."',
 '".strtolower($name)."',
 '".$ipb_dle->generate_auto_log_in_key()."',
 '$key_expire',
 '$email',
 '3',
 '".time()."',
 '$_IP',
 '3',
 '1',
 '1',
 '1',
 '0',
 '$ph',
 '$salt'
 )");
 $ipb_st = $ipb->super_query("select * from {$db_prefix_ipb}cache_store where cs_key = 'stats'");
 $st_arr = unserialize($ipb_st['cs_value']);
 $st_arr['mem_count']++;
 $st_arr['last_mem_name'] = $name;
 $st_arr['last_mem_id'] = $insert_ipb;
 $st_arr2 = serialize($st_arr);
 $ipb->query("UPDATE {$db_prefix_ipb}cache_store set cs_value = '$st_arr2' where cs_key = 'stats'"); 
		
	
 Находим:
Вставляем выше:
	PHP код:
 
	
		
			
 class ipb_dle
 {
 function generate_password_salt($len=5)
 {
 $salt = '';
 for ( $i = 0; $i < $len; $i++ )
 {
 $num = rand(33, 126);
 if ( $num == '92' )
 {
 $num = 93;
 }
 $salt .= chr( $num );
 }
 return $salt;
 }
 function generate_compiled_passhash($salt, $md5_once_password)
 {
 return md5( md5( $salt ) . $md5_once_password );
 }
 function generate_auto_log_in_key($len=60)
 {
 $pass = $this->generate_password_salt( $len );
 return md5($pass);
 }
 } 
		
	
 Открываем dle/engine/ajax/
registration.php
Находим:
	PHP код:
 
	
		
			
 $db->query ("SELECT name FROM " . USERPREFIX . "_users WHERE LOWER(name) REGEXP '[[:<:]]{$search_name}[[:>:]]' OR name = '$name'");
 if ($db->num_rows() > 0)
 {
 $stop .= $lang['reg_err_20'];
 } 
		
	
 Добавляем ниже:
	PHP код:
 
	
		
			
 $ipb_dle_lan[0] = "Данное имя уже используется на форуме.";
 $db_ipb_user = "пользователь";
 $db_ipb_password = "пароль";
 $db_ipb_namedb = "имя_базы";
 $db_ipb_local = "localhost";
 $db_ipb_error = 1; // 1 - показывать ошибки в соединении с бд форума, 0 - нет
 $db_prefix_ipb = "префикс_если_его_нету_оставить_пустым";
 $ipb = new db;
 $ipb->connect($db_ipb_user, $db_ipb_password, $db_ipb_namedb, $db_ipb_local, $db_ipb_error);
 $ipb_test_name = $ipb->super_query ("SELECT COUNT(*) as count FROM {$db_prefix_ipb}members where name = '".strtolower($name)."'");
 if ($ipb_test_name ['count'] > 0) $stop .= $ipb_dle_lan[0]; 
		
	
 Статью нашел в интернете и малость пофиксил, ибо по всему интернету тупой копипаст прямо с ошибкой. Для бормотухи без ошибки )