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