Index: branches/unlabeled/unlabeled-1.50.2/core/units/users/users_event_handler.php =================================================================== diff -u -r3865 -r4354 --- branches/unlabeled/unlabeled-1.50.2/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 3865) +++ branches/unlabeled/unlabeled-1.50.2/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 4354) @@ -1,844 +1,865 @@ -Application->IsAdmin() ) - { - $location = $this->Application->BaseURL().ADMIN_DIR.'/index.php?expired=1'; - header('Location: '.$location); - exit; - } - else - { - $http_query =& $this->Application->recallObject('HTTPQuery'); - $get = $http_query->getRedirectParams(); - - $t = $this->Application->GetVar('t'); - $get['js_redirect'] = $this->Application->ConfigValue('UseJSRedirect'); - $this->Application->Redirect($t ? $t : 'index', $get); - } - } - - /** - * Checks user data and logs it in if allowed - * - * @param kEvent $event - */ - function OnLogin(&$event) - { - $this->Application->setUnitOption($event->Prefix, 'AutoLoad', false); - $object =& $this->Application->recallObject('u'); - - $password = $this->Application->GetVar('password'); - if(!$password) - { - $object->SetError('ValidateLogin', 'blank_password', 'lu_blank_password'); - $event->status = erFAIL; - return false; - } - - $email_as_login = $this->Application->ConfigValue('Email_As_Login'); - list($login_field, $submit_field) = $email_as_login ? Array('Email', 'email') : Array('Login', 'login'); - $login_value = $this->Application->GetVar($submit_field); - - /*$sql = 'SELECT PortalUserId FROM '.$object->TableName.' WHERE (%s = %s) AND (Password = MD5(%s))'; - $user_id = $this->Conn->GetOne( sprintf($sql, $login_field, $this->Conn->qstr($login_value), $this->Conn->qstr($password) ) );*/ - - $sql = 'SELECT PortalUserId FROM '.$object->TableName.' WHERE (Email = %1$s OR Login = %1$s) AND (Password = MD5(%2$s))'; - $user_id = $this->Conn->GetOne( sprintf($sql, $this->Conn->qstr($login_value), $this->Conn->qstr($password) ) ); - - if($user_id) - { - $object->Load($user_id); - if( $object->GetDBField('Status') == STATUS_ACTIVE ) - { - $groups = $object->getMembershipGroups(true); - if(!$groups) $groups = Array(); - if ( !$this->Application->IsAdmin() ) array_push($groups, $this->Application->ConfigValue('User_LoggedInGroup') ); - $this->Application->StoreVar( 'UserGroups', implode(',', $groups) ); - - if( $this->Application->CheckPermission('LOGIN',0) ) - { - $session =& $this->Application->recallObject('Session'); - $session->SetField('PortalUserId', $user_id); - $session->SetField('GroupList', implode(',', $groups) ); - $this->Application->SetVar('u_id', $user_id); - $this->Application->StoreVar('user_id', $user_id); - $this->Application->setVisitField('PortalUserId', $user_id); - - $this_login = (int)$object->getPersistantVar('ThisLogin'); - $object->setPersistantVar('LastLogin', $this_login); - $object->setPersistantVar('ThisLogin', adodb_mktime()); - } - else - { - $object->Load(-2); - $object->SetError('ValidateLogin', 'no_permission', 'lu_no_permissions'); - $event->status = erFAIL; - } - - $next_template = $this->Application->GetVar('next_template'); - if($next_template) $event->redirect = $next_template; - if ($this->Application->ConfigValue('UseJSRedirect')) { - $event->SetRedirectParam('js_redirect', 1); - } - $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); - $sync_manager->performAction('LoginUser', $object->GetDBField('Login'), $password); - } - else - { - $event->redirect = $this->Application->GetVar('pending_disabled_template'); - } - } - else - { - $object->SetError('ValidateLogin', 'invalid_password', 'lu_invalid_password'); - $event->status = erFAIL; - } - } - - /** - * Called when user logs in using old in-portal - * - * @param kEvent $event - */ - function OnInpLogin(&$event) - { - $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); - $sync_manager->performAction('LoginUser', $event->getEventParam('user'), $event->getEventParam('pass') ); - } - - /** - * Called when user logs in using old in-portal - * - * @param kEvent $event - */ - function OnInpLogout(&$event) - { - $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); - $sync_manager->performAction('LogoutUser'); - } - - function OnLogout(&$event) - { - $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); - $sync_manager->performAction('LogoutUser'); - - $session =& $this->Application->recallObject('Session'); - $session->SetField('PortalUserId', -2); - $this->Application->SetVar('u_id', -2); - $this->Application->StoreVar('user_id', -2); - $object =& $this->Application->recallObject('u'); - $object->Load(-2); - - $this->Application->DestroySession(); - - $group_list = $this->Application->ConfigValue('User_GuestGroup').','.$this->Application->ConfigValue('User_LoggedInGroup'); - $session->SetField('GroupList', $group_list); - $this->Application->StoreVar('UserGroups', $group_list); - - if ($this->Application->ConfigValue('UseJSRedirect')) { - $event->SetRedirectParam('js_redirect', 1); - } - } - - /** - * Prefill states dropdown with correct values - * - * @param kEvent $event - * @access public - */ - function OnPrepareStates(&$event) - { - $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); - $cs_helper->PopulateStates($event, 'State', 'Country'); - - $object =& $event->getObject(); - - if( $object->isRequired('Country') && $cs_helper->CountryHasStates( $object->GetDBField('Country') ) ) $object->setRequired('State', true); - $object->setLogin(); - } - - /** - * Redirects user after succesfull registration to confirmation template (on Front only) - * - * @param kEvent $event - */ - function OnAfterItemCreate(&$event) - { - $is_subscriber = $this->Application->GetVar('IsSubscriber'); - if(!$is_subscriber) - { - $object =& $event->getObject(); - - $sql = 'UPDATE '.TABLE_PREFIX.'UserGroup - SET PrimaryGroup = 0 - WHERE PortalUserId = '.$object->GetDBField('PortalUserId'); - $this->Conn->Query($sql); - - $group_id = $this->Application->ConfigValue('User_NewGroup'); - - $sql = 'REPLACE INTO '.TABLE_PREFIX.'UserGroup(PortalUserId,GroupId,PrimaryGroup) VALUES (%s,%s,1)'; - $this->Conn->Query( sprintf($sql, $object->GetID(), $group_id) ); - } - } - - /** - * Login user if possible, if not then redirect to corresponding template - * - * @param kEvent $event - */ - function autoLoginUser(&$event) - { - $object =& $event->getObject(); - $this->Application->SetVar('u_id', $object->GetID() ); - - if($object->GetDBField('Status') == STATUS_ACTIVE) - { - $email_as_login = $this->Application->ConfigValue('Email_As_Login'); - list($login_field, $submit_field) = $email_as_login ? Array('Email', 'email') : Array('Login', 'login'); - - $this->Application->SetVar($submit_field, $object->GetDBField($login_field) ); - $this->Application->SetVar('password', $object->GetDBField('Password_plain') ); - - $event->CallSubEvent('OnLogin'); - } - } - - - /** - * 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) - { - list($id, $field_values) = each($items_info); - $user_email = $field_values['Email']; - if($user_email) - { - // check if is subscriber - $verify_user =& $this->Application->recallObject('u.verify', null, Array('skup_autoload' => true) ); - $verify_user->Load($user_email, 'Email'); - if( $verify_user->isLoaded() && $verify_user->isSubscriberOnly() ) - { - $items_info = Array( $verify_user->GetDBField('PortalUserId') => $field_values ); - $this->Application->SetVar($event->getPrefixSpecial(true), $items_info); - $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 - */ - function OnCreate(&$event) - { - if( !$this->Application->IsAdmin() ) $this->setUserStatus($event); - - if( !$this->isSubscriberOnly($event) ) - { - $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); - $cs_helper->CheckStateField($event, 'State', 'Country'); - - parent::OnCreate($event); - - $object =& $event->getObject( Array('skip_autoload' => true) ); - - $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); - } - } - } - - /** - * Set's new user status based on config options - * - * @param kEvent $event - */ - function setUserStatus(&$event) - { - $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); - $object =& $event->getObject(); - - $new_users_allowed = $this->Application->ConfigValue('User_Allow_New'); - // 1 - Instant, 2 - Not Allowed, 3 - Pending - - switch ($new_users_allowed) - { - case 1: // Instant - $object->SetDBField('Status', 1); - $next_template = $this->Application->GetVar('registration_confirm_template'); - if($next_template) $event->redirect = $next_template; - break; - - case 3: // Pending - $next_template = $this->Application->GetVar('registration_confirm_pending_template'); - if($next_template) $event->redirect = $next_template; - $object->SetDBField('Status', 2); - break; - - case 2: // Not Allowed - $object->SetDBField('Status', 0); - break; - } - } - - - - - /** - * Set's new unique resource id to user - * - * @param kEvent $event - */ - function OnBeforeItemCreate(&$event) - { - $email_as_login = $this->Application->ConfigValue('Email_As_Login'); - $object =& $event->getObject(); - if ($email_as_login) { - $object->Fields['Email']['error_msgs']['unique'] = $this->Application->Phrase('lu_user_and_email_already_exist'); - } - - } - - /** - * Set's new unique resource id to user - * - * @param kEvent $event - */ - function OnAfterItemValidate(&$event) - { - $object =& $event->getObject(); - $resource_id = $object->GetDBField('ResourceId'); - if (!$resource_id) - { - $object->SetDBField('ResourceId', $this->Application->NextResourceId() ); - } - } - - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnRecommend(&$event){ - - $friend_email = $this->Application->GetVar('friend_email'); - $friend_name = $this->Application->GetVar('friend_email'); - - if (preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $friend_email)) - { - - $send_params = array(); - $send_params['to_email']=$friend_email; - $send_params['to_name']=$friend_name; - - $user_id = $this->Application->GetVar('u_id'); - $email_event = &$this->Application->EmailEventUser('SITE.SUGGEST', $user_id, $send_params); - - if ($email_event->status == erSUCCESS){ - $event->redirect_params = array('opener' => 's', 'pass' => 'all'); - $event->redirect = $this->Application->GetVar('template_success'); - } - else { -// $event->redirect_params = array('opener' => 's', 'pass' => 'all'); -// $event->redirect = $this->Application->GetVar('template_fail'); - $object =& $this->Application->recallObject('u'); - $object->ErrorMsgs['send_error'] = $this->Application->Phrase('lu_email_send_error'); - $object->FieldErrors['Email']['pseudo'] = 'send_error'; - $event->status = erFAIL; - - } - } - else { - $object =& $this->Application->recallObject('u'); - $object->ErrorMsgs['invalid_email'] = $this->Application->Phrase('lu_InvalidEmail'); - $object->FieldErrors['Email']['pseudo'] = 'invalid_email'; - $event->status = erFAIL; - } - - - } - - /** - * Saves address changes and mades no redirect - * - * @param kEvent $event - */ - function OnUpdateAddress(&$event) - { - $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); - $object =& $event->getObject(); - - $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); - if($items_info) - { - list($id,$field_values) = each($items_info); - if($id > 0) $object->Load($id); - $object->SetFieldsFromHash($field_values); - $object->setID($id); - $object->Validate(); - } - - $event->redirect = false; - } - - function OnSubscribeQuery(&$event){ - - $user_email = $this->Application->GetVar('subscriber_email'); - if ( preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $user_email) ){ - - $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); - $object = &$this->Application->recallObject($this->Prefix.'.subscriber'); - - $this->Application->StoreVar('SubscriberEmail', $user_email); - - if( $object->Load(array('Email'=>$user_email)) ){ - $group_info = $this->GetGroupInfo($object->GetID()); - if($group_info){ - $event->redirect = $this->Application->GetVar('unsubscribe_template'); - } - else { - $event->redirect = $this->Application->GetVar('subscribe_template'); - } - } - else { - $event->redirect = $this->Application->GetVar('subscribe_template'); - $this->Application->StoreVar('SubscriberEmail', $user_email); - } - - } - else { - - $object =& $this->Application->recallObject('u'); - $object->ErrorMsgs['invalid_email'] = $this->Application->Phrase('lu_InvalidEmail'); - $object->FieldErrors['SubscribeEmail']['pseudo'] = 'invalid_email'; - $event->status = erFAIL; - - } - - - //subscribe_query_ok_template - } - - function OnSubscribeUser(&$event){ - - $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); - $object = &$this->Application->recallObject($this->Prefix.'.subscriber'); - - $user_email = $this->Application->RecallVar('SubscriberEmail'); - - if (preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $user_email)){ - - if($object->Load(array('Email'=>$user_email))){ - - $group_info = $this->GetGroupInfo($object->GetID()); - - if ($group_info){ - if ($event->getEventParam('no_unsubscribe')) return; - - if ($group_info['PrimaryGroup']){ - // delete user - $object->Delete(); - } - else { - $this->RemoveSubscriberGroup($object->GetID()); - } - - $event->redirect = $this->Application->GetVar('unsubscribe_ok_template'); - - } - else { - $this->AddSubscriberGroup($object->GetID(), 0); - $event->redirect = $this->Application->GetVar('subscribe_ok_template'); - } - - - } - else { - - $object->SetField('Email', $user_email); - $object->SetField('Login', $user_email); - $object->SetDBField('dob', 1); - $object->SetDBField('dob_date', 1); - $object->SetDBField('dob_time', 1); - $ip = getenv('HTTP_X_FORWARDED_FOR')?getenv('HTTP_X_FORWARDED_FOR'):getenv('REMOTE_ADDR'); - $object->SetDBField('ip', $ip); - - $this->Application->SetVar('IsSubscriber', 1); - - if ($object->Create()) { - - $this->AddSubscriberGroup($object->GetID(), 1); - $event->redirect = $this->Application->GetVar('subscribe_ok_template'); - } - - $this->Application->SetVar('IsSubscriber', 0); - } - } - else { - // error handling here - $event->redirect = $this->Application->GetVar('subscribe_fail_template'); - } - - - } - - function AddSubscriberGroup($user_id, $is_primary){ - - $group_id = $this->Application->ConfigValue('User_SubscriberGroup'); - $sql = 'INSERT INTO '.TABLE_PREFIX.'UserGroup(PortalUserId,GroupId,PrimaryGroup) VALUES (%s,%s,'.$is_primary.')'; - $this->Conn->Query( sprintf($sql, $user_id, $group_id) ); - $this->Application->EmailEventAdmin('USER.SUBSCRIBE', $user_id); - $this->Application->EmailEventUser('USER.SUBSCRIBE', $user_id); - - } - - function RemoveSubscriberGroup($user_id){ - - $group_id = $this->Application->ConfigValue('User_SubscriberGroup'); - $sql = 'DELETE FROM '.TABLE_PREFIX.'UserGroup WHERE PortalUserId='.$user_id.' AND GroupId='.$this->Application->ConfigValue('User_SubscriberGroup'); - $this->Conn->Query($sql); - $this->Application->EmailEventAdmin('USER.UNSUBSCRIBE', $user_id); - $this->Application->EmailEventUser('USER.UNSUBSCRIBE', $user_id); - - } - - function GetGroupInfo($user_id){ - - $group_info = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'UserGroup - WHERE PortalUserId='.$user_id.' - AND GroupId='.$this->Application->ConfigValue('User_SubscriberGroup')); - return $group_info; - - } - - function OnForgotPassword(&$event){ - - $this->Application->setUnitOption('u', 'AutoLoad', false); - $user_object = &$this->Application->recallObject('u.forgot'); - $user_current_object = &$this->Application->recallObject('u'); - - $username = $this->Application->GetVar('username'); - $email = $this->Application->GetVar('email'); - $found = false; - $allow_reset = true; - - if( strlen($username) ) - { - if( $user_object->Load(array('Login'=>$username)) ) - $found = ($user_object->GetDBField("Login")==$username && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); - } - else if( strlen($email) ) - { - if( $user_object->Load(array('Email'=>$email)) ) - $found = ($user_object->GetDBField("Email")==$email && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); - } - - if( $user_object->isLoaded() ) - { - $PwResetConfirm = $user_object->GetDBField('PwResetConfirm'); - $PwRequestTime = $user_object->GetDBField('PwRequestTime'); - $PassResetTime = $user_object->GetDBField('PassResetTime'); - //$MinPwResetDelay = $user_object->GetDBField('MinPwResetDelay'); - $MinPwResetDelay = $this->Application->ConfigValue('Users_AllowReset'); - - $allow_reset = (strlen($PwResetConfirm) ? - adodb_mktime() > $PwRequestTime + $MinPwResetDelay : - adodb_mktime() > $PassResetTime + $MinPwResetDelay); - } - - if($found && $allow_reset) - { - $this->Application->StoreVar('tmp_user_id', $user_object->GetDBField("PortalUserId")); - $this->Application->StoreVar('tmp_email', $user_object->GetDBField("Email")); - - //$this->Application->EmailEventUser('INCOMMERCEUSER.PSWDC', $user_object->GetDBField("PortalUserId")); - - $event->redirect = $this->Application->GetVar('template_success'); - - } - else - { - if(!strlen($username) && !strlen($email)) - { - $user_current_object->ErrorMsgs['forgotpw_nodata'] = $this->Application->Phrase('lu_ferror_forgotpw_nodata'); - $user_current_object->FieldErrors['Login']['pseudo'] = 'lu_ferror_forgotpw_nodata'; - } - else - { - - if($allow_reset) - { - if( strlen($username) ){ - $user_current_object->ErrorMsgs['unknown_username'] = $this->Application->Phrase('lu_ferror_unknown_username'); - $user_current_object->FieldErrors['Login']['pseudo']='unknown_username'; - } - if( strlen($email) ){ - $user_current_object->ErrorMsgs['unknown_email'] = $this->Application->Phrase('lu_ferror_unknown_email'); - $user_current_object->FieldErrors['Email']['pseudo']='unknown_email'; - } - } - else - { - $user_current_object->ErrorMsgs['reset_denied'] = $this->Application->Phrase('lu_ferror_reset_denied'); - if( strlen($username) ){ - $user_current_object->FieldErrors['Login']['pseudo']='reset_denied'; - } - if( strlen($email) ){ - $user_current_object->FieldErrors['Email']['pseudo']='reset_denied'; - } - } - - } - - if($user_current_object->FieldErrors){ - $event->redirect = false; - } - } - - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnResetPassword(&$event){ - - $user_object = &$this->Application->recallObject('u.forgot'); - - if($user_object->Load($this->Application->RecallVar('tmp_user_id'))){ - - $this->Application->EmailEventUser('INCOMMERCEUSER.PSWDC', $user_object->GetDBField("PortalUserId")); - $event->redirect = $this->Application->GetVar('template_success'); - - $mod_object =& $this->Application->recallObject('mod.'.'In-Commerce'); - $m_cat_id = $mod_object->GetDBField('RootCat'); - $event->SetRedirectParam('pass', 'm'); - //$event->SetRedirectParam('m_cat_id', $m_cat_id); - $this->Application->SetVar('m_cat_id', $m_cat_id); - - - } - - } - - function OnResetPasswordConfirmed(&$event){ - - $passed_key = $this->Application->GetVar('user_key'); - - $user_object = &$this->Application->recallObject('u.forgot'); - $user_current_object = &$this->Application->recallObject('u'); - - if (strlen(trim($passed_key)) == 0) { - $event->redirect_params = array('opener' => 's', 'pass' => 'all'); - $event->redirect = false; - - $user_current_object->ErrorMsgs['code_is_not_valid'] = $this->Application->Phrase('lu_code_is_not_valid'); - $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_is_not_valid'; - } - - - if($user_object->Load(array('PwResetConfirm'=>$passed_key))) - { - $exp_time = $user_object->GetDBField('PwRequestTime') + 3600; - $user_object->SetDBField("PwResetConfirm", ''); - $user_object->SetDBField("PwRequestTime", 0); - if ( $exp_time > adodb_mktime() ) - { - //$m_var_list_update['codevalidationresult'] = 'lu_resetpw_confirm_text'; - $newpw = makepassword4(); - - $this->Application->StoreVar('password', $newpw); - - $user_object->SetDBField("Password",$newpw); - $user_object->SetDBField("PassResetTime", adodb_mktime()); - $user_object->SetDBField("PwResetConfirm", ''); - $user_object->SetDBField("PwRequestTime", 0); - $user_object->Update(); - - $this->Application->SetVar('ForgottenPassword', $newpw); - - $email_event_user = &$this->Application->EmailEventUser('INCOMMERCEUSER.PSWD', $user_object->GetDBField('PortalUserId')); - $email_event_admin = &$this->Application->EmailEventAdmin('INCOMMERCEUSER.PSWD'); - - $this->Application->DeleteVar('ForgottenPassword'); - - if ($email_event_user->status == erSUCCESS){ - $event->redirect_params = array('opener' => 's', 'pass' => 'all'); - $event->redirect = $this->Application->GetVar('template_success'); - } - - $user_object->SetDBField("Password",md5($newpw)); - $user_object->Update(); - - } else { - $user_current_object->ErrorMsgs['code_expired'] = $this->Application->Phrase('lu_code_expired'); - $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_expired'; - $event->redirect = false; - - } - } else { - $user_current_object->ErrorMsgs['code_is_not_valid'] = $this->Application->Phrase('lu_code_is_not_valid'); - $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_is_not_valid'; - $event->redirect = false; - - } - } - - function OnUpdate(&$event) - { - $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); - $cs_helper->CheckStateField($event, 'State', 'Country'); - - parent::OnUpdate($event); - - $this->setNextTemplate($event); - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function setNextTemplate(&$event) - { - if( !$this->Application->IsAdmin() ) - { - $event->redirect_params['opener'] = 's'; - $object =& $event->getObject(); - if($object->GetDBField('Status') == STATUS_ACTIVE) - { - $next_template = $this->Application->GetVar('next_template'); - if($next_template) $event->redirect = $next_template; - } - } - } - - - - /** - * Delete users from groups if their membership is expired - * - * @param kEvent $event - */ - function OnCheckExpiredMembership(&$event) - { - // send pre-expiration reminders: begin - $pre_expiration = adodb_mktime() + $this->Application->ConfigValue('User_MembershipExpirationReminder') * 3600 * 24; - $sql = 'SELECT PortalUserId, GroupId - FROM '.TABLE_PREFIX.'UserGroup - WHERE (MembershipExpires IS NOT NULL) AND (ExpirationReminderSent = 0) AND (MembershipExpires < '.$pre_expiration.')'; - - $skip_clause = $event->getEventParam('skip_clause'); - if ($skip_clause) { - $sql .= ' AND !('.implode(') AND !(', $skip_clause).')'; - } - - $records = $this->Conn->Query($sql); - if ($records) { - $conditions = Array(); - foreach ($records as $record) { - $email_event_user =& $this->Application->EmailEventUser('USER.MEMBERSHIP.EXPIRATION.NOTICE', $record['PortalUserId']); - $email_event_admin =& $this->Application->EmailEventAdmin('USER.MEMBERSHIP.EXPIRATION.NOTICE'); - $conditions[] = '(PortalUserId = '.$record['PortalUserId'].' AND GroupId = '.$record['GroupId'].')'; - } - $sql = 'UPDATE '.TABLE_PREFIX.'UserGroup - SET ExpirationReminderSent = 1 - WHERE '.implode(' OR ', $conditions); - $this->Conn->Query($sql); - } - // send pre-expiration reminders: end - - // remove users from groups with expired membership: begin - $sql = 'SELECT PortalUserId - FROM '.TABLE_PREFIX.'UserGroup - WHERE (MembershipExpires IS NOT NULL) AND (MembershipExpires < '.adodb_mktime().')'; - $user_ids = $this->Conn->GetCol($sql); - if ($user_ids) { - foreach ($user_ids as $id) { - $email_event_user =& $this->Application->EmailEventUser('USER.MEMBERSHIP.EXPIRED', $id); - $email_event_admin =& $this->Application->EmailEventAdmin('USER.MEMBERSHIP.EXPIRED'); - } - } - $sql = 'DELETE FROM '.TABLE_PREFIX.'UserGroup - WHERE (MembershipExpires IS NOT NULL) AND (MembershipExpires < '.adodb_mktime().')'; - $this->Conn->Query($sql); - // remove users from groups with expired membership: end - } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function OnRefreshForm(&$event) - { - $event->redirect = false; - $item_info = $this->Application->GetVar($event->Prefix_Special); - list($id, $fields) = each($item_info); - - $object =& $event->getObject( Array('skip_autoload' => true) ); - $object->setID($id); - $object->IgnoreValidation = true; - $object->SetFieldsFromHash($fields); - } - } - +Application->IsAdmin() ) + { + $location = $this->Application->BaseURL().ADMIN_DIR.'/index.php?expired=1'; + header('Location: '.$location); + exit; + } + else + { + $http_query =& $this->Application->recallObject('HTTPQuery'); + $get = $http_query->getRedirectParams(); + + $t = $this->Application->GetVar('t'); + $get['js_redirect'] = $this->Application->ConfigValue('UseJSRedirect'); + $this->Application->Redirect($t ? $t : 'index', $get); + } + } + + /** + * Checks user data and logs it in if allowed + * + * @param kEvent $event + */ + function OnLogin(&$event) + { + $this->Application->setUnitOption($event->Prefix, 'AutoLoad', false); + $object =& $this->Application->recallObject('u'); + + $password = $this->Application->GetVar('password'); + if(!$password) + { + $object->SetError('ValidateLogin', 'blank_password', 'lu_blank_password'); + $event->status = erFAIL; + return false; + } + + $email_as_login = $this->Application->ConfigValue('Email_As_Login'); + list($login_field, $submit_field) = $email_as_login ? Array('Email', 'email') : Array('Login', 'login'); + $login_value = $this->Application->GetVar($submit_field); + + /*$sql = 'SELECT PortalUserId FROM '.$object->TableName.' WHERE (%s = %s) AND (Password = MD5(%s))'; + $user_id = $this->Conn->GetOne( sprintf($sql, $login_field, $this->Conn->qstr($login_value), $this->Conn->qstr($password) ) );*/ + + $sql = 'SELECT PortalUserId FROM '.$object->TableName.' WHERE (Email = %1$s OR Login = %1$s) AND (Password = MD5(%2$s))'; + $user_id = $this->Conn->GetOne( sprintf($sql, $this->Conn->qstr($login_value), $this->Conn->qstr($password) ) ); + + if($user_id) + { + $object->Load($user_id); + if( $object->GetDBField('Status') == STATUS_ACTIVE ) + { + $groups = $object->getMembershipGroups(true); + if(!$groups) $groups = Array(); + if ( !$this->Application->IsAdmin() ) array_push($groups, $this->Application->ConfigValue('User_LoggedInGroup') ); + $this->Application->StoreVar( 'UserGroups', implode(',', $groups) ); + + if( $this->Application->CheckPermission('LOGIN',0) ) + { + $session =& $this->Application->recallObject('Session'); + $session->SetField('PortalUserId', $user_id); + $session->SetField('GroupList', implode(',', $groups) ); + $this->Application->SetVar('u_id', $user_id); + $this->Application->StoreVar('user_id', $user_id); + $this->Application->setVisitField('PortalUserId', $user_id); + + $this_login = (int)$object->getPersistantVar('ThisLogin'); + $object->setPersistantVar('LastLogin', $this_login); + $object->setPersistantVar('ThisLogin', adodb_mktime()); + } + else + { + $object->Load(-2); + $object->SetError('ValidateLogin', 'no_permission', 'lu_no_permissions'); + $event->status = erFAIL; + } + + $next_template = $this->Application->GetVar('next_template'); + if ($next_template == '_ses_redirect') { + $location = $this->Application->BaseURL().$this->Application->RecallVar($next_template); + if( $this->Application->isDebugMode() && dbg_ConstOn('DBG_REDIRECT') ) + { + $this->Application->Debugger->appendTrace(); + echo "Debug output above!!! Proceed to redirect: $a_location
"; + } + else { + header('Location: '.$location); + } + $session =& $this->Application->recallObject('Session'); + $session->SaveData(); + exit(); + } + + if($next_template) $event->redirect = $next_template; + if ($this->Application->ConfigValue('UseJSRedirect')) { + $event->SetRedirectParam('js_redirect', 1); + } + $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); + $sync_manager->performAction('LoginUser', $object->GetDBField('Login'), $password); + } + else + { + $event->redirect = $this->Application->GetVar('pending_disabled_template'); + } + } + else + { + $object->SetError('ValidateLogin', 'invalid_password', 'lu_invalid_password'); + $event->status = erFAIL; + } + } + + /** + * Called when user logs in using old in-portal + * + * @param kEvent $event + */ + function OnInpLogin(&$event) + { + $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); + $sync_manager->performAction('LoginUser', $event->getEventParam('user'), $event->getEventParam('pass') ); + } + + /** + * Called when user logs in using old in-portal + * + * @param kEvent $event + */ + function OnInpLogout(&$event) + { + $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); + $sync_manager->performAction('LogoutUser'); + } + + function OnLogout(&$event) + { + $sync_manager =& $this->Application->recallObject('UsersSyncronizeManager', null, Array(), 'InPortalSyncronize'); + $sync_manager->performAction('LogoutUser'); + + $session =& $this->Application->recallObject('Session'); + $session->SetField('PortalUserId', -2); + $this->Application->SetVar('u_id', -2); + $this->Application->StoreVar('user_id', -2); + $object =& $this->Application->recallObject('u'); + $object->Load(-2); + + $this->Application->DestroySession(); + + $group_list = $this->Application->ConfigValue('User_GuestGroup').','.$this->Application->ConfigValue('User_LoggedInGroup'); + $session->SetField('GroupList', $group_list); + $this->Application->StoreVar('UserGroups', $group_list); + + if ($this->Application->ConfigValue('UseJSRedirect')) { + $event->SetRedirectParam('js_redirect', 1); + } + } + + /** + * Prefill states dropdown with correct values + * + * @param kEvent $event + * @access public + */ + function OnPrepareStates(&$event) + { + $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); + $cs_helper->PopulateStates($event, 'State', 'Country'); + + $object =& $event->getObject(); + + if( $object->isRequired('Country') && $cs_helper->CountryHasStates( $object->GetDBField('Country') ) ) $object->setRequired('State', true); + $object->setLogin(); + } + + /** + * Redirects user after succesfull registration to confirmation template (on Front only) + * + * @param kEvent $event + */ + function OnAfterItemCreate(&$event) + { + $is_subscriber = $this->Application->GetVar('IsSubscriber'); + if(!$is_subscriber) + { + $object =& $event->getObject(); + + $sql = 'UPDATE '.TABLE_PREFIX.'UserGroup + SET PrimaryGroup = 0 + WHERE PortalUserId = '.$object->GetDBField('PortalUserId'); + $this->Conn->Query($sql); + + $group_id = $this->Application->ConfigValue('User_NewGroup'); + + $sql = 'REPLACE INTO '.TABLE_PREFIX.'UserGroup(PortalUserId,GroupId,PrimaryGroup) VALUES (%s,%s,1)'; + $this->Conn->Query( sprintf($sql, $object->GetID(), $group_id) ); + } + } + + /** + * Login user if possible, if not then redirect to corresponding template + * + * @param kEvent $event + */ + function autoLoginUser(&$event) + { + $object =& $event->getObject(); + $this->Application->SetVar('u_id', $object->GetID() ); + + if($object->GetDBField('Status') == STATUS_ACTIVE) + { + $email_as_login = $this->Application->ConfigValue('Email_As_Login'); + list($login_field, $submit_field) = $email_as_login ? Array('Email', 'email') : Array('Login', 'login'); + + $this->Application->SetVar($submit_field, $object->GetDBField($login_field) ); + $this->Application->SetVar('password', $object->GetDBField('Password_plain') ); + + $event->CallSubEvent('OnLogin'); + } + } + + + /** + * 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) + { + list($id, $field_values) = each($items_info); + $user_email = $field_values['Email']; + if($user_email) + { + // check if is subscriber + $verify_user =& $this->Application->recallObject('u.verify', null, Array('skup_autoload' => true) ); + $verify_user->Load($user_email, 'Email'); + if( $verify_user->isLoaded() && $verify_user->isSubscriberOnly() ) + { + $items_info = Array( $verify_user->GetDBField('PortalUserId') => $field_values ); + $this->Application->SetVar($event->getPrefixSpecial(true), $items_info); + $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 + */ + function OnCreate(&$event) + { + if( !$this->Application->IsAdmin() ) $this->setUserStatus($event); + + if( !$this->isSubscriberOnly($event) ) + { + $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); + $cs_helper->CheckStateField($event, 'State', 'Country'); + + parent::OnCreate($event); + + $object =& $event->getObject( Array('skip_autoload' => true) ); + + $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); + } + } + } + + /** + * Set's new user status based on config options + * + * @param kEvent $event + */ + function setUserStatus(&$event) + { + $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); + $object =& $event->getObject(); + + $new_users_allowed = $this->Application->ConfigValue('User_Allow_New'); + // 1 - Instant, 2 - Not Allowed, 3 - Pending + + switch ($new_users_allowed) + { + case 1: // Instant + $object->SetDBField('Status', 1); + $next_template = $this->Application->GetVar('registration_confirm_template'); + if($next_template) $event->redirect = $next_template; + break; + + case 3: // Pending + $next_template = $this->Application->GetVar('registration_confirm_pending_template'); + if($next_template) $event->redirect = $next_template; + $object->SetDBField('Status', 2); + break; + + case 2: // Not Allowed + $object->SetDBField('Status', 0); + break; + } + + /*if ($object->GetDBField('PaidMember') == 1) { + $this->Application->HandleEvent($add_to_cart, 'ord:OnAddToCart'); + $event->redirect = 'in-commerce/checkout/shop_cart'; + } */ + + } + + + + + /** + * Set's new unique resource id to user + * + * @param kEvent $event + */ + function OnBeforeItemCreate(&$event) + { + $email_as_login = $this->Application->ConfigValue('Email_As_Login'); + $object =& $event->getObject(); + if ($email_as_login) { + $object->Fields['Email']['error_msgs']['unique'] = $this->Application->Phrase('lu_user_and_email_already_exist'); + } + + } + + /** + * Set's new unique resource id to user + * + * @param kEvent $event + */ + function OnAfterItemValidate(&$event) + { + $object =& $event->getObject(); + $resource_id = $object->GetDBField('ResourceId'); + if (!$resource_id) + { + $object->SetDBField('ResourceId', $this->Application->NextResourceId() ); + } + } + + + /** + * Enter description here... + * + * @param kEvent $event + */ + function OnRecommend(&$event){ + + $friend_email = $this->Application->GetVar('friend_email'); + $friend_name = $this->Application->GetVar('friend_email'); + + if (preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $friend_email)) + { + + $send_params = array(); + $send_params['to_email']=$friend_email; + $send_params['to_name']=$friend_name; + + $user_id = $this->Application->GetVar('u_id'); + $email_event = &$this->Application->EmailEventUser('SITE.SUGGEST', $user_id, $send_params); + + if ($email_event->status == erSUCCESS){ + $event->redirect_params = array('opener' => 's', 'pass' => 'all'); + $event->redirect = $this->Application->GetVar('template_success'); + } + else { +// $event->redirect_params = array('opener' => 's', 'pass' => 'all'); +// $event->redirect = $this->Application->GetVar('template_fail'); + $object =& $this->Application->recallObject('u'); + $object->ErrorMsgs['send_error'] = $this->Application->Phrase('lu_email_send_error'); + $object->FieldErrors['Email']['pseudo'] = 'send_error'; + $event->status = erFAIL; + + } + } + else { + $object =& $this->Application->recallObject('u'); + $object->ErrorMsgs['invalid_email'] = $this->Application->Phrase('lu_InvalidEmail'); + $object->FieldErrors['Email']['pseudo'] = 'invalid_email'; + $event->status = erFAIL; + } + + + } + + /** + * Saves address changes and mades no redirect + * + * @param kEvent $event + */ + function OnUpdateAddress(&$event) + { + $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); + $object =& $event->getObject(); + + $items_info = $this->Application->GetVar( $event->getPrefixSpecial(true) ); + if($items_info) + { + list($id,$field_values) = each($items_info); + if($id > 0) $object->Load($id); + $object->SetFieldsFromHash($field_values); + $object->setID($id); + $object->Validate(); + } + + $event->redirect = false; + } + + function OnSubscribeQuery(&$event){ + + $user_email = $this->Application->GetVar('subscriber_email'); + if ( preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $user_email) ){ + + $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); + $object = &$this->Application->recallObject($this->Prefix.'.subscriber'); + + $this->Application->StoreVar('SubscriberEmail', $user_email); + + if( $object->Load(array('Email'=>$user_email)) ){ + $group_info = $this->GetGroupInfo($object->GetID()); + if($group_info){ + $event->redirect = $this->Application->GetVar('unsubscribe_template'); + } + else { + $event->redirect = $this->Application->GetVar('subscribe_template'); + } + } + else { + $event->redirect = $this->Application->GetVar('subscribe_template'); + $this->Application->StoreVar('SubscriberEmail', $user_email); + } + + } + else { + + $object =& $this->Application->recallObject('u'); + $object->ErrorMsgs['invalid_email'] = $this->Application->Phrase('lu_InvalidEmail'); + $object->FieldErrors['SubscribeEmail']['pseudo'] = 'invalid_email'; + $event->status = erFAIL; + + } + + + //subscribe_query_ok_template + } + + function OnSubscribeUser(&$event){ + + $this->Application->setUnitOption($event->Prefix,'AutoLoad',false); + $object = &$this->Application->recallObject($this->Prefix.'.subscriber'); + + $user_email = $this->Application->RecallVar('SubscriberEmail'); + + if (preg_match("/^[_a-zA-Z0-9-\.]+@[a-zA-Z0-9-\.]+\.[a-z]{2,4}$/", $user_email)){ + + if($object->Load(array('Email'=>$user_email))){ + + $group_info = $this->GetGroupInfo($object->GetID()); + + if ($group_info){ + if ($event->getEventParam('no_unsubscribe')) return; + + if ($group_info['PrimaryGroup']){ + // delete user + $object->Delete(); + } + else { + $this->RemoveSubscriberGroup($object->GetID()); + } + + $event->redirect = $this->Application->GetVar('unsubscribe_ok_template'); + + } + else { + $this->AddSubscriberGroup($object->GetID(), 0); + $event->redirect = $this->Application->GetVar('subscribe_ok_template'); + } + + + } + else { + + $object->SetField('Email', $user_email); + $object->SetField('Login', $user_email); + $object->SetDBField('dob', 1); + $object->SetDBField('dob_date', 1); + $object->SetDBField('dob_time', 1); + $ip = getenv('HTTP_X_FORWARDED_FOR')?getenv('HTTP_X_FORWARDED_FOR'):getenv('REMOTE_ADDR'); + $object->SetDBField('ip', $ip); + + $this->Application->SetVar('IsSubscriber', 1); + + if ($object->Create()) { + + $this->AddSubscriberGroup($object->GetID(), 1); + $event->redirect = $this->Application->GetVar('subscribe_ok_template'); + } + + $this->Application->SetVar('IsSubscriber', 0); + } + } + else { + // error handling here + $event->redirect = $this->Application->GetVar('subscribe_fail_template'); + } + + + } + + function AddSubscriberGroup($user_id, $is_primary){ + + $group_id = $this->Application->ConfigValue('User_SubscriberGroup'); + $sql = 'INSERT INTO '.TABLE_PREFIX.'UserGroup(PortalUserId,GroupId,PrimaryGroup) VALUES (%s,%s,'.$is_primary.')'; + $this->Conn->Query( sprintf($sql, $user_id, $group_id) ); + $this->Application->EmailEventAdmin('USER.SUBSCRIBE', $user_id); + $this->Application->EmailEventUser('USER.SUBSCRIBE', $user_id); + + } + + function RemoveSubscriberGroup($user_id){ + + $group_id = $this->Application->ConfigValue('User_SubscriberGroup'); + $sql = 'DELETE FROM '.TABLE_PREFIX.'UserGroup WHERE PortalUserId='.$user_id.' AND GroupId='.$this->Application->ConfigValue('User_SubscriberGroup'); + $this->Conn->Query($sql); + $this->Application->EmailEventAdmin('USER.UNSUBSCRIBE', $user_id); + $this->Application->EmailEventUser('USER.UNSUBSCRIBE', $user_id); + + } + + function GetGroupInfo($user_id){ + + $group_info = $this->Conn->GetRow('SELECT * FROM '.TABLE_PREFIX.'UserGroup + WHERE PortalUserId='.$user_id.' + AND GroupId='.$this->Application->ConfigValue('User_SubscriberGroup')); + return $group_info; + + } + + function OnForgotPassword(&$event){ + + $this->Application->setUnitOption('u', 'AutoLoad', false); + $user_object = &$this->Application->recallObject('u.forgot'); + $user_current_object = &$this->Application->recallObject('u'); + + $username = $this->Application->GetVar('username'); + $email = $this->Application->GetVar('email'); + $found = false; + $allow_reset = true; + + if( strlen($username) ) + { + if( $user_object->Load(array('Login'=>$username)) ) + $found = ($user_object->GetDBField("Login")==$username && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); + } + else if( strlen($email) ) + { + if( $user_object->Load(array('Email'=>$email)) ) + $found = ($user_object->GetDBField("Email")==$email && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); + } + + if( $user_object->isLoaded() ) + { + $PwResetConfirm = $user_object->GetDBField('PwResetConfirm'); + $PwRequestTime = $user_object->GetDBField('PwRequestTime'); + $PassResetTime = $user_object->GetDBField('PassResetTime'); + //$MinPwResetDelay = $user_object->GetDBField('MinPwResetDelay'); + $MinPwResetDelay = $this->Application->ConfigValue('Users_AllowReset'); + + $allow_reset = (strlen($PwResetConfirm) ? + adodb_mktime() > $PwRequestTime + $MinPwResetDelay : + adodb_mktime() > $PassResetTime + $MinPwResetDelay); + } + + if($found && $allow_reset) + { + $this->Application->StoreVar('tmp_user_id', $user_object->GetDBField("PortalUserId")); + $this->Application->StoreVar('tmp_email', $user_object->GetDBField("Email")); + + //$this->Application->EmailEventUser('INCOMMERCEUSER.PSWDC', $user_object->GetDBField("PortalUserId")); + + $event->redirect = $this->Application->GetVar('template_success'); + + } + else + { + if(!strlen($username) && !strlen($email)) + { + $user_current_object->ErrorMsgs['forgotpw_nodata'] = $this->Application->Phrase('lu_ferror_forgotpw_nodata'); + $user_current_object->FieldErrors['Login']['pseudo'] = 'lu_ferror_forgotpw_nodata'; + } + else + { + + if($allow_reset) + { + if( strlen($username) ){ + $user_current_object->ErrorMsgs['unknown_username'] = $this->Application->Phrase('lu_ferror_unknown_username'); + $user_current_object->FieldErrors['Login']['pseudo']='unknown_username'; + } + if( strlen($email) ){ + $user_current_object->ErrorMsgs['unknown_email'] = $this->Application->Phrase('lu_ferror_unknown_email'); + $user_current_object->FieldErrors['Email']['pseudo']='unknown_email'; + } + } + else + { + $user_current_object->ErrorMsgs['reset_denied'] = $this->Application->Phrase('lu_ferror_reset_denied'); + if( strlen($username) ){ + $user_current_object->FieldErrors['Login']['pseudo']='reset_denied'; + } + if( strlen($email) ){ + $user_current_object->FieldErrors['Email']['pseudo']='reset_denied'; + } + } + + } + + if($user_current_object->FieldErrors){ + $event->redirect = false; + } + } + + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function OnResetPassword(&$event){ + + $user_object = &$this->Application->recallObject('u.forgot'); + + if($user_object->Load($this->Application->RecallVar('tmp_user_id'))){ + + $this->Application->EmailEventUser('INCOMMERCEUSER.PSWDC', $user_object->GetDBField("PortalUserId")); + $event->redirect = $this->Application->GetVar('template_success'); + + $mod_object =& $this->Application->recallObject('mod.'.'In-Commerce'); + $m_cat_id = $mod_object->GetDBField('RootCat'); + $event->SetRedirectParam('pass', 'm'); + //$event->SetRedirectParam('m_cat_id', $m_cat_id); + $this->Application->SetVar('m_cat_id', $m_cat_id); + + + } + + } + + function OnResetPasswordConfirmed(&$event){ + + $passed_key = $this->Application->GetVar('user_key'); + + $user_object = &$this->Application->recallObject('u.forgot'); + $user_current_object = &$this->Application->recallObject('u'); + + if (strlen(trim($passed_key)) == 0) { + $event->redirect_params = array('opener' => 's', 'pass' => 'all'); + $event->redirect = false; + + $user_current_object->ErrorMsgs['code_is_not_valid'] = $this->Application->Phrase('lu_code_is_not_valid'); + $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_is_not_valid'; + } + + + if($user_object->Load(array('PwResetConfirm'=>$passed_key))) + { + $exp_time = $user_object->GetDBField('PwRequestTime') + 3600; + $user_object->SetDBField("PwResetConfirm", ''); + $user_object->SetDBField("PwRequestTime", 0); + if ( $exp_time > adodb_mktime() ) + { + //$m_var_list_update['codevalidationresult'] = 'lu_resetpw_confirm_text'; + $newpw = makepassword4(); + + $this->Application->StoreVar('password', $newpw); + + $user_object->SetDBField("Password",$newpw); + $user_object->SetDBField("PassResetTime", adodb_mktime()); + $user_object->SetDBField("PwResetConfirm", ''); + $user_object->SetDBField("PwRequestTime", 0); + $user_object->Update(); + + $this->Application->SetVar('ForgottenPassword', $newpw); + + $email_event_user = &$this->Application->EmailEventUser('INCOMMERCEUSER.PSWD', $user_object->GetDBField('PortalUserId')); + $email_event_admin = &$this->Application->EmailEventAdmin('INCOMMERCEUSER.PSWD'); + + $this->Application->DeleteVar('ForgottenPassword'); + + if ($email_event_user->status == erSUCCESS){ + $event->redirect_params = array('opener' => 's', 'pass' => 'all'); + $event->redirect = $this->Application->GetVar('template_success'); + } + + $user_object->SetDBField("Password",md5($newpw)); + $user_object->Update(); + + } else { + $user_current_object->ErrorMsgs['code_expired'] = $this->Application->Phrase('lu_code_expired'); + $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_expired'; + $event->redirect = false; + + } + } else { + $user_current_object->ErrorMsgs['code_is_not_valid'] = $this->Application->Phrase('lu_code_is_not_valid'); + $user_current_object->FieldErrors['PwResetConfirm']['pseudo'] = 'code_is_not_valid'; + $event->redirect = false; + + } + } + + function OnUpdate(&$event) + { + $cs_helper =& $this->Application->recallObject('CountryStatesHelper'); + $cs_helper->CheckStateField($event, 'State', 'Country'); + + parent::OnUpdate($event); + + $this->setNextTemplate($event); + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function setNextTemplate(&$event) + { + if( !$this->Application->IsAdmin() ) + { + $event->redirect_params['opener'] = 's'; + $object =& $event->getObject(); + if($object->GetDBField('Status') == STATUS_ACTIVE) + { + $next_template = $this->Application->GetVar('next_template'); + if($next_template) $event->redirect = $next_template; + } + } + } + + + + /** + * Delete users from groups if their membership is expired + * + * @param kEvent $event + */ + function OnCheckExpiredMembership(&$event) + { + // send pre-expiration reminders: begin + $pre_expiration = adodb_mktime() + $this->Application->ConfigValue('User_MembershipExpirationReminder') * 3600 * 24; + $sql = 'SELECT PortalUserId, GroupId + FROM '.TABLE_PREFIX.'UserGroup + WHERE (MembershipExpires IS NOT NULL) AND (ExpirationReminderSent = 0) AND (MembershipExpires < '.$pre_expiration.')'; + + $skip_clause = $event->getEventParam('skip_clause'); + if ($skip_clause) { + $sql .= ' AND !('.implode(') AND !(', $skip_clause).')'; + } + + $records = $this->Conn->Query($sql); + if ($records) { + $conditions = Array(); + foreach ($records as $record) { + $email_event_user =& $this->Application->EmailEventUser('USER.MEMBERSHIP.EXPIRATION.NOTICE', $record['PortalUserId']); + $email_event_admin =& $this->Application->EmailEventAdmin('USER.MEMBERSHIP.EXPIRATION.NOTICE'); + $conditions[] = '(PortalUserId = '.$record['PortalUserId'].' AND GroupId = '.$record['GroupId'].')'; + } + $sql = 'UPDATE '.TABLE_PREFIX.'UserGroup + SET ExpirationReminderSent = 1 + WHERE '.implode(' OR ', $conditions); + $this->Conn->Query($sql); + } + // send pre-expiration reminders: end + + // remove users from groups with expired membership: begin + $sql = 'SELECT PortalUserId + FROM '.TABLE_PREFIX.'UserGroup + WHERE (MembershipExpires IS NOT NULL) AND (MembershipExpires < '.adodb_mktime().')'; + $user_ids = $this->Conn->GetCol($sql); + if ($user_ids) { + foreach ($user_ids as $id) { + $email_event_user =& $this->Application->EmailEventUser('USER.MEMBERSHIP.EXPIRED', $id); + $email_event_admin =& $this->Application->EmailEventAdmin('USER.MEMBERSHIP.EXPIRED'); + } + } + $sql = 'DELETE FROM '.TABLE_PREFIX.'UserGroup + WHERE (MembershipExpires IS NOT NULL) AND (MembershipExpires < '.adodb_mktime().')'; + $this->Conn->Query($sql); + // remove users from groups with expired membership: end + } + + /** + * Enter description here... + * + * @param kEvent $event + */ + function OnRefreshForm(&$event) + { + $event->redirect = false; + $item_info = $this->Application->GetVar($event->Prefix_Special); + list($id, $fields) = each($item_info); + + $object =& $event->getObject( Array('skip_autoload' => true) ); + $object->setID($id); + $object->IgnoreValidation = true; + $object->SetFieldsFromHash($fields); + } + } + ?> \ No newline at end of file