저는 Joomla 및 CiviCRM 프로필 업데이트를 연결하려고했습니다. 처음에 Joomla 프로필 전자 메일이 변경되면 CiviCRM 일치 프로필이 업데이트됩니다 (참고 : 최신 Civi 버전은 Civi 전자 메일이 변경 될 때 Joomla 프로필 전자 메일을 업데이트합니다. . 그걸로, 나는 작동 코드가 있습니다. 즉, 인증 된 세션 내부에서 코드를 수동으로 실행하면 Civi 전자 메일이 제대로 업데이트됩니다. 이제 사용자가 전자 메일을 변경할 때 전자 메일을 업데이트하도록 Joomla user_profile 플러그 인에이 코드를 포함하려고합니다.PHP - 같은 세션에서 "재설정 중"변수가 없습니다.
참고 : 핵심 코드를 해킹하지 않는 것이 좋습니다. 궁극적으로, 커스텀 코드로 새로운 프로필 플러그인을 만들 겠지만, 개발 과정에서 단순화를 위해 핵심 user_profile 플러그인을 사용하고 있습니다. 이것을 읽은 사람은 아래의 코드를 프로덕션에서 사용하지 마십시오! 불완전하고 코어가 해킹되어서는 안됩니다.
그러나 나는 사용자가 세션을 로그 아웃하지 않고 같은 세션에서 두 번째로 전자 메일을 변경하면 최신 전자 메일을 인식하지 못하는 것으로 나타났습니다 (이전 전자 메일 사용되지만), 사용자가 로그 아웃 한 다음 로그인하면 변경된 전자 메일이 작동합니다. 나는 그것이 의미가 있기를 바랍니다.
문제는 변수의 "인스턴스"또는 그 효과가있는 항목과 관련이 있어야합니다. 그러나 PHP 코딩을 처음 접했을 때 새로운 점이 무엇인지 잘 모릅니다. 사용자 정의 코드를 user_profile 플러그인의 profile.php 스크립트에있는 onUserAfterSave 함수 안에 넣었습니다.
모든 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;
}