From 78e0330b218f7b9dbd616e3f8a889e80af884834 Mon Sep 17 00:00:00 2001 From: devjin Date: Fri, 3 Aug 2012 06:46:05 +0000 Subject: [PATCH] issue 641 update email and resend auth mail. git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.3.1@10970 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/member/conf/module.xml | 1 + modules/member/lang/lang.xml | 12 +- modules/member/member.controller.php | 167 ++++++++++++++----- modules/member/member.view.php | 24 ++- modules/member/ruleset/resetAuthMail.xml | 8 + modules/member/skins/default/reset_mail.html | 30 ++++ 6 files changed, 193 insertions(+), 49 deletions(-) create mode 100644 modules/member/ruleset/resetAuthMail.xml create mode 100644 modules/member/skins/default/reset_mail.html diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index d3d037d95..75b09d96c 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -65,6 +65,7 @@ + diff --git a/modules/member/lang/lang.xml b/modules/member/lang/lang.xml index 1b670e19c..6b6ba477c 100644 --- a/modules/member/lang/lang.xml +++ b/modules/member/lang/lang.xml @@ -805,6 +805,10 @@ + + + + @@ -935,7 +939,7 @@ - + @@ -2025,6 +2029,9 @@ Bạn có thể quản lý thành viên bằng cách tạo những nhóm mới, + + + @@ -2037,6 +2044,9 @@ Bạn có thể quản lý thành viên bằng cách tạo những nhóm mới, + + + diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index cb041b9a8..ef82da1f6 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -62,7 +62,6 @@ // Check if change_password_date is set if ($limit_date > 0) { $oMemberModel = &getModel('member'); - //$member_info = $oMemberModel->getMemberInfoByUserID($user_id, $columnList); if ($this->memberInfo->change_password_date < date ('YmdHis', strtotime ('-' . $limit_date . ' day'))) { $this->setRedirectUrl(getNotEncodedUrl('','vid',Context::get('vid'),'mid',Context::get('mid'),'act','dispMemberModifyPassword')); return; @@ -1037,6 +1036,7 @@ $auth_url = getFullUrl('','module','member','act','procMemberAuthAccount','member_srl',$memberInfo->member_srl, 'auth_key',$auth_info->auth_key); Context::set('auth_url', $auth_url); + $oTemplate = &TemplateHandler::getInstance(); $content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail'); // Get information of the Webmaster @@ -1057,6 +1057,118 @@ $this->setRedirectUrl($returnUrl); } + function procMemberResetAuthMail() + { + $existingEmail = Context::get('existingEmail'); + $newEmail = Context::get('email_address'); + + if(!$newEmail || !$existingEmail) + { + return $this->stop('msg_invalid_request'); + } + + $oMemberModel = &getModel('member'); + $member_srl = $oMemberModel->getMemberSrlByEmailAddress($newEmail); + if($member_srl) + { + return new Object(-1,'msg_exists_email_address'); + } + + $memberInfo = $oMemberModel->getMemberInfoByEmailAddress($existingEmail); + if(!$memberInfo) + { + return $this->stop('msg_invalid_request'); + } + + // remove all key by member_srl + $args->member_srl = $memberInfo->member_srl; + $output = executeQuery('member.deleteAuthMail', $args); + + if(!$output->toBool()) + { + return $output; + } + + // update member info + $args->email_address = $newEmail; + list($args->email_id, $args->email_host) = explode('@', $newEmail); + + $output = executeQuery('member.updateMemberEmailAddress', $args); + if(!$output->toBool()) + { + return $this->stop($output->getMessage()); + } + + // generate new auth key + $auth_args->user_id = $memberInfo->user_id; + $auth_args->member_srl = $memberInfo->member_srl; + $auth_args->new_password = $memberInfo->password; + $auth_args->auth_key = md5( rand(0,999999 ) ); + $auth_args->is_register = 'Y'; + + $output = executeQuery('member.insertAuthMail', $auth_args); + if(!$output->toBool()) return $output; + + $memberInfo->email_address = $newEmail; + + // resend auth mail. + $this->_sendAuthMail($auth_args, $memberInfo); + + $msg = sprintf(Context::getLang('msg_confirm_mail_sent'), $memberInfo->email_address); + $this->setMessage($msg); + + $returnUrl = getUrl(''); + $this->setRedirectUrl($returnUrl); + + } + + function _sendAuthMail($auth_args, $member_info) + { + $oMemberModel = &getModel('member'); + $member_config = $oMemberModel->getMemberConfig(); + // Get content of the email to send a member + Context::set('auth_args', $auth_args); + + $memberInfo = array(); + + global $lang; + if (is_array($member_config->signupForm)){ + $exceptForm=array('password', 'find_account_question'); + foreach($member_config->signupForm as $form){ + if(!in_array($form->name, $exceptForm) && $form->isDefaultForm && ($form->required || $form->mustRequired)){ + $memberInfo[$lang->{$form->name}] = $member_info->{$form->name}; + } + } + }else{ + $memberInfo[$lang->user_id] = $member_info->user_id; + $memberInfo[$lang->user_name] = $member_info->user_name; + $memberInfo[$lang->nick_name] = $member_info->nick_name; + $memberInfo[$lang->email_address] = $member_info->email_address; + } + Context::set('memberInfo', $memberInfo); + + if(!$member_config->skin) $member_config->skin = "default"; + if(!$member_config->colorset) $member_config->colorset = "white"; + + Context::set('member_config', $member_config); + + $tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin); + if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default'); + + $auth_url = getFullUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key); + Context::set('auth_url', $auth_url); + + $oTemplate = &TemplateHandler::getInstance(); + $content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail'); + // Send a mail + $oMail = new Mail(); + $oMail->setTitle( Context::getLang('msg_confirm_account_title') ); + $oMail->setContent($content); + $oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email); + $oMail->setReceiptor( $member_info->user_name, $member_info->email_address ); + $oMail->send(); + } + /** * Join a virtual site * @@ -1366,10 +1478,16 @@ // Password Check if($password && !$oMemberModel->isValidPassword($this->memberInfo->password, $password, $this->memberInfo->member_srl)) return $this->recordMemberLoginError(-1, 'invalid_password',$this->memberInfo); // If denied == 'Y', notify - if($this->memberInfo->denied == 'Y') { + if($this->memberInfo->denied == 'Y') + { $args->member_srl = $this->memberInfo->member_srl; $output = executeQuery('member.chkAuthMail', $args); - if ($output->toBool() && $output->data->count != '0') return new Object(-1,'msg_user_not_confirmed'); + if ($output->toBool() && $output->data->count != '0') + { + $_SESSION['auth_member_srl'] = $this->memberInfo->member_srl; + $redirectUrl = getUrl('', 'act', 'dispMemberResendAuthMail'); + return $this->setRedirectUrl($redirectUrl, new Object(-1,'msg_user_not_confirmed')); + } return new Object(-1,'msg_user_denied'); } // Notify if denied_date is less than the current time @@ -1621,48 +1739,7 @@ $oDB->rollback(); return $output; } - // Get content of the email to send a member - Context::set('auth_args', $auth_args); - - global $lang; - if (is_array($member_config->signupForm)){ - $exceptForm=array('password', 'find_account_question'); - foreach($member_config->signupForm as $form){ - if(!in_array($form->name, $exceptForm) && $form->isDefaultForm && ($form->required || $form->mustRequired)){ - $memberInfo[$lang->{$form->name}] = $args->{$form->name}; - } - } - }else{ - $memberInfo[$lang->user_id] = $args->user_id; - $memberInfo[$lang->user_name] = $args->user_name; - $memberInfo[$lang->nick_name] = $args->nick_name; - $memberInfo[$lang->email_address] = $args->email_address; - } - Context::set('memberInfo', $memberInfo); - - if(!$member_config->skin) $member_config->skin = "default"; - if(!$member_config->colorset) $member_config->colorset = "white"; - - Context::set('member_config', $member_config); - - $tpl_path = sprintf('%sskins/%s', $this->module_path, $member_config->skin); - if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default'); - - $auth_url = getFullUrl('','module','member','act','procMemberAuthAccount','member_srl',$args->member_srl, 'auth_key',$auth_args->auth_key); - Context::set('auth_url', $auth_url); - - $oTemplate = &TemplateHandler::getInstance(); - $content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail'); - // Get information of the Webmaster - $oModuleModel = &getModel('module'); - $member_config = $oModuleModel->getModuleConfig('member'); - // Send a mail - $oMail = new Mail(); - $oMail->setTitle( Context::getLang('msg_confirm_account_title') ); - $oMail->setContent($content); - $oMail->setSender( $member_config->webmaster_name?$member_config->webmaster_name:'webmaster', $member_config->webmaster_email); - $oMail->setReceiptor( $args->user_name, $args->email_address ); - $oMail->send(); + $this->_sendAuthMail($auth_args, $args); } // Call a trigger (after) if($output->toBool()) { diff --git a/modules/member/member.view.php b/modules/member/member.view.php index 6d1c7f152..99fe71cd2 100644 --- a/modules/member/member.view.php +++ b/modules/member/member.view.php @@ -382,10 +382,28 @@ /** * @brief Page of re-sending an authentication mail **/ - function dispMemberResendAuthMail() { - if(Context::get('is_logged')) return $this->stop('already_logged'); + function dispMemberResendAuthMail() + { + $authMemberSrl = $_SESSION['auth_member_srl']; + unset($_SESSION['auth_member_srl']); - $this->setTemplateFile('resend_auth_mail'); + if(Context::get('is_logged')) + { + return $this->stop('already_logged'); + } + + if($authMemberSrl) + { + $oMemberModel = &getModel('member'); + $memberInfo = $oMemberModel->getMemberInfoByMemberSrl($authMemberSrl); + + Context::set('memberInfo', $memberInfo); + $this->setTemplateFile('reset_mail'); + } + else + { + $this->setTemplateFile('resend_auth_mail'); + } } /** diff --git a/modules/member/ruleset/resetAuthMail.xml b/modules/member/ruleset/resetAuthMail.xml new file mode 100644 index 000000000..108ab2e1f --- /dev/null +++ b/modules/member/ruleset/resetAuthMail.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/modules/member/skins/default/reset_mail.html b/modules/member/skins/default/reset_mail.html new file mode 100644 index 000000000..a94ba8f3b --- /dev/null +++ b/modules/member/skins/default/reset_mail.html @@ -0,0 +1,30 @@ + +
+

{$XE_VALIDATOR_MESSAGE}

+
+
+

{$lang->cmd_resend_auth_mail}

+

{sprintf($lang->about_reset_auth_mail, $memberInfo->email_address)}

+
    +
  • +
    + + + +

    +

    +
    +
  • +
  • +
    + + + +

    +

    +

    {$lang->about_reset_auth_mail_submit}

    +
    +
  • +
+
+