Index: branches/5.1.x/core/units/users/users_event_handler.php =================================================================== diff -u -N -r14487 -r14489 --- branches/5.1.x/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 14487) +++ branches/5.1.x/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 14489) @@ -1,6 +1,6 @@ Application->ConfigValue('Email_As_Login'); - $username = $this->Application->GetVar($email_as_login && !$this->Application->isAdmin ? 'email' : 'login'); - $password = $this->Application->GetVar('password'); - $rember_login = $this->Application->GetVar('cb_remember_login') == 1; + $object =& $event->getObject(); + /* @var $object kDBItem */ + $object->SetFieldsFromHash( $this->getSubmittedFields($event) ); + $username = $object->GetDBField('UserLogin'); + $password = $object->GetDBField('UserPassword'); + $rember_login = $object->GetDBField('UserRememberLogin') == 1; + $user_helper =& $this->Application->recallObject('UserHelper'); /* @var $user_helper UserHelper */ $user_helper->event =& $event; $result = $user_helper->loginUser($username, $password, false, $rember_login); if ($result != LOGIN_RESULT_OK) { - $object =& $user_helper->getUserObject(); - - if ($result == LOGIN_RESULT_NO_PERMISSION) { - $object->SetError('ValidateLogin', 'no_permission', 'la_no_permissions'); - } - else { - $object->SetID(USER_GUEST); - $object->SetError('ValidateLogin', 'invalid_password', 'la_invalid_password'); - } - $event->status = erFAIL; + $object->SetError('UserLogin', $result == LOGIN_RESULT_NO_PERMISSION ? 'no_permission' : 'invalid_password'); } } @@ -566,56 +560,35 @@ */ function OnRecommend(&$event) { - $friend_email = $this->Application->GetVar('friend_email'); - $friend_name = $this->Application->GetVar('friend_email'); + $object =& $event->getObject(); + /* @var $object kDBItem */ - // used for error reporting only -> rewrite code + theme (by Alex) - $object =& $this->Application->recallObject('u', null, Array('skip_autoload' => true)); // TODO: change theme too - /* @var $object UsersItem */ + $object->setRequired('RecommendEmail'); + $object->SetFieldsFromHash( $this->getSubmittedFields($event) ); - if (preg_match('/^(' . REGEX_EMAIL_USER . '@' . REGEX_EMAIL_DOMAIN . ')$/i', $friend_email)) - { - /*$cutoff = adodb_mktime() + (int)$this->Application->ConfigValue('Suggest_MinInterval'); - $sql = 'SELECT * - FROM ' . TABLE_PREFIX . 'SuggestMail - WHERE email = ' . $this->Conn->qstr($friend_email) . ' AND sent < ' . $cutoff; - if ($this->Conn->GetRow($sql) !== false) { - $object->SetError('Email', 'send_error', 'lu_email_already_suggested'); - $event->status = erFAIL; - return ; - }*/ + if ( !$object->ValidateField('RecommendEmail') ) { + $event->status = erFAIL; - $send_params = Array (); - $send_params['to_email'] = $friend_email; - $send_params['to_name'] = $friend_name; + return ; + } - $user_id = $this->Application->RecallVar('user_id'); - $email_event =& $this->Application->EmailEventUser('USER.SUGGEST', $user_id, $send_params); - $email_event =& $this->Application->EmailEventAdmin('USER.SUGGEST'); + $send_params = Array ( + 'to_email' => $object->GetDBField('RecommendEmail'), + 'to_name' => $object->GetDBField('RecommendEmail'), + ); - if ($email_event->status == erSUCCESS){ - /*$fields_hash = Array ( - 'email' => $friend_email, - 'sent' => adodb_mktime(), - ); + $user_id = $this->Application->RecallVar('user_id'); + $email_event =& $this->Application->EmailEventUser('USER.SUGGEST', $user_id, $send_params); + $email_event =& $this->Application->EmailEventAdmin('USER.SUGGEST'); - $this->Conn->doInsert($fields_hash, TABLE_PREFIX . 'SuggestMail');*/ - - $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->SetError('Email', 'send_error', 'lu_email_send_error'); - $event->status = erFAIL; - } - } - else { - $object->SetError('Email', 'invalid_email', 'lu_InvalidEmail'); + if ( $email_event->status == erSUCCESS ) { + $event->SetRedirectParam('pass', 'all'); + $event->redirect = $this->Application->GetVar('template_success'); + } + else { $event->status = erFAIL; - } + $object->SetError('RecommendEmail', 'send_error'); + } } /** @@ -778,84 +751,76 @@ return $this->Conn->GetRow($sql); } + /** + * Checks, that user can reset his password + * + * @param kEvent $event + */ function OnForgotPassword(&$event) { - $user_object =& $this->Application->recallObject('u.forgot', null, Array('skip_autoload' => true)); - /* @var $user_object UsersItem */ + $object =& $event->getObject(); + /* @var $object kDBItem */ - // used for error reporting only -> rewrite code + theme (by Alex) - $user_current_object =& $this->Application->recallObject('u', null, Array('skip_autoload' => true)); // TODO: change theme too - /* @var $user_current_object UsersItem */ + $object->SetFieldsFromHash( $this->getSubmittedFields($event) ); - $username = $this->Application->GetVar('username'); - $email = $this->Application->GetVar('email'); + $user_object =& $this->Application->recallObject('u.tmp', null, Array('skip_autoload' => true)); + /* @var $user_object UsersItem */ + $found = false; $allow_reset = true; + $username = $object->GetDBField('ForgotLogin'); + $email = $object->GetDBField('ForgotEmail'); - if (strlen($username)) { + if ( strlen($username) ) { $user_object->Load($username, 'Login'); - if ($user_object->isLoaded()) { - $found = ($user_object->GetDBField("Login")==$username && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); - } } - else if(strlen($email)) { + elseif ( strlen($email) ) { $user_object->Load($email, 'Email'); - if ($user_object->isLoaded()) { - $found = ($user_object->GetDBField("Email")==$email && $user_object->GetDBField("Status")==1) && strlen($user_object->GetDBField("Password")); - } } - if ($user_object->isLoaded()) { + if ( $user_object->isLoaded() ) { + $found = $user_object->GetDBField('Status') == STATUS_ACTIVE; + $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")); + if ( $found && $allow_reset ) { + $this->Application->StoreVar('tmp_user_id', $user_object->GetID()); + $this->Application->StoreVar('tmp_email', $user_object->GetDBField('Email')); $confirm_template = $this->Application->GetVar('reset_confirm_template'); - if (!$confirm_template) { + + if ( !$confirm_template ) { $this->Application->SetVar('reset_confirm_template', 'platform/login/forgotpass_reset'); } - $this->Application->EmailEventUser('USER.PSWDC', $user_object->GetDBField('PortalUserId')); + $this->Application->EmailEventUser('USER.PSWDC', $user_object->GetID()); $event->redirect = $this->Application->GetVar('template_success'); } else { - if (!strlen($username) && !strlen($email)) { - $user_current_object->SetError('Login', 'forgotpw_nodata', 'lu_ferror_forgotpw_nodata'); - $user_current_object->SetError('Email', 'forgotpw_nodata', 'lu_ferror_forgotpw_nodata'); + if ( !strlen($username) && !strlen($email) ) { + $object->SetError('ForgotLogin', 'required'); + $object->SetError('ForgotEmail', 'required'); } else { - if ($allow_reset) { - if (strlen($username)) { - $user_current_object->SetError('Login', 'unknown_username', 'lu_ferror_unknown_username'); - } - if (strlen($email)) { - $user_current_object->SetError('Email', 'unknown_email', 'lu_ferror_unknown_email'); - } + if ( strlen($username) ) { + $object->SetError('ForgotLogin', $allow_reset ? 'unknown_username' : 'reset_denied'); } - else { - if (strlen($username)) { - $user_current_object->SetError('Login', 'reset_denied', 'lu_ferror_reset_denied'); - } - if (strlen($email)) { - $user_current_object->SetError('Email', 'reset_denied', 'lu_ferror_reset_denied'); - } + if ( strlen($email) ) { + $object->SetError('ForgotEmail', $allow_reset ? 'unknown_email' : 'reset_denied'); } } - if($user_current_object->FieldErrors){ - $event->redirect = false; + if ( !$object->ValidateField('ForgotLogin') || !$object->ValidateField('ForgotEmail') ) { + $event->status = erFAIL; } } } @@ -1081,6 +1046,11 @@ */ function getPassedID(&$event) { + if ( preg_match('/^(login|register|recommend|subscribe|forgot)/', $event->Special) ) { + // this way we can have 2+ objects stating with same special, e.g. "u.login-sidebox" and "u.login-main" + return USER_GUEST; + } + switch ($event->Special) { case 'ord': $order =& $this->Application->recallObject('ord'); Index: branches/5.1.x/core/admin_templates/login.tpl =================================================================== diff -u -N -r14241 -r14489 --- branches/5.1.x/core/admin_templates/login.tpl (.../login.tpl) (revision 14241) +++ branches/5.1.x/core/admin_templates/login.tpl (.../login.tpl) (revision 14489) @@ -127,18 +127,18 @@ - + - +
- - + +
:" style="width: 150px;">
:
@@ -165,15 +165,15 @@ - - index"/> + index"/>