В обычной ситуации при вызове функции Update класса CUser в обработчике OnAfterUserUpdate приведёт к повторному вызову OnAfterUserUpdate и так по кругу. Таким образом получается замкнутый цикл и скрипт начинает вызывать сам себя бесконечное число раз.
Как же выйти из этой ситуации?
Вариант 1:
А вот как:
В init.php вызываем обработчик:
AddEventHandler("main", "OnAfterUserUpdate", array("CUserHandler", "OnAfterUserUpdateHandler"));
А вот в самом классе CUserHandler делаем такую хитрость:
class CUserHandler { public static $disableHandler = false; public static $element_id = ''; function OnAfterUserUpdateHandler(&$arFields){ if ((self::$disableHandler)&&($arFields['ID']==self::$element_id)){ return; } self::$disableHandler = true; self::$element_id = $arFields['ID']; //ниже вызываем Update юзера //... } }
Смысл в том, что при первом вызове OnAfterUserUpdateHandler всё, что ниже условия проверки значений $disableHandler и $element_id выполняется, а при последующих вызовах — нет.
Вариант 2:
Обновлять св-во по ссылке (т.к. на вход функции подаётся &$arFields )