Két phpbb fórum felhasználóinak az összevonása
Szerző
Üzenet
Sziasztok!
Van két phpbb fórumom és azt szeretném elérni, hogy a regisztrálók egy regisztrációval mindkét oldalon tudjanak böngészni. Ezt hogyan lehetne megoldani?
Van két phpbb fórumom és azt szeretném elérni, hogy a regisztrálók egy regisztrációval mindkét oldalon tudjanak böngészni. Ezt hogyan lehetne megoldani?
Szia!
A két fórum egy tárhelyen van, egy adatbázist használnak?
A két fórum egy tárhelyen van, egy adatbázist használnak?
Szia!
A két fórum egy tárhelyen van és két külön adatbázist használnak.
Előre is köszi!
pakoz
A két fórum egy tárhelyen van és két külön adatbázist használnak.
Előre is köszi!
pakoz
Nem felejtkeztem el a témádról, csak sajnos a meló most húzósabb a szokásosnál. Türelmedet kérném, remélem hétvégén tudom folytatni!
Semmi gond, megértem. Remélem van rá megoldás. Közben keresgéltem, de nem találtam semmi használhatót
Nem volt egyszerű, de azt hiszem, elkészültem
Előljáróban egy kis fogalom magyarázat:
Fő fórumnak fogom nevezni azt, ahol a felhasználók regisztrálnak, ennek a fórumnak a taglistáját fogja használni a többi fórum.
Másodlagos fórum pedig az, aminek nincs önálló regisztrációs lehetősége, a felhasználók a fő fórumba regisztrálva tudnak ide bejelentkezni.
A beléptetés a következőképpen működik:
Új tagok csak a fő fórumba tudnak regisztrálni. Amint bejelentkeznek a(z egyik) másodlagos fórumba, ott is létrehozásra kerül a felhasználójuk, addig viszont nem. Így a másodlagos fórumok taglistája mindig az aktuális állapotot mutatja, nem szerepelnek benne fals felhasználók. Gondolva a már üzemben lévő fórumokra, ha olyan felhasználó lép be a másodlagos fórumba, aki a fő fórumban még nem létezik, ott is létrehozásra kerül (mivel az a fórum tartalmazza a nagy, közös taglistát). Viszont ez a létrehozás csak egyirányú, ha valaki a fő forumba lép be, akkor a másodlagos(ok)ban nem kerül létrehozásra.
A fő és másodlagos fórumokban eltérő is lehet a jelszó és az e-mail cím, belépéskor mindkét jelszót ellenőrzi a kód.
A felhasználó az egyes különálló taglistákban a felhasználóneve alapján kerül azonosításra, így fontos, hogy ne engedélyezzük a jogosultságoknál a felhasználók felhasználónév módosítását, felhasználónév cserét csak úgy végezzünk, hogy az összes fórumban megváltoztatjuk a felhasználó nevét, különben kavarodás lesz.
Egy probléma jöhet még elő akkor, ha három vagy több fórumot szeretnénk összekapcsolni (két fórumnál ezzel nem kell foglalkozni): ha ugyanazzal a felhasználónévvel két különböző személy is regisztrált két különböző másodlagos fórumon, ekkor a fő fórumban az fogja beregisztrálni a felhasználó nevet, aki "előbb ér oda". Innentől egymás másodlagos fórumbeli regisztrációiba is be fognak tudni lépni a saját jelszavukkal. Ezt a problémát csak "kézzel" lehet feloldani, valamelyik felhasználó névváltoztatásával. Vagy az auth_external.php fájl
És akkor a telepítés menete:
1) Másoljuk át a fő fórum config.php-ját a másodlagos fórum(ok) gyökérkönyvtárába config_external.php néven.
2) A config_external.php fájl végére illesszük be a következő sort:
A három pont helyére illesszünk be valami véletlenszerűen generált karaktersorozatot, például innen: https://www.random.org/passwords/?num=1&len=24&format=html&rnd=new Arra figyeljünk, hogy a két aposztróf megmaradjon!
3) Másoljuk be a fő fórum gyökérkönyvtárába a következő kódot external_user.php néven:
4) Másoljuk be a másodlagos fórum(ok) includes/auth könyvtárába auth_external_db.php néven a következőt:
5) Végül a másodlagos fórum Adminisztrátori vezérlőpultján az Általános fül Azonosítás pontjában válasszuk ki az Azonosítási mód-nál az External_db-t. Ez a kiválasztásakor le fogja tiltani a fórumon a regisztrációt, így az új tagok már csak a fő fórumon keresztül fognak tudni regisztrálni. Ezt később, ha meggondolnánk magunkat, a Felhasználói regisztrációs beállítások pontban tudjuk visszaállítani az Azonosító aktiválása pontban.
Opcionális:
Ha szeretnénk, hogy a felhasználók a másodlagos fórumokból kiindulva tudjanak a fő fórumon regisztrálni, akkor módosítsuk a fórumok fejlécében lévő regisztráció linket az overall_header.html fájlban.
Prosilver esetén keressünk ehhez hasonló sort:
És szúrjuk be utána:
SubSilver2 esetén pedig ilyet:
És szúrjuk be utána:
Végül töltsük újra a használt megjelenést az Adminisztrátori vezérlőpult Megjelenések fülének Sablonok pontjában.
Fontos: Igyekeztem a lehető legalaposabban áttesztelni, ennek ellenére -összetettsége miatt- előfordulhatnak benne problémák. A használat előtt mindenképpen készítsünk mentést az érintett fórumok fájljairól és adatbázisairól is!
És végül egy utolsó megjegyzés: az utolsó két hétben egy olyan hibára vadásztam, ami olyankor jött elő, ha olyan másodlagos fórumbeli felhasználóval próbáltam meg belépni, aki még a fő fórumban nem létezett és megpróbálta a fórum létrehozni. Ekkor néha a bejelentkezési visszaigazolás fölött a következő hibaüzenet jelenik meg: "The server encountered an internal error or misconfiguration and was unable to complete your request." Ekkor a felhasználó nem mindig jön létre a fő fórumban. Végül arra jutottam, hogy a probléma a saját Apache-PHP konfigurációmból adódik, máshol nem jött elő. Ennek ellenére arra kérném a MOD-ot esetlegesen használókat, hogy ha mégis belefutnának, mindenképpen szóljanak!
Szerk.: Az lemaradt, hogy azért oldottam meg autentikációs pluginnal, mert így nem kell a két fórumnak közös adatbázist vagy közös domaint használnia. Még akár tárhelyszolgáltatón belül külön szerveren is lehetnek, addig, amíg a másodlagos fórum(ok) eléri(k) a fő fórum adatbázisát.
Előljáróban egy kis fogalom magyarázat:
Fő fórumnak fogom nevezni azt, ahol a felhasználók regisztrálnak, ennek a fórumnak a taglistáját fogja használni a többi fórum.
Másodlagos fórum pedig az, aminek nincs önálló regisztrációs lehetősége, a felhasználók a fő fórumba regisztrálva tudnak ide bejelentkezni.
A beléptetés a következőképpen működik:
Új tagok csak a fő fórumba tudnak regisztrálni. Amint bejelentkeznek a(z egyik) másodlagos fórumba, ott is létrehozásra kerül a felhasználójuk, addig viszont nem. Így a másodlagos fórumok taglistája mindig az aktuális állapotot mutatja, nem szerepelnek benne fals felhasználók. Gondolva a már üzemben lévő fórumokra, ha olyan felhasználó lép be a másodlagos fórumba, aki a fő fórumban még nem létezik, ott is létrehozásra kerül (mivel az a fórum tartalmazza a nagy, közös taglistát). Viszont ez a létrehozás csak egyirányú, ha valaki a fő forumba lép be, akkor a másodlagos(ok)ban nem kerül létrehozásra.
A fő és másodlagos fórumokban eltérő is lehet a jelszó és az e-mail cím, belépéskor mindkét jelszót ellenőrzi a kód.
A felhasználó az egyes különálló taglistákban a felhasználóneve alapján kerül azonosításra, így fontos, hogy ne engedélyezzük a jogosultságoknál a felhasználók felhasználónév módosítását, felhasználónév cserét csak úgy végezzünk, hogy az összes fórumban megváltoztatjuk a felhasználó nevét, különben kavarodás lesz.
Egy probléma jöhet még elő akkor, ha három vagy több fórumot szeretnénk összekapcsolni (két fórumnál ezzel nem kell foglalkozni): ha ugyanazzal a felhasználónévvel két különböző személy is regisztrált két különböző másodlagos fórumon, ekkor a fő fórumban az fogja beregisztrálni a felhasználó nevet, aki "előbb ér oda". Innentől egymás másodlagos fórumbeli regisztrációiba is be fognak tudni lépni a saját jelszavukkal. Ezt a problémát csak "kézzel" lehet feloldani, valamelyik felhasználó névváltoztatásával. Vagy az auth_external.php fájl
REGISTER_USER_IN_EXTERNAL_DATABASE
konstansának false értékre állításával (ekkor megszűnik a másodlagos -> fő irányú felhasználó létrehozás).
És akkor a telepítés menete:
1) Másoljuk át a fő fórum config.php-ját a másodlagos fórum(ok) gyökérkönyvtárába config_external.php néven.
2) A config_external.php fájl végére illesszük be a következő sort:
Kód:
$auth_external_db_salt = '...';
A három pont helyére illesszünk be valami véletlenszerűen generált karaktersorozatot, például innen: https://www.random.org/passwords/?num=1&len=24&format=html&rnd=new Arra figyeljünk, hogy a két aposztróf megmaradjon!
3) Másoljuk be a fő fórum gyökérkönyvtárába a következő kódot external_user.php néven:
Kód:
<?php
define('IN_PHPBB', true);
// Specify the path to you phpBB3 installation directory.
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);
$mode = request_var('mode', '');
// Add new user
if ($mode == 'user_add')
{
$user = request_var('user', '');
$ip = request_var('ip', '');
$time = request_var('time', 0);
$hash = request_var('hash', '');
if (strlen($user) == 0 || $time == 0 || strlen($hash) == 0)
{
return;
}
// Check HMAC
$user = str_replace('"', '"', $user);
$message = $user . $ip . $time;
$time_delta = abs(time() - $time);
if (hash_hmac('sha256', $message, $auth_external_db_salt) !== $hash || $time_delta > 300)
{
return;
}
$user = json_decode($user, true);
$user['user_ip'] = $ip;
$user['user_new'] = 1;
unset($user['user_id']);
$username_clean = utf8_clean_string($user['username']);
$sql = 'SELECT user_id
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $db->sql_escape($username_clean) . "'";
$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
if (!$row)
{
user_add($user);
}
}
?>
4) Másoljuk be a másodlagos fórum(ok) includes/auth könyvtárába auth_external_db.php néven a következőt:
Kód:
<?php
/**
* Külső adatbázisból autentikáló plugin.
* Magyar phpBB Közösség, 2014-03-30.
* http://phpbb.hu/forum/tema/6375
*/
define('REGISTER_USER_IN_EXTERNAL_DATABASE', true);
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* Checks whether the user is identified to external database
* Called in acp_board while setting authentication plugins
*
* @return boolean|string false if the user is identified and else an error message
*/
function init_external_db()
{
set_config('require_activation', USER_ACTIVATION_DISABLE, true);
return false;
}
/**
* Login function
*
* @param string $username
* @param string $password
* @param string $ip IP address the login is taking place from. Used to
* limit the number of login attempts per IP address.
* @param string $browser The user agent used to login
* @param string $forwarded_for X_FORWARDED_FOR header sent with login request
* @return array A associative array of the format
* array(
* 'status' => status constant
* 'error_msg' => string
* 'user_row' => array
* )
*/
function login_external_db($username, $password, $ip = '', $browser = '', $forwarded_for = '')
{
global $phpbb_root_path, $phpEx, $config, $db;
// Load the external config file
if (file_exists($phpbb_root_path . 'config_external.' . $phpEx))
{
require($phpbb_root_path . 'config_external.' . $phpEx);
}
else
{
trigger_error('External authentication settings not found', E_USER_ERROR);
}
// External table names
define('LOGIN_ATTEMPT_TABLE_EXTERNAL', $table_prefix . 'login_attempts');
define('USERS_TABLE_EXTERNAL', $table_prefix . 'users');
define('CONFIG_TABLE_EXTERNAL', $table_prefix . 'config');
if (check_database_similarity_external_db($dbms, $dbhost, $dbport, $dbname, $dbuser))
{
// We can use the current connection
$external_db = $db;
}
else
{
// We need to create a new connection
if (!class_exists('dbal_' . $dbms))
{
require($phpbb_root_path . 'includes/db/' . $dbms . '.' . $phpEx);
}
$sql_db = 'dbal_' . $dbms;
$external_db = new $sql_db();
// Connect to the external DB
$external_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);
// Do not allow empty password
if (!$password)
{
return array(
'status' => LOGIN_ERROR_PASSWORD,
'error_msg' => 'NO_PASSWORD_SUPPLIED',
'user_row' => array('user_id' => ANONYMOUS),
);
}
// Do not allow empty username
if (!$username)
{
return array(
'status' => LOGIN_ERROR_USERNAME,
'error_msg' => 'LOGIN_ERROR_USERNAME',
'user_row' => array('user_id' => ANONYMOUS),
);
}
$username_clean = utf8_clean_string($username);
// Check user in both database
$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts, group_id
FROM ' . USERS_TABLE . "
WHERE username_clean = '" . $external_db->sql_escape($username_clean) . "'";
$result = $external_db->sql_query($sql);
$external_row = $external_db->sql_fetchrow($result);
$external_db->sql_freeresult($result);
$sql = 'SELECT user_id, username, user_password, user_passchg, user_pass_convert, user_email, user_type, user_login_attempts, group_id
FROM ' . USERS_TABLE_EXTERNAL . "
WHERE username_clean = '" . $external_db->sql_escape($username_clean) . "'";
$result = $db->sql_query($sql);
$local_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);
// User exists in both
if (!empty($local_row) && !empty($external_row))
{
$current_row = $local_row;
}
// Only local user exists
elseif (!empty($local_row) && empty($external_row))
{
// Add user to external database
$current_row = $local_row;
if (phpbb_check_hash($password, $current_row['user_password']))
{
if (REGISTER_USER_IN_EXTERNAL_DATABASE && function_exists('curl_init'))
{
// Get the external forum URL
$sql = 'SELECT config_name, config_value, is_dynamic
FROM ' . CONFIG_TABLE_EXTERNAL . "
WHERE config_name IN ('server_protocol', 'server_name', 'server_port', 'script_path')";
$result = $external_db->sql_query($sql);
while ($config_row = $db->sql_fetchrow($result))
{
$external_config[$config_row['config_name']] = $config_row['config_value'];
}
$db->sql_freeresult($result);
$external_script_url = $external_config['server_protocol'] . $external_config['server_name'] . ':' . $external_config['server_port'] . $external_config['script_path'] . '/external_user.' . $phpEx . '?mode=user_add';
$curl = curl_init($external_script_url);
$post_user = json_encode($current_row);
$post_time = time();
$message = $post_user . $ip . $post_time;
$post_hash = hash_hmac('sha256', $message, $auth_external_db_salt);
$post_fields = 'user=' . $post_user . '&ip=' . $ip . '&time=' . $post_time . '&hash=' . $post_hash;
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($curl, CURLOPT_BINARYTRANSFER, true);
$output = curl_exec($curl);
curl_close($curl);
}
}
else
{
return array(
'status' => LOGIN_ERROR_EXTERNAL_AUTH,
'error_msg' => 'LOGIN_ERROR_PASSWORD',
'user_row' => $current_row,
);
}
}
// Only external user exists
elseif (empty($local_row) && !empty($external_row))
{
// Add user to local database
$current_row = $external_row;
$current_row['user_ip'] = $ip;
$user['user_new'] = 1;
unset($current_row['user_id']);
if (phpbb_check_hash($password, $current_row['user_password']))
{
return array(
'status' => LOGIN_SUCCESS_CREATE_PROFILE,
'error_msg' => false,
'user_row' => $current_row,
);
}
else
{
return array(
'status' => LOGIN_ERROR_EXTERNAL_AUTH,
'error_msg' => 'LOGIN_ERROR_PASSWORD',
'user_row' => $current_row,
);
}
}
if (($ip && !$config['ip_login_limit_use_forwarded']) ||
($forwarded_for && $config['ip_login_limit_use_forwarded']))
{
$sql = 'SELECT COUNT(*) AS attempts
FROM ' . LOGIN_ATTEMPT_TABLE_EXTERNAL . '
WHERE attempt_time > ' . (time() - (int) $config['ip_login_limit_time']);
if ($config['ip_login_limit_use_forwarded'])
{
$sql .= " AND attempt_forwarded_for = '" . $external_db->sql_escape($forwarded_for) . "'";
}
else
{
$sql .= " AND attempt_ip = '" . $external_db->sql_escape($ip) . "' ";
}
$result = $external_db->sql_query($sql);
$attempts = (int) $external_db->sql_fetchfield('attempts');
$external_db->sql_freeresult($result);
$attempt_data = array(
'attempt_ip' => $ip,
'attempt_browser' => trim(substr($browser, 0, 149)),
'attempt_forwarded_for' => $forwarded_for,
'attempt_time' => time(),
'user_id' => ($current_row) ? (int) $current_row['user_id'] : 0,
'username' => $username,
'username_clean' => $username_clean,
);
$sql = 'INSERT INTO ' . LOGIN_ATTEMPT_TABLE_EXTERNAL . $external_db->sql_build_array('INSERT', $attempt_data);
$result = $external_db->sql_query($sql);
}
else
{
$attempts = 0;
}
if (!$current_row)
{
if ($config['ip_login_limit_max'] && $attempts >= $config['ip_login_limit_max'])
{
return array(
'status' => LOGIN_ERROR_ATTEMPTS,
'error_msg' => 'LOGIN_ERROR_ATTEMPTS',
'user_row' => array('user_id' => ANONYMOUS),
);
}
return array(
'status' => LOGIN_ERROR_USERNAME,
'error_msg' => 'LOGIN_ERROR_USERNAME',
'user_row' => array('user_id' => ANONYMOUS),
);
}
$show_captcha = ($config['max_login_attempts'] && $current_row['user_login_attempts'] >= $config['max_login_attempts']) ||
($config['ip_login_limit_max'] && $attempts >= $config['ip_login_limit_max']);
// If there are too much login attempts, we need to check for an confirm image
// Every auth module is able to define what to do by itself...
if ($show_captcha)
{
// Visual Confirmation handling
if (!class_exists('phpbb_captcha_factory'))
{
global $phpbb_root_path, $phpEx;
include ($phpbb_root_path . 'includes/captcha/captcha_factory.' . $phpEx);
}
$captcha =& phpbb_captcha_factory::get_instance($config['captcha_plugin']);
$captcha->init(CONFIRM_LOGIN);
$vc_response = $captcha->validate($current_row);
if ($vc_response)
{
return array(
'status' => LOGIN_ERROR_ATTEMPTS,
'error_msg' => 'LOGIN_ERROR_ATTEMPTS',
'user_row' => $current_row,
);
}
else
{
$captcha->reset();
}
}
// If the password convert flag is set we need to convert it
if ($current_row['user_pass_convert'])
{
// in phpBB2 passwords were used exactly as they were sent, with addslashes applied
$password_old_format = isset($_REQUEST['password']) ? (string) $_REQUEST['password'] : '';
$password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format;
$password_new_format = '';
set_var($password_new_format, stripslashes($password_old_format), 'string', true);
if ($password == $password_new_format)
{
if (!function_exists('utf8_to_cp1252'))
{
global $phpbb_root_path, $phpEx;
include($phpbb_root_path . 'includes/utf/data/recode_basic.' . $phpEx);
}
// cp1252 is phpBB2's default encoding, characters outside ASCII range might work when converted into that encoding
// plain md5 support left in for conversions from other systems.
if ((strlen($current_row['user_password']) == 34 && (phpbb_check_hash(md5($password_old_format), $current_row['user_password']) || phpbb_check_hash(md5(utf8_to_cp1252($password_old_format)), $current_row['user_password'])))
|| (strlen($current_row['user_password']) == 32 && (md5($password_old_format) == $current_row['user_password'] || md5(utf8_to_cp1252($password_old_format)) == $current_row['user_password'])))
{
$hash = phpbb_hash($password_new_format);
// Update the password in the users table to the new format and remove user_pass_convert flag
$sql = 'UPDATE ' . USERS_TABLE_EXTERNAL . '
SET user_password = \'' . $external_db->sql_escape($hash) . '\',
user_pass_convert = 0
WHERE user_id = ' . $current_row['user_id'];
$external_db->sql_query($sql);
$current_row['user_pass_convert'] = 0;
$current_row['user_password'] = $hash;
}
else
{
// Although we weren't able to convert this password we have to
// increase login attempt count to make sure this cannot be exploited
$sql = 'UPDATE ' . USERS_TABLE_EXTERNAL . '
SET user_login_attempts = user_login_attempts + 1
WHERE user_id = ' . (int) $current_row['user_id'] . '
AND user_login_attempts < ' . LOGIN_ATTEMPTS_MAX;
$external_db->sql_query($sql);
return array(
'status' => LOGIN_ERROR_PASSWORD_CONVERT,
'error_msg' => 'LOGIN_ERROR_PASSWORD_CONVERT',
'user_row' => $current_row,
);
}
}
}
// Check password ...
if (!$current_row['user_pass_convert'] &&
(phpbb_check_hash($password, $local_row['user_password']) ||
(!empty($external_row) && $external_row['user_email'] == $local_row['user_email'] && phpbb_check_hash($password, $external_row['user_password']))))
{
// Check for old password hash...
if (strlen($current_row['user_password']) == 32)
{
$hash = phpbb_hash($password);
// Update the password in the users table to the new format
$sql = 'UPDATE ' . USERS_TABLE_EXTERNAL . "
SET user_password = '" . $external_db->sql_escape($hash) . "',
user_pass_convert = 0
WHERE user_id = {$current_row['user_id']}";
$external_db->sql_query($sql);
$current_row['user_password'] = $hash;
}
$sql = 'DELETE FROM ' . LOGIN_ATTEMPT_TABLE_EXTERNAL . '
WHERE user_id = ' . $current_row['user_id'];
$external_db->sql_query($sql);
if ($current_row['user_login_attempts'] != 0)
{
// Successful, reset login attempts (the user passed all stages)
$sql = 'UPDATE ' . USERS_TABLE_EXTERNAL . '
SET user_login_attempts = 0
WHERE user_id = ' . $current_row['user_id'];
$external_db->sql_query($sql);
}
// User inactive...
if ($current_row['user_type'] == USER_INACTIVE || $current_row['user_type'] == USER_IGNORE)
{
return array(
'status' => LOGIN_ERROR_ACTIVE,
'error_msg' => 'ACTIVE_ERROR',
'user_row' => $current_row,
);
}
// Successful login... set user_login_attempts to zero...
return array(
'status' => LOGIN_SUCCESS,
'error_msg' => false,
'user_row' => $current_row,
);
}
// Password incorrect - increase login attempts
$sql = 'UPDATE ' . USERS_TABLE_EXTERNAL . '
SET user_login_attempts = user_login_attempts + 1
WHERE user_id = ' . (int) $current_row['user_id'] . '
AND user_login_attempts < ' . LOGIN_ATTEMPTS_MAX;
$external_db->sql_query($sql);
// Give status about wrong password...
return array(
'status' => ($show_captcha) ? LOGIN_ERROR_ATTEMPTS : LOGIN_ERROR_PASSWORD,
'error_msg' => ($show_captcha) ? 'LOGIN_ERROR_ATTEMPTS' : 'LOGIN_ERROR_PASSWORD',
'user_row' => $current_row,
);
}
function check_database_similarity_external_db($external_dbms, $external_dbhost, $external_dbport, $external_dbname, $external_dbuser)
{
global $dbms, $dbhost, $dbport, $dbname, $dbuser;
if ($dbms === $external_dbms &&
$dbhost === $external_dbhost && $dbport === $external_dbport &&
$dbname === $external_dbname && $dbuser === $external_dbuser)
{
return true;
}
return false;
}
?>
5) Végül a másodlagos fórum Adminisztrátori vezérlőpultján az Általános fül Azonosítás pontjában válasszuk ki az Azonosítási mód-nál az External_db-t. Ez a kiválasztásakor le fogja tiltani a fórumon a regisztrációt, így az új tagok már csak a fő fórumon keresztül fognak tudni regisztrálni. Ezt később, ha meggondolnánk magunkat, a Felhasználói regisztrációs beállítások pontban tudjuk visszaállítani az Azonosító aktiválása pontban.
Opcionális:
Ha szeretnénk, hogy a felhasználók a másodlagos fórumokból kiindulva tudjanak a fő fórumon regisztrálni, akkor módosítsuk a fórumok fejlécében lévő regisztráció linket az overall_header.html fájlban.
Prosilver esetén keressünk ehhez hasonló sort:
Kód:
<!-- IF not S_USER_LOGGED_IN and S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --><li class="icon-register"><a href="{U_REGISTER}">{L_REGISTER}</a></li><!-- ENDIF -->
És szúrjuk be utána:
Kód:
<!-- IF not S_USER_LOGGED_IN and not S_REGISTER_ENABLED --><li class="icon-register"><a href="http://foforumunk.hu/cime/ucp.php?mode=register">{L_REGISTER}</a></li><!-- ENDIF -->
SubSilver2 esetén pedig ilyet:
Kód:
<!-- ELSEIF S_REGISTER_ENABLED and not (S_SHOW_COPPA or S_REGISTRATION) --> <a href="{U_REGISTER}"><img src="{T_THEME_PATH}/images/icon_mini_register.gif" width="12" height="13" alt="*" /> {L_REGISTER}</a>
<!-- ENDIF -->
És szúrjuk be utána:
Kód:
<!-- IF not S_USER_LOGGED_IN and not S_REGISTER_ENABLED --> <a href="http://foforumunk.hu/cime/ucp.php?mode=register"><img src="{T_THEME_PATH}/images/icon_mini_register.gif" width="12" height="13" alt="*" /> {L_REGISTER}</a><!-- ENDIF -->
Végül töltsük újra a használt megjelenést az Adminisztrátori vezérlőpult Megjelenések fülének Sablonok pontjában.
Fontos: Igyekeztem a lehető legalaposabban áttesztelni, ennek ellenére -összetettsége miatt- előfordulhatnak benne problémák. A használat előtt mindenképpen készítsünk mentést az érintett fórumok fájljairól és adatbázisairól is!
És végül egy utolsó megjegyzés: az utolsó két hétben egy olyan hibára vadásztam, ami olyankor jött elő, ha olyan másodlagos fórumbeli felhasználóval próbáltam meg belépni, aki még a fő fórumban nem létezett és megpróbálta a fórum létrehozni. Ekkor néha a bejelentkezési visszaigazolás fölött a következő hibaüzenet jelenik meg: "The server encountered an internal error or misconfiguration and was unable to complete your request." Ekkor a felhasználó nem mindig jön létre a fő fórumban. Végül arra jutottam, hogy a probléma a saját Apache-PHP konfigurációmból adódik, máshol nem jött elő. Ennek ellenére arra kérném a MOD-ot esetlegesen használókat, hogy ha mégis belefutnának, mindenképpen szóljanak!
Szerk.: Az lemaradt, hogy azért oldottam meg autentikációs pluginnal, mert így nem kell a két fórumnak közös adatbázist vagy közös domaint használnia. Még akár tárhelyszolgáltatón belül külön szerveren is lehetnek, addig, amíg a másodlagos fórum(ok) eléri(k) a fő fórum adatbázisát.
Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.