인증 메일을 받지 못한 경우를 대비해 인증 메일을 재발송 받을 수 있는 기능 추가.

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6590 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
smaker 2009-06-18 08:57:11 +00:00
parent 271a84cccf
commit 08557fafe6
15 changed files with 181 additions and 45 deletions

View file

@ -15,6 +15,7 @@
<action name="dispMemberScrappedDocument" type="view" standalone="true" />
<action name="dispMemberSavedDocument" type="view" standalone="true" />
<action name="dispMemberFindAccount" type="view" standalone="true" />
<action name="dispMemberResendAuthMail" type="view" standalone="true" />
<action name="dispSavedDocumentList" type="view" standalone="true" />
<action name="dispMemberAdminList" type="view" standalone="true" index="true" admin_index="true" />
@ -62,6 +63,7 @@
<action name="procMemberFindAccount" type="controller" standalone="true" />
<action name="procMemberAuthAccount" type="controller" standalone="true" />
<action name="procMemberUpdateAuthMail" type="controller" standalone="true" />
<action name="procMemberResendAuthMail" type="controller" standalone="true" />
<action name="procMemberAdminInsert" type="controller" standalone="true" />
<action name="procMemberAdminDelete" type="controller" standalone="true" />

View file

@ -95,6 +95,7 @@
$lang->cmd_view_member_info = 'Member Info';
$lang->cmd_leave = 'Leave';
$lang->cmd_find_member_account = 'Find Account Info';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = 'Member List';
$lang->cmd_module_config = 'Default Setting';
@ -202,5 +203,8 @@
$lang->about_member = "This is a module for creating/modifying/deleting members and managing group or join form.\nYou can manage members by creating new groups, and get additional information by managing join form";
$lang->about_find_member_account = 'Your account info will be noticed by registered email address.<br />Please input email address which you have input on registration, and press "Find Account Info" button.<br />';
$lang->about_ssl_port = '기본 포트 이외의 SSL 포트를 사용하는 경우 포트번호를 입력해주세요';
$lang->add_openid = 'Add OpenID';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -201,4 +201,8 @@
$lang->about_member = "Esto es un módulo para crear/modificar/eliminar usuarios y manejar grupos o el formato del registro.\n Usted puede manejar usuarios creando nuevos grupos, y obtener información adicional manejando el formato del registro";
$lang->about_find_member_account = 'Su información de la cuenta será observado por dirección de correo electrónico registrada. <br /> Introduce la dirección de correo electrónico que usted tiene de entrada en el registro, y pulse "Buscar" Información de la cuenta ". <br />';
$lang->about_ssl_port = '기본 포트 이외의 SSL 포트를 사용하는 경우 포트번호를 입력해주세요';
$lang->add_openid = '오픈아이디 추가';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -95,6 +95,7 @@
$lang->cmd_view_member_info = 'Voir Mon Information';
$lang->cmd_leave = 'Quitter';
$lang->cmd_find_member_account = 'J\'ai perdu le compte / le mot de passe';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = 'Liste de Membres';
$lang->cmd_module_config = 'Configuration par Défaut';
@ -203,4 +204,6 @@
$lang->about_find_member_account = 'L\information de votre compte sera annoncé par le mél sur l\'inscription. <br />Entrez l\'adresse mél que vous avez entré sur l\'inscription et appuyez le bouton "Recherce l\'Information du Compte".<br />';
$lang->about_member = "C'est le module pour administrer des membres avec lequel vous pouvez créer/modifier/supprimer des membres ou administrer les groupes et la formule d'inscription.\nVous pouvez administrer membres par création un nouveau groupe, ou gagner les informations additionnelles par l'administration la formule d'inscrioption.";
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -95,6 +95,7 @@
$lang->cmd_view_member_info = '会員情報確認';
$lang->cmd_leave = '退会';
$lang->cmd_find_member_account = 'IDとパスワードのリマインダー';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = '会員リスト';
$lang->cmd_module_config = '基本設定';
@ -205,4 +206,6 @@
$lang->about_member = "会員の作成・修正・削除することが出来、グループの管理、登録フォームの管理などが行える会員管理モジュールです。\nデフォルトで作成されたグループにグループを追加作成して会員管理が出来るようにし、会員登録フォーム管理では基本情報の他、フォームの入力情報を追加することが出来ます。";
$lang->about_ssl_port = '基本ポート以外のSSLポートを利用する場合、入力して下さい。';
$lang->add_openid = 'OpenIDの追加';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -95,6 +95,7 @@
$lang->cmd_view_member_info = '회원 정보 보기';
$lang->cmd_leave = '탈퇴';
$lang->cmd_find_member_account = '아이디/비밀번호 찾기';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = '회원 목록';
$lang->cmd_module_config = '기본 설정';
@ -205,4 +206,6 @@
$lang->about_member = "회원을 생성/수정/삭제 할 수 있고 그룹관리나 가입폼 관리등을 할 수 있는 회원 관리 모듈입니다.\n기본으로 생성된 그룹외의 그룹을 생성하여 회원 관리가 가능하고 가입폼관리를 통한 기본 정보외의 추가 정보를 요구받을 수도 있습니다.";
$lang->about_ssl_port = '기본 포트 이외의 SSL 포트를 사용하는 경우 포트번호를 입력해주세요';
$lang->add_openid = '오픈아이디 추가';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -94,6 +94,7 @@
$lang->cmd_view_member_info = 'Информация пользователя';
$lang->cmd_leave = 'Покинуть';
$lang->cmd_find_member_account = 'Найти информацию аккаунта';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = 'Список пользователей';
$lang->cmd_module_config = 'Стандартные настройки';
@ -201,4 +202,6 @@
$lang->about_member = "Этот модуль служит для создания/изменения/удаления пользователей, управления их группами и формой регистрации.\nВы можете управлять пользователями посредством создания новых групп, и получить дополнительную информацию, управляя формой регистрации";
$lang->about_find_member_account = 'Ваша информация аккаунта будет направлена на зарегистрированный email.<br />Пожалуйста, введите email адрес, который Вы ввели при регистрации и нажмите кнопку "Найти Информацию Аккаунта".<br />';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -96,6 +96,7 @@
$lang->cmd_view_member_info = '个人资料';
$lang->cmd_leave = '注销';
$lang->cmd_find_member_account = '查找用户名/密码';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = '会员目录';
$lang->cmd_module_config = '常规选项';
@ -204,4 +205,6 @@
$lang->about_find_member_account = '用户名/密码将发送到您注册时所输入的电子邮件当中。<br />输入注册时的电子邮件地址后,请点击“查找用户名/密码”按钮。<br />';
$lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。";
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -95,6 +95,7 @@
$lang->cmd_view_member_info = '檢視會員資料';
$lang->cmd_leave = '退出';
$lang->cmd_find_member_account = '查詢帳號/密碼';
$lang->cmd_resend_auth_mail = '인증 메일 재발송';
$lang->cmd_member_list = '會員列表';
$lang->cmd_module_config = '基本設置';
@ -205,4 +206,6 @@
$lang->about_member = "可以新增/修改/刪除會員及管理群組或註冊表單的會員管理模組。\n此模組不僅可以建立預設群組以外的其他群組來管理會員,並且通過註冊表單的管理獲得會員基本資料以外的延伸資料。";
$lang->about_ssl_port = '請輸入想要使用預設SSL埠口以外的埠口。';
$lang->add_openid = 'Add OpenID';
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
?>

View file

@ -56,7 +56,7 @@
$referer_url = Context::get('referer_url');
if (!$referer_url) $referer_url = $_SERVER['HTTP_REFERER'];
if (!$referer_url)
if (!$referer_url)
$referer_url = htmlspecialchars_decode(getRequestUri(RELEASE_SSL));
$openid = new SimpleOpenID();
@ -72,7 +72,7 @@
$this->setError(-1);
$this->setMessage($error['description']);
if (Context::getRequestMethod() == 'POST')
if (Context::getRequestMethod() == 'POST')
header("location:" . $referer_url);
} else {
$goto = urlencode($referer_url);
@ -80,7 +80,7 @@
$openid->SetApprovedURL($ApprovedURL);
$url = $openid->GetRedirectURL();
$this->add('redirect_url', $url);
if (Context::getRequestMethod() == 'POST')
if (Context::getRequestMethod() == 'POST')
header("location:" . $url);
}
ob_clean();
@ -110,12 +110,12 @@
if ($query === null) $query = '';
if ($fragment === null) $fragment = '';
if ($scheme == 'http' or $scheme == '')
if ($scheme == 'http' or $scheme == '')
$scheme_part = '';
else
$scheme_part = $scheme."://";
if ($path == '' || $path == '/') {
$result[] = $scheme_part.$authority.''.$query.$fragment;
$result[] = $scheme_part.$authority.'/'.$query.$fragment;
@ -148,7 +148,7 @@
return $openid_ctx;
}
/**
/**
* @brief openid 인증 체크
**/
function procMemberOpenIDValidate() {
@ -227,11 +227,11 @@
// 페이지 이동
if(Context::get('goto')) {
$goto = Context::get('goto');
header("location:" . $goto);
header("location:" . $goto);
} else {
header("location:./");
header("location:./");
}
exit();
// 인증 실패
@ -274,9 +274,9 @@
if(Context::get('goto')){
$goto = Context::get('goto');
header("location:" . $goto);
header("location:" . $goto);
}else{
header("location:./");
header("location:./");
}
exit();
} else if($openid->IsError() == true) {
@ -491,7 +491,7 @@
// 중복 검사
$member_srl = $oMemberModel->getMemberSrlByNickName($value);
if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_nick_name');
break;
case 'email_address' :
// 중복 검사
@ -511,7 +511,7 @@
// 관리자가 회원가입을 허락하였는지 검사
if($config->enable_join != 'Y') return $this->stop('msg_signup_disabled');
// 약관에 동의하였는지 검사 (약관이 있을 경우만)
// 약관에 동의하였는지 검사 (약관이 있을 경우만)
if($config->agreement && Context::get('accept_agreement')!='Y') return $this->stop('msg_accept_agreement');
// 필수 정보들을 미리 추출
@ -706,7 +706,7 @@
}
/**
* @brief 프로필 이미지 추가
* @brief 프로필 이미지 추가
**/
function procMemberInsertProfileImage() {
// 정상적으로 업로드 된 파일인지 검사
@ -759,7 +759,7 @@
}
/**
* @brief 이미지 이름을 추가
* @brief 이미지 이름을 추가
**/
function procMemberInsertImageName() {
// 정상적으로 업로드 된 파일인지 검사
@ -807,7 +807,7 @@
if($width > $max_width || $height > $max_height || $type!=1) FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, 'gif');
else @copy($target_file, $target_filename);
}
/**
* @brief 프로필 이미지를 삭제
**/
@ -827,7 +827,7 @@
$oMemberModel = &getModel('member');
$profile_image = $oMemberModel->getProfileImage($member_srl);
FileHandler::removeFile($profile_image->file);
}
}
return new Object(0,'success');
}
@ -850,12 +850,12 @@
$oMemberModel = &getModel('member');
$image_name = $oMemberModel->getImageName($member_srl);
FileHandler::removeFile($image_name->file);
}
}
return new Object(0,'success');
}
/**
* @brief 이미지 마크를 추가
* @brief 이미지 마크를 추가
**/
function procMemberInsertImageMark() {
// 정상적으로 업로드 된 파일인지 검사
@ -889,7 +889,7 @@
if(!$max_width) $max_width = "20";
$max_height = $config->image_mark_max_height;
if(!$max_height) $max_height = "20";
$target_path = sprintf('files/member_extra_info/image_mark/%s/', getNumberingPath($member_srl));
FileHandler::makeDir($target_path);
@ -915,7 +915,7 @@
$oMemberModel = &getModel('member');
$image_mark = $oMemberModel->getImageMark($member_srl);
FileHandler::removeFile($image_mark->file);
}
}
return new Object(0,'success');
}
@ -956,13 +956,13 @@
// 메일 내용을 구함
Context::set('auth_args', $args);
Context::set('member_info', $member_info);
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $this->member_config->skin = "default";
if(!$member_config->colorset) $this->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');
@ -970,7 +970,7 @@
if(!preg_match('/^http/i',$find_url)) $find_url = substr(Context::getRequestUri(),0,-1).$find_url;
Context::set('find_url',$find_url);
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($tpl_path, 'find_member_account_mail');
@ -1030,7 +1030,7 @@
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('msg_success_authed');
}
/**
* @brief 아이디/비밀번호 찾기 기능 실행
* 메일에 등록된 링크를 선택시 호출되는 method로 비밀번호를 바꾸고 인증을 시켜버림
@ -1040,18 +1040,18 @@
if(!$member_srl) return new Object(-1, 'msg_invalid_request');
$oMemberModel = &getModel('member');
// 회원의 정보를 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
// 인증메일 재발송 요청이 가능한 상태의 회원인지 검사
if ($member_info->denied != 'Y')
if ($member_info->denied != 'Y')
return new Object(-1, 'msg_invalid_request');
$chk_args->member_srl = $member_srl;
$output = executeQuery('member.chkAuthMail', $chk_args);
if ($output->toBool() && $output->data->count == '0') return new Object(-1, 'msg_invalid_request');
// 인증 DB에 데이터를 넣음
$auth_args->member_srl = $member_srl;
$auth_args->auth_key = md5(rand(0, 999999));
@ -1065,20 +1065,20 @@
// 메일 내용을 구함
Context::set('auth_args', $auth_args);
Context::set('member_info', $member_info);
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $this->member_config->skin = "default";
if(!$member_config->colorset) $this->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');
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail');
// 사이트 웹마스터 정보를 구함
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
@ -1090,12 +1090,74 @@
$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();
// 메세지 return
$msg = sprintf(Context::getLang('msg_auth_mail_sent'), $member_info->email_address);
return new Object(-1, $msg);
}
/**
* @brief 인증 메일 재발송
**/
function procMemberResendAuthMail() {
// email_address 검사
$email_address = Context::get('email_address');
if(!$email_address) return $this->stop('msg_invalid_request');
// email_address로 비밀번호 찾기 로그 검사
$oMemberModel = &getModel('member');
$args->email_address = $email_address;
$member_info = $oMemberModel->getMemberSrlByEmailAddress($email_address);
if(!$member_info) return $this->stop('msg_not_exists_member');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_info);
// 이전에 인증 메일을 보냈는지 확인
$chk_args->member_srl = $member_info->member_srl;
$output = executeQuery('member.chkAuthMail', $chk_args);
if($output->toBool() && $output->data->count == '0') return new Object(-1, 'msg_invalid_request');
// 인증 메일 재발송
$auth_args->email_address = $auth_info->email_address = $args->email_address;
$output = executeQuery('member.getAuthMail', $auth_args);
$auth_info->auth_key = $output->data->auth_key;
// 메일 내용을 구함
Context::set('auth_args', $auth_info);
Context::set('member_info', $member_info);
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $this->member_config->skin = "default";
if(!$member_config->colorset) $this->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');
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail');
// 사이트 웹마스터 정보를 구함
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
// 메일 발송
$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();
$msg = sprintf(Context::getLang('msg_confirm_mail_sent'), $args->email_address);
$this->setMessage($msg);
}
/**
* @brief 가상 사이트 가입
**/
@ -1269,7 +1331,7 @@
$trigger_obj->password = $password;
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'before', $trigger_obj);
if(!$trigger_output->toBool()) return $trigger_output;
// member model 객체 생성
$oMemberModel = &getModel('member');
@ -1364,7 +1426,7 @@
if($admin_group->group_srl && in_array($admin_group->group_srl, $group_srl_list)) $_SESSION['is_admin'] = 'Y';
}
*/
// 세션에 로그인 사용자 정보 저장
$_SESSION['logged_info'] = $member_info;
Context::set('is_logged', true);
@ -1515,16 +1577,16 @@
// 메일 내용을 구함
Context::set('auth_args', $auth_args);
Context::set('member_info', $args);
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $this->member_config->skin = "default";
if(!$member_config->colorset) $this->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');
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($tpl_path, 'confirm_member_account_mail');

View file

@ -79,7 +79,7 @@
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
// 템플릿 파일 지정
$this->setTemplateFile('signup_form');
}
@ -101,7 +101,7 @@
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$member_info->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$member_info);
// 추가 가입폼 목록을 받음
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
@ -317,5 +317,13 @@
$this->setTemplateFile('find_member_account');
}
/**
* @brief 인증 메일 재발송 페이지
**/
function dispMemberResendAuthMail() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('resend_auth_mail');
}
}
?>

View file

@ -9,4 +9,4 @@
</ul>
<hr noshade="noshade" />
{$lang->msg_confirm_account_comment}<br />
<a href="{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key)}" target="_blank">{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl,'auth_key',$auth_args->auth_key)}</a>
<a href="{Context::getRequestUri()}{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl, 'auth_key',$auth_args->auth_key)}" target="_blank">{Context::getRequestUri()}{getUrl('','module','member','act','procMemberAuthAccount','member_srl',$member_info->member_srl,'auth_key',$auth_args->auth_key)}</a>

View file

@ -0,0 +1,10 @@
<filter name="resend_auth_mail" module="member" act="procMemberResendAuthMail">
<form>
<node target="email_address" required="true" filter="email_address" />
</form>
<parameter />
<response callback_func="completeResendAuthMail">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -25,7 +25,7 @@ function completeModify(ret_obj, response_tags, args, fo_obj) {
location.href = current_url.setQuery('act','dispMemberInfo');
}
/* 회원 탈퇴 */
/* 회원 탈퇴 */
function completeLeave(ret_obj, response_tags, args, fo_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
@ -93,6 +93,14 @@ function completeOpenIDLogin(ret_obj, response_tags) {
location.href = redirect_url;
}
/* 인증 메일 재발송 후 */
function completeResendAuthMail(ret_obj, response_tags) {
var error = ret_obj['error'];
var message = ret_obj['message'];
if(message) alert(message);
if(error != 0) alert(error);
}
/* 프로필 이미지/이미지 이름, 마크 삭제 */
function doDeleteProfileImage(member_srl) {

View file

@ -0,0 +1,20 @@
<!--%import("filter/resend_auth_mail.xml")-->
<!--%import("css/default.css")-->
<!--%import("js/member.js")-->
<div id="memberModule">
<form action="./" method="post" onsubmit="return procFilter(this, resend_auth_mail)">
<h3>{$lang->cmd_resend_auth_mail}</h3>
<div class="infoText">{$lang->about_resend_auth_mail}</div>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row">{$lang->email_address}</th>
<td><input type="text" name="email_address" value="" class="inputTypeText" /></td>
</tr>
<tr>
<th colspan="2"><span class="button black"><input type="submit" value="{$lang->cmd_resend_auth_mail}" /></span></th>
</tr>
</table>
</form>
</div>