merge sandbox to trunk for 1.4.4

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7723 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2010-09-28 07:24:47 +00:00
parent 200d63636c
commit b8299c8a65
683 changed files with 70982 additions and 69716 deletions

View file

@ -1,33 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">회원 관리</title>
<title xml:lang="zh-CN">会员管理</title>
<title xml:lang="jp">会員 管理</title>
<title xml:lang="en">Member Management</title>
<title xml:lang="vi">Quản lý thành viên</title>
<title xml:lang="es">Usuario Gestión</title>
<title xml:lang="ru">Управление пользователями</title>
<title xml:lang="zh-TW">會員 管理</title>
<description xml:lang="ko">회원 관리 및 회원 관련 설정등을 하는 모듈입니다.</description>
<description xml:lang="zh-CN">对会员进行管理及相关设置的模块。</description>
<description xml:lang="jp">会員管理及び会員関連設定などを行うモジュールです。</description>
<description xml:lang="en">This module is for managing or configuring members.</description>
<description xml:lang="vi">Module này dành cho việc quản lý và tạo thành viên.</description>
<description xml:lang="es">Este módulo es para el manejo y la configuración de los usuarios.</description>
<description xml:lang="ru">Этот модуль служит для управления и конфигурирования пользователей.</description>
<description xml:lang="zh-TW">對會員進行管理與相關設置的模組。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>member</category>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
</author>
</module>
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">회원 관리</title>
<title xml:lang="zh-CN">会员管理</title>
<title xml:lang="jp">会員 管理</title>
<title xml:lang="en">Member Management</title>
<title xml:lang="vi">Quản lý thành viên</title>
<title xml:lang="es">Usuario Gestión</title>
<title xml:lang="ru">Управление пользователями</title>
<title xml:lang="zh-TW">會員 管理</title>
<description xml:lang="ko">회원 관리 및 회원 관련 설정등을 하는 모듈입니다.</description>
<description xml:lang="zh-CN">对会员进行管理及相关设置的模块。</description>
<description xml:lang="jp">会員管理及び会員関連設定などを行うモジュールです。</description>
<description xml:lang="en">This module is for managing or configuring members.</description>
<description xml:lang="vi">Module này dành cho việc quản lý và tạo thành viên.</description>
<description xml:lang="es">Este módulo es para el manejo y la configuración de los usuarios.</description>
<description xml:lang="ru">Этот модуль служит для управления и конфигурирования пользователей.</description>
<description xml:lang="zh-TW">對會員進行管理與相關設置的模組。</description>
<version>0.1</version>
<date>2007-02-28</date>
<category>member</category>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</module>

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="dispMemberGetTempPassword" type="view" standalone="true" />
<action name="dispMemberResendAuthMail" type="view" standalone="true" />
<action name="dispSavedDocumentList" type="view" standalone="true" />
@ -61,6 +62,7 @@
<action name="procMemberDeleteSavedDocument" type="controller" standalone="true" />
<action name="procMemberFindAccount" type="controller" standalone="true" />
<action name="procMemberFindAccountByQuestion" 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" />

View file

@ -1,7 +1,7 @@
<?php
/**
* @file en.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Only Basic Things)
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = 'The account is not activated.';
$lang->invalid_user_id= "You have entered an invalid ID";
$lang->invalid_password = 'You have entered an invalid password';
$lang->invalid_new_password = 'New password must not be the same as old one.';
$lang->allow_mailing = 'Join Mailing';
$lang->denied = 'Prohibited';
$lang->is_admin = 'Superadmin Permission';
@ -209,4 +210,26 @@
$lang->about_resend_auth_mail = 'You can request for activation mail if you have not activated before';
$lang->no_article = 'There exists no article';
$lang->find_account_question = 'Question for a temporary password.';
$lang->about_find_account_question = 'You can get a temporary password by your ID, email address, and the answer for the question you set.';
$lang->find_account_question_items = array(''
,'What is your alternate email address?'
,'What is your favorite thing?'
,'What elementary school did you graduate?'
,'Where is your hometown?'
,'What is your ideal match?'
,"What is your mother's name?"
,"What is your father's name?"
,'What is your favorite color?'
,'What is your favorite food?'
);
$lang->temp_password = 'Temporary password';
$lang->cmd_get_temp_password = 'Get a temporary password';
$lang->about_get_temp_password = 'Change your password after you logged in.';
$lang->msg_question_not_exists = 'You haven`t set your question for a temporary password.';
$lang->msg_answer_not_matches = 'Your answer for the question is not correct.';
$lang->change_password_date = 'Password renewal cycle';
$lang->about_change_password_date = 'If you set a value to this, you will be notified to change your password periodically. (if set to 0, disabled)';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file es.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Spanish Language Pack (Only Basic Things)
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = 'No está certificado';
$lang->invalid_user_id= "Este ID no existe";
$lang->invalid_password = 'Contraseña incorrecta';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->allow_mailing = 'Registro del envío de mail';
$lang->denied = 'Prohibido';
$lang->is_admin = 'Atribución del administrador superior';
@ -207,4 +208,29 @@
$lang->about_resend_auth_mail = 'You can request for authentication mail if you have failed before.';
$lang->no_article = 'There exists no article';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
*/
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file fr.lang.php
* @author zero (zero@nzeo.com) Traduit par Pierre Duvent (PierreDuvent@gmail.com)
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent (PierreDuvent@gmail.com)
* @brief Paquet du langage en français pour le module de Membre
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = 'Le compte n\'est pas encore certifié.';
$lang->invalid_user_id= "C'est un compte qui n'existe pas.";
$lang->invalid_password = 'C\'est un mot de passe invalide';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->allow_mailing = 'Inscrire au Mailing';
$lang->denied = 'Arrêté à utiliser';
$lang->is_admin = 'Permission Superadministrative';
@ -211,4 +212,29 @@
$lang->about_resend_auth_mail = 'You can request for authentication mail if you have failed before.';
$lang->no_article = 'There exists no article';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
*/
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file modules/member/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa、ミニミ、liahona
* @author NHN (developers@xpressengine.com) 翻訳RisaPapa、ミニミ、liahona
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = '認証出来ませんでした。';
$lang->invalid_user_id= '存在しないユーザIDです。';
$lang->invalid_password = '無効なパスワードです。';
$lang->invalid_new_password = '以前のパスワードと同じパスワードを使う事はできません。';
$lang->allow_mailing = 'メーリングリストに登録';
$lang->denied = '使用中止';
$lang->is_admin = '最高管理権限';
@ -209,5 +210,31 @@
$lang->add_openid = 'OpenIDの追加';
$lang->about_resend_auth_mail = '認証メールが届いてなかった場合、再送信の申請が可能です。<br />※申請の前に、当サイトからメールの受信が出来るように設定して下さい。';
$lang->no_article = 'There exists no article';
$lang->no_article = '書き込みがありません。';
$lang->find_account_question = '秘密質問';
$lang->about_find_account_question = '登録した時、入力したIDとメールアドレス、秘密質問の答えで仮のパスワードをもらえる事ができます。';
$lang->find_account_question_items = array(''
,'他のメールアドレスは?'
,'私の一番大事なものは?'
,'私の卒業した小学校は?'
,'私の生まれた街は?'
,'私の理想型は?'
,'お母さんのお名前は?'
,'お父さんのお名前は?'
,'大好きな色は?'
,'大好きな食べ物は?'
);
$lang->temp_password = '仮のパスワード';
$lang->cmd_get_temp_password = '仮のパスワードをもらう';
$lang->about_get_temp_password = 'ログインして直ちにパスワードを変更して下さい。';
$lang->msg_question_not_exists = '秘密質問を決めていません。';
$lang->msg_answer_not_matches = '秘密質問の答えが正しくありません。';
$lang->change_password_date = 'パスワード更新周期';
$lang->about_change_password_date = '設定した更新周期によってパスワード変更のお知らせがもらえます。(0に設定すると非活性化) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = '인증이 되지 않았습니다.';
$lang->invalid_user_id= '존재하지 않는 사용자 아이디입니다.';
$lang->invalid_password = '잘못된 비밀번호입니다.';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->allow_mailing = '메일링 가입';
$lang->denied = '사용중지';
$lang->is_admin = '최고관리 권한';
@ -210,4 +211,27 @@
$lang->about_resend_auth_mail = '인증 메일을 받지 못하신 경우 다시 받으실 수 있습니다.';
$lang->no_article = '글이 없습니다.';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = 'Вы не авторизированы';
$lang->invalid_user_id= "Указанный ID не существует";
$lang->invalid_password = 'Неверный пароль';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->allow_mailing = 'Получать рассылки';
$lang->denied = 'Отменить пользование';
$lang->is_admin = 'Суперадминистративные права';
@ -210,4 +211,29 @@
$lang->about_resend_auth_mail = 'Вы можете получить снова письмо для авторизации, если еще не получили.';
$lang->no_article = 'Записей нет';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
*/
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : zero (zero@nzeo.com) ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░
@ -23,6 +23,7 @@
$lang->invalid_user_id= "Bạn đã nhập sai tên sử dụng";
$lang->allow_mailing = 'Đồng ý nhận Email';
$lang->invalid_password = 'Mật khẩu không đúng';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->denied = 'Bị từ chối';
$lang->is_admin = 'Toàn quyền Administrator';
$lang->group = 'Phân nhóm';
@ -210,4 +211,29 @@
$lang->add_openid = 'Thêm OpenID';
$lang->about_resend_auth_mail = 'Nhận lại mã kích hoạt nếu bạn đã không nhận được Email kích hoạt khi đăng kí.';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
*/
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 会员模块简体中文语言包
**/
@ -20,6 +20,7 @@
$lang->invalid_authorization = '还没有认证!';
$lang->invalid_user_id= '该用户名不存在,请检查您的输入是否有误!';
$lang->invalid_password = '您的密码不正确!';
$lang->invalid_new_password = '이전 비밀번호와 같습니다.';
$lang->allow_mailing = '接收邮件';
$lang->denied = '禁止使用';
$lang->is_admin = '最高管理权限';
@ -208,4 +209,29 @@
$lang->about_member = "可以添加/修改/删除会员及管理用户组或注册表单的会员管理模块。\n此模块不仅可以生成缺省用户组以外的其他用户组来管理会员,并且通过注册表单的管理获得除会员基本信息以外的扩展信息。";
$lang->about_resend_auth_mail = '没有收到认证邮件时,可以在此重新发送认证邮件。';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'다른 이메일 주소는?'
,'나의 보물 1호는?'
,'나의 출신 초등학교는?'
,'나의 출신 고향은?'
,'나의 이상형은?'
,'어머니 성함은?'
,'아버지 성함은?'
,'가장 좋아하는 색깔은?'
,'가장 좋아하는 음식은?'
);
*/
$lang->temp_password = '임시 비밀번호';
$lang->cmd_get_temp_password = '임시 비밀번호 발급';
$lang->about_get_temp_password = '로그인 후 비밀번호 변경해 주세요.';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file modules/member/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com) 翻譯royallin
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief 會員(member)模組正體中文語言
**/
@ -12,7 +12,7 @@
$lang->default_group_2 = "正會員";
$lang->admin_group = "管理組";
$lang->keep_signed = '自動登入';
$lang->remember_user_id = '儲存ID';
$lang->remember_user_id = '儲存 ID';
$lang->already_logged = '您已經登入!';
$lang->denied_user_id = '被禁止的帳號。';
$lang->null_user_id = '請輸入帳號。';
@ -20,6 +20,7 @@
$lang->invalid_authorization = '還沒有認證!';
$lang->invalid_user_id= '該帳號不存在,請檢查您的輸入是否有誤!';
$lang->invalid_password = '您的密碼不正確!';
$lang->invalid_new_password = '與舊密碼相同';
$lang->allow_mailing = '接收郵件';
$lang->denied = '禁止使用';
$lang->is_admin = '最高管理權限';
@ -41,7 +42,7 @@
$lang->group_image_mark_max_height = '高度限制';
$lang->group_image_mark_order = '群組圖示順序';
$lang->signature_max_height = '簽名檔高度限制';
$lang->enable_openid = '支援OpenID';
$lang->enable_openid = '支援 OpenID';
$lang->enable_join = '允許會員註冊';
$lang->enable_confirm = '使用郵件認證';
$lang->enable_ssl = '使用 SSL 功能';
@ -205,9 +206,34 @@
$lang->about_find_member_account = '帳號/密碼將發送到您註冊時,所輸入的電子郵件當中。<br />輸入註冊時的電子郵件地址後,請按「查詢帳號/密碼」按鈕。<br />';
$lang->about_member = "可以新增/修改/刪除會員及管理群組或註冊表單的會員管理模組。\n此模組不僅可以建立預設群組以外的其他群組來管理會員,並且通過註冊表單的管理獲得會員基本資料以外的延伸資料。";
$lang->about_ssl_port = '請輸入想要使用預設 SSL 埠口以外的埠口。';
$lang->about_ssl_port = '請輸入想要使用 SSL 預設埠口以外的埠口。';
$lang->add_openid = '新增 OpenID';
$lang->about_resend_auth_mail = '如果沒有收到認證郵件可以再重寄一次。';
$lang->no_article = '主題不存在';
$lang->find_account_question = '비밀번호 찾기 질문/답변';
$lang->about_find_account_question = '가입시 아이디와 이메일, 질문/답변으로 임시 비밀번호를 발급 받을 수 있습니다.';
/*
$lang->find_account_question_items = array(''
,'其他電子郵件?'
,'我最愛的是?'
,'我讀的國小是?'
,'我的出生地?'
,'我的理想?'
,'母親的姓名?'
,'父親的姓名?'
,'最喜歡的顏色?'
,'最愛的食物是?'
);
*/
$lang->temp_password = '臨時密碼';
$lang->cmd_get_temp_password = '寄送臨時密碼';
$lang->about_get_temp_password = '請再登入後變更密碼。';
$lang->msg_question_not_exists = '등록한 비밀번호 찾기 질문/답변이 없습니다.';
$lang->msg_answer_not_matches = '비밀번호 찾기 질문/답변 또는 정보가 올바르지 않습니다.';
$lang->change_password_date = '비밀번호 갱신주기';
$lang->about_change_password_date = '일정기간이 지나면 비밀번호 변경을 하도록 유도하는 기능입니다. (사용하지 않음 : 0 입력) ';
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @class memberAdminController
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief member module의 admin controller class
**/
@ -95,7 +95,7 @@
'image_name', 'image_name_max_width', 'image_name_max_height',
'image_mark', 'image_mark_max_width', 'image_mark_max_height',
'group_image_mark', 'group_image_mark_max_width', 'group_image_mark_max_height',
'signature','signature_max_height'
'signature','signature_max_height','change_password_date'
);
if(!$args->skin) $args->skin = "default";
@ -111,6 +111,7 @@
if($args->signature!='Y') $args->signature = 'N';
if(!trim(strip_tags($args->agreement))) $args->agreement = null;
$args->limit_day = (int)$args->limit_day;
if(!$args->change_password_date) $args->change_password_date = 0;
$oMemberController = &getController('member');
$output = $oMemberController->setMemberConfig($args);

View file

@ -1,136 +1,136 @@
<?php
/**
* @class memberAdminModel
* @author zero (zero@nzeo.com)
* @brief member module의 admin model class
**/
class memberAdminModel extends member {
/**
* @brief 자주 호출될거라 예상되는 데이터는 내부적으로 가지고 있자...
**/
var $member_info = NULL;
var $member_groups = NULL;
var $join_form_list = NULL;
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 회원 목록을 구함
**/
function getMemberList() {
// 검색 옵션 정리
$args->is_admin = Context::get('is_admin')=='Y'?'Y':'';
$args->is_denied = Context::get('is_denied')=='Y'?'Y':'';
$args->selected_group_srl = Context::get('selected_group_srl');
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
if($search_target && $search_keyword) {
switch($search_target) {
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_id = $search_keyword;
break;
case 'user_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_name = $search_keyword;
break;
case 'nick_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_nick_name = $search_keyword;
break;
case 'email_address' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_email_address = $search_keyword;
break;
case 'regdate' :
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'regdate_more' :
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'regdate_less' :
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login' :
$args->s_last_login = $search_keyword;
break;
case 'last_login_more' :
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login_less' :
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'extra_vars' :
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
break;
}
}
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
$sort_index = Context::get('sort_index');
if($sort_index != 'last_login') $sort_index = "member_srl";
if($args->selected_group_srl) {
$query_id = 'member.getMemberListWithinGroup';
$args->sort_index = "member.".$sort_index;
} else {
$query_id = 'member.getMemberList';
$args->sort_index = $sort_index;
}
$sort_order = Context::get('sort_order');
if($sort_order != "asc") $sort_order = "desc";
$args->sort_order = $sort_order;
Context::set('sort_order', $sort_order);
// 기타 변수들 정리
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
return executeQuery($query_id, $args);
}
/**
* @brief 사이트별 회원 목록을 구함
**/
function getSiteMemberList($site_srl, $page = 1) {
$args->site_srl = $site_srl;
$args->page = $page;
$args->list_count = 40;
$args->page_count = 10;
$query_id = 'member.getSiteMemberList';
$output = executeQueryArray($query_id, $args);
return $output;
}
/**
* @brief 회원 모듈의 특정 스킨에 속한 컬러셋 목록을 return
**/
function getMemberAdminColorset() {
$skin = Context::get('skin');
if(!$skin) $tpl = "";
else {
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
Context::set('skin_info', $skin_info);
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if(!$config->colorset) $config->colorset = "white";
Context::set('config', $config);
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
}
$this->add('tpl', $tpl);
}
}
?>
<?php
/**
* @class memberAdminModel
* @author NHN (developers@xpressengine.com)
* @brief member module의 admin model class
**/
class memberAdminModel extends member {
/**
* @brief 자주 호출될거라 예상되는 데이터는 내부적으로 가지고 있자...
**/
var $member_info = NULL;
var $member_groups = NULL;
var $join_form_list = NULL;
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 회원 목록을 구함
**/
function getMemberList() {
// 검색 옵션 정리
$args->is_admin = Context::get('is_admin')=='Y'?'Y':'';
$args->is_denied = Context::get('is_denied')=='Y'?'Y':'';
$args->selected_group_srl = Context::get('selected_group_srl');
$search_target = trim(Context::get('search_target'));
$search_keyword = trim(Context::get('search_keyword'));
if($search_target && $search_keyword) {
switch($search_target) {
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_id = $search_keyword;
break;
case 'user_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_user_name = $search_keyword;
break;
case 'nick_name' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_nick_name = $search_keyword;
break;
case 'email_address' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_email_address = $search_keyword;
break;
case 'regdate' :
$args->s_regdate = ereg_replace("[^0-9]","",$search_keyword);
break;
case 'regdate_more' :
$args->s_regdate_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'regdate_less' :
$args->s_regdate_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login' :
$args->s_last_login = $search_keyword;
break;
case 'last_login_more' :
$args->s_last_login_more = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'last_login_less' :
$args->s_last_login_less = substr(ereg_replace("[^0-9]","",$search_keyword) . '00000000000000',0,14);
break;
case 'extra_vars' :
$args->s_extra_vars = ereg_replace("[^0-9]","",$search_keyword);
break;
}
}
// selected_group_srl이 있으면 query id를 변경 (table join때문에)
$sort_index = Context::get('sort_index');
if($sort_index != 'last_login') $sort_index = "member_srl";
if($args->selected_group_srl) {
$query_id = 'member.getMemberListWithinGroup';
$args->sort_index = "member.".$sort_index;
} else {
$query_id = 'member.getMemberList';
$args->sort_index = $sort_index;
}
$sort_order = Context::get('sort_order');
if($sort_order != "asc") $sort_order = "desc";
$args->sort_order = $sort_order;
Context::set('sort_order', $sort_order);
// 기타 변수들 정리
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
return executeQuery($query_id, $args);
}
/**
* @brief 사이트별 회원 목록을 구함
**/
function getSiteMemberList($site_srl, $page = 1) {
$args->site_srl = $site_srl;
$args->page = $page;
$args->list_count = 40;
$args->page_count = 10;
$query_id = 'member.getSiteMemberList';
$output = executeQueryArray($query_id, $args);
return $output;
}
/**
* @brief 회원 모듈의 특정 스킨에 속한 컬러셋 목록을 return
**/
function getMemberAdminColorset() {
$skin = Context::get('skin');
if(!$skin) $tpl = "";
else {
$oModuleModel = &getModel('module');
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
Context::set('skin_info', $skin_info);
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if(!$config->colorset) $config->colorset = "white";
Context::set('config', $config);
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'colorset_list');
}
$this->add('tpl', $tpl);
}
}
?>

View file

@ -1,241 +1,241 @@
<?php
/**
* @class memberAdminView
* @author zero (zero@nzeo.com)
* @brief member module's admin view class
**/
class memberAdminView extends member {
var $group_list = NULL; ///< group list
var $member_info = NULL; ///< selected member info
/**
* @brief initialization
**/
function init() {
$oMemberModel = &getModel('member');
// if member_srl exists, set member_info
$member_srl = Context::get('member_srl');
if($member_srl) {
$this->member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
if(!$this->member_info) Context::set('member_srl','');
else Context::set('member_info',$this->member_info);
}
// retrieve group list
$this->group_list = $oMemberModel->getGroups();
Context::set('group_list', $this->group_list);
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief display member list
**/
function dispMemberAdminList() {
$oMemberAdminModel = &getAdminModel('member');
$oMemberModel = &getModel('member');
$output = $oMemberAdminModel->getMemberList();
// retrieve list of groups for each member
if($output->data) {
foreach($output->data as $key => $member) {
$output->data[$key]->group_list = $oMemberModel->getMemberGroups($member->member_srl,0);
}
}
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('member_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('member_list');
}
/**
* @brief default configuration for member management
**/
function dispMemberAdminConfig() {
// retrieve configuration via module model instance
$oModuleModel = &getModel('module');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('config',$config);
// list of skins for member module
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list', $skin_list);
// retrieve skins of editor
$oEditorModel = &getModel('editor');
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
// get an editor
$option->primary_key_name = 'temp_srl';
$option->content_key_name = 'agreement';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = true;
$option->resizable = true;
$option->height = 300;
$editor = $oEditorModel->getEditor(0, $option);
Context::set('editor', $editor);
$this->setTemplateFile('member_config');
}
/**
* @brief display member information
**/
function dispMemberAdminInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
Context::set('member_config', $member_config);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->member_info));
$this->setTemplateFile('member_info');
}
/**
* @brief display member insert form
**/
function dispMemberAdminInsert() {
// retrieve extend form
$oMemberModel = &getModel('member');
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->member_info));
$member_info = Context::get('member_info');
$member_info->signature = $oMemberModel->getSignature($this->member_info->member_srl);
Context::set('member_info', $member_info);
// get an editor for the signature
if($this->member_info->member_srl) {
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'member_srl';
$option->content_key_name = 'signature';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = false;
$option->resizable = false;
$option->height = 200;
$editor = $oEditorModel->getEditor($this->member_info->member_srl, $option);
Context::set('editor', $editor);
}
$this->setTemplateFile('insert_member');
}
/**
* @brief display member delete form
**/
function dispMemberAdminDeleteForm() {
if(!Context::get('member_srl')) return $this->dispMemberAdminList();
$this->setTemplateFile('delete_form');
}
/**
* @brief display group list
**/
function dispMemberAdminGroupList() {
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if($config->group_image_mark_order) $config->group_image_mark_order = explode(',', $config->group_image_mark_order);
Context::set('config', $config);
$group_srl = Context::get('group_srl');
if($group_srl && $this->group_list[$group_srl]) {
Context::set('selected_group', $this->group_list[$group_srl]);
$this->setTemplateFile('group_update_form');
} else {
$this->setTemplateFile('group_list');
}
}
/**
* @brief 회원 가입 목록 출력
**/
function dispMemberAdminJoinFormList() {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
// 추가로 설정한 가입 항목 가져오기
$form_list = $oMemberModel->getJoinFormList();
Context::set('form_list', $form_list);
$this->setTemplateFile('join_form_list');
}
/**
* @brief 회원 가입 관리 화면 출력
**/
function dispMemberAdminInsertJoinForm() {
// 수정일 경우 대상 join_form의 값을 구함
$member_join_form_srl = Context::get('member_join_form_srl');
if($member_join_form_srl) {
$oMemberModel = &getModel('member');
$join_form = $oMemberModel->getJoinForm($member_join_form_srl);
if(!$join_form) Context::set('member_join_form_srl','',true);
else Context::set('join_form', $join_form);
}
$this->setTemplateFile('insert_join_form');
}
/**
* @brief 금지 목록 아이디 출력
**/
function dispMemberAdminDeniedIDList() {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
// 사용금지 목록 가져오기
$output = $oMemberModel->getDeniedIDList();
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('member_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('denied_id_list');
}
/**
* @brief 회원 그룹 일괄 변경
**/
function dispMemberAdminManageGroup() {
// 선택된 회원 목록을 구함
$args->member_srl = trim(Context::get('member_srls'));
$output = executeQueryArray('member.getMembers', $args);
Context::set('member_list', $output->data);
// 회원 그룹 목록을 구함
$oMemberModel = &getModel('member');
Context::set('member_groups', $oMemberModel->getGroups());
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('manage_member_group');
}
/**
* @brief 회원 일괄 삭제
**/
function dispMemberAdminDeleteMembers() {
// 선택된 회원 목록을 구함
$args->member_srl = trim(Context::get('member_srls'));
$output = executeQueryArray('member.getMembers', $args);
Context::set('member_list', $output->data);
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('delete_members');
}
}
?>
<?php
/**
* @class memberAdminView
* @author NHN (developers@xpressengine.com)
* @brief member module's admin view class
**/
class memberAdminView extends member {
var $group_list = NULL; ///< group list
var $member_info = NULL; ///< selected member info
/**
* @brief initialization
**/
function init() {
$oMemberModel = &getModel('member');
// if member_srl exists, set member_info
$member_srl = Context::get('member_srl');
if($member_srl) {
$this->member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
if(!$this->member_info) Context::set('member_srl','');
else Context::set('member_info',$this->member_info);
}
// retrieve group list
$this->group_list = $oMemberModel->getGroups();
Context::set('group_list', $this->group_list);
$this->setTemplatePath($this->module_path.'tpl');
}
/**
* @brief display member list
**/
function dispMemberAdminList() {
$oMemberAdminModel = &getAdminModel('member');
$oMemberModel = &getModel('member');
$output = $oMemberAdminModel->getMemberList();
// retrieve list of groups for each member
if($output->data) {
foreach($output->data as $key => $member) {
$output->data[$key]->group_list = $oMemberModel->getMemberGroups($member->member_srl,0);
}
}
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('member_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('member_list');
}
/**
* @brief default configuration for member management
**/
function dispMemberAdminConfig() {
// retrieve configuration via module model instance
$oModuleModel = &getModel('module');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('config',$config);
// list of skins for member module
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list', $skin_list);
// retrieve skins of editor
$oEditorModel = &getModel('editor');
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
// get an editor
$option->primary_key_name = 'temp_srl';
$option->content_key_name = 'agreement';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = true;
$option->resizable = true;
$option->height = 300;
$editor = $oEditorModel->getEditor(0, $option);
Context::set('editor', $editor);
$this->setTemplateFile('member_config');
}
/**
* @brief display member information
**/
function dispMemberAdminInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
Context::set('member_config', $member_config);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->member_info));
$this->setTemplateFile('member_info');
}
/**
* @brief display member insert form
**/
function dispMemberAdminInsert() {
// retrieve extend form
$oMemberModel = &getModel('member');
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->member_info));
$member_info = Context::get('member_info');
$member_info->signature = $oMemberModel->getSignature($this->member_info->member_srl);
Context::set('member_info', $member_info);
// get an editor for the signature
if($this->member_info->member_srl) {
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'member_srl';
$option->content_key_name = 'signature';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = false;
$option->resizable = false;
$option->height = 200;
$editor = $oEditorModel->getEditor($this->member_info->member_srl, $option);
Context::set('editor', $editor);
}
$this->setTemplateFile('insert_member');
}
/**
* @brief display member delete form
**/
function dispMemberAdminDeleteForm() {
if(!Context::get('member_srl')) return $this->dispMemberAdminList();
$this->setTemplateFile('delete_form');
}
/**
* @brief display group list
**/
function dispMemberAdminGroupList() {
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('member');
if($config->group_image_mark_order) $config->group_image_mark_order = explode(',', $config->group_image_mark_order);
Context::set('config', $config);
$group_srl = Context::get('group_srl');
if($group_srl && $this->group_list[$group_srl]) {
Context::set('selected_group', $this->group_list[$group_srl]);
$this->setTemplateFile('group_update_form');
} else {
$this->setTemplateFile('group_list');
}
}
/**
* @brief 회원 가입 목록 출력
**/
function dispMemberAdminJoinFormList() {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
// 추가로 설정한 가입 항목 가져오기
$form_list = $oMemberModel->getJoinFormList();
Context::set('form_list', $form_list);
$this->setTemplateFile('join_form_list');
}
/**
* @brief 회원 가입 관리 화면 출력
**/
function dispMemberAdminInsertJoinForm() {
// 수정일 경우 대상 join_form의 값을 구함
$member_join_form_srl = Context::get('member_join_form_srl');
if($member_join_form_srl) {
$oMemberModel = &getModel('member');
$join_form = $oMemberModel->getJoinForm($member_join_form_srl);
if(!$join_form) Context::set('member_join_form_srl','',true);
else Context::set('join_form', $join_form);
}
$this->setTemplateFile('insert_join_form');
}
/**
* @brief 금지 목록 아이디 출력
**/
function dispMemberAdminDeniedIDList() {
// 멤버모델 객체 생성
$oMemberModel = &getModel('member');
// 사용금지 목록 가져오기
$output = $oMemberModel->getDeniedIDList();
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('member_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('denied_id_list');
}
/**
* @brief 회원 그룹 일괄 변경
**/
function dispMemberAdminManageGroup() {
// 선택된 회원 목록을 구함
$args->member_srl = trim(Context::get('member_srls'));
$output = executeQueryArray('member.getMembers', $args);
Context::set('member_list', $output->data);
// 회원 그룹 목록을 구함
$oMemberModel = &getModel('member');
Context::set('member_groups', $oMemberModel->getGroups());
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('manage_member_group');
}
/**
* @brief 회원 일괄 삭제
**/
function dispMemberAdminDeleteMembers() {
// 선택된 회원 목록을 구함
$args->member_srl = trim(Context::get('member_srls'));
$output = executeQueryArray('member.getMembers', $args);
Context::set('member_list', $output->data);
$this->setLayoutFile('popup_layout');
$this->setTemplateFile('delete_members');
}
}
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @class memberAPI
* @author sol(sol@ngleader.com)
* @author NHN (developers@xpressengine.com)
* @brief member 모듈의 View Action에 대한 API 처리
**/

View file

@ -1,200 +1,222 @@
<?php
/**
* @class member
* @author zero (zero@nzeo.com)
* @brief member module의 high class
**/
class member extends ModuleObject {
/**
* @brief constructor
**/
function member() {
if(!Context::isInstalled()) return;
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
// SSL 사용시 회원가입/정보/비밀번호등과 관련된 action에 대해 SSL 전송하도록 지정
if(Context::get('_use_ssl') == 'optional') {
Context::addSSLAction('dispMemberModifyPassword');
Context::addSSLAction('dispMemberSignUpForm');
Context::addSSLAction('dispMemberModifyInfo');
Context::addSSLAction('procMemberLogin');
Context::addSSLAction('procMemberModifyPassword');
Context::addSSLAction('procMemberInsert');
Context::addSSLAction('procMemberModifyInfo');
}
}
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oDB = &DB::getInstance();
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
$oModuleModel = &getModel('module');
$args = $oModuleModel->getModuleConfig('member');
// 기본 정보를 세팅
$args->enable_join = 'Y';
if(!$args->enable_openid) $args->enable_openid = 'N';
if(!$args->enable_auth_mail) $args->enable_auth_mail = 'N';
if(!$args->image_name) $args->image_name = 'Y';
if(!$args->image_mark) $args->image_mark = 'Y';
if(!$args->profile_image) $args->profile_image = 'Y';
if(!$args->image_name_max_width) $args->image_name_max_width = '90';
if(!$args->image_name_max_height) $args->image_name_max_height = '20';
if(!$args->image_mark_max_width) $args->image_mark_max_width = '20';
if(!$args->image_mark_max_height) $args->image_mark_max_height = '20';
if(!$args->profile_image_max_width) $args->profile_image_max_width = '80';
if(!$args->profile_image_max_height) $args->profile_image_max_height = '80';
if($args->group_image_mark!='Y') $args->group_image_mark = 'N';
$oModuleController->insertModuleConfig('member',$args);
// 멤버 컨트롤러 객체 생성
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
$oMemberAdminController = &getAdminController('member');
$groups = $oMemberModel->getGroups();
if(!count($groups)) {
// 관리자, 정회원, 준회원 그룹을 입력
$group_args->title = Context::getLang('admin_group');
$group_args->is_default = 'N';
$group_args->is_admin = 'Y';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_1');
$group_args->is_default = 'Y';
$group_args->is_admin = 'N';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_2');
$group_args->is_default = 'N';
$group_args->is_admin = 'N';
$oMemberAdminController->insertGroup($group_args);
}
// 관리자 정보 세팅
$admin_args->is_admin = 'Y';
$output = executeQuery('member.getMemberList', $admin_args);
if(!$output->data) {
$admin_info = Context::gets('user_id','password','nick_name','user_name', 'email_address');
if($admin_info->user_id) {
// 관리자 정보 입력
$oMemberAdminController->insertAdmin($admin_info);
// 로그인 처리시킴
$output = $oMemberController->doLogin($admin_info->user_id);
}
}
// 금지 아이디 등록 (기본 + 모듈명)
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
foreach($module_list as $key => $val) {
$oMemberAdminController->insertDeniedID($val->module,'');
}
$oMemberAdminController->insertDeniedID('www','');
$oMemberAdminController->insertDeniedID('root','');
$oMemberAdminController->insertDeniedID('administrator','');
$oMemberAdminController->insertDeniedID('telnet','');
$oMemberAdminController->insertDeniedID('ftp','');
$oMemberAdminController->insertDeniedID('http','');
// member 에서 사용할 cache디렉토리 생성
FileHandler::makeDir('./files/member_extra_info/image_name');
FileHandler::makeDir('./files/member_extra_info/image_mark');
FileHandler::makeDir('./files/member_extra_info/profile_image');
FileHandler::makeDir('./files/member_extra_info/signature');
$oDB->addIndex("member_openid_association","idx_assoc", array("server_url(255)","handle"), false);
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oDB = &DB::getInstance();
$oModuleModel = &getModel('module');
// member 디렉토리 체크 (2007. 8. 11 추가)
if(!is_dir("./files/member_extra_info")) return true;
// member 디렉토리 체크 (2007. 10. 22 추가)
if(!is_dir("./files/member_extra_info/profile_image")) return true;
// member_auth_mail 테이블에 is_register 필드 추가 (2008. 04. 22)
$act = $oDB->isColumnExists("member_auth_mail", "is_register");
if(!$act) return true;
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if(!$oDB->isColumnExists("member_group_member", "site_srl")) return true;
if(!$oDB->isColumnExists("member_group", "site_srl")) return true;
if($oDB->isIndexExists("member_group","uni_member_group_title")) return true;
// image_mark 추가 (2009. 02. 14)
if(!$oDB->isColumnExists("member_group", "image_mark")) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
$oModuleController = &getController('module');
// member 디렉토리 체크
FileHandler::makeDir('./files/member_extra_info/image_name');
FileHandler::makeDir('./files/member_extra_info/image_mark');
FileHandler::makeDir('./files/member_extra_info/signature');
FileHandler::makeDir('./files/member_extra_info/profile_image');
// DB 필드 추가
if (!$oDB->isColumnExists("member_auth_mail", "is_register")) {
$oDB->addColumn("member_auth_mail", "is_register", "char", 1, "N", true);
}
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if (!$oDB->isColumnExists("member_group_member", "site_srl")) {
$oDB->addColumn("member_group_member", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group_member", "idx_site_srl", "site_srl", false);
}
if (!$oDB->isColumnExists("member_group", "site_srl")) {
$oDB->addColumn("member_group", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
}
if($oDB->isIndexExists("member_group","uni_member_group_title")) {
$oDB->dropIndex("member_group","uni_member_group_title",true);
}
// image_mark 추가 (2009. 02. 14)
if(!$oDB->isColumnExists("member_group", "image_mark")) {
$oDB->addColumn("member_group", "image_mark", "text");
}
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
set_include_path(_XE_PATH_."modules/member/php-openid-1.2.3");
require_once('Auth/OpenID/XEStore.php');
$store = new Auth_OpenID_XEStore();
$store->reset();
}
}
?>
<?php
/**
* @class member
* @author NHN (developers@xpressengine.com)
* @brief member module의 high class
**/
class member extends ModuleObject {
/**
* @brief constructor
**/
function member() {
if(!Context::isInstalled()) return;
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
// SSL 사용시 회원가입/정보/비밀번호등과 관련된 action에 대해 SSL 전송하도록 지정
if(Context::get('_use_ssl') == 'optional') {
Context::addSSLAction('dispMemberModifyPassword');
Context::addSSLAction('dispMemberSignUpForm');
Context::addSSLAction('dispMemberModifyInfo');
Context::addSSLAction('procMemberLogin');
Context::addSSLAction('procMemberModifyPassword');
Context::addSSLAction('procMemberInsert');
Context::addSSLAction('procMemberModifyInfo');
Context::addSSLAction('procMemberFindAccount');
}
}
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// action forward에 등록 (관리자 모드에서 사용하기 위함)
$oModuleController = &getController('module');
$oDB = &DB::getInstance();
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
$oModuleModel = &getModel('module');
$args = $oModuleModel->getModuleConfig('member');
// 기본 정보를 세팅
$args->enable_join = 'Y';
if(!$args->enable_openid) $args->enable_openid = 'N';
if(!$args->enable_auth_mail) $args->enable_auth_mail = 'N';
if(!$args->image_name) $args->image_name = 'Y';
if(!$args->image_mark) $args->image_mark = 'Y';
if(!$args->profile_image) $args->profile_image = 'Y';
if(!$args->image_name_max_width) $args->image_name_max_width = '90';
if(!$args->image_name_max_height) $args->image_name_max_height = '20';
if(!$args->image_mark_max_width) $args->image_mark_max_width = '20';
if(!$args->image_mark_max_height) $args->image_mark_max_height = '20';
if(!$args->profile_image_max_width) $args->profile_image_max_width = '80';
if(!$args->profile_image_max_height) $args->profile_image_max_height = '80';
if($args->group_image_mark!='Y') $args->group_image_mark = 'N';
$oModuleController->insertModuleConfig('member',$args);
// 멤버 컨트롤러 객체 생성
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
$oMemberAdminController = &getAdminController('member');
$groups = $oMemberModel->getGroups();
if(!count($groups)) {
// 관리자, 정회원, 준회원 그룹을 입력
$group_args->title = Context::getLang('admin_group');
$group_args->is_default = 'N';
$group_args->is_admin = 'Y';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_1');
$group_args->is_default = 'Y';
$group_args->is_admin = 'N';
$output = $oMemberAdminController->insertGroup($group_args);
unset($group_args);
$group_args->title = Context::getLang('default_group_2');
$group_args->is_default = 'N';
$group_args->is_admin = 'N';
$oMemberAdminController->insertGroup($group_args);
}
// 관리자 정보 세팅
$admin_args->is_admin = 'Y';
$output = executeQuery('member.getMemberList', $admin_args);
if(!$output->data) {
$admin_info = Context::gets('user_id','password','nick_name','user_name', 'email_address');
if($admin_info->user_id) {
// 관리자 정보 입력
$oMemberAdminController->insertAdmin($admin_info);
// 로그인 처리시킴
$output = $oMemberController->doLogin($admin_info->user_id);
}
}
// 금지 아이디 등록 (기본 + 모듈명)
$oModuleModel = &getModel('module');
$module_list = $oModuleModel->getModuleList();
foreach($module_list as $key => $val) {
$oMemberAdminController->insertDeniedID($val->module,'');
}
$oMemberAdminController->insertDeniedID('www','');
$oMemberAdminController->insertDeniedID('root','');
$oMemberAdminController->insertDeniedID('administrator','');
$oMemberAdminController->insertDeniedID('telnet','');
$oMemberAdminController->insertDeniedID('ftp','');
$oMemberAdminController->insertDeniedID('http','');
// member 에서 사용할 cache디렉토리 생성
FileHandler::makeDir('./files/member_extra_info/image_name');
FileHandler::makeDir('./files/member_extra_info/image_mark');
FileHandler::makeDir('./files/member_extra_info/profile_image');
FileHandler::makeDir('./files/member_extra_info/signature');
$oDB->addIndex("member_openid_association","idx_assoc", array("server_url(255)","handle"), false);
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
$oDB = &DB::getInstance();
$oModuleModel = &getModel('module');
// member 디렉토리 체크 (2007. 8. 11 추가)
if(!is_dir("./files/member_extra_info")) return true;
// member 디렉토리 체크 (2007. 10. 22 추가)
if(!is_dir("./files/member_extra_info/profile_image")) return true;
// member_auth_mail 테이블에 is_register 필드 추가 (2008. 04. 22)
$act = $oDB->isColumnExists("member_auth_mail", "is_register");
if(!$act) return true;
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if(!$oDB->isColumnExists("member_group_member", "site_srl")) return true;
if(!$oDB->isColumnExists("member_group", "site_srl")) return true;
if($oDB->isIndexExists("member_group","uni_member_group_title")) return true;
// image_mark 추가 (2009. 02. 14)
if(!$oDB->isColumnExists("member_group", "image_mark")) return true;
// password 유효기간을 위한 추가
if(!$oDB->isColumnExists("member", "change_password_date")) return true;
// 비밀번호 찾기 질문/답변을 위한 추가
if(!$oDB->isColumnExists("member", "find_account_question")) return true;
if(!$oDB->isColumnExists("member", "find_account_answer")) return true;
return false;
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
$oDB = &DB::getInstance();
$oModuleController = &getController('module');
// member 디렉토리 체크
FileHandler::makeDir('./files/member_extra_info/image_name');
FileHandler::makeDir('./files/member_extra_info/image_mark');
FileHandler::makeDir('./files/member_extra_info/signature');
FileHandler::makeDir('./files/member_extra_info/profile_image');
// DB 필드 추가
if (!$oDB->isColumnExists("member_auth_mail", "is_register")) {
$oDB->addColumn("member_auth_mail", "is_register", "char", 1, "N", true);
}
// member_group_member 테이블에 site_srl 추가 (2008. 11. 15)
if (!$oDB->isColumnExists("member_group_member", "site_srl")) {
$oDB->addColumn("member_group_member", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group_member", "idx_site_srl", "site_srl", false);
}
if (!$oDB->isColumnExists("member_group", "site_srl")) {
$oDB->addColumn("member_group", "site_srl", "number", 11, 0, true);
$oDB->addIndex("member_group","idx_site_title", array("site_srl","title"),true);
}
if($oDB->isIndexExists("member_group","uni_member_group_title")) {
$oDB->dropIndex("member_group","uni_member_group_title",true);
}
// image_mark 추가 (2009. 02. 14)
if(!$oDB->isColumnExists("member_group", "image_mark")) {
$oDB->addColumn("member_group", "image_mark", "text");
}
// password 유효기간을 위한 추가
if(!$oDB->isColumnExists("member", "change_password_date")) {
$oDB->addColumn("member", "change_password_date", "date");
executeQuery('member.updateAllChangePasswordDate');
}
// 비밀번호 찾기 질문/답변을 위한 추가
if(!$oDB->isColumnExists("member", "find_account_question")) {
$oDB->addColumn("member", "find_account_question", "number", 11);
}
if(!$oDB->isColumnExists("member", "find_account_answer")) {
$oDB->addColumn("member", "find_account_answer", "varchar", 250);
}
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
set_include_path(_XE_PATH_."modules/member/php-openid-1.2.3");
require_once('Auth/OpenID/XEStore.php');
$store = new Auth_OpenID_XEStore();
$store->reset();
}
}
?>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,340 +1,357 @@
<?php
/**
* @class memberView
* @author zero (zero@nzeo.com)
* @brief member module의 View class
**/
class memberView extends member {
var $group_list = NULL; ///< 그룹 목록 정보
var $member_info = NULL; ///< 선택된 사용자의 정보
var $skin = 'default';
/**
* @brief 초기화
**/
function init() {
// 회원 관리 정보를 받음
$oModuleModel = &getModel('module');
$this->member_config = $oModuleModel->getModuleConfig('member');
if(!$this->member_config->skin) $this->member_config->skin = "default";
if(!$this->member_config->colorset) $this->member_config->colorset = "white";
Context::set('member_config', $this->member_config);
$skin = $this->member_config->skin;
// template path 지정
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default');
$this->setTemplatePath($tpl_path);
}
/**
* @brief 회원 정보 출력
**/
function dispMemberInfo() {
$oMemberModel = &getModel('member');
$logged_info = Context::get('logged_info');
// 비회원일 경우 정보 열람 중지
if(!$logged_info->member_srl) return $this->stop('msg_not_permitted');
$member_srl = Context::get('member_srl');
if(!$member_srl && Context::get('is_logged')) {
$member_srl = $logged_info->member_srl;
} elseif(!$member_srl) {
return $this->dispMemberSignUpForm();
}
$site_module_info = Context::get('site_module_info');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, $site_module_info->site_srl);
unset($member_info->password);
unset($member_info->email_id);
unset($member_info->email_host);
unset($member_info->email_address);
if(!$member_info->member_srl) return $this->dispMemberSignUpForm();
Context::set('member_info', $member_info);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
if ($member_info->member_srl == $logged_info->member_srl)
Context::set('openids', $oMemberModel->getMemberOpenIDByMemberSrl($member_srl));
$this->setTemplateFile('member_info');
}
/**
* @brief 회원 가입 출력
**/
function dispMemberSignUpForm() {
$oMemberModel = &getModel('member');
// 로그인한 회원일 경우 해당 회원의 정보를 받음
if($oMemberModel->isLogged()) return $this->stop('msg_already_logged');
// before 트리거 호출
$trigger_output = ModuleHandler::triggerCall('member.dispMemberSignUpForm', 'before', $this->member_config);
if(!$trigger_output->toBool()) return $trigger_output;
// 회원가입을 중지시켰을 때는 에러 표시
if($this->member_config->enable_join != 'Y') return $this->stop('msg_signup_disabled');
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
// 템플릿 파일 지정
$this->setTemplateFile('signup_form');
}
/**
* @brief 회원 정보 수정
**/
function dispMemberModifyInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$memberModuleConfig = $oModuleModel->getModuleConfig('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$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));
Context::set('openids', $oMemberModel->getMemberOpenIDByMemberSrl($member_srl));
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
if($member_info->member_srl) {
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'member_srl';
$option->content_key_name = 'signature';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = false;
$option->resizable = false;
$option->disable_html = true;
$option->height = 200;
$option->skin = $this->member_config->editor_skin;
$option->colorset = $this->member_config->editor_colorset;
$editor = $oEditorModel->getEditor($member_info->member_srl, $option);
Context::set('editor', $editor);
}
// 템플릿 파일 지정
$this->setTemplateFile('modify_info');
}
/**
* @brief 회원 작성글 보기
**/
function dispMemberOwnDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$module_srl = Context::get('module_srl');
Context::set('module_srl',Context::get('selected_module_srl'));
Context::set('search_target','member_srl');
Context::set('search_keyword',$member_srl);
$oDocumentAdminView = &getAdminView('document');
$oDocumentAdminView->dispDocumentAdminList();
Context::set('module_srl', $module_srl);
$this->setTemplateFile('document_list');
}
/**
* @brief 회원 스크랩 게시물 보기
**/
function dispMemberScrappedDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$output = executeQuery('member.getScrapDocumentList', $args);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('scrapped_list');
}
/**
* @brief 회원의 저장함 보기
**/
function dispMemberSavedDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
// 저장함에 보관된 글을 가져옴 (저장함은 module_srl이 member_srl로 세팅되어 있음)
$logged_info = Context::get('logged_info');
$args->module_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, true);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('saved_list');
}
/**
* @brief 로그인 출력
**/
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;
}
// 템플릿 파일 지정
Context::set('referer_url', $_SERVER['HTTP_REFERER']);
$this->setTemplateFile('login_form');
}
/**
* @brief 회원 비밀번호 수정
**/
function dispMemberModifyPassword() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('modify_password');
}
/**
* @brief 탈퇴 화면
**/
function dispMemberLeave() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('leave_form');
}
/**
* @brief 오픈 아이디 탈퇴 화면
**/
function dispMemberOpenIDLeave() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('openid_leave_form');
}
/**
* @brief 로그아웃 출력
**/
function dispMemberLogout() {
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
Context::set('layout','none');
$this->setTemplatePath($this->module_path.'/tpl');
$this->setTemplateFile('logout');
}
/**
* @brief 저장된 목록을 보여줌
**/
function dispSavedDocumentList() {
$this->setLayoutFile('popup_layout');
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
// 저장함에 보관된 글을 가져옴 (저장함은 module_srl이 member_srl로 세팅되어 있음)
$logged_info = Context::get('logged_info');
$args->module_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$args->list_count = 10;
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, true);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('saved_list_popup');
}
/**
* @brief 아이디/ 비밀번호 찾기 기능
**/
function dispMemberFindAccount() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('find_member_account');
}
/**
* @brief 인증 메일 재발송 페이지
**/
function dispMemberResendAuthMail() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('resend_auth_mail');
}
}
?>
<?php
/**
* @class memberView
* @author NHN (developers@xpressengine.com)
* @brief member module의 View class
**/
class memberView extends member {
var $group_list = NULL; ///< 그룹 목록 정보
var $member_info = NULL; ///< 선택된 사용자의 정보
var $skin = 'default';
/**
* @brief 초기화
**/
function init() {
// 회원 관리 정보를 받음
$oModuleModel = &getModel('module');
$this->member_config = $oModuleModel->getModuleConfig('member');
if(!$this->member_config->skin) $this->member_config->skin = "default";
if(!$this->member_config->colorset) $this->member_config->colorset = "white";
Context::set('member_config', $this->member_config);
$skin = $this->member_config->skin;
// template path 지정
$tpl_path = sprintf('%sskins/%s', $this->module_path, $skin);
if(!is_dir($tpl_path)) $tpl_path = sprintf('%sskins/%s', $this->module_path, 'default');
$this->setTemplatePath($tpl_path);
}
/**
* @brief 회원 정보 출력
**/
function dispMemberInfo() {
$oMemberModel = &getModel('member');
$logged_info = Context::get('logged_info');
// 비회원일 경우 정보 열람 중지
if(!$logged_info->member_srl) return $this->stop('msg_not_permitted');
$member_srl = Context::get('member_srl');
if(!$member_srl && Context::get('is_logged')) {
$member_srl = $logged_info->member_srl;
} elseif(!$member_srl) {
return $this->dispMemberSignUpForm();
}
$site_module_info = Context::get('site_module_info');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, $site_module_info->site_srl);
unset($member_info->password);
unset($member_info->email_id);
unset($member_info->email_host);
unset($member_info->email_address);
if(!$member_info->member_srl) return $this->dispMemberSignUpForm();
Context::set('member_info', $member_info);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
if ($member_info->member_srl == $logged_info->member_srl)
Context::set('openids', $oMemberModel->getMemberOpenIDByMemberSrl($member_srl));
$this->setTemplateFile('member_info');
}
/**
* @brief 회원 가입 출력
**/
function dispMemberSignUpForm() {
$oMemberModel = &getModel('member');
// 로그인한 회원일 경우 해당 회원의 정보를 받음
if($oMemberModel->isLogged()) return $this->stop('msg_already_logged');
// before 트리거 호출
$trigger_output = ModuleHandler::triggerCall('member.dispMemberSignUpForm', 'before', $this->member_config);
if(!$trigger_output->toBool()) return $trigger_output;
// 회원가입을 중지시켰을 때는 에러 표시
if($this->member_config->enable_join != 'Y') return $this->stop('msg_signup_disabled');
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
// 템플릿 파일 지정
$this->setTemplateFile('signup_form');
}
/**
* @brief 회원 정보 수정
**/
function dispMemberModifyInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$memberModuleConfig = $oModuleModel->getModuleConfig('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$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));
Context::set('openids', $oMemberModel->getMemberOpenIDByMemberSrl($member_srl));
// 에디터 모듈의 getEditor를 호출하여 서명용으로 세팅
if($member_info->member_srl) {
$oEditorModel = &getModel('editor');
$option->primary_key_name = 'member_srl';
$option->content_key_name = 'signature';
$option->allow_fileupload = false;
$option->enable_autosave = false;
$option->enable_default_component = true;
$option->enable_component = false;
$option->resizable = false;
$option->disable_html = true;
$option->height = 200;
$option->skin = $this->member_config->editor_skin;
$option->colorset = $this->member_config->editor_colorset;
$editor = $oEditorModel->getEditor($member_info->member_srl, $option);
Context::set('editor', $editor);
}
// 템플릿 파일 지정
$this->setTemplateFile('modify_info');
}
/**
* @brief 회원 작성글 보기
**/
function dispMemberOwnDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$module_srl = Context::get('module_srl');
Context::set('module_srl',Context::get('selected_module_srl'));
Context::set('search_target','member_srl');
Context::set('search_keyword',$member_srl);
$oDocumentAdminView = &getAdminView('document');
$oDocumentAdminView->dispDocumentAdminList();
Context::set('module_srl', $module_srl);
$this->setTemplateFile('document_list');
}
/**
* @brief 회원 스크랩 게시물 보기
**/
function dispMemberScrappedDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$output = executeQuery('member.getScrapDocumentList', $args);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('scrapped_list');
}
/**
* @brief 회원의 저장함 보기
**/
function dispMemberSavedDocument() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
// 저장함에 보관된 글을 가져옴 (저장함은 module_srl이 member_srl로 세팅되어 있음)
$logged_info = Context::get('logged_info');
$args->module_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, true);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('saved_list');
}
/**
* @brief 로그인 출력
**/
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;
}
// 템플릿 파일 지정
Context::set('referer_url', $_SERVER['HTTP_REFERER']);
$this->setTemplateFile('login_form');
}
/**
* @brief 회원 비밀번호 수정
**/
function dispMemberModifyPassword() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('modify_password');
}
/**
* @brief 탈퇴 화면
**/
function dispMemberLeave() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('leave_form');
}
/**
* @brief 오픈 아이디 탈퇴 화면
**/
function dispMemberOpenIDLeave() {
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
Context::set('member_info',$member_info);
// 템플릿 파일 지정
$this->setTemplateFile('openid_leave_form');
}
/**
* @brief 로그아웃 출력
**/
function dispMemberLogout() {
$oMemberController = &getController('member');
$oMemberController->procMemberLogout();
Context::set('layout','none');
$this->setTemplatePath($this->module_path.'/tpl');
$this->setTemplateFile('logout');
}
/**
* @brief 저장된 목록을 보여줌
**/
function dispSavedDocumentList() {
$this->setLayoutFile('popup_layout');
$oMemberModel = &getModel('member');
// 로그인 되어 있지 않을 경우 로그인 되어 있지 않다는 메세지 출력
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
// 저장함에 보관된 글을 가져옴 (저장함은 module_srl이 member_srl로 세팅되어 있음)
$logged_info = Context::get('logged_info');
$args->module_srl = $logged_info->member_srl;
$args->page = (int)Context::get('page');
$args->list_count = 10;
$oDocumentModel = &getModel('document');
$output = $oDocumentModel->getDocumentList($args, true);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('document_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('saved_list_popup');
}
/**
* @brief 아이디/ 비밀번호 찾기 기능
**/
function dispMemberFindAccount() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('find_member_account');
}
/**
* @brief 임시 비밀번호 발급
**/
function dispMemberGetTempPassword() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$user_id = Context::get('user_id');
$temp_password = $_SESSION['xe_temp_password_'.$user_id];
unset($_SESSION['xe_temp_password_'.$user_id]);
if(!$user_id||!$temp_password) return new Object(-1,'msg_invaild_request');
Context::set('temp_password', $temp_password);
$this->setTemplateFile('find_temp_password');
}
/**
* @brief 인증 메일 재발송 페이지
**/
function dispMemberResendAuthMail() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$this->setTemplateFile('resend_auth_mail');
}
}
?>

View file

@ -11,6 +11,8 @@
<column name="email_host" var="email_host" notnull="notnull" />
<column name="user_name" var="user_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="nick_name" var="nick_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="find_account_question" var="find_account_question" />
<column name="find_account_answer" var="find_account_answer" />
<column name="homepage" var="homepage" />
<column name="blog" var="blog" />
<column name="birthday" var="birthday" />

View file

@ -0,0 +1,8 @@
<query id="updateAllChangePasswordDate" action="update">
<tables>
<table name="member" />
</tables>
<columns>
<column name="change_password_date" var="change_password_date" notnull="notnull" default="curdate()" />
</columns>
</query>

View file

@ -0,0 +1,11 @@
<query id="updateChangePasswordDate" action="update">
<tables>
<table name="member" />
</tables>
<columns>
<column name="change_password_date" var="change_password_date" notnull="notnull" default="curdate()" />
</columns>
<conditions>
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" filter="number" />
</conditions>
</query>

View file

@ -9,6 +9,8 @@
<column name="email_host" var="email_host" notnull="notnull" />
<column name="user_name" var="user_name" notnull="notnull" minlength="2" maxlength="40" />
<column name="nick_name" var="nick_name" notnull="notnull" minlength="2" maxlength="40" />
<column name="find_account_question" var="find_account_question" />
<column name="find_account_answer" var="find_account_answer" />
<column name="homepage" var="homepage" default="" />
<column name="blog" var="blog" default="" />
<column name="birthday" var="birthday" />

View file

@ -7,6 +7,8 @@
<column name="email_host" type="varchar" size="160" index="idx_email_host" />
<column name="user_name" type="varchar" size="40" notnull="notnull" />
<column name="nick_name" type="varchar" size="40" notnull="notnull" unique="unique_nick_name" />
<column name="find_account_question" type="number" size="11" />
<column name="find_account_answer" type="varchar" size="250" />
<column name="homepage" type="varchar" size="250" />
<column name="blog" type="varchar" size="250" />
<column name="birthday" type="char" size="8" />
@ -16,6 +18,7 @@
<column name="limit_date" type="date" />
<column name="regdate" type="date" index="idx_regdate" />
<column name="last_login" type="date" index="idx_last_login" />
<column name="change_password_date" type="date" />
<column name="is_admin" type="char" size="1" default="N" index="idx_is_admin" />
<column name="description" type="text" />
<column name="extra_vars" type="text" />

View file

@ -0,0 +1,14 @@
<filter name="find_member_account_by_question" module="member" act="procMemberFindAccountByQuestion">
<form>
<node target="user_id" required="true" />
<node target="email_address" required="true" minlength="2" maxlength="255" filter="email" />
<node target="find_account_question" required="true" />
<node target="find_account_answer" required="true" maxlength="250" />
</form>
<parameter />
<response callback_func="completeFindMemberAccountByQuestion">
<tag name="error" />
<tag name="message" />
<tag name="user_id" />
</response>
</filter>

View file

@ -3,12 +3,16 @@
<node target="user_name" required="true" minlength="2" maxlength="40" />
<node target="nick_name" required="true" minlength="2" maxlength="40" />
<node target="email_address" required="true" minlength="1" maxlength="200" filter="email" />
<node target="find_account_question" required="true" />
<node target="find_account_answer" required="true" maxlength="250" />
</form>
<parameter>
<param name="accept_agreement" target="accept_agreement" />
<param name="user_name" target="user_name" />
<param name="nick_name" target="nick_name" />
<param name="homepage" target="homepage" />
<param name="nick_name" target="nick_name" />
<param name="find_account_question" target="find_account_question" />
<param name="find_account_answer" target="find_account_answer" />
<param name="blog" target="blog" />
<param name="birthday" target="birthday" />
<param name="allow_mailing" target="allow_mailing" />

View file

@ -6,6 +6,8 @@
<node target="user_name" required="true" minlength="2" maxlength="40" />
<node target="nick_name" required="true" minlength="2" maxlength="40" />
<node target="email_address" required="true" minlength="1" maxlength="200" filter="email" />
<node target="find_account_question" required="true" />
<node target="find_account_answer" required="true" maxlength="250" />
</form>
<parameter>
<param name="accept_agreement" target="accept_agreement" />
@ -14,6 +16,8 @@
<param name="password" target="password1" />
<param name="user_name" target="user_name" />
<param name="nick_name" target="nick_name" />
<param name="find_account_question" target="find_account_question" />
<param name="find_account_answer" target="find_account_answer" />
<param name="homepage" target="homepage" />
<param name="blog" target="blog" />
<param name="birthday" target="birthday" />

View file

@ -1,7 +1,8 @@
<!--#include("./common_header.html")-->
<!--%import("filter/find_member_account.xml")-->
<!--%import("filter/find_member_account_by_question.xml")-->
<h3>{$member_title = $lang->cmd_find_member_account}</h3>
<h3>{$lang->cmd_find_member_account}</h3>
<p class="summary">{$lang->about_find_member_account}</p>
@ -20,4 +21,46 @@
</tr>
</table>
</form>
<!--@if(count($lang->find_account_question_items)>1)-->
<h3>{$lang->cmd_find_member_account}</h3>
<p class="summary">{$lang->about_find_account_question}</p>
<form action="./" method="get" onsubmit="return procFilter(this, find_member_account_by_question)">
<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="rowTable" title="{$lang->email_address}">
<tr>
<th><div><label for="cpw">{$lang->user_id}</label></div></th>
<td class="wide"><input type="text" name="user_id" class="inputTypeText" /></td>
</tr>
<tr>
<th><div><label for="cpw">{$lang->email_address}</label></div></th>
<td class="wide"><input type="text" name="email_address" class="inputTypeText w400" /></td>
</tr>
<tr>
<th><div><label for="cpw">{$lang->find_account_question}</label></div></th>
<td>
<select name="find_account_question">
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<$c;$i++)-->
<option value="{$i}">{$lang->find_account_question_items[$i]}</option>
<!--@end-->
</select>
<br />
<input type="text" name="find_account_answer" value="" class="inputTypeText w300"/>
</td>
</tr>
<tr>
<th class="button" colspan="2"><span class="button black strong"><input type="submit" value="{$lang->cmd_get_temp_password}" accesskey="s" /></span></th>
</tr>
</table>
</form>
<!--@end-->
<!--#include("./common_footer.html")-->

View file

@ -0,0 +1,8 @@
<!--#include("./common_header.html")-->
<h3>{$lang->cmd_find_member_account}</h3>
<p class="summary">{$lang->about_find_member_account}</p>
{$temp_password}
<!--#include("./common_footer.html")-->

View file

@ -133,6 +133,15 @@ function completeFindMemberAccount(ret_obj, response_tags) {
alert(ret_obj['message']);
}
/* 임시 비밀번호 생성 */
function completeFindMemberAccountByQuestion(ret_obj, response_tags) {
if(ret_obj['error'] != 0){
alert(ret_obj['message']);
}else{
location.href = current_url.setQuery('act','dispMemberGetTempPassword').setQuery('user_id',ret_obj['user_id']);
}
}
/* 저장글 삭제 */
function doDeleteSavedDocument(document_srl, confirm_message) {
if(!confirm(confirm_message)) return false;

View file

@ -51,6 +51,19 @@
<th><div>{$lang->email_address} <span class="require">*</span></div></th>
<td><input type="text" name="email_address" value="{htmlspecialchars($member_info->email_address)}" /><p>{$lang->about_email_address}</p></td>
</tr>
<!--@if($member_info->find_account_question)-->
<tr>
<th><div>{$lang->find_account_question} <span class="require">*</span></div></th>
<td>
<select name="find_account_question">
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<$c;$i++)-->
<option value="{$i}" <!--@if($member_info->find_account_question==$i)-->selected="selected" <!--@end-->>{$lang->find_account_question_items[$i]}</option>
<!--@end-->
</select>
<br /><input type="text" name="find_account_answer" value="{$member_info->find_account_answer}" class="inputTypeText w300"/>
</td>
</tr>
<!--@end-->
<!--@if($member_config->profile_image == 'Y')-->
<tr>

View file

@ -14,7 +14,7 @@
<!--@if(!$is_logged && $member_config->agreement)-->
<div class="agreementBox">
{nl2br($member_config->agreement)}
{$member_config->agreement}
</div>
<div class="agreementButton">
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
@ -56,6 +56,20 @@
<input type="text" name="email_address" value="" class="inputTypeText"/><p>{$lang->about_email_address}</p>
</td>
</tr>
<!--@if(count($lang->find_account_question_items)>1)-->
<tr>
<th><div>{$lang->find_account_question} <span class="require">*</span></div></th>
<td>
<select name="find_account_question">
<!--@for($i=1,$c=count($lang->find_account_question_items);$i<$c;$i++)-->
<option value="{$i}">{$lang->find_account_question_items[$i]}</option>
<!--@end-->
</select>
<br />
<input type="text" name="find_account_answer" value="" class="inputTypeText w300"/>
</td>
</tr>
<!--@end-->
<tr>
<th><div>{$lang->homepage}</div></th>
<td>

View file

@ -1,77 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">회원 기본 스킨</title>
<title xml:lang="zh-CN">会员模块默认皮肤</title>
<title xml:lang="jp">会員デフォルトスキン</title>
<title xml:lang="en">Default Member Skin</title>
<title xml:lang="vi">Giao diện thành viên mặc định</title>
<title xml:lang="es">Por defecto miembro piel</title>
<title xml:lang="ru">По умолчанию членом кожи</title>
<title xml:lang="zh-TW">會員模組預設面板</title>
<description xml:lang="ko">
회원모듈의 default스킨
디자인 : 서기정 (http://blog.naver.com/addcozy)
HTML/CSS : 정찬명 (http://naradesign.net)
</description>
<description xml:lang="zh-CN">
会员模块的默认皮肤。
设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
</description>
<description xml:lang="jp">
会員モジュールのデフォルトスキン
デザイン:ソギジョン (http://blog.naver.com/addcozy)
HTML/CSSジョンチャンミョン (http://naradesign.net)
</description>
<description xml:lang="en">
default skin of member module
Design : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
</description>
<description xml:lang="vi">
Giao diện mặc định của Module Thành viên
Thiết kế: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
</description>
<description xml:lang="es">
Por defecto de la piel miembro módulo
Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML / CSS: Jeong Chan-Myung (http://naradesign.net)
</description>
<description xml:lang="ru">
умолчанию кожу члена модуль
Дизайн: Ги Чен Се (http://blog.naver.com/addcozy)
HTML / CSS: Чен-Чен Мен (http://naradesign.net)
</description>
<description xml:lang="zh-TW">
會員模組預設面板。
設計 : Ki-Jeong Seo (http://blog.naver.com/addcozy)
HTML/CSS : Chan-Myung Jeong (http://naradesign.net)
</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">(주)NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">(株)NHN</name>
<name xml:lang="en">NHN Corp</name>
<name xml:lang="vi">NHN Corp</name>
<name xml:lang="es">NHN Corp</name>
<name xml:lang="ru">NHN Корп</name>
<name xml:lang="zh-TW">NHN Corp</name>
</author>
<colorset>
<color name="white">
<title xml:lang="ko">기본</title>
<title xml:lang="zh-CN">默认</title>
<title xml:lang="jp">デフォルト</title>
<title xml:lang="en">default</title>
<title xml:lang="vi">Mặc định</title>
<title xml:lang="es">Por defecto</title>
<title xml:lang="ru">умолчанию</title>
<title xml:lang="zh-TW">預設</title>
</color>
</colorset>
</skin>
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">회원 기본 스킨</title>
<title xml:lang="zh-CN">会员模块默认皮肤</title>
<title xml:lang="jp">会員デフォルトスキン</title>
<title xml:lang="en">Default Member Skin</title>
<title xml:lang="vi">Giao diện thành viên mặc định</title>
<title xml:lang="es">Por defecto miembro piel</title>
<title xml:lang="ru">По умолчанию членом кожи</title>
<title xml:lang="zh-TW">會員模組預設面板</title>
<description xml:lang="ko">
회원모듈의 default스킨
NHN (developers@xpressengine.com)
</description>
<description xml:lang="zh-CN">
会员模块的默认皮肤。
NHN (developers@xpressengine.com)
</description>
<description xml:lang="jp">
会員モジュールのデフォルトスキン
NHN (developers@xpressengine.com)
</description>
<description xml:lang="en">
default skin of member module
NHN (developers@xpressengine.com)
</description>
<description xml:lang="vi">
Giao diện mặc định của Module Thành viên
NHN (developers@xpressengine.com)
</description>
<description xml:lang="es">
Por defecto de la piel miembro módulo
NHN (developers@xpressengine.com)
</description>
<description xml:lang="ru">
умолчанию кожу члена модуль
NHN (developers@xpressengine.com)
</description>
<description xml:lang="zh-TW">
會員模組預設面板。
NHN (developers@xpressengine.com)
</description>
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
<colorset>
<color name="white">
<title xml:lang="ko">기본</title>
<title xml:lang="zh-CN">默认</title>
<title xml:lang="jp">デフォルト</title>
<title xml:lang="en">default</title>
<title xml:lang="vi">Mặc định</title>
<title xml:lang="es">Por defecto</title>
<title xml:lang="ru">умолчанию</title>
<title xml:lang="zh-TW">預設</title>
</color>
</colorset>
</skin>

View file

@ -1,54 +1,50 @@
@charset "utf-8";
/* Mobile XE */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma, Geneva, sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
form ul{margin:0;padding:0;list-style:none}
form li{margin:0 0 10px 0;padding:0 0 10px 0;border-bottom:1px dashed #999}
form li:last-child{border:0}
form p{margin:0}
form p.help{color:#666}
fieldset{border:0;margin:0;padding:0}
input,textarea,select{font-size:16px}
button{font-size:12px;cursor:pointer;background:#eee;border:1px solid #666;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;overflow:visible;padding:3px;text-shadow:1px 1px 0 #fff;box-shadow:0 0 2px #666;-moz-box-shadow:0 0 2px #666;-webkit-box-shadow:0 0 2px #666;text-decoration:none;font-weight:normal}
/* Common Class */
.fl{float:left}
.fr{float:right}
.cb{clear:both}
.itx{border:1px solid #ccc;width:90%;font-size:20px;height:30px;padding:5px 10px}
.itxx{border:1px solid #ccc;width:90%;font-size:20px;padding:5px 10px;resize:vertical}
.db{display:block}
.fb{font-weight:bold}
.sn{margin:10px;*zoom:1}
.sn:after{content:"";display:block;clear:both}
/* Button */
.bn{display:inline-block;padding:5px 10px;font-weight:normal;font-size:14px;border:1px solid #333;background:#eee;color:#000;text-shadow:1px 1px 0 #fff;box-shadow:0 0 3px #333;-moz-box-shadow:0 0 3px #333;-webkit-box-shadow:0 0 3px #333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;text-decoration:none}
/* Edge = Header/Footer */
.eg{position:relative;background:#666;*zoom:1}
.eg:after{content:"";display:block;clear:both}
.eg a{text-decoration:none}
/* Header */
.hd{padding:10px;border-top:3px solid #444}
.hd .h1{float:left;display:inline;color:#fff;font-size:24px;margin:0;font-weight:bold;text-shadow:0 0 3px #000}
.hd .h1 a{color:#fff}
.hd .bn{font-size:12px}
/* Footer */
.ft{padding:0 5px;margin:0;list-style:none}
.ft a{display:inline-block;padding:10px;color:#fff;text-shadow:0 0 2px #000;font-size:14px;font-weight:bold}
/* Context */
.cm{margin:0;padding:10px;background:#777;color:#fff;text-align:center;list-style:none;border-top:1px solid #555;*zoom:1}
.cm:after{content:"";display:block;clear:both}
.cm .fl{margin:0 5px 0 0}
.cm .fr{margin:0 0 0 5px}
/* Copyright */
.cr{margin:0;padding:5px 15px;text-align:center;background:#444;color:#ccc;text-shadow:0 0 2px #000;font-size:12px;font-weight:bold}
/* Body */
.bd{position:relative;overflow:hidden;clear:both}
.bd .h2{font-size:20px;background:#ccc;border:1px solid #aaa}
.bd .h3{font-size:16px;background:#eee;border:1px solid #ccc}
.bd .h2,.bd .h3{position:relative;margin:-1px 0;padding:10px;border:1px solid #aaa;border-left:0;border-right:0;text-shadow:1px 1px #fff}
.bd .h2 em,.bd .h3 em{font-weight:normal;color:#f60;font-size:12px}
.bd .h2 a,.bd .h3 a{color:#000}
.bd .h2 .bn{position:absolute;top:8px;right:10px;font-size:12px;margin:0}
@charset "utf-8";
/* Mobile XE (/modules/member/tpl/signup_form.html) */
body{margin:0;background:#fff;color:#000;word-wrap:break-word}
body,input,textarea,select,button,table{font-family:Tahoma,Geneva,sans-serif}
img{border:0}
em{font-style:normal}
form{margin:0;padding:0}
fieldset{margin:0;padding:0;border:0}
textarea{resize:vertical}
input[type=checkbox],
input[type=radio]{width:13px;height:13px;margin:0;padding:0}
/* Body */
.bd{background:#f8f8f8;padding:1px 0}
/* Hx */
.hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff}
.hx.h2 em{font-size:12px;color:#6352d2}
.hx.h3{background:#868686;color:#fff}
.hx.h3 em{font-size:12px}
.hx h2, .hx h3{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
.hx h3{font-size:14px}
.hx a{color:#000}
.hx .ex{font-size:12px}
.hx .tg{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;padding:0;overflow:visible;border:0;cursor:pointer;opacity:0;filter:alpha(opacity=0);background:none}
.hx .ca{font-size:12px;text-decoration:underline;color:#333}
.hx .ca:after{content:"";display:inline-block;position:relative;left:4px;width:0;height:0;border:4px solid;border-color:transparent;border-left-color:#8d7de1;margin:0 -8px 0 0}
.hx .write{position:absolute;top:8px;right:10px;background-position:0 0;display:inline-block;width:28px;height:27px;font-size:0;overflow:hidden;text-indent:28px}
/* Form Field */
.ff{margin:0;padding:10px 0}
.ff ul{margin:0 10px 10px 10px;padding:10px 0 0 0;list-style:none}
.ff li{margin:0 0 5px 0;padding:0}
.ff li p{color:#666}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select{display:block;width:96%;font-size:14px;margin:0 0 5px 0}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea{padding:5px}
/* Button Area */
.bna{text-align:center;padding:0 10px;margin:10px 0}
.bna:after{content:"";display:block;clear:both}
.bn{display:inline-block;line-height:26px !important;padding:0 10px;font-size:12px;font-weight:bold;border:1px solid;text-decoration:none;border-radius:5px;-moz-border-radius:5px;-webkit-border-radius:5px;cursor:pointer;vertical-align:middle}
.bn[type=submit],
.bn[type=button]{height:28px}
.bn[href]{height:26px}
.bn.dark{border-color:#666;background:#777 -webkit-gradient(linear,0% 0%,0% 100%,from(#7e7c78),to(#5c5b58));background:#777 -moz-linear-gradient(top,#7e7c78,#5c5b58);background-color:#777;color:#fff;box-shadow:0 0 1px #fff inset;-moz-box-shadow:0 0 1px #fff inset;-webkit-box-shadow:0 0 1px #fff inset}
.bn.white{border-color:#b5b5b5;background:#1b1b1b -webkit-gradient(linear,0% 0%,0% 100%,from(#fff),to(#f6f6f6),color-stop(0.5,#f0f0f0),color-stop(0.5,#e4e4e4));background:#1b1b1b -moz-linear-gradient(top,#fff,#e4e4e4);background-color:#1b1b1b;color:#000}

View file

@ -1,52 +1,52 @@
/**
* @brief 회원 가입시나 정보 수정시 항목의 중복 검사등을 하는 기능을 구현
* @author zero
**/
// 입력이 시작된 것과 입력후 정해진 시간동안 내용이 변하였을 경우 서버에 ajax로 체크를 하기 위한 변수 설정
var memberCheckObj = { target:null, value:null }
// domready시에 특정 필드들에 대해 이벤트를 걸어 놓음
jQuery(document).ready(memberSetEvent);
function memberSetEvent() {
jQuery('#fo_insert_member :input')
.filter('[name=user_id],[name=nick_name],[name=email_address]')
.blur(memberCheckValue);
}
// 실제 서버에 특정 필드의 value check를 요청하고 이상이 있으면 메세지를 뿌려주는 함수
function memberCheckValue(event) {
var field = event.target;
var _name = field.name;
var _value = field.value;
if(!_name || !_value) return;
var params = {name:_name, value:_value};
var response_tags = ['error','message'];
exec_xml('member','procMemberCheckValue', params, completeMemberCheckValue, response_tags, field);
}
// 서버에서 응답이 올 경우 이상이 있으면 메세지를 출력
function completeMemberCheckValue(ret_obj, response_tags, field) {
var _id = 'dummy_check'+field.name;
var dummy = jQuery('#'+_id);
if(ret_obj['message']=='success') {
dummy.html('').hide();
return;
}
if (!dummy.length) {
dummy = jQuery('<div class="checkValue" />').attr('id', _id).appendTo(field.parentNode);
}
dummy.html(ret_obj['message']).show();
}
// 결과 메세지를 정리하는 함수
function removeMemberCheckValueOutput(dummy, obj) {
dummy.style.display = "none";
}
/**
* @brief 회원 가입시나 정보 수정시 항목의 중복 검사등을 하는 기능을 구현
* @author NHN (developer@xpressengine.com)
**/
// 입력이 시작된 것과 입력후 정해진 시간동안 내용이 변하였을 경우 서버에 ajax로 체크를 하기 위한 변수 설정
var memberCheckObj = { target:null, value:null }
// domready시에 특정 필드들에 대해 이벤트를 걸어 놓음
jQuery(document).ready(memberSetEvent);
function memberSetEvent() {
jQuery('#fo_insert_member :input')
.filter('[name=user_id],[name=nick_name],[name=email_address]')
.blur(memberCheckValue);
}
// 실제 서버에 특정 필드의 value check를 요청하고 이상이 있으면 메세지를 뿌려주는 함수
function memberCheckValue(event) {
var field = event.target;
var _name = field.name;
var _value = field.value;
if(!_name || !_value) return;
var params = {name:_name, value:_value};
var response_tags = ['error','message'];
exec_xml('member','procMemberCheckValue', params, completeMemberCheckValue, response_tags, field);
}
// 서버에서 응답이 올 경우 이상이 있으면 메세지를 출력
function completeMemberCheckValue(ret_obj, response_tags, field) {
var _id = 'dummy_check'+field.name;
var dummy = jQuery('#'+_id);
if(ret_obj['message']=='success') {
dummy.html('').hide();
return;
}
if (!dummy.length) {
dummy = jQuery('<div class="checkValue" />').attr('id', _id).appendTo(field.parentNode);
}
dummy.html(ret_obj['message']).show();
}
// 결과 메세지를 정리하는 함수
function removeMemberCheckValueOutput(dummy, obj) {
dummy.style.display = "none";
}

View file

@ -43,6 +43,13 @@
{$lang->about_enable_confirm}
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->change_password_date}</div></th>
<td>
<input type="text" name="change_password_date" value="{$config->change_password_date}" size="2" class="inputTypeText" />{$lang->unit_day}
<p>{$lang->about_change_password_date}</p>
</td>
</tr>
<tr class="row2">
<th scope="row"><div>{$lang->limit_day}</div></th>
<td>

View file

@ -1,118 +1,122 @@
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
<!--%import("css/msignup.css")-->
<!--%import("js/signup_check.js")-->
<!--%import("js/krzip_search.js")-->
<!--%import("../skins/default/filter/signup.xml")-->
<!--%import("../skins/default/js/member.js")-->
<div class="bd">
<h2 class="h2">{$lang->cmd_signup}</h2>
<h3 class="h3">{$lang->member_default_info}</h3>
<form id="fo_insert_member" action="./" method="GET" onsubmit="return procFilter(this, signup)">
<fieldset class="sn">
<ul>
<li><label for="id" class="db fb al">{$lang->user_id}</label><input name="user_id" type="text" id="id" class="itx" value="" /><p style="color:#666">{$lang->about_user_id}</p></li>
<li><label for="pw" class="db fb al">{$lang->password}</label><input name="password1" type="password" id="pw" class="itx" value="" /><p style="color:#666">{$lang->about_password}</p></li>
<li><label for="pw2" class="db fb al">{$lang->password2}</label><input name="password2" type="password" id="pw2" class="itx" value="" /></li>
<li><label for="uname" class="db fb al">{$lang->user_name}</label><input name="user_name" type="text" id="uname" class="itx" value="" /><p style="color:#666">{$lang->about_user_name}</p></li>
<li><label for="nname" class="db fb al">{$lang->nick_name}</label><input name="nick_name" type="text" id="nname" class="itx" value="" /><p style="color:#666">{$lang->about_nick_name}</p></li>
<li><label for="email" class="db fb al">{$lang->email_address}</label><input name="email_address" type="text" id="email" class="itx" value="" /><p style="color:#666">{$lang->about_email_address}</p></li>
<li><label for="hpage" class="db fb al">{$lang->homepage}</label><input name="homepage" type="text" id="hpage" class="itx" value="" /><p style="color:#666">{$lang->about_homepage}</p></li>
<li><label for="bpage" class="db fb al">{$lang->blog}</label><input name="blog" type="text" id="bpage" class="itx" value="" /><p style="color:#666">{$lang->about_blog_url}</p></li>
<li><label for="bday" class="db fb al">{$lang->birthday}</label><input name="birthday" type="text" id="bday" class="itx" value="" /><p style="color:#666">{$lang->about_birthday}</p></li>
</ul>
</fieldset>
<!--@if($extend_form_list)-->
<h3 class="h3">{$lang->member_extend_info}</h3>
<fieldset class="sn">
<ul>
<!--@foreach($extend_form_list as $key => $val)--><!--@if($val->is_active=='Y')-->
<li><label class="db fb al">{htmlspecialchars($val->column_title)}</label>
<!--// 일반 text -->
<!--@if($val->column_type == 'text')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// 홈페이지 주소 -->
<!--@elseif($val->column_type == 'homepage')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// Email 주소 -->
<!--@elseif($val->column_type == 'email_address')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" class="itx" />
<!--// 전화번호 -->
<!--@elseif($val->column_type == 'tel')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[0])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[2])}" size="4"/>
<!--// textarea -->
<!--@elseif($val->column_type == 'textarea')-->
<textarea name="{$val->column_name}" class="itxx">{htmlspecialchars($val->value)}</textarea>
<!--// 다중 선택 -->
<!--@elseif($val->column_type == 'checkbox')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="checkbox" id="{$v}" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--@elseif($val->column_type == 'radio')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="radio" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--// 단일 선택 -->
<!--@elseif($val->column_type == 'select')-->
<select name="{$val->column_name}">
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<option value="{$v}" <!--@if($v == $val->value)-->selected="selected"<!--@end-->>{$v}</option>
<!--@end-->
<!--@end-->
</select>
<!--// 한국 주소 검색 -->
<!--@elseif($val->column_type == 'kr_zip')-->
<div class="krZip">
<div id="zone_address_1_{$val->column_name}" style="display:<!--@if($val->value[0])-->inline<!--@else-->none<!--@end-->;">
<input type="text" name="{$val->column_name}" value="{$val->value[0]}" class="itx"/>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_list_{$val->column_name}" style="display:none">
<select name="_tmp_address_list_{$val->column_name}" class="w300"></select>
<a href="#" onclick="doSelectKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_select}</span></a>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_search_{$val->column_name}" style="display:<!--@if($val->value[0])-->none<!--@else-->inline<!--@end-->;">
<input type="text" name="_tmp_address_search_{$val->column_name}" class="itx" value="" />
<a href="#" onclick="doSearchKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_search}</span></a>
</div>
<div class="address2">
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" class="itx" />
</div>
</div>
<!--// 일본 주소 검색 -->
<!--@elseif($val->column_type == 'jp_zip')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// 날짜 입력 -->
<!--@elseif($val->column_type == 'date')-->
<input type="hidden" name="{$val->column_name}" id="date_{$val->column_name}" value="{$val->value}" />
<input type="text" class="inputDate inputTypeText" value="" />
<!--@end-->
<p style="color:#666">{$val->description}</p>
<!--// 공개 필드 css확인 필요 -->
<!--input type="checkbox" class="checkbox" name="open_{$val->column_name}" value="Y" id="open_{$val->column_name}" /><label for="open_{$val->column_name}">{$lang->public}</label--></li>
<!--@end--><!--@end-->
</ul>
</fieldset>
<!--@end-->
<div class="cm">
<input type="submit" class="bn" value="{$lang->cmd_registration}" accesskey="s" />
</div>
</form>
</div>
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
<!--%import("css/msignup.css")-->
<!--%import("js/signup_check.js")-->
<!--%import("js/krzip_search.js")-->
<!--%import("../skins/default/filter/signup.xml")-->
<!--%import("../skins/default/js/member.js")-->
<div class="bd">
<div class="hx h2">
<h2>{$lang->cmd_signup}</h2>
</div>
<div class="hx h3">
<h3>{$lang->member_default_info}</h3>
</div>
<form id="fo_insert_member" action="./" method="get" class="ff" onsubmit="return procFilter(this, signup)">
<fieldset>
<ul>
<li><label for="id">{$lang->user_id}</label><input name="user_id" type="text" id="id" value="" /><p>{$lang->about_user_id}</p></li>
<li><label for="pw">{$lang->password}</label><input name="password1" type="password" id="pw" value="" /><p>{$lang->about_password}</p></li>
<li><label for="pw2">{$lang->password2}</label><input name="password2" type="password" id="pw2" value="" /></li>
<li><label for="uname">{$lang->user_name}</label><input name="user_name" type="text" id="uname" value="" /><p>{$lang->about_user_name}</p></li>
<li><label for="nname">{$lang->nick_name}</label><input name="nick_name" type="text" id="nname" value="" /><p>{$lang->about_nick_name}</p></li>
<li><label for="email">{$lang->email_address}</label><input name="email_address" type="text" id="email" value="" /><p>{$lang->about_email_address}</p></li>
<li><label for="hpage">{$lang->homepage}</label><input name="homepage" type="text" id="hpage" value="" /><p>{$lang->about_homepage}</p></li>
<li><label for="bpage">{$lang->blog}</label><input name="blog" type="text" id="bpage" value="" /><p>{$lang->about_blog_url}</p></li>
<li><label for="bday">{$lang->birthday}</label><input name="birthday" type="text" id="bday" value="" /><p>{$lang->about_birthday}</p></li>
</ul>
</fieldset>
<!--@if($extend_form_list)-->
<div class="hx h3">
<h3>{$lang->member_extend_info}</h3>
</div>
<fieldset>
<ul>
<!--@foreach($extend_form_list as $key => $val)--><!--@if($val->is_active=='Y')-->
<li><label>{htmlspecialchars($val->column_title)}</label>
<!--// 일반 text -->
<!--@if($val->column_type == 'text')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// 홈페이지 주소 -->
<!--@elseif($val->column_type == 'homepage')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// Email 주소 -->
<!--@elseif($val->column_type == 'email_address')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// 전화번호 -->
<!--@elseif($val->column_type == 'tel')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[0])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" size="4"/>
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[2])}" size="4"/>
<!--// textarea -->
<!--@elseif($val->column_type == 'textarea')-->
<textarea name="{$val->column_name}">{htmlspecialchars($val->value)}</textarea>
<!--// 다중 선택 -->
<!--@elseif($val->column_type == 'checkbox')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="checkbox" id="{$v}" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--@elseif($val->column_type == 'radio')-->
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<input type="radio" name="{$val->column_name}" value="{$v}" <!--@if(is_array($val->value)&&in_array($v, $val->value))-->checked="checked"<!--@end-->/><label for="{$v}">{$v}</label>
<!--@end-->
<!--@end-->
<!--// 단일 선택 -->
<!--@elseif($val->column_type == 'select')-->
<select name="{$val->column_name}">
<!--@if($val->default_value)-->
<!--@foreach($val->default_value as $v)-->
<option value="{$v}" <!--@if($v == $val->value)-->selected="selected"<!--@end-->>{$v}</option>
<!--@end-->
<!--@end-->
</select>
<!--// 한국 주소 검색 -->
<!--@elseif($val->column_type == 'kr_zip')-->
<div class="krZip">
<div id="zone_address_1_{$val->column_name}" style="display:<!--@if($val->value[0])-->inline<!--@else-->none<!--@end-->;">
<input type="text" name="{$val->column_name}" value="{$val->value[0]}"/>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_list_{$val->column_name}" style="display:none">
<select name="_tmp_address_list_{$val->column_name}" class="w300"></select>
<a href="#" onclick="doSelectKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_select}</span></a>
<a href="#" onclick="doHideKrZipList('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
<div id="zone_address_search_{$val->column_name}" style="display:<!--@if($val->value[0])-->none<!--@else-->inline<!--@end-->;">
<input type="text" name="_tmp_address_search_{$val->column_name}" value="" />
<a href="#" onclick="doSearchKrZip('{$val->column_name}'); return false;" class="bn"><span>{$lang->cmd_search}</span></a>
</div>
<div class="address2">
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value[1])}" />
</div>
</div>
<!--// 일본 주소 검색 -->
<!--@elseif($val->column_type == 'jp_zip')-->
<input type="text" name="{$val->column_name}" value="{htmlspecialchars($val->value)}" />
<!--// 날짜 입력 -->
<!--@elseif($val->column_type == 'date')-->
<input type="hidden" name="{$val->column_name}" id="date_{$val->column_name}" value="{$val->value}" />
<input type="text" class="inputDate inputTypeText" value="" />
<!--@end-->
<p>{$val->description}</p>
<!--// 공개 필드 css확인 필요 -->
<!--input type="checkbox" class="checkbox" name="open_{$val->column_name}" value="Y" id="open_{$val->column_name}" /><label for="open_{$val->column_name}">{$lang->public}</label--></li>
<!--@end--><!--@end-->
</ul>
</fieldset>
<!--@end-->
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_registration}" accesskey="s" />
</div>
</form>
</div>