Регистрация на сайте с одновременной регистрацией на форуме

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

rxu
да, кстати, я когда пароли переносил, заметил. В двойке используется md5, в олимпусе уже что-то другое.
Odina
к сожалению не могу как-либо прокомментировать это, потому что основной автор этой интеграции не я. Я лишь исправил несколько ошибок, протестировал и записал инструкцию согласно стандартам оформления модов phpBB.
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
Odina
phpBB 1.2.0
Сообщения: 10
Стаж: 18 лет 5 месяцев
Откуда: Санк-Петербург

Сообщение Odina »

rxu писал(а):Odina
Не занимайтесь самодеятельностью, тем более, что в phpBB3 хэш собственный, а не чистый md5.
includes/functions_user.php
function user_add
Я бы рада, но функция user_add тащит за собой приличное количество классов и других функций :(

Предложенный вариант вполне рабочий, после небольшой модернизации. В результате регистрация происходит, пользователь успешно аутентифицируется форумом.

Добавлено спустя 2 часа 8 минут 31 секунду:

Попробовала воспользоваться функцией user_add

Код: Выделить всё

<?php
define('IN_PHPBB', true);

$phpbb_root_path='forum/';
$phpEx="php";

// Include files
include ("forum/config.php");

require($phpbb_root_path . 'includes/acm/acm_file.' . $phpEx);
require($phpbb_root_path . 'includes/cache.' . $phpEx);
//require($phpbb_root_path . 'includes/template.' . $phpEx);
require($phpbb_root_path . 'includes/session.' . $phpEx);
require($phpbb_root_path . 'includes/auth.' . $phpEx);

require($phpbb_root_path . 'includes/functions.' . $phpEx);
require($phpbb_root_path . 'includes/functions_content.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);

require($phpbb_root_path . 'includes/constants.' . $phpEx);
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);

// Set PHP error handler to ours
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');

// Instantiate some basic classes
$user		= new user();
$auth		= new auth();
//$template	= new template();
$cache		= new cache();
$db			= new $sql_db();

// Connect to DB
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);

// We do not need this any longer, unset for safety purposes
unset($dbpasswd);

// Grab global variables, re-cache if necessary
$config = $cache->obtain_config();

// Add own hook handler
//require($phpbb_root_path . 'includes/hooks/index.' . $phpEx);
//$phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('template', 'display')));

//foreach ($cache->obtain_hooks() as $hook)
//{
//	@include($phpbb_root_path . 'includes/hooks/' . $hook . '.' . $phpEx);
//}

$user_row['username'] = "qwerty";
$user_row['user_password'] = phpbb_hash("qwerty");
$user_row['group_id'] = 2;
$user_row['user_email'] = "qwerty@qwerty.ru";
$user_row['user_type'] = 0;

user_add($user_row,false);

?>
Все Ok, пользователь регистрируется. Осталось только убрать ненужное для регистрации.

Добавлено спустя 2 минуты 6 секунд:

Перед отправкой данных, надо обязательно проверить наличие пользователя с таким логином или email, а то вылетает глобальная ошибка MySql.

Добавлено спустя 48 минут 18 секунд:

Начала раскручивать клубок, собирая все функции, запрашиваемые скриптом. Набрала на 1500 строк, плюнула, пускай будет так, как есть.

Код: Выделить всё

<?php
define('IN_PHPBB', true);

$phpbb_root_path='forum/';
$phpEx="php";

// Include files
require("forum/config.php");

require($phpbb_root_path . 'includes/utf/utf_normalizer.' . $phpEx);
require($phpbb_root_path . 'includes/acm/acm_file.' . $phpEx);
require($phpbb_root_path . 'includes/cache.' . $phpEx);
require($phpbb_root_path . 'includes/session.' . $phpEx);
require($phpbb_root_path . 'includes/auth.' . $phpEx);
require($phpbb_root_path . 'includes/functions.' . $phpEx);
require($phpbb_root_path . 'includes/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/constants.' . $phpEx);
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx);

// Set PHP error handler to ours
set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');

// Instantiate some basic classes
$user		= new user();
$auth		= new auth();
$cache		= new cache();
$db		= new $sql_db();

// Connect to DB
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);

// We do not need this any longer, unset for safety purposes
unset($dbpasswd);

// Grab global variables, re-cache if necessary
$config = $cache->obtain_config();

$user_row['username'] = "qwerty"; 
$user_row['user_password'] = phpbb_hash("qwerty"); 
$user_row['group_id'] = 2; 
$user_row['user_email'] = "qwerty@qwerty.ru"; 
$user_row['user_type'] = 0; 

user_add($user_row,false);
?>
Если толкнуть кувшин, из него плеснет тем, чем он наполнен...
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Сообщение rxu »

Odina
Вместо десятков ненужных строк кода, предшествующих вызову user_add, вы могли просто сделать

Код: Выделить всё

include($phpbb_root_path . 'common.' . $phpEx);
Изображение
Аватара пользователя
Odina
phpBB 1.2.0
Сообщения: 10
Стаж: 18 лет 5 месяцев
Откуда: Санк-Петербург

Сообщение Odina »

И подключится все подряд, абсолютно ненужное мне для работы.
Если толкнуть кувшин, из него плеснет тем, чем он наполнен...
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Сообщение rxu »

Odina писал(а):И подключится все подряд
Что - всё подряд?
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

Каким образом обрабатывается bb-код в подписи пользователя? В базе данных в таблице users несколько полей, в одном хранится сам текст подписи, в другом bb-коды, причем в странном формате. Так вот, при интеграции и выводе подписи пользователя таким образом:

Код: Выделить всё

		if($userinfo['user_sig'] != $user_sig) $db->sql_query("UPDATE ".$prefix."_users SET user_sig = '".$user_sig."' WHERE LOWER(user_name) = '".$user_name."'");
получается такой результат:

Код: Выделить всё

Текст обычной толщины и [b:8nioq7rc]жирный![/b:8nioq7rc]
Вопрос - как правильно выводить подпись вне форума?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 17272
Стаж: 20 лет 4 месяца
Откуда: Красноярск
Благодарил (а): 632 раза
Поблагодарили: 2412 раз

Сообщение rxu »

Есть поля user_sig_bbcode_uid и user_sig_bbcode_bitfield, которые используются при парсинге ббкода.
Обработку можете посмотреть во viewtopic.php, блок начинается с комментария

Код: Выделить всё

// End signature parsing, only if needed
Изображение
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

То есть вместо этого:

Код: Выделить всё

	if($userinfo['user_sig'] != $user_sig) $db->sql_query("UPDATE ".$prefix."_users SET user_sig = '".$user_sig."' WHERE LOWER(user_name) = '".$user_name."'");
должно быть так:

Код: Выделить всё

		$user_sig = censor_text($user_sig);
		$user_sig = bbcode_nl2br($user_sig);
		$user_sig = smiley_text($user_sig);
		if($userinfo['user_sig'] != $user_sig) $db->sql_query("UPDATE ".$prefix."_users SET user_sig = '".$user_sig."' WHERE LOWER(user_name) = '".$user_name."'");
верно?
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы
Аватара пользователя
FladeX
Former team member
Сообщения: 1935
Стаж: 19 лет 3 месяца
Откуда: Саранск
Благодарил (а): 7 раз
Поблагодарили: 59 раз

Сообщение FladeX »

Скажите хотя бы где эти функции заданы? Не нашел я их...
//
// Okay, let's do the loop, yeah come on baby let's do the loop
// and it goes like this ...
| phpBB Adept ] | Каталог форумов | генератор sitemap для форумов | форум про форумы

Вернуться в «Для авторов (phpBB 3.0.x)»