Задать вопрос
spark108
@spark108

Как в PHPbb3 программно зарегистрировать пользователя?

Есть код который отлично добавляет пользователей в таблицы phpbb, то есть регает:
//Подключени движка.
	define('IN_PHPBB', true);
	
	$phpbb_root_path = $_SERVER['DOCUMENT_ROOT'] . $data['phpbb_dir'];
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	require_once($phpbb_root_path . 'common.' . $phpEx);
	require_once($phpbb_root_path.'includes/functions_user.'. $phpEx);
	
	//Сбор данных.
	$group_id = ($coppa) ? 5 : 4;
	$group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
	$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . "WHERE group_name = '" . $db->sql_escape($group_name) . "'AND group_type = " . GROUP_SPECIAL;
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$group_id = $row['group_id'];
	$timezone = '-6';
	$language = 'ru';
	$user_type = USER_NORMAL;
	$user_actkey = md5(rand(0, 100) . time());
	$user_actkey = substr($user_actkey, 0, rand(8, 12));
	$user_ip = $user->ip;
	$registration_time = time();
	$user_inactive_reason = INACTIVE_REGISTER;
	$user_inactive_time = time();
	
	//Регистрация.
	$user_row = array(
		'username'              => $data['username'],
		'user_password'         => phpbb_hash($data['password']),
		'user_email'            => $data['email'],
		'group_id'              => (int) $group_id,
		'user_timezone'         => (float) $timezone,
		'user_lang'             => $language,
		'user_type'             => $user_type,
		'user_actkey'           => $user_actkey,
		'user_ip'               => $user_ip,
		'user_regdate'          => $registration_time,
		'user_inactive_reason'  => $user_inactive_reason,
		'user_inactive_time'    => $user_inactive_time,
	);
	$user_id = user_add($user_row);

$data - Масив с логином, емайлом и паролем.

Все это как я раньше говорил, - работает на 5 с +. Но я хочу поместить все это дело в отдельную функцию.
А именно вот:
function user_added_phpbb($data){
	#------------------------------------------------------------------------------------------------#
	#	Регистрация в БД phpBB                                                                       #
	#------------------------------------------------------------------------------------------------#
	#   array $data - Масив с данными.                                                               #
	#------------------------------------------------------------------------------------------------#
	#	$data = array(                                                                               #
	#		'phpbb_dir' => '/forum/',  - Путь к phpBB относительно корня сайта.                      #
	#		'username' => 'user',      - Пользователь которого требуется зарегестрировать.           #
	#		'password' => '1234',      - Пароль пользователя которого требуется зарегестрировать.    #
	#		'email' => '1234@mail.ru', - Почтовый адрес которого требуется зарегестрировать.         #
	#	);                                                                                           #
	#------------------------------------------------------------------------------------------------#
	
	global $phpbb_root_path, $phpEx, $phpbb_dispatcher, $db, $phpbb_container;
	
	//Подключени движка.
	define('IN_PHPBB', true);
	
	$phpbb_root_path = $_SERVER['DOCUMENT_ROOT'] . $data['phpbb_dir'];
	$phpEx = substr(strrchr(__FILE__, '.'), 1);
	require_once($phpbb_root_path . 'common.' . $phpEx);
	require_once($phpbb_root_path.'includes/functions_user.'. $phpEx);
	
	//Сбор данных.
	$group_id = ($coppa) ? 5 : 4;
	$group_name = ($coppa) ? 'REGISTERED_COPPA' : 'REGISTERED';
	$sql = 'SELECT group_id FROM ' . GROUPS_TABLE . "WHERE group_name = '" . $db->sql_escape($group_name) . "'AND group_type = " . GROUP_SPECIAL;
	$result = $db->sql_query($sql);
	$row = $db->sql_fetchrow($result);
	$group_id = $row['group_id'];
	$timezone = '-6';
	$language = 'ru';
	$user_type = USER_NORMAL;
	$user_actkey = md5(rand(0, 100) . time());
	$user_actkey = substr($user_actkey, 0, rand(8, 12));
	$user_ip = $user->ip;
	$registration_time = time();
	$user_inactive_reason = INACTIVE_REGISTER;
	$user_inactive_time = time();
	
	//Регистрация.
	$user_row = array(
		'username'              => $data['username'],
		'user_password'         => phpbb_hash($data['password']),
		'user_email'            => $data['email'],
		'group_id'              => (int) $group_id,
		'user_timezone'         => (float) $timezone,
		'user_lang'             => $language,
		'user_type'             => $user_type,
		'user_actkey'           => $user_actkey,
		'user_ip'               => $user_ip,
		'user_regdate'          => $registration_time,
		'user_inactive_reason'  => $user_inactive_reason,
		'user_inactive_time'    => $user_inactive_time,
	);
	$user_id = user_add($user_row);
	return $user_id;
}

Но тут возникает проблема. Что нужно обьявить глобальные переменные, а я так думаю что их много.
Объявил эти:
global $phpbb_root_path, $phpEx, $phpbb_dispatcher, $db, $phpbb_container;

Но после этого мне выдает что глобальный масив $_SERVER отключен. В инете пишут что нужно инклудить некий файл и использовать его вместо $_SERVER (Этот файл так же есть в PHPbb, но он не робит.).

Дак вот подскажите что у меня не так работает и как все это перевести в рабочий вид, или подскажите альтернативу.

Так как моя сделанная мной система авторизации и хешировки отличается от PHPbb и очень сильно, мне пришлось сделать такую вот пакасть.!
  • Вопрос задан
  • 481 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@synapse_people
перестаньте юзать это дерьмо
Ответ написан
BanterFace
@BanterFace
jack of all trades, master of none
STK может регистрировать пользователей, посмотри там код
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы