diff --git a/modules/member/conf/module.xml b/modules/member/conf/module.xml index 9ef67b93a..42fbe8976 100644 --- a/modules/member/conf/module.xml +++ b/modules/member/conf/module.xml @@ -84,6 +84,7 @@ + diff --git a/modules/member/lang/lang.xml b/modules/member/lang/lang.xml index cca3c0a20..32998cba7 100644 --- a/modules/member/lang/lang.xml +++ b/modules/member/lang/lang.xml @@ -143,6 +143,22 @@ + + + + + + + + + + + + + + + + @@ -514,7 +530,6 @@ - @@ -1094,6 +1109,18 @@ + + + + + + + + + + + + @@ -1962,6 +1989,13 @@ + + 특정 이메일 제공자(hostname, 예: naver.com, gmail.com)만 허용하거나, 특정 이메일 제공자의 사용을 제한할 수 있습니다.]]> + You can set new member's e-mail address providers. You can allow or prohibit some e-mail hosts(eg.: naver.com, gmail.com).]]> + You can set new member's e-mail address providers. You can allow or prohibit some e-mail hosts(eg.: naver.com, gmail.com).]]> + You can set new member's e-mail address providers. You can allow or prohibit some e-mail hosts(eg.: naver.com, gmail.com).]]> + You can set new member's e-mail address providers. You can allow or prohibit some e-mail hosts(eg.: naver.com, gmail.com).]]> + @@ -2469,6 +2503,20 @@ + + + + + + + + + + + + + + @@ -2525,6 +2573,13 @@ + + %s개의 이메일 주소 제공자를 %s 합니다.]]> + %s %s e-mail address providers below.]]> + %s %s e-mail address providers below.]]> + %s %s e-mail address providers below.]]> + %s %s e-mail address providers below.]]> + %s개의 금지 아이디가 있습니다.]]> %s prohibited ID.]]> @@ -2629,6 +2684,13 @@ + + + + + + + @@ -2662,6 +2724,13 @@ + + + + + + + diff --git a/modules/member/member.admin.controller.php b/modules/member/member.admin.controller.php index 13140c91c..fe5560fbd 100644 --- a/modules/member/member.admin.controller.php +++ b/modules/member/member.admin.controller.php @@ -208,6 +208,7 @@ class memberAdminController extends member $args = Context::gets( 'limit_day', 'limit_day_description', + 'emailhost_check', 'agreement', 'redirect_url', 'profile_image', 'profile_image_max_width', 'profile_image_max_height', @@ -221,6 +222,7 @@ class memberAdminController extends member $all_args = Context::getRequestVars(); $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'; @@ -1016,6 +1018,44 @@ class memberAdminController extends member $this->setRedirectUrl($returnUrl); } + /** + * Add allowed or denied email hostnames + * @return void + */ + function procMemberAdminUpdateManagedEmailHosts() + { + $email_hosts = Context::get('email_hosts'); + + $mode = Context::get('mode'); + $mode = $mode ? $mode : 'insert'; + + if($mode == 'delete') + { + $output = $this->deleteManagedEmailHost($email_hosts); + if(!$output->toBool()) + { + return $output; + } + $msg_code = 'success_deleted'; + $this->setMessage($msg_code); + } + else + { + $email_hosts = preg_replace('/([^a-z0-9\.\-\_\n]*)/i','',$email_hosts); + $email_hosts = array_unique(explode("\n",$email_hosts."\n")); + $success_email_hosts = array(); + foreach($email_hosts as $val) + { + $val = trim($val); + if(!$val) continue; + $output = $this->insertManagedEmailHost($val, ''); + if($output->toBool()) $success_email_hosts[] = $val; + } + + $this->add('email_hosts', implode("\n",$success_email_hosts)); + } + } + /** * Add a denied nick name * @return void @@ -1321,6 +1361,21 @@ class memberAdminController extends member return executeQuery('member.insertDeniedNickName', $args); } + /** + * Register managed Email Hostname + * @param string $email_host + * @param string $description + * @return Object + */ + function insertManagedEmailHost($email_host, $description = '') + { + $args = new stdClass(); + $args->email_host = trim(strtolower($email_host)); + $args->description = $description; + + return executeQuery('member.insertManagedEmailHost', $args); + } + /** * delete a denied id * @param string $user_id @@ -1349,6 +1404,17 @@ class memberAdminController extends member return executeQuery('member.deleteDeniedNickName', $args); } + /** + * delete a denied nick name + * @param string $email_host + * @return object + */ + function deleteManagedEmailHost($email_host) + { + $args->email_host = $email_host; + return executeQuery('member.deleteManagedEmailHost', $args); + } + /** * Delete a join form * @param int $member_join_form_srl diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index f6a59dadb..50922b74b 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -9,14 +9,14 @@ class memberAdminView extends member { /** * Group list - * + * * @var array */ var $group_list = NULL; /** * Selected member info - * + * * @var array */ var $memberInfo = NULL; @@ -33,7 +33,7 @@ class memberAdminView extends member * * @return void */ - function init() + function init() { $oMemberModel = getModel('member'); $this->memberConfig = $oMemberModel->getMemberConfig(); @@ -43,7 +43,7 @@ class memberAdminView extends member // if member_srl exists, set memberInfo $member_srl = Context::get('member_srl'); - if($member_srl) + if($member_srl) { $this->memberInfo = $oMemberModel->getMemberInfoByMemberSrl($member_srl); if(!$this->memberInfo) @@ -193,7 +193,13 @@ class memberAdminView extends member // get denied NickName List $deniedNickNames = $oMemberModel->getDeniedNickNames(); Context::set('deniedNickNames', $deniedNickNames); - $oSecurity->encodeHTML('deniedNickNames..nick_name'); + $oSecurity->encodeHTML('deniedNickNames..nick_name'); + + //get managed Email Hosts + $managedEmailHost = $oMemberModel->getManagedEmailHosts(); + Context::set('managedEmailHost', $managedEmailHost); + $oSecurity->encodeHTML('managedEmailHost..email_host'); + $this->setTemplateFile('signup_config'); } @@ -231,7 +237,7 @@ class memberAdminView extends member * * @return void */ - function dispMemberAdminConfigOLD() + function dispMemberAdminConfigOLD() { $oModuleModel = getModel('module'); $oMemberModel = getModel('member'); @@ -378,7 +384,7 @@ class memberAdminView extends member } /** - * Get tags by the member info type + * Get tags by the member info type * * @param object $memberInfo * @param boolean $isAdmin (true : admin, false : not admin) @@ -631,7 +637,7 @@ class memberAdminView extends member * * @return void */ - function dispMemberAdminGroupList() + function dispMemberAdminGroupList() { $oModuleModel = getModel('module'); $output = $oModuleModel->getModuleFileBoxList(); diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 21867570e..cb3ea5ffa 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -234,6 +234,23 @@ class memberController extends member break; case 'email_address' : + // Check managed Email Host + if($oMemberModel->isDeniedEmailHost($value)) + { + $config = $oMemberModel->getMemberConfig(); + $emailhost_check = $config->emailhost_check; + + $managed_email_host = Context::getLang('managed_email_host'); + + $email_hosts = $oMemberModel->getManagedEmailHosts(); + foreach ($email_hosts as $host) + { + $hosts[] = $host->email_host; + } + $message = sprintf($managed_email_host[$emailhost_check],implode(', ',$hosts),'id@'.implode(', id@',$hosts)); + return new Object(0,$message); + } + // Check if duplicated $member_srl = $oMemberModel->getMemberSrlByEmailAddress($value); if($member_srl && $logged_info->member_srl != $member_srl ) return new Object(0,'msg_exists_email_address'); @@ -2015,6 +2032,22 @@ class memberController extends member $member_srl = $oMemberModel->getMemberSrlByNickName($args->nick_name); if($member_srl) return new Object(-1,'msg_exists_nick_name'); + // Check managed Email Host + if($oMemberModel->isDeniedEmailHost($args->email_address)) + { + $config = $oMemberModel->getMemberConfig(); + $emailhost_check = $config->emailhost_check; + + $managed_email_host = Context::getLang('managed_email_host'); + $email_hosts = $oMemberModel->getManagedEmailHosts(); + foreach ($email_hosts as $host) + { + $hosts[] = $host->email_host; + } + $message = sprintf($managed_email_host[$emailhost_check],implode(', ',$hosts),'id@'.implode(', id@',$hosts)); + return new Object(-1, $message); + } + $member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address); if($member_srl) return new Object(-1,'msg_exists_email_address'); @@ -2151,6 +2184,22 @@ class memberController extends member $output = executeQuery('member.getMemberInfoByMemberSrl', $args); $orgMemberInfo = $output->data; + // Check managed Email Host + if($oMemberModel->isDeniedEmailHost($args->email_address)) + { + $config = $oMemberModel->getMemberConfig(); + $emailhost_check = $config->emailhost_check; + + $managed_email_host = Context::getLang('managed_email_host'); + $email_hosts = $oMemberModel->getManagedEmailHosts(); + foreach ($email_hosts as $host) + { + $hosts[] = $host->email_host; + } + $message = sprintf($managed_email_host[$emailhost_check],implode(', ',$hosts),'id@'.implode(', id@',$hosts)); + return new Object(-1, $message); + } + if($config->identifier == 'email_address') { $member_srl = $oMemberModel->getMemberSrlByEmailAddress($args->email_address); @@ -2448,6 +2497,23 @@ class memberController extends member if(!$newEmail) return $this->stop('msg_invalid_request'); $oMemberModel = getModel('member'); + // Check managed Email Host + if($oMemberModel->isDeniedEmailHost($newEmail)) + { + $config = $oMemberModel->getMemberConfig(); + $emailhost_check = $config->emailhost_check; + + $managed_email_host = Context::getLang('managed_email_host'); + $email_hosts = $oMemberModel->getManagedEmailHosts(); + foreach ($email_hosts as $host) + { + $hosts[] = $host->email_host; + } + $message = sprintf($managed_email_host[$emailhost_check],implode(', ',$hosts),'id@'.implode(', id@',$hosts)); + return new Object(-1, $message); + } + + // Check if the e-mail address is already registered $member_srl = $oMemberModel->getMemberSrlByEmailAddress($newEmail); if($member_srl) return new Object(-1,'msg_exists_email_address'); diff --git a/modules/member/member.model.php b/modules/member/member.model.php index e7c90c264..c9ed3173f 100644 --- a/modules/member/member.model.php +++ b/modules/member/member.model.php @@ -66,6 +66,8 @@ class memberModel extends member if(!$config->identifier) $config->identifier = 'user_id'; + if(!$config->emailhost_check) $config->emailhost_check = 'allowed'; + if(!$config->max_error_count) $config->max_error_count = 10; if(!$config->max_error_count_time) $config->max_error_count_time = 300; @@ -321,7 +323,7 @@ class memberModel extends member $args = new stdClass(); $args->member_srl = $member_srl; $output = executeQuery('member.getMemberInfoByMemberSrl', $args, $columnList); - if(!$output->data) + if(!$output->data) { if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key, new stdClass); return; @@ -840,6 +842,20 @@ class memberModel extends member return $output->data; } + function getManagedEmailHosts() + { + static $output; + if(isset($output->data)) return $output->data; + $output = executeQueryArray('member.getManagedEmailHosts'); + if(!$output->toBool()) + { + $output->data = array(); + return array(); + } + + return $output->data; + } + /** * @brief Verify if ID is denied */ @@ -867,6 +883,49 @@ class memberModel extends member } return false; } + + /** + * @brief Verify if email_host from email_address is denied + */ + function isDeniedEmailHost($email_address) + { + $email_address = trim($email_address); + $oMemberModel = &getModel('member'); + $config = $oMemberModel->getMemberConfig(); + $emailhost_check = $config->emailhost_check; + $managedHosts = $oMemberModel->getManagedEmailHosts(); + if(count($managedHosts) < 1) return FALSE; + + static $return; + if(!isset($return[$email_address])) + { + $email = explode('@',$email_address); + $email_hostname = $email[1]; + if(!$email_hostname) return TRUE; + + foreach($managedHosts as $managedHost) + { + if($managedHost->email_host && strtolower($managedHost->email_host) == strtolower($email_hostname)) + { + $return[$email_address] = TRUE; + } + } + if(!$return[$email_address]) + { + $return[$email_address] = FALSE; + } + } + + if($emailhost_check == 'prohibited') + { + return $return[$email_address]; + } + else + { + return (!$return[$email_address]); + } + } + /** * @brief Get information of the profile image */ @@ -1096,7 +1155,7 @@ class memberModel extends member case 'low': if($length < 4) return false; - break; + break; } return true; diff --git a/modules/member/queries/deleteManagedEmailHost.xml b/modules/member/queries/deleteManagedEmailHost.xml new file mode 100644 index 000000000..edb3b99de --- /dev/null +++ b/modules/member/queries/deleteManagedEmailHost.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/member/queries/getManagedEmailHosts.xml b/modules/member/queries/getManagedEmailHosts.xml new file mode 100644 index 000000000..2000d4158 --- /dev/null +++ b/modules/member/queries/getManagedEmailHosts.xml @@ -0,0 +1,8 @@ + + +
+ + + + + \ No newline at end of file diff --git a/modules/member/queries/insertManagedEmailHost.xml b/modules/member/queries/insertManagedEmailHost.xml new file mode 100644 index 000000000..87f2bd9f7 --- /dev/null +++ b/modules/member/queries/insertManagedEmailHost.xml @@ -0,0 +1,10 @@ + + +
+ + + + + + + \ No newline at end of file diff --git a/modules/member/schemas/member_managed_email_hosts.xml b/modules/member/schemas/member_managed_email_hosts.xml new file mode 100644 index 000000000..d10421826 --- /dev/null +++ b/modules/member/schemas/member_managed_email_hosts.xml @@ -0,0 +1,5 @@ +
+ + + +
\ No newline at end of file diff --git a/modules/member/tpl/js/signup_config.js b/modules/member/tpl/js/signup_config.js index 37619e1bb..31bf9f31c 100644 --- a/modules/member/tpl/js/signup_config.js +++ b/modules/member/tpl/js/signup_config.js @@ -17,7 +17,7 @@ function doUpdateDeniedID(user_id, mode, message) { } /* prohibited nick name functions */ -function doUpdateDeniedNickName(nick_name, mode, message) +function doUpdateDeniedNickName(nick_name, mode, message) { if(typeof(message)!='undefined' && !confirm(message)) return; @@ -35,8 +35,27 @@ function doUpdateDeniedNickName(nick_name, mode, message) ); } +/* managed E-mail Address functions */ +function doUpdateManagedEmailHost(email_host, mode, message) +{ + if(typeof(message)!='undefined' && !confirm(message)) return; + + exec_xml( + 'member', + 'procMemberAdminUpdateManagedEmailHosts', + {email_hosts:email_host, mode:mode, email_hosts_count:jQuery('#managedEmailHost li').length}, + function(){ + if (mode == 'delete'){ + jQuery('#managed_'+email_host.replace(/\./g,'\_\_')).remove(); + jQuery('._managededEmailHostCount').html(jQuery('#managedEmailHost li').length); + } + }, + ['error','message','tpl'] + ); +} + jQuery(function($){ - // hide form if enable_join is setted "No" + // hide form if enable_join is setted "No" var suForm = $('table.__join_form'); // 회원가입 양식 function changeTable($i) @@ -96,7 +115,7 @@ jQuery(function($){ if (!confirm(xe.lang.msg_delete_extend_form)) return; var memberFormSrl = $(event.target).parent().attr('id'); - var targetTR = $(event.target).closest('tr'); + var targetTR = $(event.target).closest('tr'); exec_xml( 'member', @@ -111,7 +130,7 @@ jQuery(function($){ $('button._addDeniedID').click(function(){ var ids = $('#prohibited_id').val(); - if(ids == ''){ + if(ids == ''){ alert(xe.lang.msg_null_prohibited_id); $('#prohibited_id').focus(); return; @@ -136,11 +155,40 @@ jQuery(function($){ jQuery.exec_json('member.procMemberAdminInsertDeniedID', {'user_id': ids}, on_complete); + }); + $('button._addManagedEmailHost').click(function(){ + var hosts = $('#manage_email_host').val(); + if(hosts == ''){ + alert(xe.lang.msg_null_managed_emailhost); + $('#manage_email_host').focus(); + return; + } + + var tag; + function on_complete(data) + { + $('#manage_email_host').val(''); + + var hosts = $.trim(data.email_hosts); + if(hosts == '') return; + var uids = hosts.split("\n"); + for (var i=0; i'+uids[i]+' '; + $('#managedEmailHost').append($(tag)); + } + + $('._managededEmailHostCount').html($('#managedEmailHost li').length); + } + + $.exec_json('member.procMemberAdminUpdateManagedEmailHosts', {'email_hosts': hosts}, on_complete); + }); $('button._addDeniedNickName').click(function(){ var ids = $('#prohibited_nick_name').val(); - if(ids == ''){ + if(ids == ''){ alert(xe.lang.msg_null_prohibited_nick_name); $('#prohibited_nick_name').focus(); return; @@ -195,7 +243,7 @@ jQuery(function($){ $notCheckedTR.find('th').html('
'+$notCheckedTR.find('th ._title').html()+'
'); $notCheckedTR.removeClass('sticky'); - // add sticky class + // add sticky class } }); diff --git a/modules/member/tpl/signup_config.html b/modules/member/tpl/signup_config.html index 3694ba5b6..f678e8cb3 100644 --- a/modules/member/tpl/signup_config.html +++ b/modules/member/tpl/signup_config.html @@ -7,6 +7,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_null_managed_emailhost = '{$lang->msg_null_managed_emailhost}'; xe.lang.msg_exists_user_id= '{$lang->msg_exists_user_id}';
@@ -23,6 +24,24 @@ + +
+ +
+
+

{$lang->about_emailhost_check}

+
+ + +

{@ if($config->emailhost_check =='prohibited') $emailhost_check = $lang->cmd_prohibited; else $emailhost_check = $lang->cmd_allowed;}{sprintf($lang->count_manage_email_host, count($managedEmailHost), $emailhost_check)}

+
    +
  • {$emailInfo->email_host}
  • +
+ + +

{$lang->multi_line_input}

+
+
@@ -30,7 +49,7 @@
  • {$nicknameInfo->nick_name}
- +

{$lang->multi_line_input}