#201 #9 이메일 인증 시스템 추가.

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2766 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-10-15 07:57:19 +00:00
parent 649805bd3a
commit e2b5b6c2cc
32 changed files with 473 additions and 9 deletions

View file

@ -364,8 +364,6 @@
return $obj->str;
}
/**
* @brief response method를 강제로 지정 (기본으로는 request method를 이용함)
*

113
classes/mail/Mail.class.php Normal file
View file

@ -0,0 +1,113 @@
<?php
/**
* @brief 메일 발송
* @author zero (zero@zeroboard.com)
**/
class Mail {
var $sender_name = '';
var $sender_email = '';
var $receiptor_name = '';
var $receiptor_email = '';
var $title = '';
var $content = '';
var $content_type = 'html';
function Mail() { }
function setSender($name, $email) {
$this->sender_name = $name;
$this->sender_email = $email;
}
function getSender() {
if($this->sender_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->sender_name).'?=', $this->sender_email);
return $this->sender_email;
}
function setReceiptor($name, $email) {
$this->receiptor_name = $name;
$this->receiptor_email = $email;
}
function getReceiptor() {
if($this->receiptor_name) return sprintf("%s <%s>", '=?utf-8?b?'.base64_encode($this->receiptor_name).'?=', $this->receiptor_email);
return $this->receiptor_email;
}
function setTitle($title) {
$this->title = $title;
}
function getTitle() {
return '=?utf-8?b?'.base64_encode($this->title).'?=';
}
function setContent($content) {
$this->content = $content;
}
function getPlainContent() {
return chunk_split(base64_encode(str_replace(array("<",">","&"), array("&lt;","&gt;","&amp;"), $this->content)));
}
function getHTMLContent() {
return chunk_split(base64_encode($this->content_type=='html'?nl2br($this->content):$this->content));
}
function setContentType($mode = 'html') {
$this->content_type = $mode=='html'?'html':'';
}
function send() {
$boundary = '----=='.uniqid(rand(),true);
$headers = sprintf(
"From: %s\r\n".
"MIME-Version: 1.0\r\n".
"Content-Type: multipart/alternative;\r\n\tboundary=\"%s\"\r\n\r\n".
"",
$this->getSender(),
$boundary
);
$body = sprintf(
"--%s\r\n".
"Content-Type: text/plain; charset=utf-8; format=flowed\r\n".
"Content-Transfer-Encoding: base64\r\n".
"Content-Disposition: inline\r\n\r\n".
"%s".
"--%s\r\n".
"Content-Type: text/html; charset=utf-8\r\n".
"Content-Transfer-Encoding: base64\r\n".
"Content-Disposition: inline\r\n\r\n".
"%s".
"--%s--".
"",
$boundary,
$this->getPlainContent(),
$boundary,
$this->getHTMLContent(),
$boundary
);
return mail($this->getReceiptor(), $this->getTitle(), $body, $headers);
}
function checkMailMX($email_address) {
if(!Mail::isVaildMailAddress($email_address)) return false;
list($user, $host) = explode("@", $email_address);
if(function_exists('checkdnsrr')) {
if (checkdnsrr($host, "MX") or checkdnsrr($host, "A")) return true;
else return false;
}
return true;
}
function isVaildMailAddress($email_address) {
if( eregi("([a-z0-9\_\-\.]+)@([a-z0-9\_\-\.]+)", $email_address) ) return $email_address;
else return '';
}
}
?>

View file

@ -81,6 +81,7 @@
require_once("./classes/module/ModuleHandler.class.php");
require_once("./classes/display/DisplayHandler.class.php");
require_once("./classes/template/TemplateHandler.class.php");
require_once("./classes/mail/Mail.class.php");
if(__DEBUG__) $GLOBALS['__elapsed_class_load__'] = getMicroTime() - __ClassLosdStartTime__;
/**

View file

@ -11,6 +11,7 @@
<action name="dispMemberOpenIDLeave" type="view" standalone="true" />
<action name="dispMemberOwnDocument" type="view" standalone="true" />
<action name="dispMemberScrappedDocument" type="view" standalone="true" />
<action name="dispMemberFindAccount" type="view" standalone="true" />
<action name="dispMemberMessages" type="view" standalone="true" />
<action name="dispMemberSendMessage" type="view" standalone="true" />
@ -56,6 +57,9 @@
<action name="procMemberScrapDocument" type="controller" standalone="true" />
<action name="procMemberDeleteScrap" type="controller" standalone="true" />
<action name="procMemberFindAccount" type="controller" standalone="true" />
<action name="procMemberAuthAccount" type="controller" standalone="true" />
<action name="procMemberAddFriend" type="controller" standalone="true" />
<action name="procMemberMoveFriend" type="controller" standalone="true" />
<action name="procMemberDeleteFriend" type="controller" standalone="true" />

View file

@ -53,6 +53,12 @@
$lang->current_password = 'Current Password';
$lang->openid = 'OpenID';
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
$lang->search_target_list = array(
'user_id' => 'ID',
'user_name' => 'Name',
@ -78,6 +84,7 @@
$lang->cmd_modify_member_password = 'Change Password';
$lang->cmd_view_member_info = 'Member Info';
$lang->cmd_leave = 'Leave';
$lang->cmd_find_member_account = 'Find Account Info';
$lang->cmd_member_list = 'Member List';
$lang->cmd_module_config = 'Default Setting';
@ -97,11 +104,19 @@
$lang->cmd_add_friend_group = 'Add Friend Group';
$lang->cmd_rename_friend_group = 'Change Name of Friend Group';
$lang->msg_email_not_exists = "Email address doesn't exists";
$lang->msg_alreay_scrapped = 'This article is already scrapped';
$lang->msg_cart_is_null = 'Please select the target';
$lang->msg_checked_file_is_deleted = '%d attached files are deleted';
$lang->msg_find_account_title = 'Account Info';
$lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다';
$lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.<br />로그인 하신 후 비밀번호를 바꾸어주세요.';
$lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.';
$lang->msg_no_message = 'There are no messages';
$lang->message_received = 'You got a new message';
@ -172,4 +187,5 @@
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
$lang->about_member = "This is a module for creating/modifing/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 = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다<br />가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.<br />';
?>

View file

@ -53,6 +53,12 @@
$lang->current_password = 'Contraseña actual';
$lang->openid = 'OpenID';
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
$lang->search_target_list = array(
'user_id' => 'ID',
'user_name' => 'Nombre',
@ -78,6 +84,7 @@
$lang->cmd_modify_member_password = 'Cambiar la contraseña';
$lang->cmd_view_member_info = 'Información del usuario';
$lang->cmd_leave = 'Dejar de ser usuario';
$lang->cmd_find_member_account = 'Find Account Info';
$lang->cmd_member_list = 'Lista de los Usuarios';
$lang->cmd_module_config = 'Configuración predefinidos';
@ -97,11 +104,19 @@
$lang->cmd_add_friend_group = 'agregar grupo de amigos';
$lang->cmd_rename_friend_group = 'Cambiar el nombre del grupo de amigos';
$lang->msg_email_not_exists = "Email address doesn't exists";
$lang->msg_alreay_scrapped = 'Este documento ya esta hecho scrap';
$lang->msg_cart_is_null = 'Seleciona el objetivo';
$lang->msg_checked_file_is_deleted = '%d archivos adjuntos son eliminados';
$lang->msg_find_account_title = 'Account Info';
$lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다';
$lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.<br />로그인 하신 후 비밀번호를 바꾸어주세요.';
$lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.';
$lang->msg_no_message = 'No hay mensajes';
$lang->message_received = 'Usted ha recibido un mensaje';
@ -172,4 +187,5 @@
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
$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 = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다<br />가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.<br />';
?>

View file

@ -53,6 +53,12 @@
$lang->current_password = '現在のパスワード';
$lang->openid = 'OpenID';
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
$lang->search_target_list = array(
'user_id' => 'ユーザID',
'user_name' => '名前',
@ -78,6 +84,7 @@
$lang->cmd_modify_member_password = 'パスワード変更';
$lang->cmd_view_member_info = '会員情報表示';
$lang->cmd_leave = '脱会';
$lang->cmd_find_member_account = 'Find Account Info';
$lang->cmd_member_list = '会員リスト';
$lang->cmd_module_config = '基本設定';
@ -97,11 +104,19 @@
$lang->cmd_add_friend_group = '友達グループ追加';
$lang->cmd_rename_friend_group = '友達グループ名変更';
$lang->msg_email_not_exists = "Email address doesn't exists";
$lang->msg_alreay_scrapped = '既にスクラップされたコンテンツです。';
$lang->msg_cart_is_null = '対象を選択してください。';
$lang->msg_checked_file_is_deleted = '%d個の添付ファイルが削除されました。';
$lang->msg_find_account_title = 'Account Info';
$lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다';
$lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.<br />로그인 하신 후 비밀번호를 바꾸어주세요.';
$lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.';
$lang->msg_no_message = 'メッセージがありません。';
$lang->message_received = 'メッセージが届きました。';
@ -172,4 +187,5 @@
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
$lang->about_member = "会員の作成・修正・削除することができ、グループの管理、加入フォームの管理などが行える会員管理モジュールです。デフォルトで作成されたグループにグループを追加作成して会員管理ができるようにし、加入フォーム管理では基本情報の他、フォームの入力情報を追加することができます。";
$lang->about_find_member_account = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다<br />가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.<br />';
?>

View file

@ -53,6 +53,12 @@
$lang->current_password = '현재 비밀번호';
$lang->openid = 'OpenID';
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
$lang->search_target_list = array(
'user_id' => '아이디',
'user_name' => '이름',
@ -79,6 +85,7 @@
$lang->cmd_modify_member_password = '비밀번호 변경';
$lang->cmd_view_member_info = '회원 정보 보기';
$lang->cmd_leave = '탈퇴';
$lang->cmd_find_member_account = '아이디/비밀번호 찾기';
$lang->cmd_member_list = '회원 목록';
$lang->cmd_module_config = '기본 설정';
@ -98,11 +105,20 @@
$lang->cmd_add_friend_group = '친구 그룹 추가';
$lang->cmd_rename_friend_group = '친구 그룹 이름 변경';
$lang->msg_email_not_exists = '이메일 주소가 존재하지 않습니다';
$lang->msg_alreay_scrapped = '이미 스크랩된 게시물입니다';
$lang->msg_cart_is_null = '대상을 선택해주세요';
$lang->msg_checked_file_is_deleted = '%d개의 첨부파일이 삭제되었습니다';
$lang->msg_find_account_title = '아이디/ 비밀번호 정보입니다';
$lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다';
$lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.<br />로그인 하신 후 비밀번호를 바꾸어주세요.';
$lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_invalid_auth_key = '잘못된 계정 인증 요청입니다.<br />아이디/비밀번호 찾기를 다시 하시거나 사이트 관리자에게 계정 정보를 문의해주세요';
$lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.';
$lang->msg_no_message = '쪽지가 없습니다';
$lang->message_received = '쪽지가 왔습니다';
@ -171,6 +187,7 @@
$lang->about_openid = '오픈아이디로 가입시 아이디와 메일등의 기본 정보는 이 사이트에 저장이 되지만 비밀번호와 인증을 위한 처리는 해당 오픈아이디 제공서비스에서 이루어집니다.';
$lang->about_openid_leave = '오픈아이디의 탈퇴는 현 사이트에서의 회원 정보를 삭제하는 것입니다.<br />탈퇴 후 로그인하시면 새로 가입하시는 것으로 되어 작성한 글에 대한 권한을 가질 수 없게 됩니다';
$lang->about_find_member_account = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다<br />가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.<br />';
$lang->about_member = "회원을 생성/수정/삭제 할 수 있고 그룹관리나 가입폼 관리등을 할 수 있는 회원 관리 모듈입니다.\n기본으로 생성된 그룹외의 그룹을 생성하여 회원 관리가 가능하고 가입폼관리를 통한 기본 정보외의 추가 정보를 요구받을 수도 있습니다.";
?>

View file

@ -53,6 +53,12 @@
$lang->current_password = '当前密码';
$lang->openid = 'OpenID';
$lang->webmaster_name = '웹마스터 이름';
$lang->webmaster_email = '웹마스터 메일주소';
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
$lang->about_webmaster_email = '웹마스터의 메일 주소를 입력해주세요.';
$lang->search_target_list = array(
'user_id' => '用户名',
'user_name' => '姓名',
@ -78,6 +84,7 @@
$lang->cmd_modify_member_password = '修改密码';
$lang->cmd_view_member_info = '查看会员信息';
$lang->cmd_leave = '注销';
$lang->cmd_find_member_account = 'Find Account Info';
$lang->cmd_member_list = '会员目录';
$lang->cmd_module_config = '基本设置';
@ -97,11 +104,19 @@
$lang->cmd_add_friend_group = '添加好友组';
$lang->cmd_rename_friend_group = '修改好友组名称';
$lang->msg_email_not_exists = "Email address doesn't exists";
$lang->msg_alreay_scrapped = '已收藏的主题!';
$lang->msg_cart_is_null = '请选择对象。';
$lang->msg_checked_file_is_deleted = '已删除%d个附件。';
$lang->msg_find_account_title = 'Account Info';
$lang->msg_find_account_info = '요청하신 계정 정보는 아래와 같습니다';
$lang->msg_find_account_comment = '아래 링크를 클릭하시면 위에 적힌 비밀번호로 바뀌게 됩니다.<br />로그인 하신 후 비밀번호를 바꾸어주세요.';
$lang->msg_auth_mail_sended = '%s 메일로 인증 정보를 담은 메일이 발송되었습니다. 메일을 확인하세요.';
$lang->msg_success_authed = '인증이 정상적으로 되어 로그인 처리가 되었습니다. 꼭 인증 메일에 표시된 비밀번호를 이용하여 원하시는 비밀번호로 변경하세요.';
$lang->msg_no_message = '没有短消息。';
$lang->message_received = '您有新消息。';
@ -172,4 +187,5 @@
$lang->about_openid_leave = '删除OpenID就等于永久删除站内用户的信息。<br />被删除后的重新登录就等于新会员注册,因此对以前自己写的主题将失去相应权限。';
$lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。";
$lang->about_find_member_account = '아이디/ 비밀번호는 가입시 등록한 메일 주소로 알려드립니다<br />가입할때 등록하신 메일 주소를 입력하시고 "아이디/ 비밀번호 찾기" 버튼을 클릭해주세요.<br />';
?>

View file

@ -83,7 +83,7 @@
**/
function procMemberAdminInsertConfig() {
// 기본 정보를 받음
$args = Context::gets('skin','colorset','enable_openid','enable_join','limit_day','redirect_url','agreement','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height');
$args = Context::gets('webmaster_name','webmaster_email','skin','colorset','enable_openid','enable_join','limit_day','redirect_url','agreement','image_name','image_mark', 'image_name_max_width', 'image_name_max_height','image_mark_max_width','image_mark_max_height');
if(!$args->skin) $args->skin = "default";
if(!$args->colorset) $args->colorset = "white";
if($args->enable_join!='Y') $args->enable_join = 'N';

View file

@ -60,6 +60,7 @@
// 설정 정보를 받아옴 (module model 객체를 이용)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if(!$config->webmaster_name) $config->webmaster_name = 'webmaster';
if(!$config->image_name_max_width) $config->image_name_max_width = 90;
if(!$config->image_name_max_height) $config->image_name_max_height = 20;
if(!$config->image_mark_max_width) $config->image_mark_max_width = 20;

View file

@ -23,6 +23,7 @@
$oModuleController->insertActionForward('member', 'view', 'dispMemberLogout');
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
$oModuleController->insertActionForward('member', 'view', 'dispMemberScrappedDocument');
$oModuleController->insertActionForward('member', 'view', 'dispMemberFindAccount');
$oModuleController->insertActionForward('member', 'view', 'dispMemberMessages');
$oModuleController->insertActionForward('member', 'view', 'dispMemberSendMessage');
@ -133,6 +134,10 @@
// member 디렉토리 체크 (2007. 8. 11 추가)
if(!is_dir("./files/member_extra_info")) return true;
// dispMemberFindAccount act의 여부 체크 (2007. 10. 15)
$act = $oModuleModel->getActionForward('dispMemberFindAccount');
if(!$act) return true;
return false;
}
@ -145,6 +150,7 @@
$oModuleController->insertActionForward('member', 'view', 'dispMemberOwnDocument');
$oModuleController->insertActionForward('member', 'view', 'dispMemberScrappedDocument');
$oModuleController->insertActionForward('member', 'view', 'dispMemberOpenIDLeave');
$oModuleController->insertActionForward('member', 'view', 'dispMemberFindAccount');
// member 디렉토리 체크
FileHandler::makeDir('./files/member_extra_info/image_name');
@ -152,6 +158,8 @@
FileHandler::makeDir('./files/member_extra_info/signature');
FileHandler::makeDir('./files/member_extra_info/new_message_flags');
// dispMemberFindAccount act의 여부 체크 (2007. 10. 15)
return new Object(0, 'success_updated');
}

View file

@ -892,6 +892,93 @@
return new Object(0,'success');
}
/**
* @brief 아이디/ 비밀번호 찾기
**/
function procMemberFindAccount() {
$email_address = Context::get('email_address');
if(!$email_address) return new Object(-1, 'msg_invalid_request');
$oMemberModel = &getModel('member');
// 메일 주소에 해당하는 회원이 있는지 검사
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($email_address);
if(!$member_srl) return new Object(-1, 'msg_email_not_exists');
// 회원의 정보를 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
// 인증 DB에 데이터를 넣음
$args->user_id = $member_info->user_id;
$args->member_srl = $member_info->member_srl;
$args->new_password = rand(111111,999999);
$args->auth_key = md5( rand(0,999999 ) );
$output = executeQuery('member.insertAuthMail', $args);
if(!$output->toBool()) return $output;
// 메일 내용을 구함
Context::set('auth_args', $args);
Context::set('member_info', $member_info);
$oTemplate = &TemplateHandler::getInstance();
$content = $oTemplate->compile($this->module_path.'tpl', 'find_member_account_mail');
// 사이트 웹마스터 정보를 구함
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
// 메일 발송
$oMail = new Mail();
$oMail->setTitle( Context::getLang('msg_find_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();
// 메세지 return
$msg = sprintf(Context::getLang('msg_auth_mail_sended'), $member_info->email_address);
$this->setMessage($msg);
}
/**
* @brief 아이디/비밀번호 찾기 기능 실행
* 메일에 등록된 링크를 선택시 호출되는 method로 비밀번호를 바꾸고 인증을 시켜버림
**/
function procMemberAuthAccount() {
// user_id, authkey 검사
$member_srl = Context::get('member_srl');
$auth_key = Context::get('auth_key');
if(!$member_srl || !$auth_key) return $this->stop('msg_invalid_request');
// user_id, authkey로 비밀번호 찾기 로그 검사
$args->member_srl = $member_srl;
$args->auth_key = $auth_key;
$output = executeQuery('member.getAuthMail', $args);
if(!$output->toBool() || $output->data->auth_key != $auth_key) return $this->stop('msg_invalid_auth_key');
// 인증 정보가 맞다면 새비밀번호로 비밀번호를 바꾸고 인증 상태로 바꿈
$args->password = md5($output->data->new_password);
$output = executeQuery('member.updateMemberPassword', $args);
if(!$output->toBool()) return $this->stop($output->getMessage());
// 인증 시킴
$oMemberModel = &getModel('member');
// 회원의 정보를 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
// 사용자 정보의 최근 로그인 시간을 기록
$output = executeQuery('member.updateLastLogin', $args);
$this->setSessionInfo($member_info);
// 인증 테이블에서 member_srl에 해당하는 모든 값을 지움
executeQuery('member.deleteAuthMail',$args);
// 결과를 통보
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('msg_success_authed');
}
/**
* @brief 서명을 파일로 저장
**/

View file

@ -444,5 +444,14 @@
$this->setTemplateFile('add_friend_group');
}
/**
* @brief 아이디/ 비밀번호 찾기 기능
**/
function dispMemberFindAccount() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('find_member_account');
}
}
?>

View file

@ -0,0 +1,8 @@
<query id="deleteAuthMail" action="delete">
<tables>
<table name="member_auth_mail" />
</tables>
<conditions>
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" />
</conditions>
</query>

View file

@ -0,0 +1,12 @@
<query id="getAuthMail" action="select">
<tables>
<table name="member_auth_mail" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="auth_key" var="auth_key" notnull="notnull" />
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" pipe="and" />
</conditions>
</query>

View file

@ -0,0 +1,12 @@
<query id="insertAuthMail" action="insert">
<tables>
<table name="member_auth_mail" />
</tables>
<columns>
<column name="member_srl" var="member_srl" filter="number" notnull="notnull" />
<column name="user_id" var="user_id" notnull="notnull" />
<column name="auth_key" var="auth_key" notnull="notnull" minlength="1" maxlength="60" />
<column name="new_password" var="new_password" notnull="notnull" minlength="1" maxlength="60" />
<column name="regdate" default="curdate()" />
</columns>
</query>

View file

@ -0,0 +1,7 @@
<table name="member_auth_mail">
<column name="auth_key" type="varchar" size="60" notnull="notnull" unique="unique_key"/>
<column name="member_srl" type="number" size="11" notnull="notnull" unique="unique_key" />
<column name="user_id" type="varchar" size="80" notnull="notnull" />
<column name="new_password" type="varchar" size="80" notnull="notnull" />
<column name="regdate" type="date" index="idx_regdate" />
</table>

View file

@ -0,0 +1,10 @@
<filter name="find_member_account" module="member" act="procMemberFindAccount">
<form>
<node target="email_address" required="true" minlength="2" maxlength="255" filter="email" />
</form>
<parameter />
<response callback_func="completeFindMemberAccount">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,27 @@
{@ $member_title = $lang->cmd_find_member_account}
<!--#include("./common_header.html")-->
<!--%import("filter/find_member_account.xml")-->
<form action="./" method="get" onsubmit="return procFilter(this, find_member_account)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<table cellspacing="0" class="memberInfoTable gap1" title="$lang->msg_leave_member}">
<col width="140" />
<col />
<tr class="first-child">
<th scope="row"><label for="cpw">{$lang->email_address}</label></th>
<td>
<input type="text" name="email_address" class="inputTypeText w400" />
<p>{$lang->about_find_member_account}</p>
</td>
</tr>
</table>
<div class="help tCenter">
<span class="button"><input type="submit" value="{$lang->cmd_find_member_account}" accesskey="s" /></span>
</div>
</form>
<!--#include("./common_footer.html")-->

View file

@ -224,3 +224,8 @@ function doDeleteScrap(document_srl) {
params['document_srl'] = document_srl;
exec_xml('member', 'procMemberDeleteScrap', params, function() { location.reload(); });
}
/* 비밀번호 찾기 후 */
function completeFindMemberAccount(ret_obj, response_tags) {
alert(ret_obj['message']);
}

View file

@ -29,6 +29,7 @@
<ul class="help">
<li class="first-child"><a href="{getUrl('act','dispMemberSignUpForm')}"><img src="./images/common/btn_joinus.gif" alt="{$lang->cmd_signup}" /></a></li>
<li><a href="{getUrl('act','dispMemberFindAccount')}">{$lang->cmd_find_member_account}</a></li>
</ul>
</div>

View file

@ -0,0 +1,10 @@
<filter name="find_member_account" module="member" act="procMemberFindAccount">
<form>
<node target="email_address" required="true" minlength="2" maxlength="255" filter="email" />
</form>
<parameter />
<response callback_func="completeFindMemberAccount">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,27 @@
{@ $member_title = $lang->cmd_find_member_account}
<!--#include("./common_header.html")-->
<!--%import("filter/find_member_account.xml")-->
<form action="./" method="get" onsubmit="return procFilter(this, find_member_account)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<table cellspacing="0" class="memberInfoTable gap1" title="$lang->msg_leave_member}">
<col width="140" />
<col />
<tr class="first-child">
<th scope="row"><label for="cpw">{$lang->email_address}</label></th>
<td>
<input type="text" name="email_address" class="inputTypeText w400" />
<p>{$lang->about_find_member_account}</p>
</td>
</tr>
</table>
<div class="help tCenter">
<span class="button"><input type="submit" value="{$lang->cmd_find_member_account}" accesskey="s" /></span>
</div>
</form>
<!--#include("./common_footer.html")-->

View file

@ -224,3 +224,8 @@ function doDeleteScrap(document_srl) {
params['document_srl'] = document_srl;
exec_xml('member', 'procMemberDeleteScrap', params, function() { location.reload(); });
}
/* 비밀번호 찾기 후 */
function completeFindMemberAccount(ret_obj, response_tags) {
alert(ret_obj['message']);
}

View file

@ -28,6 +28,7 @@
</form>
<div class="help tCenter">
<a href="{getUrl('act','dispMemberFindAccount')}" class="button"><span>{$lang->cmd_find_member_account}</span></a>
<a href="{getUrl('act','dispMemberSignUpForm')}" class="button"><span>{$lang->cmd_signup}</span></a>
</div>
</div>

View file

@ -0,0 +1,13 @@
{$lang->msg_find_account_info}<br />
<hr noshade="noshade" />
<ul>
<li>Site : <a href="{getUrl()}" target="_blank">{getUrl()}</a></li>
<li>{$lang->user_id} : {$member_info->user_id}</li>
<li>{$lang->user_name} : {$member_info->user_name}</li>
<li>{$lang->nick_name} : {$member_info->nick_name}</li>
<li>{$lang->email_address} : {$member_info->email_address}</li>
<li>{$lang->password} : <span style="color:red">{$auth_args->new_password}</span>
</ul>
<hr noshade="noshade" />
{$lang->msg_find_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>

View file

@ -9,6 +9,20 @@
<table cellspacing="0" class="tableType2 gap1">
<col width="150" />
<col />
<tr>
<th scope="row">{$lang->webmaster_name}</th>
<td>
<input type="text" name="webmaster_name" value="{$config->webmaster_name}" size="20" class="inputTypeText" />
<p>{$lang->about_webmaster_name}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->webmaster_email}</th>
<td>
<input type="text" name="webmaster_email" value="{$config->webmaster_email}" size="40" class="inputTypeText" />
<p>{$lang->about_webmaster_email}</p>
</td>
</tr>
<tr>
<th scope="row">{$lang->enable_openid}</th>
<td>

View file

@ -0,0 +1,4 @@
<script type="text/javascript">
alert("{$lang->msg_success_authed}");
location.href="{getUrl()}";
</script>

View file

@ -25,6 +25,9 @@
.box_login ul.option li a.btn { background:url(../images/default/bul_01.gif) no-repeat left; padding-left:10px; margin-left:14px; }
.box_login .checkbox { width:15px; height:15px; margin:-1px 0px 0px -1px; margin-right:2px; }
.box_login .clear { clear:both; }
.box_login ul.extra_option { clear:both; height:40px; }
.box_login ul.extra_option li a {text-decoration:none;}
.box_login ul.extra_option li a.btn { background:url(../images/default/bul_01.gif) no-repeat left; padding-left:10px; margin-left:20px; }
.openid_login { clear:both; height:38px; border:3px solid #D5D8DB; background-color:#FFFFFF; margin:0 0 10px 0; }
.openid_login .openid_user_id { width:110px; _width:100px; background: url(../images/openid_login_bg.gif) left no-repeat; background-color: #ffffff; background-position: 0 50%; padding:3px 3px 3px 18px; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:16px; line-height:1em; vertical-align:middle; margin-bottom:.5em; color:#666666;}

View file

@ -19,11 +19,14 @@
</div>
<div><input type="submit" value=" " class="submit" /></div>
<ul class="option">
<li><input type="checkbox" name="remember_user_id" id="chk_remember_user_id" value="Y" class="checkbox" /></li>
<li><label for="chk_remember_user_id">{$lang->remember_user_id}</label></li>
<li><a href="{getUrl('act','dispMemberSignUpForm')}" class="fc_02 btn">{$lang->cmd_signup}</a></li>
</ul>
<ul class="option">
<li><input type="checkbox" name="remember_user_id" id="chk_remember_user_id" value="Y" class="checkbox" /></li>
<li><label for="chk_remember_user_id">{$lang->remember_user_id}</label></li>
</ul>
<ul class="extra_option">
<li><a href="{getUrl('act','dispMemberSignUpForm')}" class="fc_02 btn">{$lang->cmd_signup}</a></li>
<li><a href="{getUrl('act','dispMemberFindAccount')}" class="fc_02 btn">{$lang->cmd_find_member_account}</a></li>
</ul>
</form>
<div class="clear"></div>

View file

@ -33,7 +33,7 @@
</p>
<ul class="help">
<li class="first-child"><a href="{getUrl('act','dispMemberSignUpForm')}">{$lang->cmd_signup}</a></li>
<!--<li><a href="#">아이디/비밀번호 찾기</a></li>-->
<li><a href="{getUrl('act','dispMemberFindAccount')}">{$lang->cmd_find_member_account}</a></li>
</ul>
</form>
</fieldset>