Я работаю, чтобы связать обновления профилей Joomla и CiviCRM.Изначально все, что я хочу сделать, это обновить профиль соответствия CiviCRM при изменении электронной почты профиля Joomla (Примечание: последняя версия civi будет обновлять электронную почту профиля Joomla при изменении электронной почты civi ... так, чтобы эта сторона была закрыта),С этим у меня есть код, который будет работать.То есть он будет корректно обновлять электронную почту, когда я вручную запускаю код из аутентифицированного сеанса.Сейчас я пытаюсь внедрить этот код в плагин Joomla user_profile, чтобы при изменении пользователем электронной почты он обновлял электронную почту civi.
Примечание. Я знаю, что не нужно взламывать основной код.В конечном итоге я создам новый плагин профиля с моим пользовательским кодом, но для простоты в процессе разработки я использую основной плагин user_profile.Любой, кто читает это, не используйте код ниже в производстве!Это неполно, и ядро не должно быть взломано.
Это работает, однако я обнаружил, что если пользователь не выходит из сеанса, а затем изменяет электронную почту во второй раз в том же сеансе, самый новыйэлектронная почта не распознается (используется старая электронная почта), но если пользователь выходит из системы, а затем снова входит в систему, меняет электронную почту, он будет работать.Я надеюсь, что это имеет смысл.
Проблема должна иметь отношение к «экземпляру» переменной или что-то в этом роде, но я новичок в кодировании PHP и не совсем уверен, что яделать неправильно.Я поместил свой пользовательский код в функцию onUserAfterSave в скрипте profile.php плагина user_profile.
Любые программисты PHP знают, как я могу решить эту проблему, чтобы мой приведенный ниже код запускался КАЖДЫЙ раз, когда электронная почтапочта изменена в Joomla, во время одного сеанса или нет?
Мой код:
function onUserAfterSave($data, $isNew, $result, $error)
{
$userId = JArrayHelper::getValue($data, 'id', 0, 'int');
// *** Truncating function code to de-clutter
// .
// .
// .
/*****************************************************
* Begin my custom code to save data to civi.
*****************************************************/
require_once '/var/www/joomla/administrator/components/com_civicrm/civicrm.settings.php';
require_once '/var/www/joomla/administrator/components/com_civicrm/civicrm/CRM/Core/Config.php';
require_once '/var/www/joomla/administrator/components/com_civicrm/civicrm/api/v3/UFMatch.php';
require_once '/var/www/joomla/administrator/components/com_civicrm/civicrm.settings.php';
require_once('/var/www/joomla/administrator/components/com_civicrm/civicrm/CRM/Core/DAO.php');
$t911_config = CRM_Core_Config::singleton( );
$t911_user = JFactory::getUser();
$t911_ufID = $t911_user->id;
$t911_ufUSER = $t911_user->username;
$t911_ufEMAIL = $t911_user->email; //this variable only sets on each login session
$t911_ufTYPE = $t911_user->usertype;
$t911_ufGUEST = $t911_user->guest;
$t911_contactID = CRM_Core_BAO_UFMatch::getContactId($t911_ufID);
$t911_query = "select email from civicrm_email where contact_id = $t911_contactID";
$daoResult =& CRM_Core_DAO::executeQuery( $t911_query, $t911_params);
$daoResult->fetch();
if ( $daoResult->email <> $t911_ufEMAIL )
{
CRM_Core_BAO_UFMatch::updateContactEmail($t911_contactID,$t911_ufEMAIL);
}
/*****************************************************
* End my custom code to save data to civi.
****************************************************/
// .
// .
// .
// *** The remainder of the function code
return true;
}