mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-04-02 01:52:10 +09:00
Add multiple member agreements
- 가입 약관, 개인정보처리방침 등을 5개까지 추가할 수 있음 - 약관마다 각각 필수 또는 선택을 지정할 수 있음 - 모든 필수 약관에 동의해야 가입 가능 - 기본 스킨은 수정함. 서드파티 스킨에는 여전히 약관 1개만 표시됨 - 서드파티 스킨 사용시 동의 하나만 선택해도 전체 동의로 간주
This commit is contained in:
parent
20f924678a
commit
11c04c5a26
19 changed files with 251 additions and 72 deletions
|
|
@ -8,6 +8,11 @@ $(function() {
|
|||
|
||||
"use strict";
|
||||
|
||||
// Disable debug panel?
|
||||
if ($('body').hasClass("disable_debug_panel")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Find debug panel elements.
|
||||
var panel = $("#rhymix_debug_panel");
|
||||
var button = $("#rhymix_debug_button").show();
|
||||
|
|
|
|||
|
|
@ -62,6 +62,8 @@
|
|||
<action name="dispMemberAdminInsert" type="view" menu_name="userList" />
|
||||
<action name="dispMemberAdminConfig" type="view" menu_name="userSetting" menu_index="true" />
|
||||
<action name="dispMemberAdminFeaturesConfig" type="view" menu_name="userSetting" />
|
||||
<action name="dispMemberAdminAgreementsConfig" type="view" menu_name="userSetting" />
|
||||
<action name="dispMemberAdminAgreementsEdit" type="view" menu_name="userSetting" />
|
||||
<action name="dispMemberAdminSignUpConfig" type="view" menu_name="userSetting" />
|
||||
<action name="dispMemberAdminLoginConfig" type="view" menu_name="userSetting" />
|
||||
<action name="dispMemberAdminDesignConfig" type="view" menu_name="userSetting" />
|
||||
|
|
@ -78,6 +80,7 @@
|
|||
<action name="procMemberAdminSelectedMemberManage" type="controller" ruleset="updateSeletecdMemberInfo" />
|
||||
<action name="procMemberAdminInsertDefaultConfig" type="controller" ruleset="insertDefaultConfig" />
|
||||
<action name="procMemberAdminInsertFeaturesConfig" type="controller" />
|
||||
<action name="procMemberAdminInsertAgreementsConfig" type="controller" />
|
||||
<action name="procMemberAdminInsertSignupConfig" type="controller" />
|
||||
<action name="procMemberAdminInsertLoginConfig" type="controller" />
|
||||
<action name="procMemberAdminInsertDesignConfig" type="controller" />
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ $lang->member = 'Member';
|
|||
$lang->site = 'Site';
|
||||
$lang->member_default_config = 'Basic Settings';
|
||||
$lang->member_features_config = 'Features';
|
||||
$lang->member_agreements_config = 'Terms of Service';
|
||||
$lang->member_default_info = 'Basic Info';
|
||||
$lang->member_extend_info = 'Additional Info';
|
||||
$lang->default_group_1 = 'Associate Member';
|
||||
|
|
@ -158,7 +159,7 @@ $lang->msg_not_uploaded_profile_image = 'Profile image could not be registered.'
|
|||
$lang->msg_not_uploaded_image_name = 'Image name could not be registered.';
|
||||
$lang->msg_not_uploaded_image_mark = 'Image mark could not be registered.';
|
||||
$lang->msg_not_uploaded_group_image_mark = 'Group image mark could not be registered.';
|
||||
$lang->msg_accept_agreement = 'You have to accept the agreement.';
|
||||
$lang->msg_accept_agreement = 'You must accept all required agreements in order to sign up.';
|
||||
$lang->msg_user_denied = 'You have entered a prohibited ID.';
|
||||
$lang->msg_user_not_confirmed = 'Your account is not activated yet. Please check your email.';
|
||||
$lang->msg_user_limited = 'You have entered an ID that cannot be used before %s';
|
||||
|
|
@ -216,7 +217,7 @@ $lang->about_image_mark = 'Members will be able to use image mark in front of th
|
|||
$lang->about_group_image_mark = 'You may use group marks shown before their names';
|
||||
$lang->about_profile_image = 'Members will be able to use profile images';
|
||||
$lang->about_signature_max_height = 'You can limit the signature max height. Set this as 0 or leave it blank not to limit it.';
|
||||
$lang->about_accept_agreement = 'I have read the agreement and agree with it';
|
||||
$lang->about_accept_agreement = 'I have read the above and agree with it.';
|
||||
$lang->about_member_default = 'It will be set as the default group on sign up';
|
||||
$lang->about_find_member_account = 'Please input the email address you have entered during the registration and we will send your account info to this email address.';
|
||||
$lang->about_ssl_port = 'Please enter if you are using non-default SSL port';
|
||||
|
|
@ -257,8 +258,12 @@ $lang->about_change_user_group = 'Resets the selected group of memebers.';
|
|||
$lang->about_send_message = 'Send a message to the member about this. If you don\'t write a message, it is not sent.';
|
||||
$lang->cmd_allowed = 'Allowed';
|
||||
$lang->cmd_prohibited = 'Prohibited';
|
||||
$lang->cmd_agreement_title = 'Title';
|
||||
$lang->cmd_agreement_content = 'Content';
|
||||
$lang->cmd_agreement_type = 'Agreement required';
|
||||
$lang->cmd_required = 'Required';
|
||||
$lang->cmd_optional = 'Optional';
|
||||
$lang->cmd_disabled = 'Disabled';
|
||||
$lang->cmd_image_max_width = 'Max Width';
|
||||
$lang->cmd_image_max_height = 'Max Height';
|
||||
$lang->cmd_input_extend_form = 'User Defined Input';
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ $lang->member = '회원';
|
|||
$lang->site = '사이트';
|
||||
$lang->member_default_config = '기본 설정';
|
||||
$lang->member_features_config = '기능 설정';
|
||||
$lang->member_agreements_config = '약관 설정';
|
||||
$lang->member_default_info = '기본 정보';
|
||||
$lang->member_extend_info = '추가 정보';
|
||||
$lang->default_group_1 = '준회원';
|
||||
|
|
@ -166,7 +167,7 @@ $lang->msg_not_uploaded_profile_image = '프로필 이미지를 등록할 수
|
|||
$lang->msg_not_uploaded_image_name = '이미지 이름을 등록할 수 없습니다.';
|
||||
$lang->msg_not_uploaded_image_mark = '이미지 마크를 등록할 수 없습니다.';
|
||||
$lang->msg_not_uploaded_group_image_mark = '그룹 이미지 마크를 등록할 수 없습니다.';
|
||||
$lang->msg_accept_agreement = '약관에 동의해야 합니다.';
|
||||
$lang->msg_accept_agreement = '필수 약관에 모두 동의해야 가입하실 수 있습니다.';
|
||||
$lang->msg_user_denied = '입력한 아이디의 사용이 중지 되었습니다.';
|
||||
$lang->msg_user_not_confirmed = '아직 메일 인증이 이루어지지 않았습니다. 메일을 확인해 주세요.';
|
||||
$lang->msg_user_limited = '입력한 아이디는 %s 까지 사용하실 수 없습니다.';
|
||||
|
|
@ -224,7 +225,7 @@ $lang->about_image_mark = '회원의 이름 앞에 마크를 달 수 있습니
|
|||
$lang->about_group_image_mark = '회원의 이름 앞에 그룹 마크를 달 수 있습니다.';
|
||||
$lang->about_profile_image = '회원의 프로필 이미지를 사용할 수 있게 합니다.';
|
||||
$lang->about_signature_max_height = '서명란의 최대 높이를 제한할 수 있습니다. (0 또는 비워두면 제한하지 않습니다.)';
|
||||
$lang->about_accept_agreement = '약관을 모두 읽었으며 동의합니다.';
|
||||
$lang->about_accept_agreement = '위의 내용을 모두 읽었으며 동의합니다.';
|
||||
$lang->about_member_default = '회원 가입을 한 사람이 최초에 속하는 그룹을 말합니다.';
|
||||
$lang->about_find_member_account = '아이디/비밀번호는 가입시 등록한 메일 주소로 알려드립니다. 가입할 때 등록한 메일 주소를 입력하고 "ID/PW 찾기" 버튼을 클릭해주세요.<br />';
|
||||
$lang->about_temp_password = '임시 비밀번호가 정상적으로 발급되었습니다.<br />로그인 후 반드시 비밀번호를 변경하세요.<br />';
|
||||
|
|
@ -271,8 +272,12 @@ $lang->about_change_user_group = '선택한 회원의 그룹을 다시 설정.';
|
|||
$lang->about_send_message = '회원에게 쪽지를 발송해서 이 사실을 알립니다. 작성하지 않으면 발송하지 않습니다.';
|
||||
$lang->cmd_allowed = '허가';
|
||||
$lang->cmd_prohibited = '제한';
|
||||
$lang->cmd_agreement_title = '약관 제목';
|
||||
$lang->cmd_agreement_content = '약관 내용';
|
||||
$lang->cmd_agreement_type = '동의 필수 여부';
|
||||
$lang->cmd_required = '필수';
|
||||
$lang->cmd_optional = '선택';
|
||||
$lang->cmd_disabled = '사용 안 함';
|
||||
$lang->cmd_image_max_width = '너비 제한';
|
||||
$lang->cmd_image_max_height = '높이 제한';
|
||||
$lang->cmd_input_extend_form = '회원 정의 입력';
|
||||
|
|
|
|||
|
|
@ -14,17 +14,22 @@
|
|||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/default/modify_info/1" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<!--@if(!$is_logged && $member_config->agreement)-->
|
||||
<div class="agreement">
|
||||
<div class="agreement" loop="$member_config->agreements => $i, $agreement" cond="$agreement->type !== 'disabled'">
|
||||
<div class="title">
|
||||
{$agreement->title}
|
||||
<block cond="$agreement->type === 'required'">({$lang->cmd_required})</block>
|
||||
<block cond="$agreement->type === 'optional'">({$lang->cmd_optional})</block>
|
||||
</div>
|
||||
<div class="text">
|
||||
{$member_config->agreement}
|
||||
{$agreement->content}
|
||||
</div>
|
||||
<div class="confirm">
|
||||
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
|
||||
<label for="accept_agree">{$lang->about_accept_agreement}</label>
|
||||
<label for="accept_agreement_{$i}">
|
||||
<input type="checkbox" name="accept_agreement[{$i}]" value="Y" id="accept_agreement_{$i}" />
|
||||
{$lang->about_accept_agreement}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
<ul>
|
||||
<li>
|
||||
<label for="{$identifierForm->name}">{$identifierForm->title} <em style="color:red">*</em></label>
|
||||
|
|
|
|||
|
|
@ -17,13 +17,18 @@
|
|||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="agreement" cond="$member_config->agreement">
|
||||
<div class="agreement" loop="$member_config->agreements => $i, $agreement" cond="$agreement->type !== 'disabled'">
|
||||
<div class="title">
|
||||
{$agreement->title}
|
||||
<block cond="$agreement->type === 'required'">({$lang->cmd_required})</block>
|
||||
<block cond="$agreement->type === 'optional'">({$lang->cmd_optional})</block>
|
||||
</div>
|
||||
<div class="text">
|
||||
{$member_config->agreement}
|
||||
{$agreement->content}
|
||||
</div>
|
||||
<div class="confirm">
|
||||
<label for="accept_agree">
|
||||
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
|
||||
<label for="accept_agreement_{$i}">
|
||||
<input type="checkbox" name="accept_agreement[{$i}]" value="Y" id="accept_agreement_{$i}" />
|
||||
{$lang->about_accept_agreement}
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -244,6 +244,41 @@ class memberAdminController extends member
|
|||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMemberAdminFeaturesConfig');
|
||||
$this->setRedirectUrl($returnUrl);
|
||||
}
|
||||
|
||||
public function procMemberAdminInsertAgreementsConfig()
|
||||
{
|
||||
$config = new stdClass;
|
||||
$config->agreements = array();
|
||||
|
||||
$args = Context::getRequestVars();
|
||||
for ($i = 1; $i < 20; $i++)
|
||||
{
|
||||
if (isset($args->{'agreement_' . $i . '_type'}))
|
||||
{
|
||||
$agreement = new stdClass;
|
||||
$agreement->title = escape(utf8_trim($args->{'agreement_' . $i . '_title'}));
|
||||
$agreement->content = $args->{'agreement_' . $i . '_content'};
|
||||
$agreement->type = $args->{'agreement_' . $i . '_type'};
|
||||
if (!in_array($agreement->type, array('required', 'optional', 'disabled')))
|
||||
{
|
||||
$agreement->type = 'disabled';
|
||||
}
|
||||
$config->agreements[$i] = $agreement;
|
||||
}
|
||||
}
|
||||
|
||||
// for compatibility with older versions
|
||||
$config->agreement = $config->agreements[1]->content;
|
||||
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->updateModuleConfig('member', $config);
|
||||
|
||||
// default setting end
|
||||
$this->setMessage('success_updated');
|
||||
|
||||
$returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispMemberAdminAgreementsConfig');
|
||||
$this->setRedirectUrl($returnUrl);
|
||||
}
|
||||
|
||||
public function procMemberAdminInsertSignupConfig()
|
||||
{
|
||||
|
|
@ -254,7 +289,6 @@ class memberAdminController extends member
|
|||
'limit_day',
|
||||
'limit_day_description',
|
||||
'emailhost_check',
|
||||
'agreement',
|
||||
'redirect_url',
|
||||
'profile_image', 'profile_image_max_width', 'profile_image_max_height',
|
||||
'image_name', 'image_name_max_width', 'image_name_max_height',
|
||||
|
|
@ -268,12 +302,6 @@ class memberAdminController extends member
|
|||
|
||||
$args->limit_day = (int)$args->limit_day;
|
||||
if($args->emailhost_check != 'allowed' && $args->emailhost_check != 'prohibited') $args->emailhost_check == 'allowed';
|
||||
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($args->redirect_url)
|
||||
{
|
||||
|
|
@ -353,18 +381,9 @@ class memberAdminController extends member
|
|||
$args->signupForm = $signupForm;
|
||||
|
||||
// create Ruleset
|
||||
$this->_createSignupRuleset($signupForm, $args->agreement);
|
||||
$this->_createSignupRuleset($signupForm);
|
||||
$this->_createLoginRuleset($args->identifier);
|
||||
|
||||
// check agreement value exist
|
||||
if($args->agreement)
|
||||
{
|
||||
$agreement_file = _XE_PATH_.'files/member_extra_info/agreement_' . Context::get('lang_type') . '.txt';
|
||||
$output = FileHandler::writeFile($agreement_file, $args->agreement);
|
||||
|
||||
unset($args->agreement);
|
||||
}
|
||||
|
||||
$output = $oModuleController->updateModuleConfig('member', $args);
|
||||
|
||||
// default setting end
|
||||
|
|
@ -517,10 +536,9 @@ class memberAdminController extends member
|
|||
/**
|
||||
* Create ruleset file of signup
|
||||
* @param object $signupForm (user define signup form)
|
||||
* @param string $agreement
|
||||
* @return void
|
||||
*/
|
||||
function _createSignupRuleset($signupForm, $agreement = null){
|
||||
function _createSignupRuleset($signupForm){
|
||||
$xml_file = './files/ruleset/insertMember.xml';
|
||||
$buff = '<?xml version="1.0" encoding="utf-8"?>' . PHP_EOL.
|
||||
'<ruleset version="1.5.0">' . PHP_EOL.
|
||||
|
|
@ -531,10 +549,6 @@ class memberAdminController extends member
|
|||
|
||||
$fields = array();
|
||||
|
||||
if ($agreement)
|
||||
{
|
||||
$fields[] = '<field name="accept_agreement"><if test="$act == \'procMemberInsert\'" attr="required" value="true" /></field>';
|
||||
}
|
||||
foreach($signupForm as $formInfo)
|
||||
{
|
||||
if($formInfo->required || $formInfo->mustRequired)
|
||||
|
|
|
|||
|
|
@ -147,6 +147,46 @@ class memberAdminView extends member
|
|||
$this->setTemplateFile('features_config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the agreements config.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dispMemberAdminAgreementsConfig()
|
||||
{
|
||||
$this->setTemplateFile('agreements_config');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the agreements edit form.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function dispMemberAdminAgreementsEdit()
|
||||
{
|
||||
$agreement_id = intval(Context::get('id'));
|
||||
Context::set('agreement_id', $agreement_id);
|
||||
Context::set('agreement_content', getModel('member')->getMemberConfig()->agreements[$agreement_id]->content);
|
||||
Context::addBodyClass('disable_debug_panel');
|
||||
|
||||
$oEditorModel = getModel('editor');
|
||||
$option = $oEditorModel->getEditorConfig();
|
||||
$option->primary_key_name = 'agreement_id';
|
||||
$option->content_key_name = 'agreement_content';
|
||||
$option->allow_fileupload = FALSE;
|
||||
$option->enable_autosave = FALSE;
|
||||
$option->enable_default_component = TRUE;
|
||||
$option->enable_component = FALSE;
|
||||
$option->height = 300;
|
||||
$option->editor_focus = 'N';
|
||||
$editor = $oEditorModel->getEditor($logged_info->member_srl, $option);
|
||||
Context::set('editor', $editor);
|
||||
|
||||
$this->setLayoutPath('./common/tpl/');
|
||||
$this->setLayoutFile("default_layout");
|
||||
$this->setTemplateFile('agreements_edit');
|
||||
}
|
||||
|
||||
public function dispMemberAdminSignUpConfig()
|
||||
{
|
||||
$config = $this->memberConfig;
|
||||
|
|
|
|||
|
|
@ -213,12 +213,10 @@ class member extends ModuleObject {
|
|||
$oModuleModel = getModel('module');
|
||||
$config = $oModuleModel->getModuleConfig('member');
|
||||
// check signup form ordering info
|
||||
if(!$config->signupForm) return true;
|
||||
|
||||
// check agreement field exist
|
||||
if($config->agreement && $config->agreement !== memberModel::_getAgreement())
|
||||
if(!$config->signupForm || !is_array($config->signupForm)) return true;
|
||||
foreach($config->signupForm as $signupItem)
|
||||
{
|
||||
return true;
|
||||
if($signupItem->name === 'find_account_question') return true;
|
||||
}
|
||||
|
||||
if($config->skin)
|
||||
|
|
@ -340,24 +338,24 @@ class member extends ModuleObject {
|
|||
$config = $oModuleModel->getModuleConfig('member');
|
||||
$oModuleController = getController('module');
|
||||
|
||||
// check agreement value exist
|
||||
if($config->agreement && $config->agreement !== memberModel::_getAgreement())
|
||||
{
|
||||
$agreement_file = _XE_PATH_.'files/member_extra_info/agreement_' . Context::get('lang_type') . '.txt';
|
||||
$output = FileHandler::writeFile($agreement_file, $config->agreement);
|
||||
$config->agreement = NULL;
|
||||
$output = $oModuleController->updateModuleConfig('member', $config);
|
||||
}
|
||||
|
||||
$oMemberAdminController = getAdminController('member');
|
||||
// check signup form ordering info
|
||||
if(!$config->signupForm || !is_array($config->signupForm))
|
||||
{
|
||||
$identifier = 'user_id';
|
||||
$config->signupForm = $oMemberAdminController->createSignupForm($identifier);
|
||||
$config->identifier = $identifier;
|
||||
$config->identifier = 'user_id';
|
||||
$config->signupForm = $oMemberAdminController->createSignupForm($config->identifier);
|
||||
$output = $oModuleController->updateModuleConfig('member', $config);
|
||||
}
|
||||
foreach($config->signupForm as $signupItem)
|
||||
{
|
||||
if($signupItem->name === 'find_account_question')
|
||||
{
|
||||
$config->identifier = $config->identifier ?: 'user_id';
|
||||
$config->signupForm = $oMemberAdminController->createSignupForm($config->identifier);
|
||||
$output = $oModuleController->updateModuleConfig('member', $config);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if($config->skin)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -583,8 +583,16 @@ class memberController extends member
|
|||
if(!$trigger_output->toBool ()) return $trigger_output;
|
||||
// Check if an administrator allows a membership
|
||||
if($config->enable_join != 'Y') return $this->stop ('msg_signup_disabled');
|
||||
|
||||
// Check if the user accept the license terms (only if terms exist)
|
||||
if($config->agreement && Context::get('accept_agreement')!='Y') return $this->stop('msg_accept_agreement');
|
||||
$accept_agreement = Context::get('accept_agreement');
|
||||
foreach($config->agreements as $i => $agreement)
|
||||
{
|
||||
if($agreement->type === 'required' && $accept_agreement !== 'Y' && $accept_agreement[$i] !== 'Y')
|
||||
{
|
||||
return $this->stop('msg_accept_agreement');
|
||||
}
|
||||
}
|
||||
|
||||
// Extract the necessary information in advance
|
||||
$getVars = array();
|
||||
|
|
|
|||
|
|
@ -50,7 +50,14 @@ class memberModel extends member
|
|||
}
|
||||
|
||||
// Get terms of user
|
||||
$config->agreement = memberModel::_getAgreement();
|
||||
if(!$config->agreements)
|
||||
{
|
||||
$config->agreement = memberModel::_getAgreement();
|
||||
$config->agreements[1] = new stdClass;
|
||||
$config->agreements[1]->title = lang('agreement');
|
||||
$config->agreements[1]->content = $config->agreement;
|
||||
$config->agreements[1]->type = 'required';
|
||||
}
|
||||
|
||||
if(!$config->webmaster_name) $config->webmaster_name = 'webmaster';
|
||||
if(!$config->image_name_max_width) $config->image_name_max_width = 90;
|
||||
|
|
@ -86,6 +93,9 @@ class memberModel extends member
|
|||
return $config;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
*/
|
||||
function _getAgreement()
|
||||
{
|
||||
$agreement_file = _XE_PATH_.'files/member_extra_info/agreement_' . Context::get('lang_type') . '.txt';
|
||||
|
|
|
|||
|
|
@ -318,6 +318,7 @@
|
|||
.xm .signin #warning{margin-right:-14px}
|
||||
.xm .signin #warning>p{margin:10px 0}
|
||||
.xm .agreement{border:1px solid #ddd;padding:15px 15px 10px 15px;border-radius:5px;background:#f8f8f8;margin-bottom:15px}
|
||||
.xm .agreement>.title{padding: 0 0 10px 0;margin:0 0 10px 0;border-bottom:1px dotted #ccc; font-size:16px;font-weight:bold}
|
||||
.xm .agreement>.text{max-height:200px;overflow:auto}
|
||||
.xm .agreement>.confirm{padding:10px 0 0 0;margin:10px 0 0 0;border-top:1px dotted #ccc}
|
||||
@media all and (max-width:480px){.xm .signin{margin:0;width:100%}}
|
||||
|
|
|
|||
|
|
@ -11,13 +11,18 @@
|
|||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="agreement" cond="$member_config->agreement">
|
||||
<div class="agreement" loop="$member_config->agreements => $i, $agreement" cond="$agreement->type !== 'disabled'">
|
||||
<div class="title">
|
||||
{$agreement->title}
|
||||
<block cond="$agreement->type === 'required'">({$lang->cmd_required})</block>
|
||||
<block cond="$agreement->type === 'optional'">({$lang->cmd_optional})</block>
|
||||
</div>
|
||||
<div class="text">
|
||||
{$member_config->agreement}
|
||||
{$agreement->content}
|
||||
</div>
|
||||
<div class="confirm">
|
||||
<label for="accept_agree">
|
||||
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
|
||||
<label for="accept_agreement_{$i}">
|
||||
<input type="checkbox" name="accept_agreement[{$i}]" value="Y" id="accept_agreement_{$i}" />
|
||||
{$lang->about_accept_agreement}
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -16,13 +16,18 @@
|
|||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="agreement" cond="$member_config->agreement">
|
||||
<div class="agreement" loop="$member_config->agreements => $i, $agreement" cond="$agreement->type !== 'disabled'">
|
||||
<div class="title">
|
||||
{$agreement->title}
|
||||
<block cond="$agreement->type === 'required'">({$lang->cmd_required})</block>
|
||||
<block cond="$agreement->type === 'optional'">({$lang->cmd_optional})</block>
|
||||
</div>
|
||||
<div class="text">
|
||||
{$member_config->agreement}
|
||||
{$agreement->content}
|
||||
</div>
|
||||
<div class="confirm">
|
||||
<label for="accept_agree">
|
||||
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
|
||||
<label for="accept_agreement_{$i}">
|
||||
<input type="checkbox" name="accept_agreement[{$i}]" value="Y" id="accept_agreement_{$i}" />
|
||||
{$lang->about_accept_agreement}
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
|||
39
modules/member/tpl/agreements_config.html
Normal file
39
modules/member/tpl/agreements_config.html
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<include target="header.html" />
|
||||
<load target="js/default_config.js" />
|
||||
<form action="./" class="x_form-horizontal" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberAdminInsertAgreementsConfig" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'module', 'admin', 'act', $act)}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/tpl/1" />
|
||||
|
||||
<!--@for($i = 1; $i <= 5; $i++)-->
|
||||
<section class="section">
|
||||
<h2>{$lang->agreement} {$i}</h2>
|
||||
<div class="x_control-group">
|
||||
<div class="x_control-label" for="agreement_{$i}_title">{$lang->cmd_agreement_title}</div>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="agreement_{$i}_title" id="agreement_{$i}_title" value="{$config->agreements[$i]->title}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<div class="x_control-label">{$lang->cmd_agreement_content}</div>
|
||||
<div class="x_controls">
|
||||
<input type="hidden" name="agreement_{$i}_content" id="agreement_{$i}_content" value="{escape($config->agreements[$i]->content)}" />
|
||||
<iframe id="agreement_{$i}_iframe" class="agreement_iframe" src="{getUrl('act', 'dispMemberAdminAgreementsEdit', 'id', $i)}"></iframe>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<div class="x_control-label">{$lang->cmd_agreement_type}</div>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="agreement_{$i}_required"><input type="radio" name="agreement_{$i}_type" id="agreement_{$i}_required" value="required" checked="checked"|cond="$config->agreements[$i]->type === 'required'" /> {$lang->cmd_required}</label>
|
||||
<label class="x_inline" for="agreement_{$i}_optional"><input type="radio" name="agreement_{$i}_type" id="agreement_{$i}_optional" value="optional" checked="checked"|cond="$config->agreements[$i]->type === 'optional'" /> {$lang->cmd_optional}</label>
|
||||
<label class="x_inline" for="agreement_{$i}_disabled"><input type="radio" name="agreement_{$i}_type" id="agreement_{$i}_disabled" value="disabled" checked="checked"|cond="$config->agreements[$i]->type === 'disabled' || !$config->agreements[$i]->type" /> {$lang->cmd_disabled}</label>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<!--@end-->
|
||||
|
||||
<div class="btnArea x_clearfix">
|
||||
<span class="x_pull-right"><input class="x_btn x_btn-primary" type="submit" value="{$lang->cmd_save}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
28
modules/member/tpl/agreements_edit.html
Normal file
28
modules/member/tpl/agreements_edit.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<script>
|
||||
$(function() {
|
||||
var editor;
|
||||
var parent = window.opener ? window.opener : window.parent;
|
||||
CKEDITOR.on('instanceReady', function(evt) {
|
||||
editor = evt.editor;
|
||||
editor.on("resize", function(evt){
|
||||
var height = evt.data.outerHeight;
|
||||
$("#agreement_{$agreement_id}_iframe", parent.document).height(height);
|
||||
});
|
||||
editor.on("change", function() {
|
||||
var content = editor.getData();
|
||||
$("#agreement_{$agreement_id}_content", parent.document).val(content);
|
||||
});
|
||||
$("#agreement_{$agreement_id}_iframe", parent.document).height($(".cke_chrome").first().parent().height());
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<style>
|
||||
body { margin: 0; }
|
||||
</style>
|
||||
|
||||
<form>
|
||||
<input type="hidden" name="agreement_id" id="agreement_id" value="{$agreement_id}" />
|
||||
<input type="hidden" name="agreement_content" id="agreement_content" value="{escape($agreement_content)}" />
|
||||
{$editor}
|
||||
</form>
|
||||
9
modules/member/tpl/css/config.css
Normal file
9
modules/member/tpl/css/config.css
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
.agreement_iframe {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
margin-bottom: -4px;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
height: 440px;
|
||||
}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
<load target="css/config.css" />
|
||||
<load target="js/config.js" />
|
||||
<div class="x_page-header">
|
||||
<h1>{$lang->cmd_member_config} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_member_config" target="_blank">{$lang->help}</a></h1>
|
||||
|
|
@ -8,6 +9,7 @@
|
|||
<ul class="x_nav x_nav-tabs">
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminConfig')}">{$lang->member_default_config}</a></li>
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminFeaturesConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminFeaturesConfig')}">{$lang->member_features_config}</a></li>
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminAgreementsConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminAgreementsConfig')}">{$lang->member_agreements_config}</a></li>
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminSignUpConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminSignUpConfig')}">{$lang->cmd_signup}</a></li>
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminLoginConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminLoginConfig')}">{$lang->cmd_login}</a></li>
|
||||
<li class="x_active"|cond="$act == 'dispMemberAdminDesignConfig'"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminDesignConfig')}">{$lang->cmd_set_design_info}</a></li>
|
||||
|
|
|
|||
|
|
@ -74,14 +74,6 @@
|
|||
<p class="x_help-inline">{$lang->about_redirect_url}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="agreement">{$lang->agreement}</label>
|
||||
<div class="x_controls">{$editor}</div>
|
||||
<style scoped>
|
||||
#smart_content,
|
||||
#smart_content>.tool{clear:none !important}
|
||||
</style>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<p class="x_control-label">{$lang->cmd_manage_form} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_faq_member_joinform" target="_blank">{$lang->help}</a></p>
|
||||
<div class="x_controls">
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue