diff --git a/modules/member/lang/en.php b/modules/member/lang/en.php
index acabc9b6b..8cd43b802 100644
--- a/modules/member/lang/en.php
+++ b/modules/member/lang/en.php
@@ -51,6 +51,8 @@ $lang->group_image_mark_max_width = 'Max Width';
$lang->group_image_mark_max_height = 'Max Height';
$lang->signature_max_height = 'Max Signature Height';
$lang->enable_join = 'Accept New Members';
+$lang->enable_join_only_with_url_key = 'Only with valid URL key';
+$lang->enable_join_url_key = 'URL Key';
$lang->enable_confirm = 'Email Activation';
$lang->enable_find_account_question = 'Account recovery using question/answer';
$lang->enable_ssl = 'Enable SSL';
@@ -236,7 +238,7 @@ $lang->about_active = 'You have to check on active items to show on signup form.
$lang->about_emailhost_check = 'You can limit new member\'s e-mail address providers. You can allow or prohibit some e-mail hosts (eg.: naver.com, gmail.com).
If the list is empty, all e-mail hosts will be allowed.';
$lang->about_form_description = 'If you enter description in this form, it will be displayed on join form.';
$lang->about_required = 'Check this to make it mandatory item when signing up.';
-$lang->about_enable_join = 'Please check this if you want to allow new members to sign up your site.';
+$lang->about_enable_join = 'Please check if you want to accept new members. If you require a URL key, only those who visit with the corresponding string in the URL will be able to join.';
$lang->about_enable_confirm = 'An activation email will be sent to new members. They must click a link in the email to complete the sign up process.';
$lang->about_enable_find_account_question = 'Check if you want to allow members to recover their accounts using a security question and answer.';
$lang->about_enable_ssl = 'Personal information from Sign up/Modify Member Info/Sign in can be sent as SSL(https) mode if server provides SSL service.';
diff --git a/modules/member/lang/ko.php b/modules/member/lang/ko.php
index 55584b433..e52c61481 100644
--- a/modules/member/lang/ko.php
+++ b/modules/member/lang/ko.php
@@ -51,6 +51,8 @@ $lang->group_image_mark_max_width = '가로 제한 길이';
$lang->group_image_mark_max_height = '세로 제한 길이';
$lang->signature_max_height = '서명 높이 제한';
$lang->enable_join = '회원 가입 허가';
+$lang->enable_join_only_with_url_key = 'URL 키가 일치하는 경우에만 허가';
+$lang->enable_join_url_key = 'URL 키';
$lang->enable_confirm = '메일 인증 사용';
$lang->enable_find_account_question = '질문/답변 인증 사용';
$lang->enable_ssl = 'SSL 기능 사용';
@@ -243,7 +245,7 @@ $lang->about_active = '활성 항목에 체크를 해야 가입시 정상적으
$lang->about_emailhost_check = '특정 도메인에 소속된 이메일 주소로만 가입할 수 있도록 하거나, 특정 도메인을 금지할 수 있습니다. (예: naver.com, gmail.com)
아무 것도 입력하지 않으면 이메일 주소를 제한하지 않습니다.';
$lang->about_form_description = '설명란에 입력을 하면 가입시 표시가 됩니다.';
$lang->about_required = '체크하면 회원가입시 필수항목으로 입력하도록 됩니다.';
-$lang->about_enable_join = '체크하면 회원가입을 할 수 있습니다.';
+$lang->about_enable_join = '회원 가입을 받을지 선택합니다. URL 키를 사용할 경우, 일치하는 문자열이 포함된 URL로 접속해야 가입할 수 있게 됩니다.';
$lang->about_enable_confirm = '입력된 메일 주소로 인증 메일을 보내 회원 가입을 확인합니다. 가입자가 인증 메일의 링크를 클릭해야 정상적으로 로그인이 가능해집니다.';
$lang->about_enable_find_account_question = '질문/답변을 통한 비밀번호 찾기를 허용합니다. 허용하지 않을 경우 메일을 통한 비밀번호 리셋만 허용됩니다.';
$lang->about_enable_ssl = '서버에서 보안접속(SSL) 지원이 될 경우 회원가입, 정보수정, 로그인 등의 개인정보가 서버로 보내질 때 SSL(https)을 이용하도록 할 수 있습니다.';
diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php
index 3761d3160..3aa42a6f4 100644
--- a/modules/member/member.admin.controller.php
+++ b/modules/member/member.admin.controller.php
@@ -223,6 +223,7 @@ class memberAdminController extends member
{
$args = Context::gets(
'enable_join',
+ 'enable_join_key',
'enable_confirm',
'authmail_expires',
'authmail_expires_unit',
@@ -238,6 +239,16 @@ class memberAdminController extends member
'member_profile_view'
);
+ if ($args->enable_join === 'KEY')
+ {
+ $args->enable_join = 'N';
+ $args->enable_join_key = escape(trim(utf8_normalize_spaces(rawurldecode($args->enable_join_key))));
+ }
+ else
+ {
+ $args->enable_join_key = null;
+ }
+
$args->authmail_expires = max(0, intval($args->authmail_expires));
if(!$args->authmail_expires)
{
diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php
index 6944d12d1..5f87d7b98 100644
--- a/modules/member/member.controller.php
+++ b/modules/member/member.controller.php
@@ -625,9 +625,12 @@ class memberController extends member
if(!$trigger_output->toBool ()) return $trigger_output;
// Check if an administrator allows a membership
- if($config->enable_join !== 'Y' || !$config->signupForm)
+ if ($config->enable_join !== 'Y' || !$config->signupForm)
{
- throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
+ if (empty($config->enable_join_key) || !isset($_SESSION['signup_allowed']) || !$_SESSION['signup_allowed'])
+ {
+ throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
+ }
}
// Check if the user accept the license terms (only if terms exist)
diff --git a/modules/member/member.view.php b/modules/member/member.view.php
index daf6c8b0d..273ef8af1 100644
--- a/modules/member/member.view.php
+++ b/modules/member/member.view.php
@@ -211,8 +211,28 @@ class memberView extends member
// call a trigger (before)
$trigger_output = ModuleHandler::triggerCall('member.dispMemberSignUpForm', 'before', $member_config);
if(!$trigger_output->toBool()) return $trigger_output;
+
// Error appears if the member is not allowed to join
- if($member_config->enable_join != 'Y') throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
+ if ($member_config->enable_join !== 'Y')
+ {
+ if (!empty($member_config->enable_join_key))
+ {
+ if (strpos(escape(rawurldecode(\RX_REQUEST_URL)), $member_config->enable_join_key) !== false)
+ {
+ $_SESSION['signup_allowed'] = true;
+ }
+ else
+ {
+ $_SESSION['signup_allowed'] = false;
+ throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
+ }
+ }
+ else
+ {
+ $_SESSION['signup_allowed'] = false;
+ throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
+ }
+ }
$formTags = getAdminView('member')->_getMemberInputTag();
Context::set('formTags', $formTags);
diff --git a/modules/member/tpl/default_config.html b/modules/member/tpl/default_config.html
index a561ec949..fea433922 100644
--- a/modules/member/tpl/default_config.html
+++ b/modules/member/tpl/default_config.html
@@ -9,7 +9,10 @@
{$lang->about_enable_join}