Index: trunk/kernel/units/users/users_event_handler.php =================================================================== diff -u -N -r2818 -r2820 --- trunk/kernel/units/users/users_event_handler.php (.../users_event_handler.php) (revision 2818) +++ trunk/kernel/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); + } } } Index: trunk/core/units/users/users_config.php =================================================================== diff -u -N -r2385 -r2820 --- trunk/core/units/users/users_config.php (.../users_config.php) (revision 2385) +++ trunk/core/units/users/users_config.php (.../users_config.php) (revision 2820) @@ -7,7 +7,7 @@ 'EventHandlerClass' => Array('class'=>'UsersEventHandler','file'=>'users_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'UsersTagProcessor','file'=>'users_tag_processor.php','build_event'=>'OnBuild'), 'AutoLoad' => true, - 'Hooks' => Array( + 'Hooks' => Array( Array( 'Mode' => hAFTER, 'Conditional' => false, @@ -18,6 +18,18 @@ 'DoSpecial' => '', 'DoEvent' => 'OnPrepareStates', ), + + Array( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'affil', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnCheckAffiliateAgreement'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnSubstituteSubscriber', + ), + ), 'QueryString' => Array( 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); + } } } Index: trunk/kernel/parser.php =================================================================== diff -u -N -r2771 -r2820 --- trunk/kernel/parser.php (.../parser.php) (revision 2771) +++ trunk/kernel/parser.php (.../parser.php) (revision 2820) @@ -82,6 +82,11 @@ foreach($ids as $ItemType=>$idlist) { $Item =& $objItemTypes->GetItem($ItemType); + if( !is_object($Item) ) + { + if( isDebugMode() ) echo 'Item with RID ['.$ResourceId.'] has invalid relation to items with RIDS: '.print_r($idlist, true).'
'; + continue; + } $table = GetTablePrefix().$Item->Get("SourceTable"); if($ItemType!=1) { Index: trunk/kernel/units/users/users_config.php =================================================================== diff -u -N -r2385 -r2820 --- trunk/kernel/units/users/users_config.php (.../users_config.php) (revision 2385) +++ trunk/kernel/units/users/users_config.php (.../users_config.php) (revision 2820) @@ -7,7 +7,7 @@ 'EventHandlerClass' => Array('class'=>'UsersEventHandler','file'=>'users_event_handler.php','build_event'=>'OnBuild'), 'TagProcessorClass' => Array('class'=>'UsersTagProcessor','file'=>'users_tag_processor.php','build_event'=>'OnBuild'), 'AutoLoad' => true, - 'Hooks' => Array( + 'Hooks' => Array( Array( 'Mode' => hAFTER, 'Conditional' => false, @@ -18,6 +18,18 @@ 'DoSpecial' => '', 'DoEvent' => 'OnPrepareStates', ), + + Array( + 'Mode' => hBEFORE, + 'Conditional' => false, + 'HookToPrefix' => 'affil', + 'HookToSpecial' => '', + 'HookToEvent' => Array('OnCheckAffiliateAgreement'), + 'DoPrefix' => '', + 'DoSpecial' => '', + 'DoEvent' => 'OnSubstituteSubscriber', + ), + ), 'QueryString' => Array(