merge from branch luminous (version 1.5.4.2, ~r12561)

git-svn-id: http://xe-core.googlecode.com/svn/trunk@12611 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
flyskyko 2013-01-30 05:53:14 +00:00
parent 2263200ce4
commit cc47d2b247
196 changed files with 3655 additions and 2033 deletions

View file

@ -897,7 +897,7 @@
<value xml:lang="vi"><![CDATA[Sửa đổi mật khẩu]]></value>
</item>
<item name="cmd_view_member_info">
<value xml:lang="ko"><![CDATA[회원 정보 보기]]></value>
<value xml:lang="ko"><![CDATA[회원정보 보기]]></value>
<value xml:lang="en"><![CDATA[View Member Info]]></value>
<value xml:lang="jp"><![CDATA[会員情報確認]]></value>
<value xml:lang="zh-CN"><![CDATA[个人资料]]></value>
@ -1576,6 +1576,7 @@
</item>
<item name="about_rechecked_password">
<value xml:lang="ko"><![CDATA[회원의 정보를 안전하게 보호하기 위해 비밀번호를 다시 한번 확인 합니다.]]></value>
<value xml:lang="en"><![CDATA[Confirm your password before editing account information.]]></value>
</item>
<item name="about_user_id">
<value xml:lang="ko"><![CDATA[회원 ID는 3~20자 사이의 영문+숫자로 이루어져야 하며 영문으로 시작해야 합니다.]]></value>
@ -2486,18 +2487,23 @@ Bạn có thể quản lý thành viên bằng cách tạo những nhóm mới,
<value xml:lang="en"><![CDATA[Group]]></value>
</item>
<item name="retrieve_password">
<value xml:lang="ko"><![CDATA[비밀번호 찾기]]></value>
<value xml:lang="en"><![CDATA[Retrieve password]]></value>
</item>
<item name="excess_ip_access_count">
<value xml:lang="ko"><![CDATA[로그인 가능 횟수를 초과하셨습니다. %s 간 로그인 하실 수 없습니다.]]></value>
<value xml:lang="en"><![CDATA[There was too much sign in trial from your devices in a short time. You can not sign in for %s.]]></value>
</item>
<item name="enable_login_fail_report">
<value xml:lang="ko"><![CDATA[계정 무한 대입 방지 사용]]></value>
<value xml:lang="en"><![CDATA[Sign in failure]]></value>
</item>
<item name="login_fail_report">
<value xml:lang="ko"><![CDATA[로그인 실패 기록 보고 입니다.]]></value>
<value xml:lang="en"><![CDATA[Sign in failure report.]]></value>
</item>
<item name="login_fail_report_contents">
<value xml:lang="ko"><![CDATA[<h2>확인하지 않은 로그인 실패 기록이 있습니다.</h2><div>%1$s</div><p>* 이 알림은 한번만 보입니다.<br />* 이 메시지는 쪽지와 이메일로 발송됩니다.<br />* 이 메시지는 로그인이 성공한 순간, 로그인 성공 이전 실패 기록을 모아서 발송합니다.<br />발송 시각: %2$s</p>]]></value>
<value xml:lang="en"><![CDATA[<h2>There is unfolded sign in failure report</h2><div>%1$s</div><p>* This notification is shown once.<br />* This message will be send to your email and message.<br />* This message contains sign in failure records, before a ID sign in success.<br />Sending: %2$s</p>]]></value>
<value xml:lang="ko"><![CDATA[<h2>로그인 실패 기록을 알려드립니다.</h2><div>%1$s</div><p>* 비밀번호를 틀리는 등의 일이 없었는데 이 메시지를 보신다면, 계정 관리에 유의해주시기 바랍니다.<br />* 이 메시지는 로그인이 성공한 순간 누적 로그인 실패 기록이 많을 경우, 로그인 성공 이전 실패 기록을 모아서 발송합니다.<br />발송 시각: %2$s</p>]]></value>
<value xml:lang="en"><![CDATA[<h2>There is recorded sign in failures.</h2><div>%1$s</div><p>* This notification is shown once.<br />* This message contains sign in failure records, before a ID sign in success.<br />Sending: %2$s</p>]]></value>
</item>
</lang>

View file

@ -0,0 +1,34 @@
@charset "utf-8";
/* Element Reset */
.xm,
.xm table,
.xm input,
.xm textarea,
.xm select,
.xm button{font-family:Tahoma,Geneva,sans-serif;font-size:12px;color:#333}
.xm button,
.xm input[type=submit],
.xm input[type=reset],
.xm input[type=button]{cursor:pointer;overflow:visible}
.xm img{border:0}
.xm p{line-height:1.5}
/* Heading */
.xm .hx{position:relative;border-bottom:1px solid #ccc8be;padding:8px 10px;margin:0}
.xm .hx:after{content:"";margin:0 -10px;position:relative;top:10px;display:block;clear:both;height:1px;background:#fff}
.xm .hx.h2{background:#e5e5e5;text-shadow:1px 1px 0 #fff;position:relative;zoom:1}
.xm .hx>h2{margin:0 10px 0 0;display:inline;font-size:16px;line-height:1.4}
.xm .hx a{color:#000}
/* Content */
.xm .co{margin: 10px;line-height: 1.4;font-size: 14px;color:#333}
/* DL */
.xm .dl{margin:15px 0}
.xm .dl>dt{font-weight:bold;margin-top:10px}
.xm .dl>dt>em{font-style:normal;color:#e00}
.xm .dl>dd{margin-left:20px}
/* Button Area */
.xm .ba{margin:15px 0;padding:0;list-style:none;border:1px solid #ddd;border-radius:4px}
.xm .ba li{border-top:1px solid #ddd}
.xm .ba li:first-child{border:0}
.xm .ba li>a,
.xm .ba li>button,
.xm .ba li>input{display:block;white-space:nowrap;padding:7px 10px;text-decoration:none;color:#000;background:#f4f4f4;text-shadow:0 1px 0 #fff;overflow:hidden;text-overflow:ellipsis}

View file

@ -0,0 +1,48 @@
/* Mobile XE Login (/modules/member/tpl/login_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}
/* Common */
.fl{float:left}
.fr{float:right}
/* Body */
.bd{background:#f8f8f8;padding:1px 0;border-bottom:1px solid #ccc8be}
.bd:after{content:"";margin:0;position:relative;top:3px;display:block;clear:both;height:1px;background:#fff}
/* 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}
.hx h2{margin:0 10px 0 0;display:inline}
.hx h2{font-size:16px;line-height:1.4}
/* 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 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}
/* Help */
.hp{background:#eee;border-top:1px solid #ddd;padding:12px 10px !important;margin:10px 0px !important;}
.hp li{margin:0;display:inline;border-left:1px solid #ccc;padding:0 4px 0 8px;}
.hp li:first-child{border:0;}
.hp a{color:#333;text-decoration:none}
/* 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:#fff;color:#000}
.message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px}.message p{margin:1em 0!important}.message em{font-style:normal;color:#e00}.message.info,.message.error,.message.update{padding-left:55px}.message.info{border-color:#e0e8ec;background:#edf9ff url(../../../../../common/img/msg.Info.png) no-repeat 1em .5em}.message.error{border-color:#efdcdc;background:#ffecec url(../../../../../../common/img/msg.error.png) no-repeat 1em .5em}.message.update{border-color:#eae9dc;background:#fffdef url(../../../../../common/img/msg.update.png) no-repeat 1em .5em}

View file

@ -0,0 +1,60 @@
@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;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 li>label:first-child{display:block;font-weight:bold}
.ff label+input[type=text],
.ff label+input[type=password],
.ff label+textarea,
.ff label+select,
.ff label+select+input[type=text],
.ff .inputText{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,
.ff label+select+input[type=text],
.ff .inputText,
.ff .tel input[type=text]{padding:5px}
.ff .krZip input[type=text]{width:77%;font-size:14px;margin:0 0 5px 0;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:#fff;color:#000}
.message{border:1px solid #ddd;background:#f8f8f8;margin:1em 0;padding:0 1em;border-radius:5px;line-height:1.4;font-size:12px}.message p{margin:1em 0!important}.message em{font-style:normal;color:#e00}.message.info,.message.error,.message.update{padding-left:55px}.message.info{border-color:#e0e8ec;background:#edf9ff url(../../../../common/img/msg.Info.png) no-repeat 1em .5em}.message.error{border-color:#efdcdc;background:#ffecec url(../../../../common/img/msg.error.png) no-repeat 1em .5em}.message.update{border-color:#eae9dc;background:#fffdef url(../../../../common/img/msg.update.png) no-repeat 1em .5em}
.agreement .text{height:200px;overflow-y:auto;}
.bn a{text-decoration:none;}

View file

@ -1,5 +1,5 @@
<load target="./../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>

View file

@ -0,0 +1,27 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$member_title = $lang->msg_leave_member}</h2>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="leaveMember" id="fo_insert_member" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberLeave" />
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<ul>
<li>
<label for="identifier">{Context::getLang($identifier)}</label>
<p id="identifier">{$formValue}</p>
</li>
<li>
<label for="cpw">{$lang->password}</label>
<input type="password" name="password" id="cpw" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_leave}" />
</div>
</form>

View file

@ -0,0 +1,44 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="css/mlogin.css" usecdn="true" />
<div class="bd">
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="hx h2">
<h2>{$lang->cmd_login}</h2>
</div>
<form action="./" method="POST" class="ff">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberLogin" />
<input type="hidden" name="redirect_url" value="{getUrl('act','')}" />
<ul>
<li><label for="id"><!--@if($identifier == 'user_id')-->{$lang->user_id}<!--@else-->{$lang->email_address}<!--@end--></label><input name="user_id" type="text" id="id" value="" /></li>
<li><label for="pw">{$lang->password}</label><input name="password" type="password" id="pw" value="" /></li>
</ul>
<div class="message info" id="keep_msg" style="display:none;">
<p>{$lang->about_keep_warning}</p>
</div>
<div class="bna">
<div class="fl"><input name="keep_signed" type="checkbox" value="Y" id="autoLogin" /> <label for="autoLogin">{$lang->keep_signed}</label></div>
<div class="fr"><button type="submit" class="bn dark">{$lang->cmd_login}</button></div>
</div>
<ul class="hp">
<li><a href="{getUrl('','act','dispMemberFindAccount')}"><span>{$lang->cmd_find_member_account}</span></a></li>
<li><a href="{getUrl('','act','dispMemberSignUpForm')}"><span>{$lang->cmd_signup}</span></a></li>
</ul>
</form>
</div>
<script>
jQuery(function($){
var keep_msg = $('#keep_msg');
keep_msg.hide();
$('#autoLogin').change(function(){
if($(this).is(':checked')){
keep_msg.slideDown(200);
} else {
keep_msg.slideUp(200);
}
});
});
</script>

View file

@ -0,0 +1,28 @@
<load target="css/member.css" />
<div class="xm">
<div class="hx h2">
<h2>{$lang->member_info}</h2>
</div>
<div class="co">
<dl class="dl">
<block loop="$displayDatas => $item">
<dt>{$item->title} <em cond="$item->required || $item->mustRequired">*</em></dt>
<dd>{$item->value}</dd>
</block>
<dt>{$lang->member_group}</dt>
<dd>{implode(', ', $memberInfo['group_list'])}</dd>
<dt>{$lang->signup_date}</dt>
<dd>{zdate($memberInfo[regdate],"Y-m-d")}</dd>
<block cond="$memberInfo[member_srl] == $logged_info->member_srl || $logged_info->is_admin == 'Y'">
<dt>{$lang->last_login}</dt>
<dd>{zdate($memberInfo[last_login],"Y-m-d")}</dd>
</block>
</dl>
<ul class="ba" cond="$memberInfo['member_srl'] == $logged_info->member_srl">
<li cond="$member_config->identifier == 'email_address'"><a href="{getUrl('act', 'dispMemberModifyEmailAddress')}">{$lang->cmd_modify_member_email_address}</a></li>
<li><a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}">{$lang->cmd_modify_member_info}</a></li>
<li><a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}">{$lang->cmd_modify_member_password}</a></li>
<li><a href="{getUrl('act','dispMemberLeave','member_srl','')}">{$lang->cmd_leave}</a></li>
</ul>
</div>
</div>

View file

@ -0,0 +1,22 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="modifyEmailAddress" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberModifyEmailAddress" />
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
<h2 class="h2">{$lang->cmd_modify_member_email_address}</h2>
<p>{$lang->about_modify_member_email_address}</p>
<ul>
<li>
<label for="email_address">{$lang->email_address}</label>
<input type="text" id="email_address" name="email_address" value="" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_send_auth_new_emaill_address}" />
</div>
</form>

View file

@ -0,0 +1,48 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="../../tpl/js/signup_check.js" />
<load target="../../tpl/js/member_admin.js" />
<load target="css/msignup.css" usecdn="true" />
<script type="text/javascript" >
xe.lang.deleteProfileImage = '{$lang->msg_delete_extend_form}';
xe.lang.deleteImageMark = '{$lang->msg_delete_extend_form}';
xe.lang.deleteImageName = '{$lang->msg_delete_extend_form}';
</script>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<div class="bd">
<h2 class="h2">{$lang->msg_update_member}</h2>
<form ruleset="@insertMember" id="fo_insert_member" class="ff" action="./" method="POST">
<input type="hidden" name="act" value="procMemberModifyInfo" />
<input type="hidden" name="module" value="member" />
<input type="hidden" name="member_srl" value="{$member_info->member_srl}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li>
<label for="identifierForm">{$identifierForm->title} <em style="color:red">*</em></label>
<input id="identifierForm" type="text" name="{$identifierForm->name}" value="{$identifierForm->value}" disabled="disabled" />
<input type="hidden" name="{$identifierForm->name}" value="{$identifierForm->value}" />
</li>
<li loop="$formTags=>$formTag">
<label for="{$formTag->name}">{$formTag->title}</label>
<div id="{$formTag->name}" cond="$formTag->name != 'signature' && $formTag->type != 'date'" class="tel"|cond="$formTag->type == 'tel'">{$formTag->inputTag}</div>
<textarea id="{$formTag->name}" cond="$formTag->name == 'signature'" name="signature" rows="8" cols="42" class="itxx">{$member_info->signature}</textarea>
<input id="{$formTag->name}" class="inputText" type="date" name="{$formTag->name}" value="{$oMemberInfo[$formTag->name]}" cond="$formTag->type == 'date'" />
</li>
<li><label for="mailing" class="db fb al">{$lang->allow_mailing}</label><input id="mailing" type="checkbox" name="allow_mailing" value="Y" class="checkbox" <!--@if($member_info->allow_mailing!='N')-->checked="checked"<!--@end--> /> <p style="color:#666">{$lang->about_allow_mailing}</p></li>
</ul>
</fieldset>
<div class="cm">
<input type="submit" value="{$lang->cmd_registration}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
</form>
</div>

View file

@ -0,0 +1,32 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$member_title = $lang->cmd_modify_member_password}</h2>
<form ruleset="modifyPassword" id="fo_insert_member" class="ff" action="./" method="post">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberModifyPassword" />
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<ul>
<li>
<label for="uid">{Context::getLang($identifier)}</label>
<input type="text" disabled="disabled" value="{$formValue}" id="uid" />
</li>
<li>
<label for="cpw">{$lang->current_password}</label>
<input type="password" name="current_password" id="cpw" />
</li>
<li>
<label for="npw1">{$lang->password1}</label>
<input type="password" name="password1" id="npw1" /> <span class="desc">{$lang->about_password}</span>
</li>
<li>
<label for="npw2">{$lang->password2}</label>
<input type="password" name="password2" id="npw2" />
</li>
</ul>
<div class="bna">
<input type="submit" class="bn" value="{$lang->cmd_registration}" />
</div>
</form>

View file

@ -0,0 +1,24 @@
<load target="css/msignup.css" usecdn="true" />
<h2 class="h2">{$lang->msg_rechecked_password}</h2>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form class="ff" action="./index.php" method="post" ruleset="recheckedPassword">
<input type="hidden" name="act" value="procMemberModifyInfoBefore" />
<input type="hidden" name="module" value="member" />
<ul>
<li>
<label for="identifier">{$identifierTitle}</label>
<p id="identifier">{$identifierValue}</p>
</li>
<li>
<label for="password">{$lang->password}</label>
<input id ="password" type="password" name="password" />
<p class="desc">{$lang->about_rechecked_password}</p>
</li>
</ul>
<div class="bna">
<input class="bn white" type="submit" value="{$lang->cmd_confirm}" />
<span class="bn white"><a href="{getUrl('act','dispMemberInfo','member_srl','')}">{$lang->cmd_cancel}</a></span>
</div>
</form>

View file

@ -0,0 +1,60 @@
<load target="./../../../../common/js/jquery.min.js" usecdn="true" index="-1000000" />
<load target="./../../../../common/js/xe.min.js" usecdn="true" index="-1000000" />
<load target="css/msignup.css" usecdn="true" />
<load target="../../tpl/js/signup_check.js" />
<div class="bd">
<div class="hx h2">
<h2>{$lang->cmd_signup}</h2>
</div>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<form ruleset="@insertMember" id="fo_insert_member" class="ff" action="./" method="post" enctype="multipart/form-data">
<input type="hidden" name="module" value="member" />
<input type="hidden" name="act" value="procMemberInsert" />
<!--@if(!$is_logged && $member_config->agreement)-->
<div class="agreement">
<div class="text">
{$member_config->agreement}
</div>
<div class="confirm">
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
<label for="accept_agree">{$lang->about_accept_agreement}</label>
</div>
</div>
<!--@end-->
<ul>
<li>
<label for="{$identifierForm->name}">{$identifierForm->title} <em style="color:red">*</em></label>
<input type="text" name="{$identifierForm->name}" id="{$identifierForm->name}" value="{$identifierForm->value}" />
</li>
<li>
<label for="password">{$lang->password} <em style="color:red">*</em></label>
<input type="password" name="password" id="password" value=""/>
</li>
<li>
<label for="password2">{$lang->password3} <em style="color:red">*</em></label>
<input type="password" name="password2" id="password2" value=""/>
</li>
<li loop="$formTags=>$formTag">
<label for="{$formTag->name}">{$formTag->title}</label>
<div id="{$formTag->name}" cond="$formTag->name != 'signature' && $formTag->type != 'date'" class="tel"|cond="$formTag->type == 'tel'">{$formTag->inputTag}</div>
<input id="{$formTag->name}" class="inputText" type="date" value="{$oMemberInfo[$formTag->name]}" cond="$formTag->type == 'date'" />
</li>
<li>
<label>{$lang->allow_mailing}</label>
<input type="radio" name="allow_mailing" id="mailingYes" value="Y" checked="checked"|cond="$member_info->allow_mailing == 'Y'" /> <label for="mailingYes">{$lang->cmd_yes}</label>
<input type="radio" name="allow_mailing" id="mailingNo" value="N" checked="checked"|cond="$member_info->allow_mailing != 'Y'" /> <label for="mailingNo">{$lang->cmd_no}</label>
</li>
<li>
<label>{$lang->allow_message}</label>
<block loop="$lang->allow_message_type=>$key,$val">
<input type="radio" name="allow_message" value="{$key}" checked="checked"|cond="$member_info->allow_message == $key || (!$member_info && $key == 'Y')" id="allow_{$key}" /> <label for="allow_{$key}">{$val}</label>
</block>
</li>
</ul>
<div class="bna">
<input type="submit" class="bn dark" value="{$lang->cmd_registration}" />
</div>
</form>
</div>

View file

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">회원 기본 모바일 스킨</title>
<title xml:lang="en">XE Basic Member Mobile Skin</title>
<description xml:lang="ko">
XE 기본 모바일 스킨 입니다.
NHN (developers@xpressengine.com)
</description>
<version>0.1</version>
<date>2012-09-21</date>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="tr">NHN</name>
</author>
<extra_vars />
</skin>

View file

@ -26,7 +26,7 @@
$config = $oMemberModel->getMemberConfig ();
$getVars = array();
if ($config->signupForm){
foreach($config->signupForm as $formInfo){
foreach($config->signupForm as $formInfo) {
if($formInfo->isDefaultForm && ($formInfo->isUse || $formInfo->required || $formInfo->mustRequired)){
$getVars[] = $formInfo->name;
}
@ -138,6 +138,7 @@
'webmaster_email',
'limit_day',
'change_password_date',
'enable_login_fail_report',
'max_error_count','max_error_count_time',
'agreement',
'after_login_url',
@ -146,6 +147,8 @@
'layout_srl',
'skin',
'colorset',
'mlayout_srl',
'mskin',
'profile_image', 'profile_image_max_width', 'profile_image_max_height',
'image_name', 'image_name_max_width', 'image_name_max_height',
'image_mark', 'image_mark_max_width', 'image_mark_max_height',
@ -160,91 +163,91 @@
$oMemberModel = &getModel('member');
// default setting start
if($input_args->enable_join != 'Y'){
$args->enable_join = 'N';
}else{
$args = $input_args;
$args->enable_join = 'Y';
if($args->enable_confirm !='Y') $args->enable_confirm = 'N';
$args->limit_day = (int)$args->limit_day;
if(!$args->change_password_date) $args->change_password_date = 0;
if(!trim(strip_tags($args->agreement)))
{
$agreement_file = _XE_PATH_.'files/member_extra_info/agreement_' . Context::get('lang_type') . '.txt';
FileHandler::removeFile($agreement_file);
$args->agreement = null;
}
if(!trim(strip_tags($args->after_login_url))) $args->after_login_url = null;
if(!trim(strip_tags($args->after_logout_url))) $args->after_logout_url = null;
if(!trim(strip_tags($args->redirect_url))) $args->redirect_url = null;
if(!$args->skin) $args->skin = "default";
if(!$args->colorset) $args->colorset = "white";
$args->profile_image = $args->profile_image?'Y':'N';
$args->image_name = $args->image_name?'Y':'N';
$args->image_mark = $args->image_mark?'Y':'N';
if($args->signature!='Y') $args->signature = 'N';
$args->identifier = $all_args->identifier;
// set default
$all_args->is_nick_name_public = 'Y';
$all_args->is_find_account_question_public = 'N';
// signupForm
global $lang;
$signupForm = array();
$items = array('user_id', 'password', 'user_name', 'nick_name', 'email_address', 'find_account_question', 'homepage', 'blog', 'birthday', 'signature', 'profile_image', 'image_name', 'image_mark', 'profile_image_max_width', 'profile_image_max_height', 'image_name_max_width', 'image_name_max_height', 'image_mark_max_width', 'image_mark_max_height');
$mustRequireds = array('email_address', 'nick_name', 'password', 'find_account_question');
$extendItems = $oMemberModel->getJoinFormList();
foreach($list_order as $key){
unset($signupItem);
$signupItem->isIdentifier = ($key == $all_args->identifier);
$signupItem->isDefaultForm = in_array($key, $items);
$signupItem->name = $key;
if(!in_array($key, $items)) $signupItem->title = $key;
else $signupItem->title = $lang->{$key};
$signupItem->mustRequired = in_array($key, $mustRequireds);
$signupItem->imageType = (strpos($key, 'image') !== false);
$signupItem->required = ($all_args->{$key} == 'required') || $signupItem->mustRequired || $signupItem->isIdentifier;
$signupItem->isUse = in_array($key, $usable_list) || $signupItem->required;
$signupItem->isPublic = ($all_args->{'is_'.$key.'_public'} == 'Y' && $signupItem->isUse) ? 'Y' : 'N';
if ($signupItem->imageType){
$signupItem->max_width = $all_args->{$key.'_max_width'};
$signupItem->max_height = $all_args->{$key.'_max_height'};
}
// set extends form
if (!$signupItem->isDefaultForm){
$extendItem = $extendItems[$all_args->{$key.'_member_join_form_srl'}];
$signupItem->type = $extendItem->column_type;
$signupItem->member_join_form_srl = $extendItem->member_join_form_srl;
$signupItem->title = $extendItem->column_title;
$signupItem->description = $extendItem->description;
// check usable value change, required/option
if ($signupItem->isUse != ($extendItem->is_active == 'Y') || $signupItem->required != ($extendItem->required == 'Y')){
unset($update_args);
$update_args->member_join_form_srl = $extendItem->member_join_form_srl;
$update_args->is_active = $signupItem->isUse?'Y':'N';
$update_args->required = $signupItem->required?'Y':'N';
$update_output = executeQuery('member.updateJoinForm', $update_args);
}
unset($extendItem);
}
$signupForm[] = $signupItem;
}
$args->signupForm = $signupForm;
// create Ruleset
$this->_createSignupRuleset($signupForm, $args->agreement);
$this->_createLoginRuleset($args->identifier);
$this->_createFindAccountByQuestion($args->identifier);
$args = $input_args;
$args->enable_join = $args->enable_join != 'N' ? 'Y' : 'N';
if($args->enable_confirm !='Y') $args->enable_confirm = 'N';
$args->limit_day = (int)$args->limit_day;
if(!$args->change_password_date) $args->change_password_date = 0;
if(!trim(strip_tags($args->agreement)))
{
$agreement_file = _XE_PATH_.'files/member_extra_info/agreement_' . Context::get('lang_type') . '.txt';
FileHandler::removeFile($agreement_file);
$args->agreement = null;
}
if(!trim(strip_tags($args->after_login_url))) $args->after_login_url = null;
if(!trim(strip_tags($args->after_logout_url))) $args->after_logout_url = null;
if(!trim(strip_tags($args->redirect_url))) $args->redirect_url = null;
if(!$args->skin) $args->skin = 'default';
if(!$args->colorset) $args->colorset = 'white';
if(!$args->mskin) $args->mskin = 'default';
$args->profile_image = $args->profile_image?'Y':'N';
$args->image_name = $args->image_name?'Y':'N';
$args->image_mark = $args->image_mark?'Y':'N';
if($args->signature!='Y') $args->signature = 'N';
$args->identifier = $all_args->identifier;
$args->layout_srl = $args->layout_srl ? $args->layout_srl : null;
$args->mlayout_srl = $args->mlayout_srl ? $args->mlayout_srl : null;
// set default
$all_args->is_nick_name_public = 'Y';
$all_args->is_find_account_question_public = 'N';
// signupForm
global $lang;
$signupForm = array();
$items = array('user_id', 'password', 'user_name', 'nick_name', 'email_address', 'find_account_question', 'homepage', 'blog', 'birthday', 'signature', 'profile_image', 'image_name', 'image_mark', 'profile_image_max_width', 'profile_image_max_height', 'image_name_max_width', 'image_name_max_height', 'image_mark_max_width', 'image_mark_max_height');
$mustRequireds = array('email_address', 'nick_name', 'password', 'find_account_question');
$extendItems = $oMemberModel->getJoinFormList();
foreach($list_order as $key){
unset($signupItem);
$signupItem->isIdentifier = ($key == $all_args->identifier);
$signupItem->isDefaultForm = in_array($key, $items);
$signupItem->name = $key;
if(!in_array($key, $items)) $signupItem->title = $key;
else $signupItem->title = $lang->{$key};
$signupItem->mustRequired = in_array($key, $mustRequireds);
$signupItem->imageType = (strpos($key, 'image') !== false);
$signupItem->required = ($all_args->{$key} == 'required') || $signupItem->mustRequired || $signupItem->isIdentifier;
$signupItem->isUse = in_array($key, $usable_list) || $signupItem->required;
$signupItem->isPublic = ($all_args->{'is_'.$key.'_public'} == 'Y' && $signupItem->isUse) ? 'Y' : 'N';
if ($signupItem->imageType){
$signupItem->max_width = $all_args->{$key.'_max_width'};
$signupItem->max_height = $all_args->{$key.'_max_height'};
}
// set extends form
if (!$signupItem->isDefaultForm){
$extendItem = $extendItems[$all_args->{$key.'_member_join_form_srl'}];
$signupItem->type = $extendItem->column_type;
$signupItem->member_join_form_srl = $extendItem->member_join_form_srl;
$signupItem->title = $extendItem->column_title;
$signupItem->description = $extendItem->description;
// check usable value change, required/option
if ($signupItem->isUse != ($extendItem->is_active == 'Y') || $signupItem->required != ($extendItem->required == 'Y')){
unset($update_args);
$update_args->member_join_form_srl = $extendItem->member_join_form_srl;
$update_args->is_active = $signupItem->isUse?'Y':'N';
$update_args->required = $signupItem->required?'Y':'N';
$update_output = executeQuery('member.updateJoinForm', $update_args);
}
unset($extendItem);
}
$signupForm[] = $signupItem;
}
$args->signupForm = $signupForm;
// create Ruleset
$this->_createSignupRuleset($signupForm, $args->agreement);
$this->_createLoginRuleset($args->identifier);
$this->_createFindAccountByQuestion($args->identifier);
// check agreement value exist
if($args->agreement)
@ -493,7 +496,8 @@
* Add a join form
* @return void|Object (void : success, Object : fail)
**/
function procMemberAdminInsertJoinForm() {
function procMemberAdminInsertJoinForm()
{
$args->member_join_form_srl = Context::get('member_join_form_srl');
$args->column_type = Context::get('column_type');
@ -503,13 +507,25 @@
$args->required = Context::get('required');
$args->is_active = (isset($args->required));
if(!in_array(strtoupper($args->required), array('Y','N')))$args->required = 'N';
$args->description = Context::get('description');
$args->description = Context::get('description') ? Context::get('description') : '';
// Default values
if(in_array($args->column_type, array('checkbox','select','radio')) && count($args->default_value) ) {
$args->default_value = serialize($args->default_value);
} else {
$args->default_value = '';
}
// Check ID duplicated
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
foreach($config->signupForm as $item)
{
if($item->name == $args->column_name)
{
if($args->member_join_form_srl && $args->member_join_form_srl == $item->member_join_form_srl) continue;
return new Object(-1,'msg_exists_user_id');
}
}
// Fix if member_join_form_srl exists. Add if not exists.
$isInsert;
if(!$args->member_join_form_srl){
@ -534,6 +550,7 @@
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
unset($config->agreement);
if($isInsert){
$config->signupForm[] = $signupItem;
@ -563,6 +580,7 @@
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
unset($config->agreement);
foreach($config->signupForm as $key=>$val){
if ($val->member_join_form_srl == $member_join_form_srl){
@ -940,6 +958,7 @@
// group image mark option
$config = $oMemberModel->getMemberConfig();
$config->group_image_mark = $vars->group_image_mark;
unset($config->agreement);
$output = $oModuleController->updateModuleConfig('member', $config);
// group data save

View file

@ -245,6 +245,16 @@
Context::set('formInfo', $output->data);
}
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
foreach($config->signupForm as $item)
{
$list[] = $item->name;
}
$id_list = implode(',',$list);
Context::set('id_list',$id_list);
$oTemplate = &TemplateHandler::getInstance();
$tpl = $oTemplate->compile($this->module_path.'tpl', 'insert_join_form');

View file

@ -115,10 +115,18 @@
Context::set('layout_list', $layout_list);
$mlayout_list = $oLayoutModel->getLayoutList(0, 'M');
Context::set('mlayout_list', $mlayout_list);
// list of skins for member module
$skin_list = $oModuleModel->getSkins($this->module_path);
Context::set('skin_list', $skin_list);
// list of skins for member module
$mskin_list = $oModuleModel->getSkins($this->module_path, 'm.skins');
Context::set('mskin_list', $mskin_list);
// retrieve skins of editor
$oEditorModel = &getModel('editor');
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
@ -269,6 +277,7 @@
if($formInfo->isDefaultForm){
if($formInfo->imageType){
$formTag->type = 'image';
if($formInfo->name == 'profile_image'){
$target = $memberInfo['profile_image'];
$functionName = 'doDeleteProfileImage';
@ -300,12 +309,14 @@
,$member_config->{$formInfo->name.'_max_height'});
}//end imageType
elseif($formInfo->name == 'birthday'){
$formTag->type = 'date';
$inputTag = sprintf('<input type="hidden" name="birthday" id="date_birthday" value="%s" /><input type="text" class="inputDate" id="birthday" value="%s" /> <input type="button" value="%s" class="dateRemover" />'
,$memberInfo['birthday']
,zdate($memberInfo['birthday'], 'Y-m-d', false)
,$lang->cmd_delete);
}elseif($formInfo->name == 'find_account_question'){
$inputTag = '<select name="find_account_question" style="width:290px; display:block;">%s</select>';
$formTag->type = 'select';
$inputTag = '<select name="find_account_question" id="find_account_question" style="width:290px; display:block;">%s</select>';
$optionTag = array();
foreach($lang->find_account_question_items as $key=>$val){
if($key == $memberInfo['find_account_question']) $selected = 'selected="selected"';
@ -316,9 +327,11 @@
,$val);
}
$inputTag = sprintf($inputTag, implode('', $optionTag));
$inputTag .= '<input type="text" name="find_account_answer" title="'.Context::getLang('find_account_answer').'" value="'.$memberInfo['find_account_answer'].'" class="inputText long tall" />';
$inputTag .= '<input type="text" name="find_account_answer" id="find_account_answer" title="'.Context::getLang('find_account_answer').'" value="'.$memberInfo['find_account_answer'].'" class="inputText long tall" />';
}else{
$inputTag = sprintf('<input type="text" name="%s" value="%s" class="inputText long tall" />'
$formTag->type = 'text';
$inputTag = sprintf('<input type="text" name="%s" id="%s" value="%s" class="inputText long tall" />'
,$formInfo->name
,$formInfo->name
,$memberInfo[$formInfo->name]);
}
@ -329,8 +342,9 @@
'value' => $extendForm->value);
$extentionReplace = array();
$formTag->type = $extendForm->column_type;
if($extendForm->column_type == 'text' || $extendForm->column_type == 'homepage' || $extendForm->column_type == 'email_address'){
$template = '<input type="text" name="%column_name%" value="%value%" />';
$template = '<input type="text" name="%column_name%" id="%column_name%" value="%value%" />';
}elseif($extendForm->column_type == 'tel'){
$extentionReplace = array('tel_0' => $extendForm->value[0],
'tel_1' => $extendForm->value[1],
@ -362,7 +376,7 @@
$template = sprintf($template, implode('', $optionTag));
}
}elseif($extendForm->column_type == 'select'){
$template = '<select name="'.$formInfo->name.'">%s</select>';
$template = '<select name="'.$formInfo->name.'" id="'.$formInfo->name.'">%s</select>';
$optionTag = array();
if($extendForm->default_value){
foreach($extendForm->default_value as $v){
@ -404,7 +418,7 @@
<script type="text/javascript">jQuery(function($){ $.krzip('%column_name%') });</script>
EOD;
}elseif($extendForm->column_type == 'jp_zip'){
$template = '<input type="text" name="%column_name%" value="%value%" />';
$template = '<input type="text" name="%column_name%" id="%column_name%" value="%value%" />';
}elseif($extendForm->column_type == 'date'){
$extentionReplace = array('date' => zdate($extendForm->value, 'Y-m-d'),
'cmd_delete' => $lang->cmd_delete);

View file

@ -355,19 +355,20 @@
function recordLoginError($error = 0, $message = 'success')
{
if($error == 0) return new Object($error, $message);
// Create a member model object
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
// Check if there is recoding table.
$oDB = &DB::getInstance();
if(!$oDB->isTableExists('member_login_count')) return new Object($error, $message);
if(!$oDB->isTableExists('member_login_count') || $config->enable_login_fail_report == 'N') return new Object($error, $message);
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
$output = executeQuery('member.getLoginCountByIp', $args);
if($output->data && $output->data->count)
{
// Create a member model object
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
$last_update = strtotime($output->data->last_update);
$term = intval(time()-$last_update);
//update, if IP address access in a short time, update count. If not, make count 1.
@ -398,10 +399,14 @@
function recordMemberLoginError($error = 0, $message = 'success', $args = NULL)
{
if($error == 0 || !$args->member_srl) return new Object($error, $message);
// Create a member model object
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
// Check if there is recoding table.
$oDB = &DB::getInstance();
if(!$oDB->isTableExists('member_count_history')) return new Object($error, $message);
if(!$oDB->isTableExists('member_count_history') || $config->enable_login_fail_report == 'N') return new Object($error, $message);
$output = executeQuery('member.getLoginCountHistoryByMemberSrl', $args);
if($output->data && $output->data->content)

View file

@ -388,7 +388,7 @@
$memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
$this->memberInfo->password = $memberInfo->password;
}
// Verify the cuttent password
// Verify the current password
if(!$oMemberModel->isValidPassword($this->memberInfo->password, $password))
{
return new Object(-1, 'invalid_password');
@ -396,7 +396,7 @@
$_SESSION['rechecked_password_step'] = 'VALIDATE_PASSWORD';
$redirectUrl = getUrl('', 'act', 'dispMemberModifyInfo');
$redirectUrl = getNotEncodedUrl('', 'act', 'dispMemberModifyInfo');
$this->setRedirectUrl($redirectUrl);
}
@ -436,6 +436,7 @@
// Login Information
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
$args->birthday = strtr($args->birthday, array('-'=>'', '/'=>'', '.'=>'', ' '=>''));
// Remove some unnecessary variables from all the vars
$all_args = Context::getRequestVars();
unset($all_args->module);
@ -1020,7 +1021,7 @@
}
// Get content of the email to send a member
Context::set('auth_args', $auth_args);
Context::set('member_info', $member_info);
Context::set('memberInfo', $member_info);
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
@ -1081,7 +1082,7 @@
if(!$output->data || !$output->data[0]->auth_key) return new Object(-1, 'msg_invalid_request');
$auth_info = $output->data[0];
// Get content of the email to send a member
Context::set('member_info', $memberInfo);
Context::set('memberInfo', $memberInfo);
$oModuleModel = &getModel('module');
$member_config = $oModuleModel->getModuleConfig('member');
if(!$member_config->skin) $member_config->skin = "default";
@ -1555,37 +1556,45 @@
// Update the latest login time
$args->member_srl = $this->memberInfo->member_srl;
$output = executeQuery('member.updateLastLogin', $args);
// check if there is login fail records.
$output = executeQuery('member.getLoginCountHistoryByMemberSrl', $args);
if($output->data && $output->data->content)
{
$title = Context::getLang('login_fail_report');
$message = '<ul>';
$content = unserialize($output->data->content);
foreach($content as $val)
{
$message .= '<li>'.date('Y-m-d H:i:s P',$val[2]).'<br /> Access IP: '.$val[0].'<br /> Message: '.$val[1].'</li>';
}
$message .= '</ul>';
$content = sprintf(Context::getLang('login_fail_report_contents'),$message,date('Y-m-d H:i:s P'));
//send message
$oCommunicationController = &getController('communication');
$oCommunicationController->sendMessage($args->member_srl, $args->member_srl, $title, $content, true);
if($this->memberInfo->email_address && $this->memberInfo->allow_mailing == 'Y')
// Check if there is recoding table.
$oDB = &DB::getInstance();
if($oDB->isTableExists('member_count_history') && $config->enable_login_fail_report != 'N')
{
// check if there is login fail records.
$output = executeQuery('member.getLoginCountHistoryByMemberSrl', $args);
if($output->data && $output->data->content)
{
$view_url = Context::getRequestUri();
$title = sprintf("%s @ %s",$title,$view_url);
$content = sprintf("%s<hr /><p>From: <a href=\"%s\" target=\"_blank\">%s</a><br />To: %s(%s)</p>",$content, $view_url, $view_url, $this->memberInfo->nick_name, $this->memberInfo->email_id);
$oMail = new Mail();
$oMail->setTitle($title);
$oMail->setContent($content);
$oMail->setSender($this->memberInfo->email_id.'('.$this->memberInfo->nick_name.')', $this->memberInfo->email_address);
$oMail->setReceiptor($this->memberInfo->email_id.'('.$this->memberInfo->nick_name.')', $this->memberInfo->email_address);
$oMail->send();
$title = Context::getLang('login_fail_report');
$message = '<ul>';
$content = unserialize($output->data->content);
if(count($content) > $config->max_error_count)
{
foreach($content as $val)
{
$message .= '<li>'.date('Y-m-d H:i:s P',$val[2]).'<br /> Access IP: '.$val[0].'<br /> Message: '.$val[1].'</li>';
}
$message .= '</ul>';
$content = sprintf(Context::getLang('login_fail_report_contents'),$message,date('Y-m-d H:i:s P'));
//send message
$oCommunicationController = &getController('communication');
$oCommunicationController->sendMessage($args->member_srl, $args->member_srl, $title, $content, true);
if($this->memberInfo->email_address && $this->memberInfo->allow_mailing == 'Y')
{
$view_url = Context::getRequestUri();
$content = sprintf("%s<hr /><p>From: <a href=\"%s\" target=\"_blank\">%s</a><br />To: %s(%s)</p>",$content, $view_url, $view_url, $this->memberInfo->nick_name, $this->memberInfo->email_id);
$oMail = new Mail();
$oMail->setTitle($title);
$oMail->setContent($content);
$oMail->setSender($config->webmaster_name?$config->webmaster_name:'webmaster', $config->webmaster_email);
$oMail->setReceiptor($this->memberInfo->email_id.'('.$this->memberInfo->nick_name.')', $this->memberInfo->email_address);
$oMail->send();
}
$output = executeQuery('member.deleteLoginCountHistoryByMemberSrl', $args);
}
}
$output = executeQuery('member.deleteLoginCountHistoryByMemberSrl', $args);
}
// Call a trigger after successfully log-in (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $this->memberInfo);
@ -2047,6 +2056,10 @@
**/
function destroySessionInfo() {
if(!$_SESSION || !is_array($_SESSION)) return;
$memberInfo = Context::get('logged_info');
$memberSrl = $memberInfo->member_srl;
foreach($_SESSION as $key => $val) {
$_SESSION[$key] = '';
}
@ -2054,10 +2067,11 @@
setcookie(session_name(), '', time()-42000, '/');
setcookie('sso','',time()-42000, '/');
if($_COOKIE['xeak']) {
$args->autologin_key = $_COOKIE['xeak'];
executeQuery('member.deleteAutologin', $args);
}
if($memberSrl)
{
$args->member_srl = $memberSrl;
$output = executeQuery('member.deleteAutologin', $args);
}
}
function _updatePointByGroup($memberSrl, $groupSrlList)

View file

@ -1,223 +1,67 @@
<?php
class memberMobile extends member
require_once(_XE_PATH_.'modules/member/member.view.php');
class memberMobile extends memberView
{
/**
* Support method are
* dispMemberInfo, dispMemberSignUpForm, dispMemberFindAccount, dispMemberGetTempPassword, dispMemberModifyInfo, dispMemberModifyInfoBefore
*/
var $memberInfo;
function init() {
// Get the member configuration
$oModuleModel = &getModel('module');
$this->member_config = $oModuleModel->getModuleConfig('member');
function init()
{
// Get the member configuration
$oMemberModel = &getModel('member');
$this->member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $this->member_config);
$mskin = $this->member_config->mskin;
// Set the template path
if(!$mskin)
{
$mskin = 'default';
$template_path = sprintf('%sm.skins/%s', $this->module_path, $mskin);
}
else
{
$template_path = sprintf('%sm.skins/%s', $this->module_path, $mskin);
}
// if member_srl exists, set memberInfo
$member_srl = Context::get('member_srl');
if($member_srl) {
if($member_srl)
{
$oMemberModel = &getModel('member');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
if(!$this->memberInfo) Context::set('member_srl','');
else Context::set('member_info',$this->memberInfo);
if(!$this->memberInfo)
{
Context::set('member_srl','');
}
else
{
Context::set('member_info',$this->memberInfo);
}
}
Context::set('member_config', $this->member_config);
$this->setTemplatePath($this->module_path.'tpl');
}
$this->setTemplatePath($template_path);
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;
}
// get member module configuration.
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
// Set a template file
Context::set('referer_url', htmlspecialchars($_SERVER['HTTP_REFERER']));
$this->setTemplateFile('login_form');
}
function dispMemberSignUpForm(){
$oMemberModel = &getModel('member');
if($oMemberModel->isLogged()) return $this->stop('msg_already_logged');
$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');
$oMemberAdminView = &getAdminView('member');
$formTags = $oMemberAdminView->_getMemberInputTag($member_info);
Context::set('formTags', $formTags);
$member_config = $oMemberModel->getMemberConfig();
Context::set('member_config', $member_config);
global $lang;
$identifierForm->title = $lang->{$member_config->identifier};
$identifierForm->name = $member_config->identifier;
$identifierForm->value = $member_info->{$member_config->identifier};
Context::set('identifierForm', $identifierForm);
// Set a template file
$this->setTemplateFile('signup_form');
}
function dispMemberInfo() {
$oMemberModel = &getModel('member');
$logged_info = Context::get('logged_info');
// Don't display member info to non-logged user
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');
if(!$this->memberInfo)
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($this->member_config->mlayout_srl);
if($layout_info)
{
$columnList = array('user_name', 'nick_name', 'homepage', 'blog', 'birthday', 'regdate', 'last_login');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, $site_module_info->site_srl, $columnList);
$this->module_info->mlayout_srl = $this->member_config->mlayout_srl;
$this->setLayoutPath($layout_info->path);
}
unset($this->memberInfo->password);
unset($this->memberInfo->email_id);
unset($this->memberInfo->email_host);
unset($this->memberInfo->email_address);
if(!$this->memberInfo->member_srl) return $this->dispMemberSignUpForm();
Context::set('member_info', $this->memberInfo);
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->memberInfo));
$this->setTemplateFile('member_info_mobile');
}
}
/**
* @brief Find user ID and password
**/
function dispMemberFindAccount() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$this->setTemplateFile('find_member_account');
function dispMemberModifyInfo()
{
parent::dispMemberModifyInfo();
if($this->member_info)
{
Context::set('oMemberInfo', get_object_vars($this->member_info));
}
/**
* @brief Generate a temporary password
**/
function dispMemberGetTempPassword() {
if(Context::get('is_logged')) return $this->stop('already_logged');
$oMemberModel = &getModel('member');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$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 Edit member profile
**/
function dispMemberModifyInfo() {
$oMemberModel = &getModel('member');
$oModuleModel = &getModel('module');
$memberModuleConfig = $oModuleModel->getModuleConfig('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) $this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$this->memberInfo->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$this->memberInfo);
// Receive a member join form
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($this->memberInfo));
// Call getEditor of the editor module and set it for signiture
if($this->memberInfo->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($this->memberInfo->member_srl, $option);
Context::set('editor', $editor);
}
// Set a template file
$this->setTemplateFile('modify_info');
}
/**
* @brief Change the user password
**/
function dispMemberModifyPassword() {
$oMemberModel = &getModel('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$config = $oMemberModel->getMemberConfig();
Context::set('identifier', $config->identifier);
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) {
$columnList = array('member_srl', 'user_id');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
}
Context::set('member_info',$this->memberInfo);
// Set a template file
$this->setTemplateFile('modify_password');
}
/**
* @brief Member withdrawl
**/
function dispMemberLeave() {
$oMemberModel = &getModel('member');
// A message appears if the user is not logged-in
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
$logged_info = Context::get('logged_info');
$member_srl = $logged_info->member_srl;
if(!$this->memberInfo) {
$columnList = array('member_srl', 'user_id');
$this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
}
Context::set('member_info',$this->memberInfo);
// Set a template file
$this->setTemplateFile('leave_form');
}
}
}
?>

View file

@ -38,7 +38,7 @@
{
foreach($config->signupForm AS $key=>$value)
{
$config->signupForm[$key]->title = Context::getLang($value->title);
$config->signupForm[$key]->title = ($value->isDefaultForm) ? Context::getLang($value->name) : $value->title;
if($config->signupForm[$key]->isPublic != 'N') $config->signupForm[$key]->isPublic = 'Y';
if($value->name == 'find_account_question') $config->signupForm[$key]->isPublic = 'N';
}
@ -63,12 +63,6 @@
if (!$config->max_error_count) $config->max_error_count = 10;
if (!$config->max_error_count_time) $config->max_error_count_time = 300;
if (!$config->layout_srl)
{
$oModuleModel = &getModel('module');
$defaultModuleInfo = $oModuleModel->getDefaultMid();
$config->layout_srl = $defaultModuleInfo->layout_srl;
}
if (!$config->signature_editor_skin || $config->signature_editor_skin == 'default') $config->signature_editor_skin = 'xpresseditor';
if (!$config->sel_editor_colorset) $config->sel_editor_colorset = 'white';

View file

@ -98,6 +98,7 @@
function _getDisplayedMemberInfo($memberInfo, $extendFormInfo, $memberConfig)
{
$logged_info = Context::get('logged_info');
$displayDatas = array();
foreach($memberConfig->signupForm as $no=>$formInfo)
{
@ -270,6 +271,7 @@
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
$member_info->signature = $oMemberModel->getSignature($member_srl);
Context::set('member_info',$member_info);
// Get a list of extend join form
Context::set('extend_form_list', $oMemberModel->getCombineJoinForm($member_info));
@ -291,6 +293,8 @@
Context::set('editor', $editor);
}
$this->member_info = $member_info;
$oMemberAdminView = &getAdminView('member');
$formTags = $oMemberAdminView->_getMemberInputTag($member_info);
Context::set('formTags', $formTags);
@ -382,7 +386,7 @@
**/
function dispMemberLoginForm() {
if(Context::get('is_logged')) {
Context::set('redirect_url', getUrl('act',''));
Context::set('redirect_url', getNotEncodedUrl('act',''));
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
return;

View file

@ -3,6 +3,7 @@
<table name="member_autologin" />
</tables>
<conditions>
<condition operation="equal" column="autologin_key" var="autologin_key" notnull="notnull" />
<condition operation="equal" column="autologin_key" var="autologin_key" />
<condition operation="equal" column="member_srl" var="member_srl" pipe="or" />
</conditions>
</query>

View file

@ -6,6 +6,6 @@
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="email_address" var="email_address" notnull="notnull" />
<condition operation="equal" column="lower(email_address)" var="email_address" notnull="notnull" />
</conditions>
</query>

View file

@ -3,7 +3,7 @@
<table name="member_scrap" />
</tables>
<columns>
<column name="count(*)" alias="count" />
<column name="count(document_srl)" alias="count" />
</columns>
<conditions>
<condition operation="equal" column="member_srl" var="member_srl" notnull="notnull" />

View file

@ -1,5 +1,8 @@
<include target="./common_header.html" />
<load target="filter/find_member_account.xml" />
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
</div>
<h2 class="h2">{$lang->cmd_find_member_account_with_email}</h2>
<p>{$lang->about_find_member_account}</p>
<form action="./" method="get" class="form" onsubmit="return procFilter(this, find_member_account)">

View file

@ -1,3 +1,5 @@
<input type="hidden" name="join_form_id_list" value="{$id_list}" />
<input type="hidden" name="old_column_id" value="{$formInfo->column_name}" />
<input type="hidden" name="member_join_form_srl" value="{$formInfo->member_join_form_srl}" />
<h2 class="h2">{$lang->cmd_input_extend_form}</h2>
<ul>

View file

@ -64,23 +64,6 @@ jQuery(function($){
// hide form if enable_join is setted "No"
var suSetting = $('fieldset.suSetting'); // 회원가입 설정
var suForm = $('fieldset.suForm'); // 회원가입 양식
var isEnable = suSetting.find(':radio[name=enable_join]:checked').val();
if (isEnable == 'N'){
suSetting.find('>ul>li:gt(0)').hide();
suForm.hide();
}
suSetting.find(':radio[name=enable_join]').change(function(){
if($('#enable_join_yes').is(':checked')){
// 회원 가입을 허용하지 않는 경우 불필요한 항목을 모두 감춘다
suSetting.find('>ul>li:gt(0)').slideDown(200);
suForm.slideDown(200);
} else {
// 회원 가입을 허용하는 경우 필요한 항목을 모두 펼친다
suSetting.find('>ul>li:gt(0)').slideUp(200);
suForm.slideUp(200);
}
});
suForm.find(':checkbox[name="usable_list[]"]').each(function(){
var $i = $(this);
$i.change(function(){
@ -241,4 +224,17 @@ jQuery(function($){
resp = ['error','message'] // response tags
);
});
$('#userDefine form').submit(function(e) {
var id_list = $(this).find('input[name=join_form_id_list]').val();
var id_list_arr = id_list.split(',');
var column_id = $(this).find('input[name=column_id]').val();
var old_column_id = $(this).find('input[name=old_column_id]').val();
if($.inArray(column_id, id_list_arr) > -1 && column_id != old_column_id) {
alert(xe.lang.msg_exists_user_id);
return false;
}
else return true;
});
});

View file

@ -1,28 +0,0 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="css/msignup.css" usecdn="true" />
<!--%import("../skins/default/filter/leave_member.xml")-->
<load target="../skins/default/js/member.js" usecdn="true" />
<div class="bd">
<h2 class="h2">{$member_title = $lang->msg_leave_member}</h2>
<form id="fo_insert_member" action="./" method="get" onsubmit="return procFilter(this, leave_member)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li><label for="uid" class="db fb al">{$lang->user_id}</label><div id="uid">{$member_info->user_id}</div></li>
<li><label for="pw" class="db fb al">{$lang->password}</label><input id="pw" type="password" name="password" class="itx" /></li>
</ul>
</fieldset>
<div class="cm">
<input type="submit" value="{$lang->cmd_leave}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_back}</span></a>
</div>
</form>
</div>

View file

@ -6,6 +6,7 @@
xe.lang.cmd_delete = '{$lang->cmd_delete}';
xe.lang.msg_null_prohibited_id = '{$lang->msg_null_prohibited_id}';
xe.lang.msg_null_prohibited_nick_name = '{$lang->msg_null_prohibited_nick_name}';
xe.lang.msg_exists_user_id= '{$lang->msg_exists_user_id}';
</script>
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
<p>{$XE_VALIDATOR_MESSAGE}</p>
@ -54,6 +55,13 @@
<p class="q"><label for="change_password_date">{$lang->change_password_date}</label></p>
<p class="a"><input type="text" id="change_password_date" name="change_password_date" value="{$config->change_password_date}" style="width:30px" /><span class="desc">{$lang->unit_day}({$lang->about_change_password_date})</span></p>
</li>
<li>
<p class="q">{$lang->enable_login_fail_report}</p>
<p class="a">
<input type="radio" name="enable_login_fail_report" id="enable_login_fail_report_yes" value="Y" checked="checked"|cond="$config->enable_login_fail_report != 'N'" /><label for="enable_login_fail_report_yes">{$lang->cmd_yes}</label>
<input type="radio" name="enable_login_fail_report" id="enable_login_fail_report_no" value="N" checked="checked"|cond="$config->enable_login_fail_report == 'N'" /><label for="enable_join_no">{$lang->cmd_no}</label>
</p>
</li>
<li>
<p class="q"><label for="max_error_count">{$lang->login_trial_limit1}</label></p>
<p class="a"><input type="text" id="max_error_count" name="max_error_count" value="{$config->max_error_count}" style="width:30px" /><span class="desc">{$lang->about_login_trial_limit1}</span></p>
@ -85,9 +93,10 @@
<p class="desc">{$lang->about_redirect_url}</p>
</li>
<li>
<p class="q"><label for="skin">{$lang->layout}</label></p>
<p class="q"><label for="layout">{$lang->layout}</label></p>
<p class="a">
<select name="layout_srl">
<select id="layout" name="layout_srl">
<option value="0">{$lang->notuse}</option>
<option loop="$layout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $config->layout_srl">{$val->title} ({$val->layout})</option>
</select>
</p>
@ -104,6 +113,23 @@
<p class="q"><label for="member_colorset">{$lang->colorset}</label></p>
<p class="a"><div id="member_colorset"></div></p>
</li>
<li>
<p class="q"><label for="mlayout">{$lang->mobile_layout}</label></p>
<p class="a">
<select id="mlayout" name="mlayout_srl">
<option value="0">{$lang->notuse}</option>
<option loop="$mlayout_list => $key,$val" value="{$val->layout_srl}" selected="selected"|cond="$val->layout_srl == $config->mlayout_srl">{$val->title} ({$val->layout})</option>
</select>
</p>
</li>
<li>
<p class="q"><label for="mskin">{$lang->mobile_skin}</label></p>
<p class="a">
<select id="mskin" name="mskin">
<option loop="$mskin_list=>$key,$val" value="{$key}" selected="selected"|cond="$config->mskin==$key">{$val->title} ({$key})</option>
</select>
</p>
</li>
<li>
<p class="q"><label for="prohibited_nick_name">{$lang->cmd_manage_nick_name}({sprintf($lang->count_manage_nick_name, count($deniedNickNames))})</label></p>
<div class="a">
@ -261,5 +287,6 @@
<input type="hidden" name="success_return_url" value="{getUrl('act', $act)}" />
<div id="extendForm">
</div>
</form>
</div>

View file

@ -1,185 +0,0 @@
{@ Context::loadFile(array("./common/js/jquery.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/js_app.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/common.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_handler.js", 'head', '', -100000), true) }
{@ Context::loadFile(array("./common/js/xml_js_filter.js", 'head', '', -100000), true) }
<load target="css/msignup.css" usecdn="true" />
<load target="js/signup_check.js" usecdn="true" />
<load target="js/krzip_search.js" usecdn="true" />
<!--%import("../skins/default/filter/modify_info.xml")-->
<load target="../skins/default/js/member.js" usecdn="true" />
<!--@if($member_config->profile_image == 'Y')-->
<!--%import("../skins/default/filter/delete_profile_image.xml")-->
<!--@end-->
<!--@if($member_config->image_name == 'Y')-->
<!--%import("../skins/default/filter/delete_image_name.xml")-->
<!--@end-->
<!--@if($member_config->image_mark == 'Y')-->
<!--%import("../skins/default/filter/delete_image_mark.xml")-->
<!--@end-->
<div class="bd">
<h2 class="h2">{$lang->msg_update_member}</h2>
<h3 class="h3">{$lang->member_default_info}</h3>
<form id="fo_insert_member" action="./" method="GET" onsubmit="return procFilter(this, modify_info)" <!--@if($member_config->profile_image == 'Y' || $member_config->image_name=='Y' || $member_config->image_mark=='Y')-->enctype="multipart/form-data"<!--@end--> target="tmp_upload_iframe">
<input type="hidden" name="act" value="" />
<input type="hidden" name="module" value="member" />
<input type="hidden" name="member_srl" value="{$member_info->member_srl}" />
<input type="hidden" name="signature" value="{htmlspecialchars($member_info->signature)}" />
<input type="hidden" name="page" value="{$page}" />
<fieldset class="sn">
<ul>
<li><label for="uid" class="db fb al">{$lang->user_id}</label><div id="uid">{htmlspecialchars($member_info->user_id)}</div></li>
<li><label for="uname" class="db fb al">{$lang->user_name}</label><input type="text" name="user_name" id="uname" class="itx" value="{htmlspecialchars($member_info->user_name)}" /> <p style="color:#666">{$lang->about_user_name}</p></li>
<li><label for="nname" class="db fb al">{$lang->nick_name}</label><input type="text" name="nick_name" id="nname" class="itx" value="{htmlspecialchars($member_info->nick_name)}" /> <p style="color:#666">{$lang->about_nick_name}</p></li>
<li><label for="email" class="db fb al">{$lang->email_address}</label><input type="text" name="email_address" id="email" class="itx" value="{htmlspecialchars($member_info->email_address)}" /><p style="color:#666">{$lang->about_email_address}</p></li>
<!--@if($member_config->profile_image == 'Y')-->
<li><label for="p_image" class="db fb al">{$lang->profile_image}</label>
<!--@if($member_info->profile_image->src)-->
<div id="p_image">
<img src="{$member_info->profile_image->src}" border="0" alt="profile_image" />
<button type="button" onclick="doDeleteProfileImage({$member_info->member_srl});">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="p_image">
<input type="file" name="profile_image" value="" />
<a href="#" onclick="doUploadProfileImage();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->profile_image_max_width} : {$member_config->profile_image_max_width}px, {$lang->profile_image_max_height} : {$member_config->profile_image_max_height}px</p>
</li>
<!--@end-->
<!--@if($member_config->image_name == 'Y')-->
<li><label for="p_image" class="db fb al">{$lang->image_name}</label>
<!--@if($member_info->image_name->src)-->
<div id="p_image">
<div><img src="{$member_info->image_name->src}" border="0" alt="image_name" /></div>
<button type="button" onclick="doDeleteImageName({$member_info->member_srl});">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="p_image">
<input type="file" name="image_name" value="" />
<a href="#" onclick="doUploadImageName();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->image_name_max_width} : {$member_config->image_name_max_width}px, {$lang->image_name_max_height} : {$member_config->image_name_max_height}px</p>
</li>
<!--@end-->
<!--@if($member_config->image_mark == 'Y')-->
<li><label for="image_mark" class="db fb al">{$lang->image_mark}</label>
<!--@if($member_info->image_mark->src)-->
<div id="image_mark">
<img src="{$member_info->image_mark->src}" border="0" alt="image_mark" />
<button type="button" onclick="doDeleteImageMark({$member_info->member_srl});return false;">{$lang->cmd_delete}</button>
</div>
<!--@end-->
<div id="image_mark">
<input type="file" name="image_mark" value="" />
<a href="#" onclick="doUploadImageMark();return false;" class="bn"><span>{$lang->cmd_registration}</span></a>
</div>
<p style="color:#666">{$lang->image_mark_max_width} : {$member_config->image_mark_max_width}px, {$lang->image_mark_max_height} : {$member_config->image_mark_max_height}px</p>
</li>
<!--@end-->
<li><label for="hpage" class="db fb al">{$lang->homepage}</label><input type="text" id="hpage" name="homepage" value="{htmlspecialchars($member_info->homepage)}" class="itx" /> <p style="color:#666">{$lang->about_homepage}</p></li>
<li><label for="bpage" class="db fb al">{$lang->blog}</label><input type="text" id="bpage" name="blog" value="{htmlspecialchars($member_info->blog)}" class="itx" /> <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="{$member_info->birthday}" /><p style="color:#666">{$lang->about_birthday}</p></li>
<li><label for="mailing" class="db fb al">{$lang->allow_mailing}</label><input id="mailing" type="checkbox" name="allow_mailing" value="Y" class="checkbox" <!--@if($member_info->allow_mailing!='N')-->checked="checked"<!--@end--> /> <p style="color:#666">{$lang->about_allow_mailing}</p></li>
<!--@if($member_config->signature != 'N')-->
<li><label for="signature" class="db fb al">{$lang->signature}</label><textarea name="signature" rows="8" cols="42" class="itxx" value=""></textarea></li>
<!--@end-->
</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}" rows="8" cols="42" 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}"></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" 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" value="{$lang->cmd_registration}" class="bn"/>
<a href="{getUrl('act','dispMemberInfo','member_srl','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
</div>
</form>
</div>