У меня интеграция Joomla и vBulletin
Проблема заключается в том, что при регистрации данные пользователя записываются в таблицы (Joomla и vBulletin), а мне нужно, чтобы и в таблицу comprofiler от Community Builder.
Все начинает правильно работать, если воспользоваться синхронизацией в админке Joomla Components -> Community Builder->Tools Manager.
Коротко о том, что мне нужно:Подскажите, пожалуйста, как очеловечить запрос, чтобы он работал не в joomla, а скажем если его поместить в в vb/register.php
$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";
Подробнее:Я из компонента достал полностью функцию, которая занимается синхронизацией
////////////////////////////////////////////////////////////////////////////////////////////////
function syncUsers() {
global $_CB_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;
}
$_CB_database->setQuery($sql);
if (!$_CB_database->query()) {
print("<font color=red>SQL error" . $_CB_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`";
$_CB_database->setQuery($sql);
if (!$_CB_database->query()) {
print("<font color=red>SQL error" . $_CB_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 mambo/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";
$_CB_database->setQuery($sql);
$users = $_CB_database->loadResultArray();
if (count($users)) {
print "<p><font color='orange'>Removing ".count($users)." entries from Community Builder missing in users Table.</font></p>";
}
if ($_CB_database->getErrorNum()) {
print("<font color=red>SQL error" . $_CB_database->stderr(true)."</font><br />");
return;
}
$msg = deleteUsers($users, true);
print "<p>".$msg."</p>";
print "<font color=green>Joomla/Mambo User Table and Joomla/Mambo Community Builder User Table now in sync!</font>";
}
function _cb_prov_loadAssoc() {
global $_CB_database;
if (!($cur = $_CB_database->query())) {
return null;
}
$ret = null;
if ($array = mysql_fetch_array( $cur, MYSQL_ASSOC )) {
$ret = $array;
}
mysql_free_result( $cur );
return $ret;
}
/**
* Fetch a result row as an associative array
*
* return array
*/
С того, что я понял, мне нужно, чтобы при регистрации выполнялся вот такой запрос :
$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";
По моих соображениях, если вставить
$sql ="INSERT IGNORE INTO j_comprofiler ….."
$db->setQuery($sql);
в vb/register.php
в строку 1020 до команды
// activate account
$userdata->save();
Должно заработать
Заранее спасибо!