Простоузер
Join Date: Jun 2007
Location: Киев
Posts: 26
Версия vB: 3.7.1
Reputation:
Novice 6
Репутация в разделе: 5
|
Нужна помощь в интеграции vBulletin, Joomla и Community Builder
0
Интеграция от BBPixel JVB работает на ура, но нужно больше чем дает интеграция.
На сайте написано что она не поддерживает Community Builder (расширенный профиль для Joomla), но она и не конфликтует с интеграцией.
У меня на сайте изначально было установлено много компонентов на Community Builder, поэтому спрыгивать не могу.
Проблема заключается в том, что при регистрации данные пользователя записываются только в две таблицы (vBulletin и Joomla), а мне нужно, чтобы и в таблицу comprofiler от Community Builder.
Все начинает правильно работать, если воспользоваться синхронизацией в админке Joomla Components -> Community Builder->Tools Manager.
Я из компонента достал полностью функцию, которая занимается синхронизацией
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function syncUsers() {
global $database, $my, $ueConfig;
// 1. add missing comprofiler entries, guessing naming depending on CB's name style:
switch ( $ueConfig['name_style'] ) {
case 2:
// firstname + lastname:
$sql = "INSERT IGNORE INTO #__comprofiler(id,user_id,lastname,firstname) "
." SELECT id,id, SUBSTRING_INDEX(name,' ',-1), "
."SUBSTRING( name, 1, length( name ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ) "
." FROM #__users";
break;
case 3:
// firstname + middlename + lastname:
$sql = "INSERT IGNORE INTO #__comprofiler(id,user_id,middlename,lastname,firstname) "
. " SELECT id,id,SUBSTRING( name, INSTR( name, ' ' ) +1,"
." length( name ) - INSTR( name, ' ' ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ),"
." SUBSTRING_INDEX(name,' ',-1),"
." IF(INSTR(name,' '),SUBSTRING_INDEX( name, ' ', 1 ),'') "
. " FROM #__users";
break;
default:
// name only:
$sql = "INSERT IGNORE INTO #__comprofiler(id,user_id) SELECT id,id FROM #__users";
break;
}
$database->setQuery($sql);
if (!$database->query()) {
print("<font color=red>SQL error" . $database->stderr(true)."</font><br />");
return;
}
$affected = mysql_affected_rows();
if ($affected) {
print "<p><font color='orange'>Added ".$affected." new entries to Community Builder from users Table.</font></p>";
}
$sql = "UPDATE #__comprofiler SET `user_id`=`id`";
$database->setQuery($sql);
if (!$database->query()) {
print("<font color=red>SQL error" . $database->stderr(true)."</font><br />");
return;
}
$affected = mysql_affected_rows();
if ($affected) {
print "<p><font color='orange'>Fixed ".$affected." existing entries in Community Builder: fixed wrong user_id.</font></p>";
}
// 2. remove excessive comprofiler entries (e.g. if admin used joomla! delete user function:
$sql = "SELECT c.id FROM #__comprofiler c LEFT JOIN #__users u ON u.id = c.id WHERE u.id IS NULL";
$database->setQuery($sql);
$users = $database->loadResultArray();
if (count($users)) {
print "<p><font color='orange'>Removing ".count($users)." entries from Community Builder missing in users Table.</font></p>";
}
if ($database->getErrorNum()) {
print("<font color=red>SQL error" . $database->stderr(true)."</font><br />");
return;
}
$msg = deleteUsers($users, true);
print "<p>".$msg."</p>";
print "<font color=green>Joomla/Mambo User Table and Joomla Community Builder User Table now in sync!</font>";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
С того, что я понял, я сделал вот такой запрос:
$sql ="INSERT IGNORE INTO j_pp_comprofiler(id,user_id,lastname,firstname) "
." SELECT id,id, SUBSTRING_INDEX(name,' ',-1), "
."SUBSTRING( name, 1, length( name ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ) "
." FROM j_pp_users";
$db->setQuery($sql);
И вставил его в vb/register.php
В строку 1020 после команды
// activate account
$userdata->save();
Но того эффекта, что ожидал не было
Потом попробовал запрос:
$user1 = $db->$sql("INSERT IGNORE INTO j_pp_comprofiler(id,user_id,lastname,firstname) "
." SELECT id,id, SUBSTRING_INDEX(name,' ',-1), " ."SUBSTRING( name, 1, length( name ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ) " ." FROM j_pp_users");
Снова не получилось.
Вопросы:
1. Куда нужно прописывать код, чтобы он выполнялся сразу после выполнения стандартных скриптов регистрации?
2. Правильно ли написал синтаксис запроса, чтобы он выполнялся?
Сам по себе sql-запрос правильный, потому что копировался из Community Builder и префиксы таблицы правильные: "INSERT IGNORE INTO j_pp_comprofiler(id,user_id,lastname,firstname) "
." SELECT id,id, SUBSTRING_INDEX(name,' ',-1), "
."SUBSTRING( name, 1, length( name ) - length( SUBSTRING_INDEX( name, ' ', -1 ) ) -1 ) "
." FROM j_pp_users";
Заранее спасибо!
Last edited by Vasabi : 07-29-2007 at 07:15 PM.
|