mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-22 05:15:29 +09:00
Merge branch 'develop' into pr/member-phone-number
This commit is contained in:
commit
c09d2a773d
2041 changed files with 23045 additions and 18189 deletions
|
|
@ -2,23 +2,23 @@
|
|||
<module>
|
||||
<grants />
|
||||
<actions>
|
||||
<action name="dispMemberSignUpForm" type="view" />
|
||||
<action name="dispMemberLoginForm" type="view" />
|
||||
<action name="dispMemberFindAccount" type="view" />
|
||||
<action name="dispMemberResendAuthMail" type="view" />
|
||||
<action name="dispMemberInfo" type="view" permission="member" />
|
||||
<action name="dispMemberModifyInfo" type="view" permission="member" />
|
||||
<action name="dispMemberModifyPassword" type="view" permission="member" />
|
||||
<action name="dispMemberModifyEmailAddress" type="view" permission="member" />
|
||||
<action name="dispMemberLeave" type="view" permission="member" />
|
||||
<action name="dispMemberScrappedDocument" type="view" permission="member" />
|
||||
<action name="dispMemberSavedDocument" type="view" permission="member" />
|
||||
<action name="dispMemberOwnDocument" type="view" permission="member" />
|
||||
<action name="dispMemberOwnComment" type="view" permission="member" />
|
||||
<action name="dispMemberActiveLogins" type="view" permission="member" />
|
||||
<action name="dispMemberModifyNicknameLog" type="view" permission="member" />
|
||||
<action name="dispMemberLogout" type="view" permission="member" />
|
||||
<action name="dispMemberSpammer" type="view" permission="manager" check_var="module_srl" />
|
||||
<action name="dispMemberSignUpForm" type="view" meta-noindex="true" />
|
||||
<action name="dispMemberLoginForm" type="view" meta-noindex="true" />
|
||||
<action name="dispMemberFindAccount" type="view" meta-noindex="true" />
|
||||
<action name="dispMemberResendAuthMail" type="view" meta-noindex="true" />
|
||||
<action name="dispMemberInfo" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberModifyInfo" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberModifyPassword" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberModifyEmailAddress" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberLeave" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberScrappedDocument" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberSavedDocument" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberOwnDocument" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberOwnComment" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberActiveLogins" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberModifyNicknameLog" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberLogout" type="view" permission="member" meta-noindex="true" />
|
||||
<action name="dispMemberSpammer" type="view" permission="manager" check_var="module_srl" meta-noindex="true" />
|
||||
|
||||
<action name="getMemberMenu" type="model" />
|
||||
<action name="getApiGroups" type="model" permission="root" />
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/m.skin/default/login_form/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form action="./" method="POST" class="ff">
|
||||
<form ruleset="@login" 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','')}" />
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
<label for="{$formTag->name}">{$formTag->title}</label>
|
||||
<div cond="$formTag->name != 'signature'">{$formTag->inputTag}</div>
|
||||
<div cond="$formTag->name =='signature'">
|
||||
{$editor}
|
||||
{$editor|noescape}
|
||||
</div>
|
||||
</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>
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="@login" action="{getUrl('', 'act', 'procMemberLogin')}" method="post" id="fo_member_login">
|
||||
<form ruleset="@login" action="./" method="post" id="fo_member_login">
|
||||
<input type="hidden" name="success_return_url" value="{$referer_url}" />
|
||||
<input type="hidden" name="act" value="procMemberLogin" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<block loop="$formTags=>$formTag" cond="$formTag->name !== 'profile_image'">
|
||||
<label for="{$formTag->name}" class="control-label">{trim(str_replace('*','',strip_tags($formTag->title)))}<!--@if(strpos($formTag->title,'<em style="color:red">*</em>') !== false)--><sup style="color:red">*</sup><!--@endif--></label>
|
||||
<block cond="$formTag->name != 'signature'">{$formTag->inputTag}</block>
|
||||
<block cond="$formTag->name =='signature'">{$editor}</block>
|
||||
<block cond="$formTag->name =='signature'">{$editor|noescape}</block>
|
||||
</block>
|
||||
<label class="control-label">{$lang->allow_mailing}</label>
|
||||
<div class="controls">
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
</block>
|
||||
<block cond="$formTag->name == 'signature'">
|
||||
<input type="hidden" name="signature" value="" />
|
||||
{$editor}
|
||||
{$editor|noescape}
|
||||
</block>
|
||||
</block>
|
||||
<div class="control-label">{$lang->allow_mailing}</div>
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ class memberAdminController extends member
|
|||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->is_admin != 'Y' || !checkCSRF())
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$args = Context::gets('member_srl','email_address','find_account_answer', 'allow_mailing','allow_message','denied','is_admin','description','group_srl_list','limit_date');
|
||||
|
|
@ -128,21 +128,21 @@ class memberAdminController extends member
|
|||
$signature = Context::get('signature');
|
||||
$oMemberController->putSignature($args->member_srl, $signature);
|
||||
|
||||
$profile_image = $_FILES['profile_image'];
|
||||
$profile_image = Context::get('profile_image');
|
||||
if(is_uploaded_file($profile_image['tmp_name']))
|
||||
{
|
||||
$output = $oMemberController->insertProfileImage($args->member_srl, $profile_image['tmp_name']);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
||||
$image_mark = $_FILES['image_mark'];
|
||||
$image_mark = Context::get('image_mark');
|
||||
if(is_uploaded_file($image_mark['tmp_name']))
|
||||
{
|
||||
$output = $oMemberController->insertImageMark($args->member_srl, $image_mark['tmp_name']);
|
||||
if(!$output->toBool()) return $output;
|
||||
}
|
||||
|
||||
$image_name = $_FILES['image_name'];
|
||||
$image_name = Context::get('image_name');
|
||||
if (is_uploaded_file($image_name['tmp_name']))
|
||||
{
|
||||
$output = $oMemberController->insertImageName($args->member_srl, $image_name['tmp_name']);
|
||||
|
|
@ -741,7 +741,7 @@ class memberAdminController extends member
|
|||
// Check ID duplicated
|
||||
if (Context::isReservedWord($args->column_name))
|
||||
{
|
||||
return $this->setError('msg_column_id_not_available');
|
||||
throw new Rhymix\Framework\Exception('msg_column_id_not_available');
|
||||
}
|
||||
$oMemberModel = getModel('member');
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
|
|
@ -750,7 +750,7 @@ class memberAdminController extends member
|
|||
if($item->name == $args->column_name)
|
||||
{
|
||||
if($args->member_join_form_srl && $args->member_join_form_srl == $item->member_join_form_srl) continue;
|
||||
return $this->setError('msg_column_id_not_available');
|
||||
throw new Rhymix\Framework\Exception('msg_column_id_not_available');
|
||||
}
|
||||
}
|
||||
// Fix if member_join_form_srl exists. Add if not exists.
|
||||
|
|
@ -961,7 +961,7 @@ class memberAdminController extends member
|
|||
function procMemberAdminDeleteMembers()
|
||||
{
|
||||
$target_member_srls = Context::get('target_member_srls');
|
||||
if(!$target_member_srls) return $this->setError('msg_invalid_request');
|
||||
if(!$target_member_srls) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
$member_srls = explode(',', $target_member_srls);
|
||||
$oMemberController = getController('member');
|
||||
|
||||
|
|
@ -985,7 +985,7 @@ class memberAdminController extends member
|
|||
function procMemberAdminUpdateMembersGroup()
|
||||
{
|
||||
$member_srl = Context::get('member_srl');
|
||||
if(!$member_srl) return $this->setError('msg_invalid_request');
|
||||
if(!$member_srl) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
$member_srls = explode(',',$member_srl);
|
||||
|
||||
$group_srl = Context::get('group_srls');
|
||||
|
|
@ -1258,7 +1258,7 @@ class memberAdminController extends member
|
|||
function updateGroup($args)
|
||||
{
|
||||
if(!$args->site_srl) $args->site_srl = 0;
|
||||
if(!$args->group_srl) return $this->setError('lang->msg_not_founded');
|
||||
if(!$args->group_srl) throw new Rhymix\Framework\Exceptions\TargetNotFound;
|
||||
|
||||
// Call trigger (before)
|
||||
$trigger_output = ModuleHandler::triggerCall('member.updateGroup', 'before', $args);
|
||||
|
|
@ -1302,8 +1302,8 @@ class memberAdminController extends member
|
|||
$columnList = array('group_srl', 'is_default');
|
||||
$group_info = $oMemberModel->getGroup($group_srl, $columnList);
|
||||
|
||||
if(!$group_info) return $this->setError('lang->msg_not_founded');
|
||||
if($group_info->is_default == 'Y') return $this->setError('msg_not_delete_default');
|
||||
if(!$group_info) throw new Rhymix\Framework\Exceptions\TargetNotFound;
|
||||
if($group_info->is_default == 'Y') throw new Rhymix\Framework\Exception('msg_not_delete_default');
|
||||
|
||||
// Call trigger (before)
|
||||
$trigger_output = ModuleHandler::triggerCall('member.deleteGroup', 'before', $group_info);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ class memberController extends member
|
|||
if(!$user_id && !$password && Context::getRequestMethod() == 'GET')
|
||||
{
|
||||
$this->setRedirectUrl(getNotEncodedUrl(''));
|
||||
return $this->setError('null_user_id');
|
||||
throw new Rhymix\Framework\Exception('null_user_id');
|
||||
}
|
||||
|
||||
// Variables
|
||||
|
|
@ -42,8 +42,8 @@ class memberController extends member
|
|||
|
||||
if(!$keep_signed) $keep_signed = Context::get('keep_signed');
|
||||
// Return an error when id and password doesn't exist
|
||||
if(!$user_id) return $this->setError('null_user_id');
|
||||
if(!$password) return $this->setError('null_password');
|
||||
if(!$user_id) throw new Rhymix\Framework\Exception('null_user_id');
|
||||
if(!$password) throw new Rhymix\Framework\Exception('null_password');
|
||||
|
||||
$output = $this->doLogin($user_id, $password, $keep_signed=='Y'?true:false);
|
||||
if (!$output->toBool()) return $output;
|
||||
|
|
@ -122,7 +122,7 @@ class memberController extends member
|
|||
$document_srl = (int) (Context::get('document_srl') ?: Context::get('target_srl'));
|
||||
if(!$document_srl)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
|
|
@ -131,7 +131,7 @@ class memberController extends member
|
|||
// Check document
|
||||
if(!$oDocument->isAccessible())
|
||||
{
|
||||
return $this->setError('msg_is_secret');
|
||||
throw new Rhymix\Framework\Exception('msg_is_secret');
|
||||
}
|
||||
|
||||
$oModuleModel = getModel('module');
|
||||
|
|
@ -143,19 +143,19 @@ class memberController extends member
|
|||
// Check access to module of the document
|
||||
if(!$grant->access)
|
||||
{
|
||||
return $this->setError('msg_not_permitted');
|
||||
throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
}
|
||||
|
||||
// Check grant to module of the document
|
||||
if(isset($grant->list) && isset($grant->view) && (!$grant->list || !$grant->view))
|
||||
{
|
||||
return $this->setError('msg_not_permitted');
|
||||
throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
}
|
||||
|
||||
// Check consultation option
|
||||
if(isset($grant->consultation_read) && $module_info->consultation == 'Y' && !$grant->consultation_read && !$oDocument->isGranted())
|
||||
{
|
||||
return $this->setError('msg_not_permitted');
|
||||
throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
}
|
||||
|
||||
// Find default scrap folder
|
||||
|
|
@ -187,7 +187,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.getScrapDocument', $args);
|
||||
if($output->data->count)
|
||||
{
|
||||
return $this->setError('msg_alreay_scrapped');
|
||||
throw new Rhymix\Framework\Exception('msg_alreay_scrapped');
|
||||
}
|
||||
|
||||
// Insert
|
||||
|
|
@ -206,11 +206,12 @@ class memberController extends member
|
|||
function procMemberDeleteScrap()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$document_srl = (int)Context::get('document_srl');
|
||||
if(!$document_srl) return $this->setError('msg_invalid_request');
|
||||
if(!$document_srl) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
// Variables
|
||||
$args = new stdClass;
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
|
@ -226,14 +227,14 @@ class memberController extends member
|
|||
function procMemberMoveScrapFolder()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$document_srl = (int)Context::get('document_srl');
|
||||
$folder_srl = (int)Context::get('folder_srl');
|
||||
if(!$document_srl || !$folder_srl)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Check that the target folder exists and belongs to member
|
||||
|
|
@ -243,7 +244,7 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||
if(!count($output->data))
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Move
|
||||
|
|
@ -262,7 +263,7 @@ class memberController extends member
|
|||
function procMemberInsertScrapFolder()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// Get new folder name
|
||||
|
|
@ -270,7 +271,7 @@ class memberController extends member
|
|||
$folder_name = escape(trim(utf8_normalize_spaces($folder_name)));
|
||||
if(!$folder_name)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Check existing folder with same name
|
||||
|
|
@ -280,7 +281,7 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||
if(count($output->data) || $folder_name === lang('default_folder'))
|
||||
{
|
||||
return $this->setError('msg_folder_alreay_exists');
|
||||
throw new Rhymix\Framework\Exception('msg_folder_alreay_exists');
|
||||
}
|
||||
|
||||
// Create folder
|
||||
|
|
@ -301,7 +302,7 @@ class memberController extends member
|
|||
function procMemberRenameScrapFolder()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// Get new folder name
|
||||
|
|
@ -310,7 +311,7 @@ class memberController extends member
|
|||
$folder_name = escape(trim(utf8_normalize_spaces($folder_name)));
|
||||
if(!$folder_srl || !$folder_name)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Check that the original folder exists and belongs to member
|
||||
|
|
@ -320,11 +321,11 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||
if(!count($output->data))
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
if(array_first($output->data)->name === '/DEFAULT/')
|
||||
{
|
||||
return $this->setError('msg_folder_is_default');
|
||||
throw new Rhymix\Framework\Exception('msg_folder_is_default');
|
||||
}
|
||||
|
||||
// Check existing folder with same name
|
||||
|
|
@ -335,7 +336,7 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||
if(count($output->data) || $folder_name === lang('default_folder'))
|
||||
{
|
||||
return $this->setError('msg_folder_alreay_exists');
|
||||
throw new Rhymix\Framework\Exception('msg_folder_alreay_exists');
|
||||
}
|
||||
|
||||
// Rename folder
|
||||
|
|
@ -353,14 +354,14 @@ class memberController extends member
|
|||
function procMemberDeleteScrapFolder()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// Get folder_srl to delete
|
||||
$folder_srl = intval(Context::get('folder_srl'));
|
||||
if(!$folder_srl)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Check that the folder exists and belongs to member
|
||||
|
|
@ -370,11 +371,11 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapFolderList', $args);
|
||||
if(!count($output->data))
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
if(array_first($output->data)->name === '/DEFAULT/')
|
||||
{
|
||||
return $this->setError('msg_folder_is_default');
|
||||
throw new Rhymix\Framework\Exception('msg_folder_is_default');
|
||||
}
|
||||
|
||||
// Check that the folder is empty
|
||||
|
|
@ -384,7 +385,7 @@ class memberController extends member
|
|||
$output = executeQueryArray('member.getScrapDocumentList', $args);
|
||||
if(count($output->data))
|
||||
{
|
||||
return $this->setError('msg_folder_not_empty');
|
||||
throw new Rhymix\Framework\Exception('msg_folder_not_empty');
|
||||
}
|
||||
|
||||
// Delete folder
|
||||
|
|
@ -436,22 +437,22 @@ class memberController extends member
|
|||
function procMemberDeleteSavedDocument()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$document_srl = (int)Context::get('document_srl');
|
||||
if(!$document_srl) return $this->setError('msg_invalid_request');
|
||||
if(!$document_srl) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if ($oDocument->get('member_srl') != $logged_info->member_srl)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
$configStatusList = $oDocumentModel->getStatusList();
|
||||
if ($oDocument->get('status') != $configStatusList['temp'])
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Variables
|
||||
|
|
@ -465,14 +466,14 @@ class memberController extends member
|
|||
function procMemberDeleteAutologin()
|
||||
{
|
||||
// Check login information
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
$autologin_id = intval(Context::get('autologin_id'));
|
||||
$autologin_key = Context::get('autologin_key');
|
||||
if (!$autologin_id || !$autologin_key)
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$args = new stdClass;
|
||||
|
|
@ -575,7 +576,11 @@ class memberController extends member
|
|||
*/
|
||||
function procMemberInsert()
|
||||
{
|
||||
if (Context::getRequestMethod () == "GET") return new BaseObject (-1, "msg_invalid_request");
|
||||
if (Context::getRequestMethod() == 'GET')
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\SecurityViolation;
|
||||
}
|
||||
|
||||
$oMemberModel = &getModel ('member');
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
|
||||
|
|
@ -583,7 +588,7 @@ class memberController extends member
|
|||
$trigger_output = ModuleHandler::triggerCall ('member.procMemberInsert', 'before', $config);
|
||||
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');
|
||||
if($config->enable_join != 'Y') throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
|
||||
|
||||
// Check if the user accept the license terms (only if terms exist)
|
||||
$accept_agreement = Context::get('accept_agreement');
|
||||
|
|
@ -591,7 +596,7 @@ class memberController extends member
|
|||
{
|
||||
if($agreement->type === 'required' && $accept_agreement !== 'Y' && $accept_agreement[$i] !== 'Y')
|
||||
{
|
||||
return $this->setError('msg_accept_agreement');
|
||||
throw new Rhymix\Framework\Exception('msg_accept_agreement');
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -646,7 +651,7 @@ class memberController extends member
|
|||
if(!$oMemberModel->checkPasswordStrength($args->password, $config->password_strength))
|
||||
{
|
||||
$message = lang('about_password_strength');
|
||||
return $this->setError($message[$config->password_strength]);
|
||||
throw new Rhymix\Framework\Exception($message[$config->password_strength]);
|
||||
}
|
||||
|
||||
// Remove some unnecessary variables from all the vars
|
||||
|
|
@ -687,19 +692,19 @@ class memberController extends member
|
|||
if(!$output->toBool()) return $output;
|
||||
|
||||
// insert ProfileImage, ImageName, ImageMark
|
||||
$profile_image = $_FILES['profile_image'];
|
||||
$profile_image = Context::get('profile_image');
|
||||
if(is_uploaded_file($profile_image['tmp_name']))
|
||||
{
|
||||
$this->insertProfileImage($args->member_srl, $profile_image['tmp_name']);
|
||||
}
|
||||
|
||||
$image_mark = $_FILES['image_mark'];
|
||||
$image_mark = Context::get('image_mark');
|
||||
if(is_uploaded_file($image_mark['tmp_name']))
|
||||
{
|
||||
$this->insertImageMark($args->member_srl, $image_mark['tmp_name']);
|
||||
}
|
||||
|
||||
$image_name = $_FILES['image_name'];
|
||||
$image_name = Context::get('image_name');
|
||||
if(is_uploaded_file($image_name['tmp_name']))
|
||||
{
|
||||
$this->insertImageName($args->member_srl, $image_name['tmp_name']);
|
||||
|
|
@ -779,19 +784,19 @@ class memberController extends member
|
|||
{
|
||||
if($_SESSION['rechecked_password_step'] != 'INPUT_PASSWORD')
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
}
|
||||
|
||||
$password = Context::get('password');
|
||||
|
||||
if(!$password)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
|
|
@ -805,7 +810,7 @@ class memberController extends member
|
|||
// Verify the current password
|
||||
if(!$oMemberModel->isValidPassword($member_info->password, $password))
|
||||
{
|
||||
return $this->setError('invalid_password');
|
||||
throw new Rhymix\Framework\Exception('invalid_password');
|
||||
}
|
||||
|
||||
$_SESSION['rechecked_password_step'] = 'VALIDATE_PASSWORD';
|
||||
|
|
@ -830,12 +835,12 @@ class memberController extends member
|
|||
{
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
}
|
||||
|
||||
if($_SESSION['rechecked_password_step'] != 'INPUT_DATA')
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
unset($_SESSION['rechecked_password_step']);
|
||||
|
||||
|
|
@ -922,19 +927,19 @@ class memberController extends member
|
|||
$output = $this->updateMember($args);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$profile_image = $_FILES['profile_image'];
|
||||
$profile_image = Context::get('profile_image');
|
||||
if(is_uploaded_file($profile_image['tmp_name']))
|
||||
{
|
||||
$this->insertProfileImage($args->member_srl, $profile_image['tmp_name']);
|
||||
}
|
||||
|
||||
$image_mark = $_FILES['image_mark'];
|
||||
$image_mark = Context::get('image_mark');
|
||||
if(is_uploaded_file($image_mark['tmp_name']))
|
||||
{
|
||||
$this->insertImageMark($args->member_srl, $image_mark['tmp_name']);
|
||||
}
|
||||
|
||||
$image_name = $_FILES['image_name'];
|
||||
$image_name = Context::get('image_name');
|
||||
if(is_uploaded_file($image_name['tmp_name']))
|
||||
{
|
||||
$this->insertImageName($args->member_srl, $image_name['tmp_name']);
|
||||
|
|
@ -969,7 +974,7 @@ class memberController extends member
|
|||
*/
|
||||
function procMemberModifyPassword()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
// Extract the necessary information in advance
|
||||
$current_password = trim(Context::get('current_password'));
|
||||
$password = trim(Context::get('password1'));
|
||||
|
|
@ -983,10 +988,10 @@ class memberController extends member
|
|||
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
|
||||
// Verify the cuttent password
|
||||
if(!$oMemberModel->isValidPassword($member_info->password, $current_password, $member_srl)) return $this->setError('invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($member_info->password, $current_password, $member_srl)) throw new Rhymix\Framework\Exception('invalid_password');
|
||||
|
||||
// Check if a new password is as same as the previous password
|
||||
if($current_password == $password) return $this->setError('invalid_new_password');
|
||||
if($current_password == $password) throw new Rhymix\Framework\Exception('invalid_new_password');
|
||||
|
||||
// Execute insert or update depending on the value of member_srl
|
||||
$args = new stdClass;
|
||||
|
|
@ -1017,7 +1022,7 @@ class memberController extends member
|
|||
*/
|
||||
function procMemberLeave()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->stop('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
// Extract the necessary information in advance
|
||||
$password = trim(Context::get('password'));
|
||||
// Get information of logged-in user
|
||||
|
|
@ -1029,7 +1034,7 @@ class memberController extends member
|
|||
$columnList = array('member_srl', 'password');
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl, 0, $columnList);
|
||||
// Verify the cuttent password
|
||||
if(!$oMemberModel->isValidPassword($member_info->password, $password)) return $this->setError('invalid_password');
|
||||
if(!$oMemberModel->isValidPassword($member_info->password, $password)) throw new Rhymix\Framework\Exception('invalid_password');
|
||||
|
||||
$output = $this->deleteMember($member_srl);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
|
@ -1051,18 +1056,18 @@ class memberController extends member
|
|||
function procMemberInsertProfileImage()
|
||||
{
|
||||
// Check if the file is successfully uploaded
|
||||
$file = $_FILES['profile_image'];
|
||||
if(!is_uploaded_file($file['tmp_name'])) return $this->stop('msg_not_uploaded_profile_image');
|
||||
$file = Context::get('profile_image');
|
||||
if(!is_uploaded_file($file['tmp_name'])) throw new Rhymix\Framework\Exception('msg_not_uploaded_profile_image');
|
||||
// Ignore if member_srl is invalid or doesn't exist.
|
||||
$member_srl = Context::get('member_srl');
|
||||
if(!$member_srl) return $this->stop('msg_not_uploaded_profile_image');
|
||||
if(!$member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_profile_image');
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_profile_image');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_profile_image');
|
||||
// Return if member module is set not to use an image name or the user is not an administrator ;
|
||||
$oMemberModel = getModel('member');
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
if($logged_info->is_admin != 'Y' && $config->profile_image != 'Y') return $this->stop('msg_not_uploaded_profile_image');
|
||||
if($logged_info->is_admin != 'Y' && $config->profile_image != 'Y') throw new Rhymix\Framework\Exception('msg_not_uploaded_profile_image');
|
||||
|
||||
$output = $this->insertProfileImage($member_srl, $file['tmp_name']);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
|
@ -1099,7 +1104,7 @@ class memberController extends member
|
|||
elseif(IMAGETYPE_GIF == $type) $ext = 'gif';
|
||||
else
|
||||
{
|
||||
return $this->stop('msg_not_uploaded_profile_image');
|
||||
throw new Rhymix\Framework\Exception('msg_not_uploaded_profile_image');
|
||||
}
|
||||
|
||||
$target_path = sprintf('files/member_extra_info/profile_image/%s', getNumberingPath($member_srl));
|
||||
|
|
@ -1118,7 +1123,7 @@ class memberController extends member
|
|||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
FileHandler::removeFile($temp_filename);
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_profile_image'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1134,7 +1139,7 @@ class memberController extends member
|
|||
$filesize = filesize($target_file);
|
||||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_profile_image'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1156,18 +1161,18 @@ class memberController extends member
|
|||
function procMemberInsertImageName()
|
||||
{
|
||||
// Check if the file is successfully uploaded
|
||||
$file = $_FILES['image_name'];
|
||||
if(!is_uploaded_file($file['tmp_name'])) return $this->stop('msg_not_uploaded_image_name');
|
||||
$file = Context::get('image_name');
|
||||
if(!is_uploaded_file($file['tmp_name'])) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_name');
|
||||
// Ignore if member_srl is invalid or doesn't exist.
|
||||
$member_srl = Context::get('member_srl');
|
||||
if(!$member_srl) return $this->stop('msg_not_uploaded_image_name');
|
||||
if(!$member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_name');
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_image_name');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_name');
|
||||
// Return if member module is set not to use an image name or the user is not an administrator ;
|
||||
$oMemberModel = getModel('member');
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
if($logged_info->is_admin != 'Y' && $config->image_name != 'Y') return $this->stop('msg_not_uploaded_image_name');
|
||||
if($logged_info->is_admin != 'Y' && $config->image_name != 'Y') throw new Rhymix\Framework\Exception('msg_not_uploaded_image_name');
|
||||
|
||||
$output = $this->insertImageName($member_srl, $file['tmp_name']);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
|
@ -1218,7 +1223,7 @@ class memberController extends member
|
|||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
FileHandler::removeFile($temp_filename);
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_image_name'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1234,7 +1239,7 @@ class memberController extends member
|
|||
$filesize = filesize($target_file);
|
||||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_image_name'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1307,18 +1312,18 @@ class memberController extends member
|
|||
function procMemberInsertImageMark()
|
||||
{
|
||||
// Check if the file is successfully uploaded
|
||||
$file = $_FILES['image_mark'];
|
||||
if(!is_uploaded_file($file['tmp_name'])) return $this->stop('msg_not_uploaded_image_mark');
|
||||
$file = Context::get('image_mark');
|
||||
if(!is_uploaded_file($file['tmp_name'])) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_mark');
|
||||
// Ignore if member_srl is invalid or doesn't exist.
|
||||
$member_srl = Context::get('member_srl');
|
||||
if(!$member_srl) return $this->stop('msg_not_uploaded_image_mark');
|
||||
if(!$member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_mark');
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) return $this->stop('msg_not_uploaded_image_mark');
|
||||
if($logged_info->is_admin != 'Y' && $logged_info->member_srl != $member_srl) throw new Rhymix\Framework\Exception('msg_not_uploaded_image_mark');
|
||||
// Membership in the images mark the module using the ban was set by an administrator or return;
|
||||
$oMemberModel = getModel('member');
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
if($logged_info->is_admin != 'Y' && $config->image_mark != 'Y') return $this->stop('msg_not_uploaded_image_mark');
|
||||
if($logged_info->is_admin != 'Y' && $config->image_mark != 'Y') throw new Rhymix\Framework\Exception('msg_not_uploaded_image_mark');
|
||||
|
||||
$this->insertImageMark($member_srl, $file['tmp_name']);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
|
@ -1365,7 +1370,7 @@ class memberController extends member
|
|||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
FileHandler::removeFile($temp_filename);
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_group_image_mark'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1381,7 +1386,7 @@ class memberController extends member
|
|||
if($max_filesize && $filesize > ($max_filesize * 1024))
|
||||
{
|
||||
FileHandler::removeFile($target_file);
|
||||
return $this->stop(implode(' ' , array(
|
||||
throw new Rhymix\Framework\Exception(implode(' ' , array(
|
||||
Context::getLang('msg_not_uploaded_group_image_mark'),
|
||||
Context::getLang('msg_exceeds_limit_size')
|
||||
)));
|
||||
|
|
@ -1428,14 +1433,14 @@ class memberController extends member
|
|||
function procMemberFindAccount()
|
||||
{
|
||||
$email_address = Context::get('email_address');
|
||||
if(!$email_address) return $this->setError('msg_invalid_request');
|
||||
if(!$email_address) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
$oModuleModel = getModel('module');
|
||||
|
||||
// Check if a member having the same email address exists
|
||||
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($email_address);
|
||||
if(!$member_srl) return $this->setError('msg_email_not_exists');
|
||||
if(!$member_srl) throw new Rhymix\Framework\Exception('msg_email_not_exists');
|
||||
|
||||
// Get information of the member
|
||||
$columnList = array('denied', 'member_srl', 'user_id', 'user_name', 'email_address', 'nick_name');
|
||||
|
|
@ -1447,7 +1452,7 @@ class memberController extends member
|
|||
$chk_args = new stdClass;
|
||||
$chk_args->member_srl = $member_info->member_srl;
|
||||
$output = executeQuery('member.chkAuthMail', $chk_args);
|
||||
if($output->toBool() && $output->data->count != '0') return $this->setError('msg_user_not_confirmed');
|
||||
if($output->toBool() && $output->data->count != '0') throw new Rhymix\Framework\Exception('msg_user_not_confirmed');
|
||||
}
|
||||
|
||||
// Insert data into the authentication DB
|
||||
|
|
@ -1528,7 +1533,7 @@ class memberController extends member
|
|||
*/
|
||||
function procMemberFindAccountByQuestion()
|
||||
{
|
||||
return $this->setError('msg_question_not_allowed');
|
||||
throw new Rhymix\Framework\Exception('msg_question_not_allowed');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1547,7 +1552,7 @@ class memberController extends member
|
|||
|
||||
if(!$member_srl || !$auth_key)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
// Call a trigger (before)
|
||||
|
|
@ -1557,7 +1562,7 @@ class memberController extends member
|
|||
$trigger_output = ModuleHandler::triggerCall('member.procMemberAuthAccount', 'before', $trigger_obj);
|
||||
if(!$trigger_output->toBool())
|
||||
{
|
||||
return $this->stop($trigger_output->getMessage());
|
||||
return $trigger_output;
|
||||
}
|
||||
|
||||
// Test logs for finding password by user_id and authkey
|
||||
|
|
@ -1569,13 +1574,13 @@ class memberController extends member
|
|||
if(!$output->toBool() || $output->data->auth_key !== $auth_key)
|
||||
{
|
||||
executeQuery('member.deleteAuthMail', $args);
|
||||
return $this->stop('msg_invalid_auth_key');
|
||||
throw new Rhymix\Framework\Exception('msg_invalid_auth_key');
|
||||
}
|
||||
|
||||
if(ztime($output->data->regdate) < time() - (86400 * 3))
|
||||
{
|
||||
executeQuery('member.deleteAuthMail', $args);
|
||||
return $this->stop('msg_expired_auth_key');
|
||||
throw new Rhymix\Framework\Exception('msg_expired_auth_key');
|
||||
}
|
||||
|
||||
// Back up the value of $output->data->is_register
|
||||
|
|
@ -1594,7 +1599,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.updateMemberPassword', $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $this->stop($output->getMessage());
|
||||
return $output;
|
||||
}
|
||||
|
||||
// Remove all values having the member_srl from authentication table
|
||||
|
|
@ -1621,14 +1626,14 @@ class memberController extends member
|
|||
{
|
||||
// Get an email_address
|
||||
$email_address = Context::get('email_address');
|
||||
if(!$email_address) return $this->setError('msg_invalid_request');
|
||||
if(!$email_address) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
// Log test by using email_address
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
$args = new stdClass;
|
||||
$args->email_address = $email_address;
|
||||
$memberSrl = $oMemberModel->getMemberSrlByEmailAddress($email_address);
|
||||
if(!$memberSrl) return $this->setError('msg_not_exists_member');
|
||||
if(!$memberSrl) throw new Rhymix\Framework\Exception('msg_not_exists_member');
|
||||
|
||||
$columnList = array('member_srl', 'user_id', 'user_name', 'nick_name', 'email_address');
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($memberSrl, 0, $columnList);
|
||||
|
|
@ -1642,12 +1647,12 @@ class memberController extends member
|
|||
$chk_args = new stdClass;
|
||||
$chk_args->member_srl = $member_info->member_srl;
|
||||
$output = executeQuery('member.chkAuthMail', $chk_args);
|
||||
if($output->toBool() && $output->data->count == '0') return $this->setError('msg_invalid_request');
|
||||
if($output->toBool() && $output->data->count == '0') throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$auth_args = new stdClass;
|
||||
$auth_args->member_srl = $member_info->member_srl;
|
||||
$output = executeQueryArray('member.getAuthMailInfo', $auth_args);
|
||||
if(!$output->data || !$output->data[0]->auth_key) return $this->setError('msg_invalid_request');
|
||||
if(!$output->data || !$output->data[0]->auth_key) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
$auth_info = $output->data[0];
|
||||
|
||||
// Update the regdate of authmail entry
|
||||
|
|
@ -1711,21 +1716,37 @@ class memberController extends member
|
|||
|
||||
if(!$memberInfo)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$newEmail = Context::get('email_address');
|
||||
|
||||
if(!$newEmail)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($newEmail);
|
||||
if($member_srl)
|
||||
{
|
||||
return $this->setError('msg_exists_email_address');
|
||||
throw new Rhymix\Framework\Exception('msg_exists_email_address');
|
||||
}
|
||||
|
||||
// Check managed Email Host
|
||||
if($oMemberModel->isDeniedEmailHost($newEmail))
|
||||
{
|
||||
$config = $oMemberModel->getMemberConfig();
|
||||
$emailhost_check = $config->emailhost_check;
|
||||
|
||||
$managed_email_host = lang('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));
|
||||
throw new Rhymix\Framework\Exception($message);
|
||||
}
|
||||
|
||||
// remove all key by member_srl
|
||||
|
|
@ -1745,7 +1766,7 @@ class memberController extends member
|
|||
$output = executeQuery('member.updateMemberEmailAddress', $args);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $this->stop($output->getMessage());
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->_clearMemberCache($args->member_srl);
|
||||
|
|
@ -1840,7 +1861,7 @@ class memberController extends member
|
|||
{
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!$site_module_info->site_srl || !Context::get('is_logged') || count($logged_info->group_srl_list) ) return $this->setError('msg_invalid_request');
|
||||
if(!$site_module_info->site_srl || !Context::get('is_logged') || count($logged_info->group_srl_list) ) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
$columnList = array('site_srl', 'group_srl', 'title');
|
||||
|
|
@ -1859,7 +1880,7 @@ class memberController extends member
|
|||
{
|
||||
$site_module_info = Context::get('site_module_info');
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!$site_module_info->site_srl || !Context::get('is_logged') || count($logged_info->group_srl_list) ) return $this->setError('msg_invalid_request');
|
||||
if(!$site_module_info->site_srl || !Context::get('is_logged') || count($logged_info->group_srl_list) ) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$args = new stdClass;
|
||||
$args->site_srl= $site_module_info->site_srl;
|
||||
|
|
@ -2396,11 +2417,11 @@ class memberController extends member
|
|||
list($args->email_id, $args->email_host) = explode('@', $args->email_address);
|
||||
|
||||
// Sanitize user ID, username, nickname, homepage, blog
|
||||
$args->user_id = htmlspecialchars($args->user_id, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->user_name = htmlspecialchars($args->user_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->nick_name = htmlspecialchars($args->nick_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->homepage = htmlspecialchars($args->homepage, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->blog = htmlspecialchars($args->blog, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->user_id = escape($args->user_id, false);
|
||||
$args->user_name = escape($args->user_name, false);
|
||||
$args->nick_name = escape($args->nick_name, false);
|
||||
$args->homepage = escape($args->homepage, false);
|
||||
$args->blog = escape($args->blog, false);
|
||||
if($args->homepage && !preg_match("/^[a-z]+:\/\//i",$args->homepage)) $args->homepage = 'http://'.$args->homepage;
|
||||
if($args->blog && !preg_match("/^[a-z]+:\/\//i",$args->blog)) $args->blog = 'http://'.$args->blog;
|
||||
|
||||
|
|
@ -2624,16 +2645,16 @@ class memberController extends member
|
|||
unset($args->denied);
|
||||
if($logged_info->member_srl != $args->member_srl && $is_admin == false)
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
return new BaseObject(-1, 'msg_invalid_request');
|
||||
}
|
||||
}
|
||||
|
||||
// Sanitize user ID, username, nickname, homepage, blog
|
||||
if($args->user_id) $args->user_id = htmlspecialchars($args->user_id, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->user_name = htmlspecialchars($args->user_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->nick_name = htmlspecialchars($args->nick_name, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->homepage = htmlspecialchars($args->homepage, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$args->blog = htmlspecialchars($args->blog, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
if($args->user_id) $args->user_id = escape($args->user_id, false);
|
||||
$args->user_name = escape($args->user_name, false);
|
||||
$args->nick_name = escape($args->nick_name, false);
|
||||
$args->homepage = escape($args->homepage, false);
|
||||
$args->blog = escape($args->blog, false);
|
||||
if($args->homepage && !preg_match("/^[a-z]+:\/\//is",$args->homepage)) $args->homepage = 'http://'.$args->homepage;
|
||||
if($args->blog && !preg_match("/^[a-z]+:\/\//is",$args->blog)) $args->blog = 'http://'.$args->blog;
|
||||
|
||||
|
|
@ -2696,7 +2717,7 @@ class memberController extends member
|
|||
}
|
||||
|
||||
// Check managed Email Host
|
||||
if($logged_info->is_admin !== 'Y' && $oMemberModel->isDeniedEmailHost($args->email_address))
|
||||
if($logged_info->is_admin !== 'Y' && $logged_info->email_address !== $args->email_address && $oMemberModel->isDeniedEmailHost($args->email_address))
|
||||
{
|
||||
$emailhost_check = $config->emailhost_check;
|
||||
|
||||
|
|
@ -3041,12 +3062,12 @@ class memberController extends member
|
|||
|
||||
function procMemberModifyEmailAddress()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_logged');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$member_info = Context::get('logged_info');
|
||||
$newEmail = Context::get('email_address');
|
||||
|
||||
if(!$newEmail) return $this->setError('msg_invalid_request');
|
||||
if(!$newEmail) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
// Check managed Email Host
|
||||
|
|
@ -3062,16 +3083,16 @@ class memberController extends member
|
|||
$hosts[] = $host->email_host;
|
||||
}
|
||||
$message = sprintf($managed_email_host[$emailhost_check],implode(', ',$hosts),'id@'.implode(', id@',$hosts));
|
||||
return $this->setError($message);
|
||||
throw new Rhymix\Framework\Exception($message);
|
||||
}
|
||||
|
||||
// Check if the e-mail address is already registered
|
||||
$member_srl = $oMemberModel->getMemberSrlByEmailAddress($newEmail);
|
||||
if($member_srl) return $this->setError('msg_exists_email_address');
|
||||
if($member_srl) throw new Rhymix\Framework\Exception('msg_exists_email_address');
|
||||
|
||||
if($_SESSION['rechecked_password_step'] != 'INPUT_DATA')
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
unset($_SESSION['rechecked_password_step']);
|
||||
|
||||
|
|
@ -3129,7 +3150,7 @@ class memberController extends member
|
|||
{
|
||||
$member_srl = Context::get('member_srl');
|
||||
$auth_key = Context::get('auth_key');
|
||||
if(!$member_srl || !$auth_key) return $this->stop('msg_invalid_request');
|
||||
if(!$member_srl || !$auth_key) throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
|
||||
// Test logs for finding password by user_id and authkey
|
||||
$args = new stdClass;
|
||||
|
|
@ -3139,7 +3160,7 @@ class memberController extends member
|
|||
if(!$output->toBool() || $output->data->auth_key != $auth_key)
|
||||
{
|
||||
if(strlen($output->data->auth_key) !== strlen($auth_key)) executeQuery('member.deleteAuthChangeEmailAddress', $args);
|
||||
return $this->stop('msg_invalid_modify_email_auth_key');
|
||||
throw new Rhymix\Framework\Exception('msg_invalid_modify_email_auth_key');
|
||||
}
|
||||
|
||||
$newEmail = $output->data->user_id;
|
||||
|
|
@ -3147,7 +3168,7 @@ class memberController extends member
|
|||
list($args->email_id, $args->email_host) = explode('@', $newEmail);
|
||||
|
||||
$output = executeQuery('member.updateMemberEmailAddress', $args);
|
||||
if(!$output->toBool()) return $this->stop($output->getMessage());
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// Remove all values having the member_srl and new_password equal to 'XE_change_emaill_address' from authentication table
|
||||
executeQuery('member.deleteAuthChangeEmailAddress',$args);
|
||||
|
|
@ -3227,7 +3248,7 @@ class memberController extends member
|
|||
**/
|
||||
function procMemberSpammerManage()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_permitted');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = Context::get('member_srl');
|
||||
|
|
@ -3244,7 +3265,7 @@ class memberController extends member
|
|||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
|
||||
$grant = $oModuleModel->getGrant($module_info, $logged_info);
|
||||
|
||||
if(!$grant->manager) return $this->setError('msg_not_permitted');
|
||||
if(!$grant->manager) throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
|
||||
$proc_msg = "";
|
||||
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ class memberModel extends member
|
|||
$oCommunicationModel = getModel('communication');
|
||||
if($logged_info->is_admin == 'Y' || $oCommunicationModel->isFriend($member_info->member_srl))
|
||||
{
|
||||
$url = 'mailto:'.htmlspecialchars($member_info->email_address, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
|
||||
$url = 'mailto:'.escape($member_info->email_address);
|
||||
$oMemberController->addMemberPopupMenu($url,'cmd_send_email',$icon_path);
|
||||
}
|
||||
}
|
||||
|
|
@ -210,13 +210,13 @@ class memberModel extends member
|
|||
// View homepage info
|
||||
if($member_info->homepage && $homepage_is_public)
|
||||
{
|
||||
$oMemberController->addMemberPopupMenu(htmlspecialchars($member_info->homepage, ENT_COMPAT | ENT_HTML401, 'UTF-8', false), 'homepage', '', 'blank');
|
||||
$oMemberController->addMemberPopupMenu(escape($member_info->homepage, false), 'homepage', '', 'blank');
|
||||
}
|
||||
|
||||
// View blog info
|
||||
if($member_info->blog && $blog_is_public)
|
||||
{
|
||||
$oMemberController->addMemberPopupMenu(htmlspecialchars($member_info->blog, ENT_COMPAT | ENT_HTML401, 'UTF-8', false), 'blog', '', 'blank');
|
||||
$oMemberController->addMemberPopupMenu(escape($member_info->blog, false), 'blog', '', 'blank');
|
||||
}
|
||||
|
||||
// Call a trigger (after)
|
||||
|
|
@ -330,7 +330,10 @@ class memberModel extends member
|
|||
}
|
||||
|
||||
$member_info = $this->arrangeMemberInfo($output->data, $site_srl);
|
||||
Rhymix\Framework\Cache::set($cache_key, $member_info);
|
||||
if($output->toBool())
|
||||
{
|
||||
Rhymix\Framework\Cache::set($cache_key, $member_info);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -364,8 +367,14 @@ class memberModel extends member
|
|||
{
|
||||
foreach($extra_vars as $key => $val)
|
||||
{
|
||||
if(!is_array($val) && strpos($val, '|@|') !== FALSE) $val = explode('|@|', $val);
|
||||
if(!$info->{$key}) $info->{$key} = $val;
|
||||
if(!is_array($val) && !is_object($val) && strpos($val, '|@|') !== FALSE)
|
||||
{
|
||||
$val = explode('|@|', $val);
|
||||
}
|
||||
if(!isset($info->{$key}))
|
||||
{
|
||||
$info->{$key} = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -492,7 +501,10 @@ class memberModel extends member
|
|||
$group_list[$default_group->group_srl] = $default_group->title;
|
||||
}
|
||||
//insert in cache
|
||||
Rhymix\Framework\Cache::set($cache_key, $group_list, 0, true);
|
||||
if ($output->toBool())
|
||||
{
|
||||
Rhymix\Framework\Cache::set($cache_key, $group_list, 0, true);
|
||||
}
|
||||
}
|
||||
if(!$group_list) return array();
|
||||
|
||||
|
|
@ -539,7 +551,10 @@ class memberModel extends member
|
|||
$args->site_srl = $site_srl;
|
||||
$output = executeQuery('member.getDefaultGroup', $args);
|
||||
$default_group = $output->data;
|
||||
Rhymix\Framework\Cache::set($cache_key, $default_group, 0, true);
|
||||
if($output->toBool())
|
||||
{
|
||||
Rhymix\Framework\Cache::set($cache_key, $default_group, 0, true);
|
||||
}
|
||||
}
|
||||
|
||||
return $default_group;
|
||||
|
|
@ -590,7 +605,10 @@ class memberModel extends member
|
|||
$args->order_type = 'asc';
|
||||
$output = executeQueryArray('member.getGroups', $args);
|
||||
$group_list = $output->data;
|
||||
Rhymix\Framework\Cache::set("member:member_groups:site:$site_srl", $group_list, 0, true);
|
||||
if($output->toBool())
|
||||
{
|
||||
Rhymix\Framework\Cache::set("member:member_groups:site:$site_srl", $group_list, 0, true);
|
||||
}
|
||||
}
|
||||
|
||||
if(!$group_list)
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ class memberView extends member
|
|||
$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');
|
||||
if(!$logged_info->member_srl) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$member_srl = Context::get('member_srl');
|
||||
if(!$member_srl && Context::get('is_logged'))
|
||||
|
|
@ -198,12 +198,12 @@ class memberView extends member
|
|||
|
||||
$oMemberModel = getModel('member');
|
||||
// Get the member information if logged-in
|
||||
if($oMemberModel->isLogged()) return $this->stop('msg_already_logged');
|
||||
if($oMemberModel->isLogged()) throw new Rhymix\Framework\Exception('msg_already_logged');
|
||||
// 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') return $this->stop('msg_signup_disabled');
|
||||
if($member_config->enable_join != 'Y') throw new Rhymix\Framework\Exceptions\FeatureDisabled('msg_signup_disabled');
|
||||
|
||||
$formTags = getAdminView('member')->_getMemberInputTag();
|
||||
Context::set('formTags', $formTags);
|
||||
|
|
@ -251,7 +251,7 @@ class memberView extends member
|
|||
$oMemberModel = getModel('member');
|
||||
if(!$oMemberModel->isLogged() || empty($logged_info))
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
}
|
||||
|
||||
$_SESSION['rechecked_password_step'] = 'INPUT_PASSWORD';
|
||||
|
|
@ -294,7 +294,7 @@ class memberView extends member
|
|||
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
|
@ -349,10 +349,15 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberOwnDocument()
|
||||
{
|
||||
if ($this->member_config->features['my_documents'] === false)
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
// A message appears if the user is not logged-in
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
return $this->setError('msg_not_logged');
|
||||
throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
|
@ -378,9 +383,14 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberOwnComment()
|
||||
{
|
||||
if ($this->member_config->features['my_comments'] === false)
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
$member_srl = $logged_info->member_srl;
|
||||
|
|
@ -405,9 +415,14 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberScrappedDocument()
|
||||
{
|
||||
if ($this->member_config->features['scrapped_documents'] === false)
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
|
|
@ -432,7 +447,7 @@ class memberView extends member
|
|||
$folder_srl = (int)Context::get('folder_srl');
|
||||
if($folder_srl && !array_filter($folders, function($folder) use($folder_srl) { return $folder->folder_srl == $folder_srl; }))
|
||||
{
|
||||
return $this->setError('msg_invalid_request');
|
||||
throw new Rhymix\Framework\Exceptions\InvalidRequest;
|
||||
}
|
||||
if(!$folder_srl && count($folders))
|
||||
{
|
||||
|
|
@ -476,9 +491,14 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberSavedDocument()
|
||||
{
|
||||
if ($this->member_config->features['saved_documents'] === false)
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
// Get the saved document(module_srl is set to member_srl instead)
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args = new stdClass();
|
||||
|
|
@ -502,10 +522,15 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberActiveLogins()
|
||||
{
|
||||
if ($this->member_config->features['active_logins'] === false)
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
if (!$logged_info->member_srl)
|
||||
{
|
||||
return $this->stop('msg_not_logged');
|
||||
throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
}
|
||||
|
||||
$args = new stdClass();
|
||||
|
|
@ -558,7 +583,7 @@ class memberView extends member
|
|||
{
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$memberConfig = $this->member_config;
|
||||
|
||||
|
|
@ -590,7 +615,7 @@ class memberView extends member
|
|||
{
|
||||
$oMemberModel = getModel('member');
|
||||
// A message appears if the user is not logged-in
|
||||
if(!$oMemberModel->isLogged()) return $this->stop('msg_not_logged');
|
||||
if(!$oMemberModel->isLogged()) throw new Rhymix\Framework\Exceptions\MustLogin;
|
||||
|
||||
$memberConfig = $this->member_config;
|
||||
|
||||
|
|
@ -643,7 +668,10 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberFindAccount()
|
||||
{
|
||||
if(Context::get('is_logged')) return $this->stop('already_logged');
|
||||
if(Context::get('is_logged'))
|
||||
{
|
||||
throw new Rhymix\Framework\Exception('already_logged');
|
||||
}
|
||||
|
||||
$config = $this->member_config;
|
||||
|
||||
|
|
@ -663,7 +691,7 @@ class memberView extends member
|
|||
|
||||
if(Context::get('is_logged'))
|
||||
{
|
||||
return $this->stop('already_logged');
|
||||
throw new Rhymix\Framework\Exception('already_logged');
|
||||
}
|
||||
|
||||
if($authMemberSrl)
|
||||
|
|
@ -740,7 +768,7 @@ class memberView extends member
|
|||
**/
|
||||
function dispMemberSpammer()
|
||||
{
|
||||
if(!Context::get('is_logged')) return $this->setError('msg_not_permitted');
|
||||
if(!Context::get('is_logged')) throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
|
||||
$member_srl = Context::get('member_srl');
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
|
@ -751,7 +779,7 @@ class memberView extends member
|
|||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
|
||||
$grant = $oModuleModel->getGrant($module_info, Context::get('logged_info'));
|
||||
|
||||
if(!$grant->manager) return $this->setError('msg_not_permitted');
|
||||
if(!$grant->manager) throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
|
|
@ -773,6 +801,11 @@ class memberView extends member
|
|||
*/
|
||||
function dispMemberModifyNicknameLog()
|
||||
{
|
||||
if ($this->member_config->features['nickname_log'] === false || $this->member_config->update_nickname_log != 'Y')
|
||||
{
|
||||
throw new Rhymix\Framework\Exceptions\FeatureDisabled;
|
||||
}
|
||||
|
||||
$member_srl = Context::get('member_srl');
|
||||
$logged_info = Context::get('logged_info');
|
||||
if(!$member_srl)
|
||||
|
|
@ -783,7 +816,7 @@ class memberView extends member
|
|||
{
|
||||
if($logged_info->is_admin != 'Y')
|
||||
{
|
||||
return $this->setError('msg_not_permitted');
|
||||
throw new Rhymix\Framework\Exceptions\NotPermitted;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,16 +1,22 @@
|
|||
<query id="getMemberListWithinGroup" action="select">
|
||||
<tables>
|
||||
<table name="member" alias="member" />
|
||||
<table name="member_group_member" alias="member_group" />
|
||||
<table name="member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member.*" />
|
||||
<column name="site_srl" />
|
||||
<column name="group_srl" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="member_group.group_srl" var="selected_group_srl" notnull="notnull" />
|
||||
<condition operation="equal" column="member.member_srl" var="member_group.member_srl" pipe="and" notnull="notnull" />
|
||||
<query operation="in" column="member.member_srl" alias="mgm">
|
||||
<tables>
|
||||
<table name="member_group_member" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="member_group_member.member_srl" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="in" column="member_group_member.group_srl" var="selected_group_srl" notnull="notnull" />
|
||||
</conditions>
|
||||
</query>
|
||||
<group pipe="and">
|
||||
<condition operation="equal" column="member.is_admin" var="is_admin" />
|
||||
<condition operation="equal" column="member.denied" var="is_denied" pipe="and" />
|
||||
|
|
@ -32,9 +38,6 @@
|
|||
<condition operation="less" column="member.last_login" var="s_last_login_less" pipe="or" />
|
||||
</group>
|
||||
</conditions>
|
||||
<groups>
|
||||
<group column="member.member_srl" />
|
||||
</groups>
|
||||
<navigation>
|
||||
<index var="sort_index" default="member.list_order" order="sort_order" />
|
||||
<list_count var="list_count" default="20" />
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<customrules>
|
||||
</customrules>
|
||||
<fields>
|
||||
<field name="user_id" required="true" length="3:20" />
|
||||
<field name="user_id" required="true" length="2:20" />
|
||||
<field name="user_name" required="true" length="2:40" />
|
||||
<field name="nick_name" required="true" length="2:40" />
|
||||
<field name="email_address" required="true" length="1:200" rule="email" />
|
||||
|
|
|
|||
|
|
@ -21,10 +21,6 @@
|
|||
<!--@if($oDocument->getCommentCount())-->
|
||||
[{$oDocument->getCommentCount()}]
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($oDocument->getTrackbackCount())-->
|
||||
[{$oDocument->getTrackbackCount()}]
|
||||
<!--@end-->
|
||||
</td>
|
||||
<td>{$oDocument->getRegdate("Y-m-d")}</td>
|
||||
<td>{$oDocument->get('readed_count')}</td>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="@login" action="{getUrl('', 'act', 'procMemberLogin')}" method="post" id="fo_member_login">
|
||||
<form ruleset="@login" action="./" method="post" id="fo_member_login">
|
||||
<input type="hidden" name="success_return_url" value="{$referer_url}" />
|
||||
<input type="hidden" name="act" value="procMemberLogin" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
<label for="{$formTag->name}" class="control-label">{$formTag->title}</label>
|
||||
<div class="controls" cond="$formTag->name != 'signature'">{$formTag->inputTag}</div>
|
||||
<div class="controls" cond="$formTag->name =='signature'">
|
||||
{$editor}
|
||||
{$editor|noescape}
|
||||
<style scoped>
|
||||
.xpress-editor>#smart_content,
|
||||
.xpress-editor>#smart_content>.tool{clear:none}
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
</div>
|
||||
<div class="controls" cond="$formTag->name == 'signature'">
|
||||
<input type="hidden" name="signature" value="" />
|
||||
{$editor}
|
||||
{$editor|noescape}
|
||||
<style scoped>
|
||||
.xpress-editor>#smart_content,
|
||||
.xpress-editor>#smart_content>.tool{clear:none}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="@login" action="{getUrl('', 'act', 'procMemberLogin')}" method="post" id="fo_member_login">
|
||||
<form ruleset="@login" action="./" method="post" id="fo_member_login">
|
||||
<input type="hidden" name="success_return_url" value="{$referer_url}" />
|
||||
<input type="hidden" name="act" value="procMemberLogin" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
<block loop="$formTags=>$formTag">
|
||||
<label for="{$formTag->name}" class="control-label">{trim(str_replace('*','',strip_tags($formTag->title)))}<!--@if(strpos($formTag->title,'<em style="color:red">*</em>') !== false)--><sup style="color:red">*</sup><!--@endif--></label>
|
||||
<block cond="$formTag->name != 'signature'">{$formTag->inputTag}</block>
|
||||
<block cond="$formTag->name =='signature'">{$editor}</block>
|
||||
<block cond="$formTag->name =='signature'">{$editor|noescape}</block>
|
||||
</block>
|
||||
<label class="control-label">{$lang->allow_mailing}</label>
|
||||
<div class="controls">
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@
|
|||
</block>
|
||||
<block cond="$formTag->name == 'signature'">
|
||||
<input type="hidden" name="signature" value="" />
|
||||
{$editor}
|
||||
{$editor|noescape}
|
||||
</block>
|
||||
</block>
|
||||
<div class="control-label">{$lang->allow_mailing}</div>
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
<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" />
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="layout">{$lang->layout} <a data-admin-toggle="#help_menuName" class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_layout" target="_blank">{$lang->help}</a></label>
|
||||
<label class="x_control-label" for="layout">{$lang->layout}</label>
|
||||
<div class="x_controls">
|
||||
<select id="layout" name="layout_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
|
|
@ -15,7 +15,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="skin">{$lang->skin} <a data-admin-toggle="#help_menuName" class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_skin" target="_blank">{$lang->help}</a></label>
|
||||
<label class="x_control-label" for="skin">{$lang->skin}</label>
|
||||
<div class="x_controls">
|
||||
<select id="skin" name="skin" onchange="doGetSkinColorset(this.options[this.selectedIndex].value)">
|
||||
<option loop="$skin_list=>$key,$val" value="{$key}" selected="selected"|cond="$config->skin==$key">{$val->title} ({$key})</option>
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
.filebox_item{max-height:16px}
|
||||
</style>
|
||||
<div class="x_page-header">
|
||||
<h1>{$lang->member_group} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_member_group" target="_blank">{$lang->help}</a></h1>
|
||||
<h1>{$lang->member_group}</h1>
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/tpl/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
|
|
@ -53,7 +53,6 @@
|
|||
<button type="button" class="dragBtn">Move to</button>
|
||||
<input type="hidden" name="group_srls[]" value="{$group_info->group_srl}" />
|
||||
<input type="text" name="group_titles[]" value="{htmlspecialchars($group_info->title, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}" class="lang_code" title="{$lang->group_title}" />
|
||||
<a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_faq_administrator" target="_blank" cond="$group_info->title == '관리그룹'">{$lang->help}</a>
|
||||
</div>
|
||||
</td>
|
||||
<td><input type="text" name="descriptions[]" value="{$group_info->description}" title="{$lang->description}" /></td>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<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>
|
||||
<h1>{$lang->cmd_member_config}</h1>
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/tpl/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
<div class="x_control-group multiExample">
|
||||
<label for="multiSelect" class="x_control-label"><em style="color:red">*</em> {$lang->options}</label>
|
||||
<div class="x_controls">
|
||||
<textarea rows="4" cols="42" id="multiSelect" name="default_value" style="vertical-align:top"><block cond="$default_value">{implode('<enter>', $default_value)}</block></textarea>
|
||||
<textarea rows="4" cols="42" id="multiSelect" name="default_value" style="vertical-align:top"><block cond="$default_value">{implode('|@|', $default_value)}</block></textarea>
|
||||
<p class="x_help-inline">{$lang->about_multi_type}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -21,14 +21,14 @@
|
|||
<input type="hidden" name="success_return_url" value="{getUrl('act', 'dispMemberAdminList')}" cond="!$member_srl" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/tpl/1" />
|
||||
<div cond="$member_srl" class="x_control-group">
|
||||
<label class="x_control-label" for="identifierForm"><em style="color:red">*</em> {$identifierForm->title} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_login_key" target="_blank">{$lang->help}</a></label>
|
||||
<label class="x_control-label" for="identifierForm"><em style="color:red">*</em> {$identifierForm->title}</label>
|
||||
<div class="x_controls">
|
||||
<input type="hidden" name="{$identifierForm->name}" value="{$identifierForm->value}" />
|
||||
<input id="identifierForm" type="email" name="{$identifierForm->name}" value="{$identifierForm->value}" disabled="disabled" />
|
||||
</div>
|
||||
</div>
|
||||
<div cond="!$member_srl" class="x_control-group">
|
||||
<label class="x_control-label" for="identifierForm"><em style="color:red">*</em> {$identifierForm->title} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_login_key" target="_blank">{$lang->help}</a></label>
|
||||
<label class="x_control-label" for="identifierForm"><em style="color:red">*</em> {$identifierForm->title}</label>
|
||||
<div class="x_controls">
|
||||
<input id="identifierForm" type="text" name="{$identifierForm->name}" value="" />
|
||||
</div>
|
||||
|
|
@ -48,7 +48,7 @@
|
|||
<div loop="$formTags=>$formTag" class="x_control-group">
|
||||
<label class="x_control-label" for="{$formTag->name}">{$formTag->title}</label>
|
||||
<div class="x_controls" cond="$formTag->name != 'signature'">{$formTag->inputTag}</div>
|
||||
<div class="x_controls" cond="$formTag->name =='signature'">{$editor}</div>
|
||||
<div class="x_controls" cond="$formTag->name =='signature'">{$editor|noescape}</div>
|
||||
</div>
|
||||
<style scoped>
|
||||
.xpress-editor>#smart_content,
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ jQuery(function($){
|
|||
'getMemberAdminInsertJoinForm',
|
||||
{member_join_form_srl:memberFormSrl},
|
||||
function(ret){
|
||||
var tpl = ret.tpl.replace(/<enter>/g, '\n');
|
||||
var tpl = ret.tpl.replace(/\|@\|/g, '\n');
|
||||
$('#extendForm').html(tpl);
|
||||
|
||||
if (checked)$('#extendForm #radio_'+checked).attr('checked', 'checked');
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<p class="x_control-label">{$lang->enable_login_fail_report} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_faq_defence_login_limit" target="_blank">{$lang->help}</a></p>
|
||||
<p class="x_control-label">{$lang->enable_login_fail_report}</p>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="enable_login_fail_report_yes"><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'" /> {$lang->cmd_yes}</label>
|
||||
<label class="x_inline" for="enable_login_fail_report_no"><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'" /> {$lang->cmd_no}</label>
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@
|
|||
</script>
|
||||
|
||||
<div class="x_page-header">
|
||||
<h1>{$lang->user_list} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_member_list" target="_blank">{$lang->help}</a></h1>
|
||||
<h1>{$lang->user_list}</h1>
|
||||
</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/tpl/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form action="" method="post">
|
||||
<table id="memberList" class="x_table x_table-striped x_table-hover">
|
||||
<table id="memberList" class="x_table x_table-striped x_table-hover dsTg">
|
||||
<caption>
|
||||
<a href="{getUrl('filter_type', '', 'page', '')}" class="active"|cond="!$filter_type">{$lang->cmd_show_all_member}<block cond="!$filter_type">({$total_count})</block></a>
|
||||
<i>|</i>
|
||||
|
|
@ -26,16 +26,20 @@
|
|||
<a href="#listManager" data-value="modify" class="modalAnchor _member x_btn">{$lang->modify}</a>
|
||||
<a href="#listManager" data-value="delete" class="modalAnchor _member x_btn">{$lang->delete}</a>
|
||||
</div>
|
||||
<div class="x_pull-right x_btn-group margin_after">
|
||||
<button type="button" class="x_btn x_active __simple">{$lang->simple_view}</button>
|
||||
<button type="button" class="x_btn __detail">{$lang->detail_view}</button>
|
||||
</div>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col" class="nowr" cond="$profileImageConfig == 'Y' && $config->member_profile_view == 'Y'">{$lang->profile_image}</th>
|
||||
<th scope="col" class="nowr rx_detail_marks" cond="$profileImageConfig == 'Y' && $config->member_profile_view == 'Y'">{$lang->profile_image}</th>
|
||||
<th scope="col" class="nowr">{$lang->email}</th>
|
||||
<th scope="col" class="nowr" loop="$usedIdentifiers=>$name,$title">{$title}</th>
|
||||
<th scope="col" class="nowr">{$lang->status}</th>
|
||||
<th scope="col" class="nowr"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList', 'sort_index', 'regdate', 'sort_order', ($sort_order == 'asc') ? 'desc' : 'asc', 'selected_group_srl', $selected_group_srl)}">{$lang->signup_date}<block cond="$sort_index == 'regdate'"> <em cond="$sort_order=='asc'">▲</em><em cond="$sort_order != 'asc'">▼</em></block></a></th>
|
||||
<th scope="col" class="nowr"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList', 'sort_index', 'last_login', 'sort_order', ($sort_order == 'asc') ? 'desc' : 'asc', 'selected_group_srl', $selected_group_srl)}">{$lang->last_login}<block cond="$sort_index == 'last_login'"> <em cond="$sort_order=='asc'">▲</em><em cond="$sort_order != 'asc'">▼</em></block></a></th>
|
||||
<th scope="col" class="nowr">{$lang->member_group}</th>
|
||||
<th scope="col" class="nowr rx_detail_marks"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList', 'sort_index', 'regdate', 'sort_order', ($sort_order == 'asc') ? 'desc' : 'asc', 'selected_group_srl', $selected_group_srl)}">{$lang->signup_date}<block cond="$sort_index == 'regdate'"> <em cond="$sort_order=='asc'">▲</em><em cond="$sort_order != 'asc'">▼</em></block></a></th>
|
||||
<th scope="col" class="nowr rx_detail_marks"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminList', 'sort_index', 'last_login', 'sort_order', ($sort_order == 'asc') ? 'desc' : 'asc', 'selected_group_srl', $selected_group_srl)}">{$lang->last_login}<block cond="$sort_index == 'last_login'"> <em cond="$sort_order=='asc'">▲</em><em cond="$sort_order != 'asc'">▼</em></block></a></th>
|
||||
<th scope="col" class="nowr rx_detail_marks">{$lang->member_group}</th>
|
||||
<th scope="col" class="nowr">{$lang->inquiry}/{$lang->cmd_modify}</th>
|
||||
<th scope="col">
|
||||
<input type="checkbox" title="Check All" data-name="user" />
|
||||
|
|
@ -45,7 +49,7 @@
|
|||
<tbody>
|
||||
<tr loop="$member_list=>$no,$member_info">
|
||||
{@$member_info = get_object_vars($member_info)}
|
||||
<td class="nowr" cond="$profileImageConfig == 'Y' && $config->member_profile_view == 'Y'">
|
||||
<td class="nowr rx_detail_marks" cond="$profileImageConfig == 'Y' && $config->member_profile_view == 'Y'">
|
||||
<!--@if($member_info['profile_image'])-->
|
||||
<img src="{$member_info['profile_image']->src}" class="profile_img" />
|
||||
<!--@else-->
|
||||
|
|
@ -66,9 +70,9 @@
|
|||
{$lang->approval}
|
||||
<!--@end-->
|
||||
</td>
|
||||
<td class="nowr" title="{zdate($member_info['regdate'], 'Y-m-d H:i:s')}">{zdate($member_info['regdate'], 'Y-m-d')}</td>
|
||||
<td class="nowr" title="{zdate($member_info['last_login'], 'Y-m-d H:i:s')}">{zdate($member_info['last_login'], 'Y-m-d')}</td>
|
||||
<td>{$member_info['group_list']} </td>
|
||||
<td class="nowr rx_detail_marks" title="{zdate($member_info['regdate'], 'Y-m-d H:i:s')}">{zdate($member_info['regdate'], 'Y-m-d')}</td>
|
||||
<td class="nowr rx_detail_marks" title="{zdate($member_info['last_login'], 'Y-m-d H:i:s')}">{zdate($member_info['last_login'], 'Y-m-d')}</td>
|
||||
<td class="rx_detail_marks">{$member_info['group_list']} </td>
|
||||
<td class="nowr"><a href="{getUrl('', 'module', 'admin', 'act', 'dispMemberAdminInsert', 'member_srl', $member_info['member_srl'])}">{$lang->inquiry}/{$lang->cmd_modify}</a></td>
|
||||
{@$used_values = ''}
|
||||
<!--@foreach($usedIdentifiers as $name=>$title)-->
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
</div>
|
||||
</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>
|
||||
<p class="x_control-label">{$lang->cmd_manage_form}</p>
|
||||
<div class="x_controls">
|
||||
<table class="__join_form sortable x_table x_table-striped x_table-hover">
|
||||
<thead>
|
||||
|
|
@ -111,7 +111,7 @@
|
|||
<input type="hidden" name="usable_list[]" value="{$item->name}"/>
|
||||
<input type="hidden" name="{$item->name}" value="requierd"/>
|
||||
<th scope="row">
|
||||
<span class="_title" style="display:inline-block;white-space:pre-line;overflow:inherit;width:120px;text-overflow:ellipsis;padding-left:20px">{$item->title} <a class="x_icon-question-sign" href="./common/manual/admin/index.html#UMAN_login_key" target="_blank">{$lang->help}</a></span>
|
||||
<span class="_title" style="display:inline-block;white-space:pre-line;overflow:inherit;width:120px;text-overflow:ellipsis;padding-left:20px">{$item->title}</span>
|
||||
</th>
|
||||
<td style="text-align:center"><input type="radio" name="identifier" value="{$item->name}" checked="checked" /></td>
|
||||
<td style="text-align:center"><input type="checkbox" name="usable_list[]" value="{$item->name}" title="{$lang->use}" checked="checked" disabled="disabled" /></td>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue