Index: trunk/core/units/users/users_event_handler.php =================================================================== diff -u -N -r2818 -r2820 --- trunk/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 2818) +++ trunk/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 2820) @@ -175,10 +175,16 @@ } } - function checkSubscriber(&$event) + + /** + * When creating user & user with such email exists then force to use OnUpdate insted of OnCreate + * + * @param kEvent $event + */ + function OnSubstituteSubscriber(&$event) { + $ret = false; $object =& $event->getObject( Array('skip_autoload' => true) ); - $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); if($items_info) { @@ -193,20 +199,48 @@ { $items_info = Array( $verify_user->GetDBField('PortalUserId') => $field_values ); $this->Application->SetVar($event->getPrefixSpecial(true), $items_info); - $this->OnUpdate($event); - if($event->status == erSUCCESS) - { - $this->OnAfterItemCreate($event); - $object->SendEmailEvents(); - if( !$this->Application->IsAdmin() && ($event->status == erSUCCESS) && $event->redirect) $this->autoLoginUser($event); - } - return true; + $ret = true; } } } + + if( isset($event->MasterEvent) ) + { + $event->MasterEvent->setEventParam('is_subscriber_only', $ret); + } + else + { + $event->setEventParam('is_subscriber_only', $ret); + } } + /** + * Enter description here... + * + * @param kEvent $event + * @return bool + */ + function isSubscriberOnly(&$event) + { + $event->CallSubEvent('OnSubstituteSubscriber'); + $is_subscriber = false; + if( $event->getEventParam('is_subscriber_only') ) + { + $is_subscriber = true; + $object =& $event->getObject( Array('skip_autoload' => true) ); + $this->OnUpdate($event); + if($event->status == erSUCCESS) + { + $this->OnAfterItemCreate($event); + $object->SendEmailEvents(); + if( !$this->Application->IsAdmin() && ($event->status == erSUCCESS) && $event->redirect) $this->autoLoginUser($event); + } + } + return $is_subscriber; + } + + /** * Creates new user * * @param kEvent $event @@ -215,22 +249,23 @@ { if( !$this->Application->IsAdmin() ) $this->setUserStatus($event); - $this->checkSubscriber($event); - - $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); - $cs_helper->CheckStateField($event, 'State', 'Country'); - - parent::OnCreate($event); - - $this->Application->SetVar('u_id', $object->getID() ); - $this->Application->setUnitOption('u', 'AutoLoad', true); - - $this->setNextTemplate($event); - - if( !$this->Application->IsAdmin() && ($event->status == erSUCCESS) && $event->redirect) + if( !$this->isSubscriberOnly($event) ) { - $object->SendEmailEvents(); - $this->autoLoginUser($event); + $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); + $cs_helper->CheckStateField($event, 'State', 'Country'); + + parent::OnCreate($event); + + $this->Application->SetVar('u_id', $object->getID() ); + $this->Application->setUnitOption('u', 'AutoLoad', true); + + $this->setNextTemplate($event); + + if( !$this->Application->IsAdmin() && ($event->status == erSUCCESS) && $event->redirect) + { + $object->SendEmailEvents(); + $this->autoLoginUser($event); + } } }