mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-05-22 05:15:29 +09:00
Merge branch 'develop' into pr/session-class
This commit is contained in:
commit
483ac84796
454 changed files with 10659 additions and 30145 deletions
|
|
@ -1,4 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module>
|
||||
<grants />
|
||||
<permissions>
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
<action name="dispMemberAdminGroupList" type="view" menu_name="userGroup" menu_index="true" />
|
||||
<action name="dispMemberAdminInfo" type="view" menu_name="userList" />
|
||||
<action name="dispMemberAdminInsertJoinForm" type="view" />
|
||||
<action name="dispMemberAdminNickNameLog" type="view" />
|
||||
<action name="dispMemberAdminNickNameLog" type="view" menu_name="userSetting" />
|
||||
|
||||
<action name="getMemberMenu" type="model" standalone="true" />
|
||||
<action name="getMemberAdminColorset" type="model" />
|
||||
|
|
|
|||
|
|
@ -71,8 +71,7 @@ $lang->column_id = 'The column id';
|
|||
$lang->options = 'Options';
|
||||
$lang->about_keep_signed = 'You will be still signed in even when the browser is closed.\\n\\nIt is not recommended to use this if you are using a public computer, for your personal information could be violated.';
|
||||
$lang->about_keep_warning = 'You will be still signed in even when the browser is closed. It is not recommended to use this if you are using a public computer, for your personal information could be violated';
|
||||
$lang->about_webmaster_name = 'Please enter webmaster\'s name which will be used for verification mails or other site administration. (default : webmaster).';
|
||||
$lang->about_webmaster_email = 'Please enter webmaster\'s email address.';
|
||||
$lang->about_webmaster_email = 'This setting can be changed in the <a href="index.php?module=admin&act=dispAdminConfigNotification" target="_blank">Notification Settings</a> screen.';
|
||||
$lang->search_target_list['email_address'] = 'Email Address';
|
||||
$lang->search_target_list['regdate'] = 'Sign up Date';
|
||||
$lang->search_target_list['regdate_more'] = 'Sign up Date (more)';
|
||||
|
|
|
|||
|
|
@ -71,8 +71,6 @@ $lang->about_column_id = '入力項目の区切り文字で使用するIDです
|
|||
$lang->options = '選択オプション';
|
||||
$lang->about_keep_signed = 'ブラウザを閉じてもログイン状態が維持されます。\\n\\nログイン維持機能を利用すると、次回からログインする必要がありません。\\n\\nただし、インターネットカフェ、学校など公共場所で利用する場合、個人情報が流出する恐れがありますので、必ずログアウトしてください。';
|
||||
$lang->about_keep_warning = 'ブラウザを閉じてもログイン状態が維持されます。\\n\\nログイン維持機能を利用すると、次回からログインする必要がありません。 ただし、インターネットカフェ、学校など公共場所で利用する場合、個人情報が流出する恐れがありますので、必ずログアウトしてください。';
|
||||
$lang->about_webmaster_name = '確認メール、またはサイト管理時に使用されるウェブマスターの名前を入力してください(デフォルト : webmaster)。';
|
||||
$lang->about_webmaster_email = 'ウェブマスターのメールアドレスを入力してください。';
|
||||
$lang->search_target_list['email_address'] = 'メールアドレス';
|
||||
$lang->search_target_list['regdate'] = '登録日';
|
||||
$lang->search_target_list['regdate_more'] = '登録日(以上)';
|
||||
|
|
|
|||
|
|
@ -73,8 +73,7 @@ $lang->about_column_id = '입력항목의 구분자로 사용될 ID입니다.
|
|||
$lang->options = '선택 옵션';
|
||||
$lang->about_keep_signed = '브라우저를 닫더라도 로그인이 계속 유지될 수 있습니다.\\n\\n로그인 유지 기능을 사용할 경우 다음 접속부터는 로그인할 필요가 없습니다.\\n\\n단, PC방, 학교, 도서관 등 공공장소에서 이용 시 개인정보가 유출될 수 있으니 꼭 로그아웃을 해주세요.';
|
||||
$lang->about_keep_warning = '브라우저를 닫더라도 로그인이 계속 유지될 수 있습니다. 로그인 유지 기능을 사용할 경우 다음 접속부터는 로그인할 필요가 없습니다. 단, PC방, 학교, 도서관 등 공공장소에서 이용 시 개인정보가 유출될 수 있으니 꼭 로그아웃을 해주세요.';
|
||||
$lang->about_webmaster_name = '인증 메일이나 기타 사이트 관리 시 사용될 웹마스터의 이름을 입력해주세요. (기본 : webmaster)';
|
||||
$lang->about_webmaster_email = '인증 메일이나 기타 사이트 관리 시 사용될 웹마스터의 메일 주소를 입력해주세요.';
|
||||
$lang->about_webmaster_email = '이 설정은 <a href="index.php?module=admin&act=dispAdminConfigNotification" target="_blank">알림 설정</a> 화면에서 변경할 수 있습니다.';
|
||||
$lang->search_target_list['email_address'] = '이메일';
|
||||
$lang->search_target_list['regdate'] = '가입일시';
|
||||
$lang->search_target_list['regdate_more'] = '가입일시(이상)';
|
||||
|
|
|
|||
|
|
@ -68,8 +68,6 @@ $lang->about_column_id = '使用与区分输入项目的 ID, 只能用英文字
|
|||
$lang->options = '选项选择';
|
||||
$lang->about_keep_signed = '关闭浏览器后也将维持登录状态。\\n\\n使用自动登录功能,可解决每次访问都要输入用户名及密码的麻烦。\\n\\n为防止个人信息泄露,在网吧,学校等公共场所请务必要确认解除登录状态。';
|
||||
$lang->about_keep_warning = '关闭浏览器后也将维持登录状态。\\n\\n使用自动登录功能,可解决每次访问都要输入用户名及密码的麻烦。 为防止个人信息泄露,在网吧,学校等公共场所请务必要确认解除登录状态。';
|
||||
$lang->about_webmaster_name = '请输入认证所需的电子邮件地址或管理其他网站时要使用的网站管理员名称。(默认 : webmaster)';
|
||||
$lang->about_webmaster_email = '请输入网站管理员的电子邮件地址。';
|
||||
$lang->search_target_list['email_address'] = '邮箱地址';
|
||||
$lang->search_target_list['regdate'] = '注册日期';
|
||||
$lang->search_target_list['regdate_more'] = '注册日期(以上)';
|
||||
|
|
|
|||
|
|
@ -61,8 +61,6 @@ $lang->webmaster_name = '管理員名稱';
|
|||
$lang->webmaster_email = '管理員電子郵件';
|
||||
$lang->about_keep_signed = '關閉瀏覽器後也將維持登入狀態。\\n\\n使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。\\n\\n為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_keep_warning = '關閉瀏覽器後也將維持登入狀態。使用此功能,可解決每次訪問都要輸入帳號及密碼的麻煩。為防止個人資料洩露,在網咖,學校等公共場所,請務必要確認解除登入狀態。';
|
||||
$lang->about_webmaster_name = '請輸入認證所需的電子郵件地址或管理其他網站時要使用的網站管理員名稱。(預設 : webmaster)';
|
||||
$lang->about_webmaster_email = '請輸入網站管理員的電子郵件地址。';
|
||||
$lang->search_target_list['email_address'] = '電子郵件';
|
||||
$lang->search_target_list['regdate'] = '註冊日期';
|
||||
$lang->search_target_list['regdate_more'] = '註冊日期(以上)';
|
||||
|
|
|
|||
|
|
@ -167,8 +167,6 @@ class memberAdminController extends member
|
|||
'enable_join',
|
||||
'enable_confirm',
|
||||
'enable_find_account_question',
|
||||
'webmaster_name',
|
||||
'webmaster_email',
|
||||
'password_strength',
|
||||
'password_hashing_algorithm',
|
||||
'password_hashing_work_factor',
|
||||
|
|
@ -196,11 +194,6 @@ class memberAdminController extends member
|
|||
$args->password_hashing_auto_upgrade = 'N';
|
||||
}
|
||||
|
||||
if((!$args->webmaster_name || !$args->webmaster_email) && $args->enable_confirm == 'Y')
|
||||
{
|
||||
return new Object(-1, 'msg_mail_authorization');
|
||||
}
|
||||
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->updateModuleConfig('member', $args);
|
||||
|
||||
|
|
|
|||
|
|
@ -118,6 +118,7 @@ class memberAdminView extends member
|
|||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('member_list..user_name', 'member_list..nick_name', 'member_list..group_list..');
|
||||
$security->encodeHTML('search_target', 'search_keyword');
|
||||
|
||||
$this->setTemplateFile('member_list');
|
||||
}
|
||||
|
|
@ -164,8 +165,7 @@ class memberAdminView extends member
|
|||
Context::set('editor_skin_list', $oEditorModel->getEditorSkinList());
|
||||
|
||||
// get an editor
|
||||
$option = new stdClass();
|
||||
$option->skin = $oEditorModel->getEditorConfig()->editor_skin;
|
||||
$option = $oEditorModel->getEditorConfig();
|
||||
$option->primary_key_name = 'temp_srl';
|
||||
$option->content_key_name = 'agreement';
|
||||
$option->allow_fileupload = false;
|
||||
|
|
|
|||
|
|
@ -302,20 +302,31 @@ class memberController extends member
|
|||
foreach($getVars as $val)
|
||||
{
|
||||
$args->{$val} = Context::get($val);
|
||||
if($val == 'birthday') $args->birthday_ui = Context::get('birthday_ui');
|
||||
|
||||
if($val == 'birthday')
|
||||
{
|
||||
$args->birthday_ui = Context::get('birthday_ui');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// mobile input date format can be different
|
||||
if($args->birthday !== intval($args->birthday))
|
||||
if($args->birthday)
|
||||
{
|
||||
$args->birthday = date('Ymd', strtotime($args->birthday));
|
||||
if($args->birthday !== intval($args->birthday))
|
||||
{
|
||||
$args->birthday = date('Ymd', strtotime($args->birthday));
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->birthday = intval($args->birthday);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if(!$args->birthday && $args->birthday_ui)
|
||||
{
|
||||
$args->birthday = intval($args->birthday);
|
||||
$args->birthday = intval(strtr($args->birthday_ui, array('-'=>'', '/'=>'', '.'=>'', ' '=>'')));
|
||||
}
|
||||
if(!$args->birthday && $args->birthday_ui) $args->birthday = intval(strtr($args->birthday_ui, array('-'=>'', '/'=>'', '.'=>'', ' '=>'')));
|
||||
|
||||
|
||||
$args->find_account_answer = Context::get('find_account_answer');
|
||||
$args->allow_mailing = Context::get('allow_mailing');
|
||||
$args->allow_message = Context::get('allow_message');
|
||||
|
|
@ -542,23 +553,35 @@ class memberController extends member
|
|||
foreach($getVars as $val)
|
||||
{
|
||||
$args->{$val} = Context::get($val);
|
||||
if($val == 'birthday') $args->birthday_ui = Context::get('birthday_ui');
|
||||
|
||||
if($val == 'birthday')
|
||||
{
|
||||
$args->birthday_ui = Context::get('birthday_ui');
|
||||
}
|
||||
}
|
||||
|
||||
// Login Information
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
|
||||
// mobile input date format can be different
|
||||
if($args->birthday !== intval($args->birthday))
|
||||
if($args->birthday)
|
||||
{
|
||||
$args->birthday = date('Ymd', strtotime($args->birthday));
|
||||
if($args->birthday !== intval($args->birthday))
|
||||
{
|
||||
$args->birthday = date('Ymd', strtotime($args->birthday));
|
||||
}
|
||||
else
|
||||
{
|
||||
$args->birthday = intval($args->birthday);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
if(!$args->birthday && $args->birthday_ui)
|
||||
{
|
||||
$args->birthday = intval($args->birthday);
|
||||
}
|
||||
if(!$args->birthday && $args->birthday_ui) $args->birthday = intval(strtr($args->birthday_ui, array('-'=>'', '/'=>'', '.'=>'', ' '=>'')));
|
||||
|
||||
$args->birthday = intval(strtr($args->birthday_ui, array('-'=>'', '/'=>'', '.'=>'', ' '=>'')));
|
||||
}
|
||||
|
||||
// Remove some unnecessary variables from all the vars
|
||||
$all_args = Context::getRequestVars();
|
||||
unset($all_args->module);
|
||||
|
|
@ -774,8 +797,8 @@ class memberController extends member
|
|||
FileHandler::removeFilesInDir($target_path);
|
||||
|
||||
$target_filename = sprintf('%s%d.%s', $target_path, $member_srl, $ext);
|
||||
// Convert if the image size is larger than a given size or if the format is not a gif
|
||||
if(($width > $max_width || $height > $max_height ) && $type != 1)
|
||||
// Convert if the image size is larger than a given size
|
||||
if($width > $max_width || $height > $max_height)
|
||||
{
|
||||
FileHandler::createImageFile($target_file, $target_filename, $max_width, $max_height, $ext);
|
||||
}
|
||||
|
|
@ -863,6 +886,7 @@ class memberController extends member
|
|||
$oMemberModel = getModel('member');
|
||||
$profile_image = $oMemberModel->getProfileImage($member_srl);
|
||||
FileHandler::removeFile($profile_image->file);
|
||||
Rhymix\Framework\Storage::deleteEmptyDirectory(dirname(FileHandler::getRealPath($profile_image->file)), true);
|
||||
}
|
||||
return new Object(0,'success');
|
||||
}
|
||||
|
|
@ -887,6 +911,7 @@ class memberController extends member
|
|||
$oMemberModel = getModel('member');
|
||||
$image_name = $oMemberModel->getImageName($member_srl);
|
||||
FileHandler::removeFile($image_name->file);
|
||||
Rhymix\Framework\Storage::deleteEmptyDirectory(dirname(FileHandler::getRealPath($image_name->file)), true);
|
||||
}
|
||||
return new Object(0,'success');
|
||||
}
|
||||
|
|
@ -969,6 +994,7 @@ class memberController extends member
|
|||
$oMemberModel = getModel('member');
|
||||
$image_mark = $oMemberModel->getImageMark($member_srl);
|
||||
FileHandler::removeFile($image_mark->file);
|
||||
Rhymix\Framework\Storage::deleteEmptyDirectory(dirname(FileHandler::getRealPath($image_mark->file)), true);
|
||||
}
|
||||
return new Object(0,'success');
|
||||
}
|
||||
|
|
@ -1522,8 +1548,9 @@ class memberController extends member
|
|||
*/
|
||||
function delSignature($member_srl)
|
||||
{
|
||||
$filename = sprintf('files/member_extra_info/signature/%s%d.gif', getNumberingPath($member_srl), $member_srl);
|
||||
FileHandler::removeFile($filename);
|
||||
$dirname = RX_BASEDIR . sprintf('files/member_extra_info/signature/%s', getNumberingPath($member_srl));
|
||||
Rhymix\Framework\Storage::deleteDirectory($dirname, false);
|
||||
Rhymix\Framework\Storage::deleteEmptyDirectory($dirname, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1988,7 +2015,7 @@ class memberController extends member
|
|||
// Control of essential parameters
|
||||
if($args->allow_mailing!='Y') $args->allow_mailing = 'N';
|
||||
if($args->denied!='Y') $args->denied = 'N';
|
||||
$args->allow_message= 'Y';
|
||||
if(!in_array($args->allow_message, array('Y', 'N', 'F'))) $args->allow_message = 'Y';
|
||||
|
||||
if($logged_info->is_admin == 'Y')
|
||||
{
|
||||
|
|
@ -2393,8 +2420,8 @@ class memberController extends member
|
|||
if(!$args->user_name) $args->user_name = $orgMemberInfo->user_name;
|
||||
if(!$args->user_id) $args->user_id = $orgMemberInfo->user_id;
|
||||
if(!$args->nick_name) $args->nick_name = $orgMemberInfo->nick_name;
|
||||
if(!$args->description) $args->description = '';
|
||||
if(!$args->birthday) $args->birthday = '';
|
||||
if(!$args->description) $args->description = $orgMemberInfo->description;
|
||||
if(!$args->birthday) $args->birthday = $orgMemberInfo->birthday;
|
||||
|
||||
$output = executeQuery('member.updateMember', $args);
|
||||
|
||||
|
|
@ -2560,13 +2587,22 @@ class memberController extends member
|
|||
ModuleHandler::triggerCall('member.deleteMember', 'after', $trigger_obj);
|
||||
|
||||
$oDB->commit();
|
||||
|
||||
// Name, image, image, mark, sign, delete
|
||||
$this->procMemberDeleteImageName($member_srl);
|
||||
$this->procMemberDeleteImageMark($member_srl);
|
||||
$this->procMemberDeleteProfileImage($member_srl);
|
||||
$this->delSignature($member_srl);
|
||||
|
||||
$this->_clearMemberCache($member_srl);
|
||||
|
||||
// Delete all remaining extra info
|
||||
$dirs = Rhymix\Framework\Storage::readDirectory(RX_BASEDIR . 'files/member_extra_info', true, true, false);
|
||||
foreach ($dirs as $dir)
|
||||
{
|
||||
$member_dir = $dir . '/' . getNumberingPath($member_srl);
|
||||
Rhymix\Framework\Storage::deleteDirectory($member_dir, false);
|
||||
Rhymix\Framework\Storage::deleteEmptyDirectory($member_dir, true);
|
||||
}
|
||||
|
||||
return $output;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ class memberModel extends member
|
|||
$url = getUrl('','mid',$mid,'act','dispMemberInfo','member_srl',$member_srl);
|
||||
$oMemberController->addMemberPopupMenu($url,'cmd_view_member_info',$icon_path,'self');
|
||||
}
|
||||
|
||||
// When click other's nickname
|
||||
if($member_srl != $logged_info->member_srl && $logged_info->member_srl)
|
||||
{
|
||||
|
|
@ -166,12 +167,42 @@ class memberModel extends member
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check if homepage and blog are public
|
||||
$homepage_is_public = false;
|
||||
$blog_is_public = false;
|
||||
if ($logged_info->is_admin === 'Y' || ($logged_info->member_srl && $logged_info->member_srl == $member_srl))
|
||||
{
|
||||
$homepage_is_public = true;
|
||||
$blog_is_public = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach ($this->module_config->signupForm as $field)
|
||||
{
|
||||
if ($field->name === 'homepage' && $field->isPublic === 'Y')
|
||||
{
|
||||
$homepage_is_public = true;
|
||||
}
|
||||
if ($field->name === 'blog' && $field->isPublic === 'Y')
|
||||
{
|
||||
$blog_is_public = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// View homepage info
|
||||
if($member_info->homepage)
|
||||
if($member_info->homepage && $homepage_is_public)
|
||||
{
|
||||
$oMemberController->addMemberPopupMenu(htmlspecialchars($member_info->homepage, ENT_COMPAT | ENT_HTML401, 'UTF-8', false), 'homepage', '', 'blank');
|
||||
}
|
||||
|
||||
// View blog info
|
||||
if($member_info->blog)
|
||||
if($member_info->blog && $blog_is_public)
|
||||
{
|
||||
$oMemberController->addMemberPopupMenu(htmlspecialchars($member_info->blog, ENT_COMPAT | ENT_HTML401, 'UTF-8', false), 'blog', '', 'blank');
|
||||
}
|
||||
|
||||
// Call a trigger (after)
|
||||
ModuleHandler::triggerCall('member.getMemberMenu', 'after', $null);
|
||||
// Display a menu for editting member info to a top administrator
|
||||
|
|
|
|||
|
|
@ -134,17 +134,17 @@ class memberView extends member
|
|||
if($formInfo->name == 'profile_image' && $memberInfo->profile_image)
|
||||
{
|
||||
$target = $memberInfo->profile_image;
|
||||
$item->value = '<img src="'.$target->src.'" />';
|
||||
$item->value = '<img src="'.$target->src.'" alt="' . lang('member.profile_image') . '" />';
|
||||
}
|
||||
elseif($formInfo->name == 'image_name' && $memberInfo->image_name)
|
||||
{
|
||||
$target = $memberInfo->image_name;
|
||||
$item->value = '<img src="'.$target->src.'" />';
|
||||
$item->value = '<img src="'.$target->src.'" alt="' . lang('member.image_name') . ' ('.escape($memberInfo->nick_name, false).')' . '" />';
|
||||
}
|
||||
elseif($formInfo->name == 'image_mark' && $memberInfo->image_mark)
|
||||
{
|
||||
$target = $memberInfo->image_mark;
|
||||
$item->value = '<img src="'.$target->src.'" />';
|
||||
$item->value = '<img src="'.$target->src.'" alt="' . lang('member.image_mark') . '" />';
|
||||
}
|
||||
elseif($formInfo->name == 'birthday' && $memberInfo->birthday)
|
||||
{
|
||||
|
|
@ -311,7 +311,7 @@ class memberView extends member
|
|||
if($member_info->member_srl)
|
||||
{
|
||||
$oEditorModel = getModel('editor');
|
||||
$option = new stdClass();
|
||||
$option = $oEditorModel->getEditorConfig();
|
||||
$option->primary_key_name = 'member_srl';
|
||||
$option->content_key_name = 'signature';
|
||||
if($member_config->member_allow_fileupload === 'Y')
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
</customrules>
|
||||
<fields>
|
||||
<field name="enable_join" required="true" />
|
||||
<field name="webmaster_name" required="true" length="2:40" />
|
||||
<field name="webmaster_email" length="1:200" rule="email" />
|
||||
<field name="password_strength" required="true" />
|
||||
<field name="password_hashing_algorithm" required="true" />
|
||||
<field name="password_hashing_work_factor" required="true" />
|
||||
|
|
|
|||
1
modules/member/skins/simple_world/common_footer.html
Normal file
1
modules/member/skins/simple_world/common_footer.html
Normal file
|
|
@ -0,0 +1 @@
|
|||
</section>
|
||||
67
modules/member/skins/simple_world/common_header.html
Normal file
67
modules/member/skins/simple_world/common_header.html
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
<load target="js/member.js" />
|
||||
<!--// Check layout. If it is Simple World, select layout primary colors as a primary color of this skin -->
|
||||
{@
|
||||
$material_colors = array(
|
||||
'red' => '#f44336',
|
||||
'crimson' => '#aa0000',
|
||||
'pink' => '#e91e63',
|
||||
'purple' => '#9c27b0',
|
||||
'deep-purple' => '#673ab7',
|
||||
'indigo' => '#3f51b5',
|
||||
'deep-blue' => '#00397f',
|
||||
'blue' => '#2196f3',
|
||||
'light-blue' => '#03a9f4',
|
||||
'cyan' => '#00bcd4',
|
||||
'teal' => '#009688',
|
||||
'green' => '#4caf50',
|
||||
'light-green' => '#8bc34a',
|
||||
'lime' => '#cddc39',
|
||||
'yellow' => '#ffeb3b',
|
||||
'amber' => '#ffc107',
|
||||
'orange' => '#ff9800',
|
||||
'deep-orange' => '#ff5722',
|
||||
'brown' => '#795548',
|
||||
'grey' => '#9e9e9e',
|
||||
'blue-grey' => '#607d8b',
|
||||
'black' => '#000000',
|
||||
'white' => '#ffffff',
|
||||
'customized' => $layout_info->customized_primary_color,
|
||||
);
|
||||
}
|
||||
<block cond="$layout_info->extra_var->primary_color->type === 'select' || $layout_info->extra_var->customized_primary_color->type === 'colorpicker'">
|
||||
{@
|
||||
if(!$layout_info->primary_color && $layout_info->customized_primary_color)
|
||||
$layout_info->primary_color = 'customized';
|
||||
if(!$layout_info->primary_color)
|
||||
$layout_info->primary_color = 'red';
|
||||
if(!$layout_info->customized_primary_color)
|
||||
$layout_info->customized_primary_color = '#f44336';
|
||||
}
|
||||
|
||||
</block>
|
||||
<block cond="$layout_info->extra_var->primary_color->type !== 'select' && $layout_info->extra_var->customized_primary_color->type !== 'colorpicker'">
|
||||
{@$layout_info->primary_color = 'blue';}
|
||||
</block>
|
||||
|
||||
<!--// Load styles -->
|
||||
{@$skin_color = $material_colors[$layout_info->primary_color];}
|
||||
<block cond="!$skin_color">
|
||||
<!--@if(preg_match("/#([a-f0-9]{3}){1,2}/i", $layout_info->primary_color))-->
|
||||
{@$skin_color = $layout_info->primary_color}
|
||||
<!--@if(strlen($layout_info->primary_color) === 4)-->
|
||||
{@$skin_color = $layout_info->primary_color[1].$layout_info->primary_color[1].$layout_info->primary_color[2].$layout_info->primary_color[2].$layout_info->primary_color[3].$layout_info->primary_color[3]}
|
||||
<!--@endif-->
|
||||
<!--@else-->
|
||||
{@$skin_color = '#f44336'}
|
||||
<!--@endif-->
|
||||
</block>
|
||||
{Context::set('simple_less_value', array('red' => hexdec(substr($skin_color, 1, 2)), 'green' => hexdec(substr($skin_color, 3, 2)), 'blue' => hexdec(substr($skin_color, 5, 2)) ))}
|
||||
<load target="css/css.less" vars="$simple_less_value" />
|
||||
<section class="rx_simple_member">
|
||||
<div class="rx_simple_tab" cond="$is_logged && $logged_info->menu_list && (!$member_srl || $member_srl == $logged_info->member_srl)">
|
||||
<ul class="rx_simple_tab">
|
||||
<li loop="$logged_info->menu_list=>$key,$val" class="active"|cond="$key==$act">
|
||||
<a href="{getUrl('', 'act',$key, 'mid', $mid, 'vid', $vid)}"><span>{lang($val)}</span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<section style="font-size: 14px;margin: 8px 0px;padding: 0 15px;">
|
||||
<section style="box-sizing:border-box;background-color:#ffffff;margin: 0 0 20px;border: 1px solid #e0e0e0;">
|
||||
<h1 style="border-bottom: 1px solid #e0e0e0;margin: 0;padding: 20px;">{lang('member.msg_confirm_account_info')}</h1>
|
||||
<dl style="border: 0 none;margin: 0;padding: 20px;">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang('member.site')}</dt>
|
||||
<dd style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">
|
||||
<a href="{getUrl()}" target="_blank" style="color: #2196f3;text-decoration: none;">{getUrl()}</a>
|
||||
</dd>
|
||||
<block loop="$memberInfo=>$name,$value" cond="!is_object($value)&&!is_array($value)">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang($name)}</dt>
|
||||
<dl style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{$value}</dl>
|
||||
</block>
|
||||
</dl>
|
||||
<p style="border: 0 none;margin: 0;padding: 20px;">
|
||||
{lang('member.msg_confirm_account_comment')}<br />
|
||||
<a href="{$auth_url}" target="_blank" style="color: #2196f3;text-decoration: none;">{$auth_url}</a>
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
<section style="font-size: 14px;margin: 8px 0px;padding: 0 15px;">
|
||||
<section style="box-sizing:border-box;background-color:#ffffff;margin: 0 0 20px;border: 1px solid #e0e0e0;">
|
||||
<h1 style="border-bottom: 1px solid #e0e0e0;margin: 0;padding: 20px;">{lang('member.msg_confirm_account_info')}</h1>
|
||||
<dl style="border: 0 none;margin: 0;padding: 20px;">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang('member.site')}</dt>
|
||||
<dd style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">
|
||||
<a href="{getUrl()}" target="_blank" style="color: #2196f3;text-decoration: none;">{getUrl()}</a>
|
||||
</dd>
|
||||
<block loop="$memberInfo=>$name,$value" cond="!is_object($value)&&!is_array($value)">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang($name)}</dt>
|
||||
<dl style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{$value}</dl>
|
||||
</block>
|
||||
</dl>
|
||||
<p style="border: 0 none;margin: 0;padding: 20px;">
|
||||
{sprintf($lang->msg_confirm_email_address_change, $newEmail)}<br />
|
||||
<a href="{$auth_url}" target="_blank" style="color: #2196f3;text-decoration: none;">{$auth_url}</a>
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
279
modules/member/skins/simple_world/css/css.css
Normal file
279
modules/member/skins/simple_world/css/css.css
Normal file
|
|
@ -0,0 +1,279 @@
|
|||
@charset "UTF-8";
|
||||
/* Automatically produced CSS file based on css.less by misol<misol.kr@gmail.com> with light blue (#03a9f4) as the primary color */
|
||||
script, style {
|
||||
display: none !important;
|
||||
}
|
||||
.rx_simple_member {
|
||||
font-family: "맑은 고딕", "Apple SD Gothic Neo", "나눔고딕", NanumGothic, 'Nanum Gothic', Arial, Helvetica, sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 8px 0px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
.rx_simple_member a {
|
||||
color: #03a9f4;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member .pos-right {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
}
|
||||
.rx_member-notice,
|
||||
.rx_member-notice.info {
|
||||
background: #d4f1fe;
|
||||
color: #000;
|
||||
padding: 15px;
|
||||
margin: 0;
|
||||
margin-top: 0;
|
||||
text-align: justify;
|
||||
}
|
||||
.rx_member-notice.error {
|
||||
background: #fff3e0;
|
||||
color: #000;
|
||||
}
|
||||
.rx_member-notice.update {
|
||||
background: #e8f5e9;
|
||||
color: #000;
|
||||
}
|
||||
.rx_member-notice>* {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.rx_simple_member .signin {
|
||||
max-width: 400px;
|
||||
margin: 30px auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.rx_simple_member .sw-body {
|
||||
box-sizing: border-box;
|
||||
background: #ffffff;
|
||||
margin: 0 0 20px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
}
|
||||
.rx_simple_member .sw-body>* {
|
||||
padding: 20px;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
.rx_simple_member .sw-body h1 {
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.rx_simple_member form div.control-group>*,
|
||||
.rx_simple_member .sw-body dl>* {
|
||||
display: block;
|
||||
position: relative;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
min-height: 25px;
|
||||
margin: 0px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.rx_simple_member form div.control-group>*:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input,
|
||||
.rx_simple_member form div.control-group>select {
|
||||
border: 1px solid #bdbdbd;
|
||||
border-radius: 0;
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
margin-top: 0;
|
||||
padding: 8px 8px 6px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
.rx_simple_member .sw-body dl>* {
|
||||
list-style: none;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.rx_simple_member .sw-body dl dt,
|
||||
.rx_simple_member form>div.control-group>label,
|
||||
.rx_simple_member form>div.control-group>div.control-label {
|
||||
font-weight: bold;
|
||||
border: 0;
|
||||
}
|
||||
.rx_simple_member form {
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
white-space: normal;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input[type="submit"],
|
||||
.rx_simple_member form div.control-group>input.btn.dateRemover,
|
||||
.rx_simple_member .sw-footer>a,
|
||||
.rx_simple_member .sw-anchor-buttons a {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
vertical-align: bottom;
|
||||
darken: #000c11;
|
||||
background: #2ebcfc;
|
||||
font-weight: bold;
|
||||
border: 0;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
color: #000c11;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input[type="submit"],
|
||||
.rx_simple_member .sw-footer {
|
||||
margin: 20px 0 0;
|
||||
}
|
||||
.rx_simple_member div.rx_simple_tab {
|
||||
background: #ffffff;
|
||||
margin: 5px 0;
|
||||
height: 52px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab {
|
||||
list-style: outside none none;
|
||||
margin: 0;
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
padding: 6px 0px 100px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li {
|
||||
display: inline-block;
|
||||
height: 40px;
|
||||
line-height: 18px;
|
||||
position: relative;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a {
|
||||
display: inline-block;
|
||||
color: #000;
|
||||
font-weight: 400;
|
||||
letter-spacing: -1px;
|
||||
line-height: 40px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a:hover,
|
||||
.rx_simple_member ul.rx_simple_tab>li a:focus,
|
||||
.rx_simple_member ul.rx_simple_tab>li.active a {
|
||||
color: #14b4fc;
|
||||
font-weight: 700;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a span {
|
||||
border-left: 1px solid #e0e0e0;
|
||||
padding: 0 15px;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li:first-child a span {
|
||||
border-left: 0 none;
|
||||
}
|
||||
.rx_simple_member .sw-footer.sw-anchor-buttons {
|
||||
text-align: right;
|
||||
}
|
||||
.rx_simple_member .sw-footer.sw-anchor-buttons>a {
|
||||
display: inline-block;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .cont_a {
|
||||
color: #222;
|
||||
display: block;
|
||||
letter-spacing: -1px;
|
||||
line-height: 18px;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 0.667em 70px 0.733em 15px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .cont_a.no_delete {
|
||||
padding-right: 15px;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .cont_a:hover,
|
||||
.rx_simple_member .rx_sw_list .cont_a:focus {
|
||||
color: #14b4fc;
|
||||
}
|
||||
.rx_simple_member .content_basic {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
max-width: 100%;
|
||||
vertical-align: middle;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.rx_simple_member .content_subinfo {
|
||||
color: #9e9e9e;
|
||||
font-size: 12px;
|
||||
margin: 0 3px 0 7px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.rx_simple_member ul.rx_sw_list {
|
||||
list-style: outside none none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list li {
|
||||
position: relative;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
overflow: hidden;
|
||||
padding: 0;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .content_delete {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 2px;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .content_delete button {
|
||||
background: #92dcfe;
|
||||
font-size: 14px;
|
||||
border: 0;
|
||||
color: #000;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
padding: 10px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.rx_simple_member .pagination ul,
|
||||
.rx_simple_member .pagination ul li {
|
||||
display: inline-block;
|
||||
list-style: outside none none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border: 0;
|
||||
}
|
||||
.rx_simple_member .pagination ul {
|
||||
display: block;
|
||||
text-align: center;
|
||||
}
|
||||
.rx_simple_member .pagination ul li>a,
|
||||
.rx_simple_member .sw-footer>a {
|
||||
display: inline-block;
|
||||
background: #fff;
|
||||
font-size: 14px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
color: #000;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
min-width: 25px;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
}
|
||||
.rx_simple_member .sw-footer>a {
|
||||
display: block;
|
||||
}
|
||||
.rx_simple_member .pagination ul li.active>a {
|
||||
background: #47c4fd;
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input[type="submit"]:hover,
|
||||
.rx_simple_member form div.control-group>input.btn.dateRemover:hover,
|
||||
.rx_simple_member .sw-footer>a:hover,
|
||||
.rx_simple_member .sw-anchor-buttons a:hover,
|
||||
.rx_simple_member .pagination ul li>a:hover,
|
||||
.rx_simple_member .rx_sw_list .content_delete button:hover,
|
||||
.rx_simple_member form div.control-group>input[type="submit"]:focus,
|
||||
.rx_simple_member form div.control-group>input.btn.dateRemover:focus,
|
||||
.rx_simple_member .sw-footer>a:focus,
|
||||
.rx_simple_member .sw-anchor-buttons a:focus,
|
||||
.rx_simple_member .pagination ul li>a:focus,
|
||||
.rx_simple_member .rx_sw_list .content_delete button:focus {
|
||||
background: #027cb3;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.16), 0 2px 4px rgba(0,0,0,0.23);
|
||||
}
|
||||
|
||||
348
modules/member/skins/simple_world/css/css.less
Normal file
348
modules/member/skins/simple_world/css/css.less
Normal file
|
|
@ -0,0 +1,348 @@
|
|||
@charset "UTF-8";
|
||||
/*
|
||||
@method .text-contrast()
|
||||
@author misol <misol.kr@gmail.com>
|
||||
@brief Select a text color according to WCAG 2.0 contrast guideline. The calcualtion of contrast follows the formula on the guideline.
|
||||
*/
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) {
|
||||
color: @bright_color;
|
||||
}
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) {
|
||||
color: @dark_color;
|
||||
}
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) > 4.5 * @multi ) {
|
||||
color: @bright_color;
|
||||
}
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) ) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) ) =< 4.5 * @multi ) {
|
||||
.text-contrast(@bg_color; lighten(@bright_color, 5%); @dark_color; @multi; @i + 1);
|
||||
}
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > 4.5 * @multi ) {
|
||||
color: @dark_color;
|
||||
}
|
||||
.text-contrast(@bg_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and (( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@bg_color) + 0.05) )) and ( ( (luma(@bg_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< 4.5 * @multi ) {
|
||||
.text-contrast(@bg_color; @bright_color; darken(@dark_color, 5%); @multi; @i + 1);
|
||||
}
|
||||
|
||||
/*
|
||||
@method .bg-contrast()
|
||||
@author misol <misol.kr@gmail.com>
|
||||
@brief Select a background color, which has less contrast background color than WCAG 2.0 contrast guideline. On the WCAG 2.0 guideline, bigger string can have less contrast as 3.0.
|
||||
*/
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) {
|
||||
background: @bright_color;
|
||||
}
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i >= 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) {
|
||||
background: @dark_color;
|
||||
}
|
||||
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) > 3 * @multi ) {
|
||||
background: @bright_color;
|
||||
}
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) ) and ( ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) ) =< 3 * @multi ) {
|
||||
.bg-contrast(@text_color; lighten(@bright_color,3%); @dark_color; @multi; @i + 1);
|
||||
}
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > 3 * @multi ) {
|
||||
background: @dark_color;
|
||||
}
|
||||
.bg-contrast(@text_color; @bright_color:#fff; @dark_color:#000; @multi:1; @i:0) when (@i < 100) and (( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) > ( ( luma(@bright_color) + 0.05) / ( luma(@text_color) + 0.05) )) and ( ( (luma(@text_color) + 0.05) / (luma(@dark_color) + 0.05) ) =< 3 * @multi ) {
|
||||
.bg-contrast(@text_color; @bright_color; darken(@dark_color, 3%); @multi; @i + 1);
|
||||
}
|
||||
|
||||
/* As LESS library in Rhymix substitude variables as an strings, convert colors as the color objects of LESS. */
|
||||
@color: rgb(@red, @green, @blue);
|
||||
|
||||
/* As this file handle some wild-selectors to control display settings, hide inline script and style codes. */
|
||||
script, style
|
||||
{
|
||||
display:none!important;
|
||||
}
|
||||
|
||||
/* Member skin container, default settings */
|
||||
.rx_simple_member
|
||||
{
|
||||
font-family: "맑은 고딕", "Apple SD Gothic Neo","나눔고딕",NanumGothic,'Nanum Gothic',Arial,Helvetica,sans-serif;
|
||||
font-size: 14px;
|
||||
margin: 8px 0px;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
.rx_simple_member a
|
||||
{
|
||||
color: @color;
|
||||
text-decoration: none;
|
||||
}
|
||||
/* Horizontal align */
|
||||
.rx_simple_member .pos-right
|
||||
{
|
||||
position:absolute;
|
||||
right:0
|
||||
}
|
||||
/* message; error, info, update */
|
||||
.rx_member-notice, .rx_member-notice.info
|
||||
{
|
||||
.bg-contrast(#000; lighten(@color, 5%); darken(@color, 5%); 5.0);
|
||||
color: #000;
|
||||
padding: 15px;
|
||||
margin:0;
|
||||
margin-top:0;
|
||||
text-align: justify;
|
||||
}
|
||||
.rx_member-notice.error
|
||||
{
|
||||
background: #fff3e0;
|
||||
.text-contrast(#fff3e0);
|
||||
}
|
||||
.rx_member-notice.update
|
||||
{
|
||||
background: #e8f5e9;
|
||||
.text-contrast(#e8f5e9);
|
||||
}
|
||||
.rx_member-notice>*
|
||||
{
|
||||
padding: 0;
|
||||
margin:0;
|
||||
}
|
||||
/* member forms */
|
||||
.rx_simple_member .signin
|
||||
{
|
||||
max-width:400px;
|
||||
margin:30px auto;
|
||||
box-sizing:border-box
|
||||
}
|
||||
.rx_simple_member .sw-body
|
||||
{
|
||||
box-sizing:border-box;
|
||||
background:#ffffff;
|
||||
margin: 0 0 20px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
}
|
||||
.rx_simple_member .sw-body>*
|
||||
{
|
||||
padding: 20px;
|
||||
margin:0;
|
||||
border: 0;
|
||||
}
|
||||
.rx_simple_member .sw-body h1
|
||||
{
|
||||
margin:0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.rx_simple_member form div.control-group>*, .rx_simple_member .sw-body dl>*
|
||||
{
|
||||
display:block;
|
||||
position:relative;
|
||||
box-sizing: border-box;
|
||||
width:100%;
|
||||
min-height:25px;
|
||||
margin:0px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.rx_simple_member form div.control-group>*:first-child
|
||||
{
|
||||
margin-top: 0;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input, .rx_simple_member form div.control-group>select
|
||||
{
|
||||
border: 1px solid #bdbdbd;
|
||||
border-radius: 0;
|
||||
font-size:14px;
|
||||
line-height: 18px;
|
||||
margin-top: 0;
|
||||
padding:8px 8px 6px;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
.rx_simple_member .sw-body dl>*
|
||||
{
|
||||
list-style:none;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
.rx_simple_member .sw-body dl dt, .rx_simple_member form>div.control-group>label, .rx_simple_member form>div.control-group>div.control-label
|
||||
{
|
||||
font-weight: bold;
|
||||
border:0;
|
||||
}
|
||||
.rx_simple_member form
|
||||
{
|
||||
overflow: hidden;
|
||||
width:100%;
|
||||
white-space: normal;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input[type="submit"], .rx_simple_member form div.control-group>input.btn.dateRemover, .rx_simple_member .sw-footer>a, .rx_simple_member .sw-anchor-buttons a
|
||||
{
|
||||
display:block;
|
||||
padding: 10px;
|
||||
vertical-align: bottom;
|
||||
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 2.0);
|
||||
font-weight: bold;
|
||||
text-shadow: none;
|
||||
border:0;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
color: #000;
|
||||
}
|
||||
.rx_simple_member form div.control-group>input[type="submit"], .rx_simple_member .sw-footer{
|
||||
margin: 20px 0 0;
|
||||
}
|
||||
|
||||
/* Tab over the main content. */
|
||||
.rx_simple_member div.rx_simple_tab{
|
||||
background: #ffffff;
|
||||
margin: 5px 0;
|
||||
height: 52px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab{
|
||||
list-style: outside none none;
|
||||
margin: 0;
|
||||
display: block;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
padding: 6px 0px 100px;
|
||||
text-decoration: none;
|
||||
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li {
|
||||
display:inline-block;
|
||||
height: 40px;
|
||||
line-height: 18px;
|
||||
position: relative;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a {
|
||||
display:inline-block;
|
||||
color: #000;
|
||||
font-weight: 400;
|
||||
letter-spacing: -1px;
|
||||
line-height: 40px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a:hover, .rx_simple_member ul.rx_simple_tab>li a:focus, .rx_simple_member ul.rx_simple_tab>li.active a {
|
||||
.text-contrast(#fff; darken(@color,5%); lighten(@color,5%));
|
||||
font-weight: 700;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li a span {
|
||||
border-left: 1px solid #e0e0e0;
|
||||
padding: 0 15px;
|
||||
}
|
||||
.rx_simple_member ul.rx_simple_tab>li:first-child a span {
|
||||
border-left: 0 none;
|
||||
}
|
||||
.rx_simple_member .sw-footer.sw-anchor-buttons {
|
||||
text-align:right;
|
||||
}
|
||||
.rx_simple_member .sw-footer.sw-anchor-buttons>a {
|
||||
display:inline-block;
|
||||
}
|
||||
|
||||
|
||||
/* The list of document style */
|
||||
.rx_simple_member .rx_sw_list .cont_a {
|
||||
color: #222;
|
||||
display: block;
|
||||
letter-spacing: -1px;
|
||||
line-height: 18px;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
padding: 0.667em 70px 0.733em 15px;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .cont_a.no_delete {
|
||||
padding-right: 15px;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .cont_a:hover, .rx_simple_member .rx_sw_list .cont_a:focus {
|
||||
.text-contrast(#fff; darken(@color,5%); lighten(@color,5%));
|
||||
}
|
||||
.rx_simple_member .content_basic{
|
||||
position:relative;
|
||||
display:inline-block;
|
||||
max-width:100%;
|
||||
vertical-align: middle;
|
||||
overflow:hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.rx_simple_member .content_subinfo
|
||||
{
|
||||
color: #9e9e9e;
|
||||
font-size: 12px;
|
||||
margin: 0 3px 0 7px;
|
||||
overflow:hidden;
|
||||
}
|
||||
.rx_simple_member ul.rx_sw_list {
|
||||
list-style: outside none none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
|
||||
.rx_simple_member .rx_sw_list li {
|
||||
position:relative;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
overflow: hidden;
|
||||
padding:0;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .content_delete{
|
||||
position:absolute;
|
||||
top:0;
|
||||
right:2px;
|
||||
}
|
||||
.rx_simple_member .rx_sw_list .content_delete button{
|
||||
background: lighten(@color, 5%);
|
||||
font-size: 14px;
|
||||
border:0;
|
||||
.text-contrast(lighten(@color, 5%));
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
padding: 10px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
.rx_simple_member .pagination ul, .rx_simple_member .pagination ul li
|
||||
{
|
||||
display:inline-block;
|
||||
list-style: outside none none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
border:0;
|
||||
}
|
||||
.rx_simple_member .pagination ul
|
||||
{
|
||||
display:block;
|
||||
text-align:center;
|
||||
}
|
||||
.rx_simple_member .pagination ul li>a, .rx_simple_member .sw-footer>a
|
||||
{
|
||||
display: inline-block;
|
||||
background: #fff;
|
||||
font-size: 14px;
|
||||
box-shadow: 0 1px 2px rgba(0,0,0,0.16), 0 1px 2px rgba(0,0,0,0.23);
|
||||
color: #000;
|
||||
font-weight: bold;
|
||||
padding: 10px;
|
||||
min-width:25px;
|
||||
text-decoration: none;
|
||||
text-align: center;
|
||||
}
|
||||
.rx_simple_member .sw-footer>a
|
||||
{
|
||||
display: block;
|
||||
}
|
||||
.rx_simple_member .pagination ul li.active>a
|
||||
{
|
||||
.bg-contrast(#000; lighten(@color, 5%); darken(@color, 5%));
|
||||
font-weight:bold;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
/* button hover */
|
||||
.rx_simple_member form div.control-group>input[type="submit"]:hover, .rx_simple_member form div.control-group>input.btn.dateRemover:hover, .rx_simple_member .sw-footer>a:hover, .rx_simple_member .sw-anchor-buttons a:hover, .rx_simple_member .pagination ul li>a:hover, .rx_simple_member .rx_sw_list .content_delete button:hover,
|
||||
.rx_simple_member form div.control-group>input[type="submit"]:focus, .rx_simple_member form div.control-group>input.btn.dateRemover:focus, .rx_simple_member .sw-footer>a:focus, .rx_simple_member .sw-anchor-buttons a:focus, .rx_simple_member .pagination ul li>a:focus, .rx_simple_member .rx_sw_list .content_delete button:focus
|
||||
|
||||
{
|
||||
|
||||
.bg-contrast(#000; lighten(@color,5%); darken(@color,5%); 4.0);
|
||||
color: #000;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.16), 0 2px 4px rgba(0,0,0,0.23);
|
||||
}
|
||||
43
modules/member/skins/simple_world/document_list.html
Normal file
43
modules/member/skins/simple_world/document_list.html
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$member_title = lang('member.cmd_view_own_document')}</h1>
|
||||
<div class="rx_member-notice">
|
||||
{lang('common.total')}: {number_format($total_count)}
|
||||
</div>
|
||||
<div>
|
||||
<ul class="rx_sw_list">
|
||||
<li loop="$document_list => $key, $item">
|
||||
<a href="{getUrl('','document_srl',$item->document_srl)}" class="cont_a no_delete" onclick="window.open(this.href);return false;">
|
||||
<span class="content_basic">
|
||||
<span class="content_title">
|
||||
{escape($item->getTitle())}
|
||||
</span>
|
||||
<span class="content_subinfo">
|
||||
{$item->getRegdate("Y-m-d")}
|
||||
<!--@if($item->getCommentCount())-->
|
||||
[{$item->getCommentCount()}]
|
||||
<!--@end-->
|
||||
<!--@if($item->get('voted_count'))-->
|
||||
[{$item->get('voted_count')}]
|
||||
<!--@end-->
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','module_srl','')}" class="direction">‹ {lang('common.first_page')}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{lang('common.last_page')} ›</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sw-footer sw-anchor-buttons">
|
||||
<a href="{getUrl('','module','module','act','dispModuleSelectList','id','target_module','type','single')}" onclick="popopen(this.href,'ModuleSelect');return false;">{lang('module.cmd_find_module')}</a>
|
||||
<a href="{getUrl('selected_module_srl','')}" cond="$selected_module_srl">{lang('common.cmd_cancel')}</a>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
86
modules/member/skins/simple_world/find_member_account.html
Normal file
86
modules/member/skins/simple_world/find_member_account.html
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_find_member_account_with_email')}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/simple_world/find_member_account/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<p class="rx_member-notice">{lang('member.about_find_member_account')}</p>
|
||||
<form action="{getUrl('', 'act', 'procMemberFindAccount')}" method="get" ruleset="findAccount">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="act" value="procMemberFindAccount" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skin/simple_world/find_member_account/1" />
|
||||
<div class="control-group">
|
||||
<label for="uid">
|
||||
{lang('common.email_address')}
|
||||
</label>
|
||||
<input type="email" name="email_address" id="uid" required title="{lang('common.email_address')}" />
|
||||
<block cond="$captcha">{$captcha}<br /></block>
|
||||
<input type="submit" value="{lang('member.cmd_find_member_account')}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<section class="sw-body" cond="count(lang('member.find_account_question_items'))>1 && $enable_find_account_question == 'Y'">
|
||||
<h1>{$lang->cmd_find_member_account_with_email_question}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/simple_world/find_member_account/2'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<p class="rx_member-notice">{lang('member.about_find_account_question')}</p>
|
||||
<form action="{getUrl('', 'act', 'procMemberFindAccountByQuestion')}" method="get" ruleset="@find_member_account_by_question">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="act" value="procMemberFindAccountByQuestion" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('', 'act', 'dispMemberGetTempPassword')}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skin/simple_world/find_member_account/2" />
|
||||
<div class="control-group">
|
||||
<label for="user_id" cond="$identifier == 'user_id'">
|
||||
{lang('common.user_id')}
|
||||
</label>
|
||||
<input type="text" name="user_id" id="user_id" required title="{lang('common.user_id')}" cond="$identifier == 'user_id'" />
|
||||
<label for="email_address2">
|
||||
{lang('common.email_address')}
|
||||
</label>
|
||||
<input type="email" name="email_address" id="email_address2" required title="{lang('common.email_address')}" />
|
||||
<label for="find_account_question">
|
||||
{lang('member.find_account_question')}
|
||||
</label>
|
||||
<select name="find_account_question" id="find_account_question">
|
||||
<!--@for($i=1,$c=count(lang('member.find_account_question_items'));$i<=$c;$i++)-->
|
||||
<option value="{$i}">{lang('member.find_account_question_items')[$i]}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<input type="text" name="find_account_answer" value="" required title="{lang('member.find_account_question')}" />
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<block cond="$captcha">{$captcha}<br /></block>
|
||||
<input type="submit" value="{lang('member.cmd_get_temp_password')}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_resend_auth_mail')}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/simple_world/find_member_account/3'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<p class="rx_member-notice">{lang('member.about_resend_auth_mail')}</p>
|
||||
<form ruleset="resendAuthMail" action="{getUrl('', 'act', 'procMemberResendAuthMail')}" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberResendAuthMail" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl(act, $act)}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skin/simple_world/find_member_account/3" />
|
||||
<div class="control-group">
|
||||
<label for="email_address3">
|
||||
{lang('common.email_address')}
|
||||
</label>
|
||||
<input type="email" id="email_address3" name="email_address" value="" required title="{lang('common.email_address')}" /><br />
|
||||
<block cond="$captcha">{$captcha}<br /></block>
|
||||
<input type="submit" value="{lang('member.cmd_resend_auth_mail')}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<include target="./common_footer.html" />
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
<section style="font-size: 14px;margin: 8px 0px;padding: 0 15px;">
|
||||
<section style="box-sizing:border-box;background-color:#ffffff;margin: 0 0 20px;border: 1px solid #e0e0e0;">
|
||||
<h1 style="border-bottom: 1px solid #e0e0e0;margin: 0;padding: 20px;">{lang('member.msg_find_account_info')}</h1>
|
||||
<dl style="border: 0 none;margin: 0;padding: 20px;">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang('member.site')}</dt>
|
||||
<dd style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">
|
||||
<a href="{getUrl()}" target="_blank" style="color: #2196f3;text-decoration: none;">{getUrl()}</a>
|
||||
</dd>
|
||||
<block loop="$memberInfo=>$name,$value" cond="!is_object($value)&&!is_array($value)">
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang($name)}</dt>
|
||||
<dl style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{$value}</dl>
|
||||
</block>
|
||||
<dt style="border: 0 none;font-weight: bold;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;">{lang('common.password')}</dt>
|
||||
<dl style="border-bottom: 1px solid #e0e0e0;list-style: outside none none;box-sizing: border-box;display: block;margin: 10px 0 0;min-height: 25px;position: relative;width: 100%;color:red">{$auth_args->new_password}</dl>
|
||||
</dl>
|
||||
<p style="border: 0 none;margin: 0;padding: 20px;">
|
||||
{lang('member.msg_find_account_comment')}<br />
|
||||
<a href="{$find_url}" target="_blank" style="color: #2196f3;text-decoration: none;">{$find_url}</a>
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
12
modules/member/skins/simple_world/find_temp_password.html
Normal file
12
modules/member/skins/simple_world/find_temp_password.html
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_find_member_account')}</h1>
|
||||
<div class="rx_member-notice">{lang('member.about_temp_password')}</div>
|
||||
<dl>
|
||||
<dt>{lang('common.user_id')}</dt>
|
||||
<dd>{$user_id}</dd>
|
||||
<dt>{lang('member.temp_password')}</dt>
|
||||
<dd>{$temp_password}</dd>
|
||||
</dl>
|
||||
</section>
|
||||
<include target="./common_footer.html" />
|
||||
163
modules/member/skins/simple_world/js/member.js
Normal file
163
modules/member/skins/simple_world/js/member.js
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
/* 사용자 추가 */
|
||||
function completeInsert(ret_obj, response_tags, args, fo_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
var redirect_url = ret_obj['redirect_url'];
|
||||
|
||||
alert(message);
|
||||
|
||||
if(current_url.getQuery('popup')==1) {
|
||||
if(typeof(opener)!='undefined') opener.location.reload();
|
||||
window.close();
|
||||
} else {
|
||||
if(redirect_url) location.href = redirect_url;
|
||||
else location.href = current_url.setQuery('act','');
|
||||
}
|
||||
}
|
||||
|
||||
/* 정보 수정 */
|
||||
function completeModify(ret_obj, response_tags, args, fo_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = current_url.setQuery('act','dispMemberInfo');
|
||||
}
|
||||
|
||||
/* 회원 탈퇴 */
|
||||
function completeLeave(ret_obj, response_tags, args, fo_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = current_url.setQuery('act','');
|
||||
}
|
||||
|
||||
/* 이미지 업로드 */
|
||||
function _doUploadImage(fo_obj, act) {
|
||||
fo_obj.act.value = act;
|
||||
fo_obj.submit();
|
||||
}
|
||||
|
||||
/* 프로필 이미지/ 이미지 이름/마크 등록 */
|
||||
function doUploadProfileImage() {
|
||||
var fo_obj = get_by_id("fo_insert_member");
|
||||
if(!fo_obj.profile_image.value) return;
|
||||
_doUploadImage(fo_obj, 'procMemberInsertProfileImage');
|
||||
}
|
||||
function doUploadImageName() {
|
||||
var fo_obj = get_by_id("fo_insert_member");
|
||||
if(!fo_obj.image_name.value) return;
|
||||
_doUploadImage(fo_obj, 'procMemberInsertImageName');
|
||||
}
|
||||
|
||||
function doUploadImageMark() {
|
||||
var fo_obj = get_by_id("fo_insert_member");
|
||||
if(!fo_obj.image_mark.value) return;
|
||||
_doUploadImage(fo_obj, 'procMemberInsertImageMark');
|
||||
}
|
||||
|
||||
|
||||
/* 로그인 후 */
|
||||
function completeLogin(ret_obj, response_tags, params, fo_obj) {
|
||||
if(fo_obj.remember_user_id && fo_obj.remember_user_id.checked) {
|
||||
var expire = new Date();
|
||||
expire.setTime(expire.getTime()+ (7000 * 24 * 3600000));
|
||||
setCookie('user_id', fo_obj.user_id.value, expire);
|
||||
}
|
||||
|
||||
var url = current_url.setQuery('act','');
|
||||
location.href = current_url.setQuery('act','');
|
||||
}
|
||||
|
||||
/* 로그아웃 후 */
|
||||
function completeLogout(ret_obj) {
|
||||
location.href = current_url.setQuery('act','');
|
||||
}
|
||||
|
||||
/* 인증 메일 재발송 후 */
|
||||
function completeResendAuthMail(ret_obj, response_tags) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
if(message) alert(message);
|
||||
if(error != 0) alert(error);
|
||||
}
|
||||
|
||||
/* 프로필 이미지, 이미지 이름, 마크 삭제 */
|
||||
function doDeleteProfileImage(member_srl) {
|
||||
if (!member_srl) return;
|
||||
|
||||
if (!confirm(xe.lang.deleteProfileImage)) return false;
|
||||
|
||||
exec_xml(
|
||||
'member',
|
||||
'procMemberDeleteProfileImage',
|
||||
{member_srl:member_srl},
|
||||
function(){jQuery('#profile_imagetag').remove()},
|
||||
['error','message']
|
||||
);
|
||||
}
|
||||
|
||||
function doDeleteImageName(member_srl) {
|
||||
if (!member_srl) return;
|
||||
|
||||
if (!confirm(xe.lang.deleteImageName)) return false;
|
||||
exec_xml(
|
||||
'member',
|
||||
'procMemberDeleteImageName',
|
||||
{member_srl:member_srl},
|
||||
function(){jQuery('#image_nametag').remove()},
|
||||
['error','message']
|
||||
);
|
||||
}
|
||||
|
||||
function doDeleteImageMark(member_srl) {
|
||||
if (!member_srl) return;
|
||||
|
||||
if (!confirm(xe.lang.deleteImageMark)) return false;
|
||||
exec_xml(
|
||||
'member',
|
||||
'procMemberDeleteImageMark',
|
||||
{member_srl:member_srl},
|
||||
function(){jQuery('#image_marktag').remove()},
|
||||
['error','message']
|
||||
);
|
||||
}
|
||||
|
||||
/* 스크랩 삭제 */
|
||||
function doDeleteScrap(document_srl) {
|
||||
var params = new Array();
|
||||
params['document_srl'] = document_srl;
|
||||
exec_xml('member', 'procMemberDeleteScrap', params, function() { location.reload(); });
|
||||
}
|
||||
|
||||
/* 비밀번호 찾기 후 */
|
||||
function completeFindMemberAccount(ret_obj, response_tags) {
|
||||
alert(ret_obj['message']);
|
||||
}
|
||||
|
||||
/* 임시 비밀번호 생성 */
|
||||
function completeFindMemberAccountByQuestion(ret_obj, response_tags) {
|
||||
if(ret_obj['error'] != 0){
|
||||
alert(ret_obj['message']);
|
||||
}else{
|
||||
location.href = current_url.setQuery('act','dispMemberGetTempPassword').setQuery('user_id',ret_obj['user_id']);
|
||||
}
|
||||
}
|
||||
|
||||
/* 저장글 삭제 */
|
||||
function doDeleteSavedDocument(document_srl, confirm_message) {
|
||||
if(!confirm(confirm_message)) return false;
|
||||
|
||||
var params = new Array();
|
||||
params['document_srl'] = document_srl;
|
||||
exec_xml('member', 'procMemberDeleteSavedDocument', params, function() { location.reload(); });
|
||||
}
|
||||
|
||||
function insertSelectedModule(id, module_srl, mid, browser_title) {
|
||||
location.href = current_url.setQuery('selected_module_srl',module_srl);
|
||||
}
|
||||
|
||||
38
modules/member/skins/simple_world/js/signup_check.js
Normal file
38
modules/member/skins/simple_world/js/signup_check.js
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
/**
|
||||
* @brief 회원 가입시나 정보 수정시 각 항목의 중복 검사하고 화면에 바로 나타냄
|
||||
* @author misol <misol.kr@gmail.com>
|
||||
* @author NAVER (developer@xpressengine.com)
|
||||
**/
|
||||
// body 에서 불러오면 가능
|
||||
$('#rx_insert_member :input').filter('[name=user_id],[name=nick_name],[name=email_address]').blur(rxMemberCheckValue);
|
||||
|
||||
// 실제 서버에 특정 필드의 value check를 요청하고 이상이 있으면 메세지를 뿌려주는 함수
|
||||
function rxMemberCheckValue(event) {
|
||||
var field = event.target;
|
||||
var _name = field.name;
|
||||
var _value = field.value;
|
||||
if(!_name || !_value) return;
|
||||
|
||||
var params = {name:_name, value:_value};
|
||||
var response_tags = ['error','message','message_type'];
|
||||
|
||||
exec_xml('member','procMemberCheckValue', params, dispMemberValueCheck, response_tags, field);
|
||||
}
|
||||
|
||||
// 서버에서 응답이 올 경우 이상이 있으면 메세지를 출력
|
||||
function dispMemberValueCheck(response, response_tags, field) {
|
||||
var _id = 'rx_sw_dummy-'+field.name;
|
||||
var dummy = $('#'+_id);
|
||||
|
||||
if(response['message']=='success') {
|
||||
dummy.html('').hide();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!dummy.length) {
|
||||
dummy = $('<p class="rx_member-notice error" />').attr('id', _id)
|
||||
$(field).after(dummy);
|
||||
}
|
||||
|
||||
dummy.html(response['message']).show();
|
||||
}
|
||||
2
modules/member/skins/simple_world/lang/en.php
Normal file
2
modules/member/skins/simple_world/lang/en.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
$lang->member_simple_world_about_star = 'Items with an asterisk <sup>*</sup> are required.';
|
||||
2
modules/member/skins/simple_world/lang/ja.php
Normal file
2
modules/member/skins/simple_world/lang/ja.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
$lang->member_simple_world_about_star = 'アスタリスク<sup>*</sup>のある項目は必須項目です。';
|
||||
2
modules/member/skins/simple_world/lang/ko.php
Normal file
2
modules/member/skins/simple_world/lang/ko.php
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<?php
|
||||
$lang->member_simple_world_about_star = '별표<sup>*</sup>가 있는 항목은 필수 항목입니다.';
|
||||
30
modules/member/skins/simple_world/leave_form.html
Normal file
30
modules/member/skins/simple_world/leave_form.html
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<include target="./common_header.html" />
|
||||
<div class="signin">
|
||||
<section class="sw-body">
|
||||
<h1>{$member_title = $lang->msg_leave_member}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skin/simple_world/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<p class="rx_member-notice">{$lang->about_rechecked_password}</p>
|
||||
<form ruleset="leaveMember" id="fo_insert_member" action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberLeave" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skin/simple_world/1" />
|
||||
<div class="control-group">
|
||||
<label for="uid">
|
||||
{lang($identifier)}
|
||||
</label>
|
||||
<input type="text" id="uid" value="{$formValue}" readonly title="{lang($identifier)}" />
|
||||
<label for="pw">
|
||||
{lang('common.password')}
|
||||
</label>
|
||||
<input type="password" name="password" id="pw" required title="{$lang->password}" />
|
||||
<input type="submit" value="{$lang->cmd_leave}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
53
modules/member/skins/simple_world/login_form.html
Normal file
53
modules/member/skins/simple_world/login_form.html
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<include target="./common_header.html" />
|
||||
<div class="signin">
|
||||
<section class="sw-body">
|
||||
<h1>{$lang->cmd_login}</h1>
|
||||
<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">
|
||||
<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" />
|
||||
<div class="control-group">
|
||||
<label for="uid">
|
||||
<block cond="$identifier == 'user_id'">
|
||||
{lang('common.user_id')}
|
||||
</block>
|
||||
<block cond="$identifier != 'user_id'">
|
||||
{lang('common.email_address')}
|
||||
</block>
|
||||
</label>
|
||||
<input type="text" cond="$identifier == 'user_id'" name="user_id" id="uid" required title="{lang('common.user_id')}" />
|
||||
<input type="email" cond="$identifier != 'user_id'" name="user_id" id="uid" required title="{lang('common.email_address')}" />
|
||||
<label for="upw">{lang('common.password')}<a class="pos-right" href="{getUrl('act','dispMemberFindAccount')}">{lang('member.cmd_find_member_account')}</a></label>
|
||||
<input type="password" name="password" id="upw" required title="{lang('common.password')}" />
|
||||
<label for="keepid_opt">
|
||||
<input type="checkbox" name="keep_signed" id="keepid_opt" value="Y" />
|
||||
{lang('member.keep_signed')}
|
||||
</label>
|
||||
<div id="rx_member-warning" class="rx_member-notice">
|
||||
{lang('member.about_keep_warning')}
|
||||
</div>
|
||||
<input type="submit" value="{$lang->cmd_login}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<div class="sw-footer">
|
||||
<a href="{getUrl('act','dispMemberSignUpForm')}">{lang('member.cmd_signup')}</a>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function($){
|
||||
var keep_msg = $('#rx_member-warning');
|
||||
keep_msg.hide();
|
||||
$('#keepid_opt').change(function(){
|
||||
if($(this).is(':checked')){
|
||||
keep_msg.slideDown(200);
|
||||
} else {
|
||||
keep_msg.slideUp(200);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<include target="./common_footer.html" />
|
||||
16
modules/member/skins/simple_world/logout.html
Normal file
16
modules/member/skins/simple_world/logout.html
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<include target="./common_header.html" />
|
||||
<div class="signin">
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_logout')}</h1>
|
||||
<p class="rx_member-notice">{lang('common.confirm_logout')}</p>
|
||||
<form action="./" method="post">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberLogout" />
|
||||
<div class="control-group">
|
||||
<input type="submit" value="{lang('member.cmd_logout')}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
30
modules/member/skins/simple_world/member_info.html
Normal file
30
modules/member/skins/simple_world/member_info.html
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$lang->member_info}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<dl>
|
||||
<block loop="$displayDatas => $item">
|
||||
<dt>{$item->title}<sup cond="$item->required || $item->mustRequired">*</sup></dt>
|
||||
<dd cond="$item->value">{$item->value}</dd>
|
||||
<dd cond="!$item->value" style="color:#ccc">…</dd>
|
||||
</block>
|
||||
<dt>{$lang->member_group}</dt>
|
||||
<dd>{implode(', ', $memberInfo['group_list'])}</dd>
|
||||
<dt>{$lang->signup_date}</dt>
|
||||
<dd>{zdate($memberInfo[regdate],"Y-m-d")}</dd>
|
||||
<block cond="$memberInfo[member_srl] == $logged_info->member_srl || $logged_info->is_admin == 'Y'">
|
||||
<dt>{$lang->last_login}</dt>
|
||||
<dd>{zdate($memberInfo[last_login],"Y-m-d")}</dd>
|
||||
</block>
|
||||
</dl>
|
||||
</section>
|
||||
<div class="sw-footer sw-anchor-buttons" cond="$memberInfo['member_srl'] == $logged_info->member_srl">
|
||||
<a href="{getUrl('act', 'dispMemberModifyEmailAddress')}" cond="$member_config->identifier == 'email_address'">{$lang->cmd_modify_member_email_address}</a>
|
||||
<a href="{getUrl('act','dispMemberModifyInfo','member_srl','')}">{$lang->cmd_modify_member_info}</a>
|
||||
<a href="{getUrl('act','dispMemberModifyPassword','member_srl','')}">{$lang->cmd_modify_member_password}</a>
|
||||
<a href="{getUrl('act','dispMemberLeave','member_srl','')}">{$lang->cmd_leave}</a>
|
||||
</div>
|
||||
|
||||
<include target="./common_footer.html" />
|
||||
37
modules/member/skins/simple_world/member_nick.html
Normal file
37
modules/member/skins/simple_world/member_nick.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$member_title = $lang->cmd_modify_nickname_log}</h1>
|
||||
<table class="table table-striped table-hover">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{$lang->date}</th>
|
||||
<th>{$lang->nick_name_before_changing}</th>
|
||||
<th class="title">{$lang->nick_name_after_changing}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$nickname_list => $val">
|
||||
<td>
|
||||
{zdate($val->regdate,"Y-m-d H:i:s")}
|
||||
</td>
|
||||
<td>
|
||||
{$val->before_nick_name}
|
||||
</td>
|
||||
<td>
|
||||
{$val->after_nick_name}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','module_srl','')}" class="direction">‹ {$lang->first_page}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} ›</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
17
modules/member/skins/simple_world/modify_email_address.html
Normal file
17
modules/member/skins/simple_world/modify_email_address.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<include target="./common_header.html" />
|
||||
<h1>{$lang->cmd_modify_member_email_address}</h1>
|
||||
<p>{$lang->about_modify_member_email_address}</p>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="modifyEmailAddress" action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberModifyEmailAddress" />
|
||||
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/1" />
|
||||
<span class="input-append">
|
||||
<input type="email" id="email_address" name="email_address" value="" required placeholder="{$lang->email_address}" title="{$lang->email_address}" />
|
||||
<input type="submit" value="{$lang->cmd_send_auth_new_emaill_address}" class="btn btn-inverse" />
|
||||
</span>
|
||||
</form>
|
||||
<include target="./common_footer.html" />
|
||||
87
modules/member/skins/simple_world/modify_info.html
Normal file
87
modules/member/skins/simple_world/modify_info.html
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
<include target="./common_header.html" />
|
||||
<load target="../../tpl/js/signup_check.js" />
|
||||
<load target="./lang" />
|
||||
<!--// datepicker javascript plugin load -->
|
||||
<!--%load_js_plugin("ui")-->
|
||||
<!--%load_js_plugin("ui.datepicker")-->
|
||||
<section class="sw-body">
|
||||
<h1 style="border-bottom:1px solid #ccc">{$lang->msg_update_member}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<div class="rx_member-notice info">
|
||||
<p>{lang('member_simple_world_about_star')}</p>
|
||||
</div>
|
||||
<form ruleset="@insertMember" id="fo_insert_member" action="./" method="post" enctype="multipart/form-data" class="form-horizontal">
|
||||
<input type="hidden" name="act" value="procMemberModifyInfo" />
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="member_srl" value="{$member_info->member_srl}" />
|
||||
<input type="hidden" name="signature" value="{htmlspecialchars($member_info->signature, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/1" />
|
||||
<div class="control-group">
|
||||
<label for="{$identifierForm->name}">{$identifierForm->title}<sup style="color:red">*</sup></label>
|
||||
<input type="text" name="{$identifierForm->name}" id="{$identifierForm->name}" value="{$identifierForm->value}" readonly />
|
||||
<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>
|
||||
<label class="control-label">{$lang->allow_mailing}</label>
|
||||
<div class="controls">
|
||||
<label for="mailingYes"><input type="radio" name="allow_mailing" id="mailingYes" value="Y" checked="checked"|cond="$member_info->allow_mailing == 'Y'"> {$lang->cmd_yes}</label>
|
||||
<label for="mailingNo"><input type="radio" name="allow_mailing" id="mailingNo" value="N" checked="checked"|cond="$member_info->allow_mailing != 'Y'" > {$lang->cmd_no}</label>
|
||||
</div>
|
||||
<label class="control-label">{$lang->allow_message}</label>
|
||||
<div class="controls">
|
||||
<label for="allow_{$key}" loop="$lang->allow_message_type=>$key,$val"><input type="radio" name="allow_message" value="{$key}" checked="checked"|cond="$member_info->allow_message == $key" id="allow_{$key}" /> {$val}</label>
|
||||
</div>
|
||||
<input type="submit" value="{$lang->cmd_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<script>
|
||||
xe.lang.deleteProfileImage = '{$lang->msg_delete_extend_form}';
|
||||
xe.lang.deleteImageMark = '{$lang->msg_delete_extend_form}';
|
||||
xe.lang.deleteImageName = '{$lang->msg_delete_extend_form}';
|
||||
|
||||
jQuery(function($){
|
||||
// label for setup
|
||||
$('.control-label[for]').each(function(){
|
||||
var $this = $(this);
|
||||
if($this.attr('for') == ''){
|
||||
$this.attr('for', $this.next().children(':visible:first').attr('id'));
|
||||
}
|
||||
});
|
||||
});
|
||||
(function($){
|
||||
$(function(){
|
||||
// check if the browser support type date.
|
||||
if ( $(".inputDate").prop('type') != 'date' ) {
|
||||
var option = {
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
gotoCurrent: false,
|
||||
yearRange:'-200:+10',
|
||||
dateFormat:'yy-mm-dd',
|
||||
defaultDate: new Date("{date('Y-m-d',time())}"),
|
||||
minDate: new Date("{date('Y-m-d',strtotime('-200 years'))}"),
|
||||
|
||||
onSelect:function(){
|
||||
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))
|
||||
}
|
||||
};
|
||||
$.extend($.datepicker.regional['{$lang_type}'],option);
|
||||
|
||||
//if the browser does not support type date input, start datepicker. If it does, brower's UI will show their datepicker.
|
||||
$(".inputDate").datepicker(option);
|
||||
} else {
|
||||
$(".inputDate").prop('readonly', false);
|
||||
}
|
||||
$(".dateRemover").click(function() {
|
||||
$('#date_birthday,#birthday').val('');
|
||||
return false;});
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
<include target="./common_footer.html" />
|
||||
37
modules/member/skins/simple_world/modify_password.html
Normal file
37
modules/member/skins/simple_world/modify_password.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<include target="./common_header.html" />
|
||||
|
||||
<div class="sw-body">
|
||||
<h1>{$member_title = $lang->cmd_modify_member_password}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="modifyPassword" id="fo_insert_member" action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberModifyPassword" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/1" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="control-group">
|
||||
<label for="uid">
|
||||
{lang($identifier)}
|
||||
</label>
|
||||
<input type="text" disabled="disabled" value="{$formValue}" id="uid" title="{lang($identifier)}" />
|
||||
<label for="cpw">
|
||||
{lang('member.current_password')}
|
||||
</label>
|
||||
<input type="password" name="current_password" id="cpw" required title="{$lang->current_password}" />
|
||||
<label for="npw1">
|
||||
{lang('common.password1')}
|
||||
</label>
|
||||
<input type="password" name="password1" id="npw1" required title="{$lang->password1}" /> <span class="rx_member-notice">{$lang->about_password_strength[$member_config->password_strength]}</span>
|
||||
<label for="npw2">
|
||||
{lang('common.password2')}
|
||||
</label>
|
||||
<input type="password" name="password2" id="npw2" required title="{$lang->password2}" />
|
||||
<input type="submit" value="{$lang->cmd_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
28
modules/member/skins/simple_world/rechecked_password.html
Normal file
28
modules/member/skins/simple_world/rechecked_password.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<include target="./common_header.html" />
|
||||
<div class="signin">
|
||||
<section class="sw-body">
|
||||
<h1>{$lang->msg_rechecked_password}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<p class="rx_member-notice">{$lang->about_rechecked_password}</p>
|
||||
<form action="./index.php" method="post" ruleset="recheckedPassword">
|
||||
<input type="hidden" name="act" value="procMemberModifyInfoBefore" />
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/1" />
|
||||
<input cond="$success_return_url" type="hidden" name="success_return_url" value="{$success_return_url}" />
|
||||
<div class="control-group">
|
||||
<label for="uid">
|
||||
{$identifierTitle}
|
||||
</label>
|
||||
<input type="text" id="uid" value="{$identifierValue}" readonly title="{$identifierTitle}" />
|
||||
<label for="pw">
|
||||
{lang('common.password')}
|
||||
</label>
|
||||
<input type="password" name="password" id="pw" required title="{$lang->password}" />
|
||||
<input type="submit" value="{$lang->cmd_confirm}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
21
modules/member/skins/simple_world/resend_auth_mail.html
Normal file
21
modules/member/skins/simple_world/resend_auth_mail.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$lang->cmd_resend_auth_mail}</h1>
|
||||
<div class="rx_member-notice">{lang('member.about_resend_auth_mail')}</div>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/resend_auth_mail/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="resendAuthMail" class="form" action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberResendAuthMail" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/resend_auth_mail/1" />
|
||||
<div class="control-group">
|
||||
<label for="email_address">
|
||||
{lang('common.email_address')}
|
||||
</label>
|
||||
<input type="email" id="email_address" name="email_address" value="" title="{lang('common.email_address')}" />
|
||||
<input type="submit" id="resend_button" name="" value="{lang('member.cmd_resend_auth_mail')}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<include target="./common_footer.html" />
|
||||
41
modules/member/skins/simple_world/reset_mail.html
Normal file
41
modules/member/skins/simple_world/reset_mail.html
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$lang->cmd_resend_auth_mail}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/reset_mail/1'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<div class="rx_member-notice">{sprintf($lang->about_reset_auth_mail, $memberInfo->email_address)}</div>
|
||||
<form action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberResendAuthMail" />
|
||||
<input type="hidden" name="email_address" value="{$memberInfo->email_address}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/reset_mail/1" />
|
||||
<div class="control-group">
|
||||
<label for="uid1">
|
||||
{lang('common.email_address')}
|
||||
</label>
|
||||
<input type="text" id="uid1" readonly="readonly" disabled="disabled" value="{$memberInfo->email_address}" title="{$lang->cmd_resend_auth_mail}" />
|
||||
<input type="submit" id="resend_button" name="" value="{$lang->cmd_resend_auth_mail}" class="btn btn-inverse" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_send_auth_new_emaill_address')}</h1>
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/member/skins/simple_world/reset_mail/2'" class="rx_member-notice {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<div class="rx_member-notice">{lang('member.about_reset_auth_mail_submit')}</div>
|
||||
<form ruleset="resetAuthMail" action="./" method="post">
|
||||
<input type="hidden" name="module" value="member" />
|
||||
<input type="hidden" name="act" value="procMemberResetAuthMail" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins/simple_world/reset_mail/2" />
|
||||
<div class="control-group">
|
||||
<label for="email_address">
|
||||
{lang('common.cmd_modify_new_auth_email_address')}
|
||||
</label>
|
||||
<input type="text" id="email_address" name="email_address" value="" title="{lang('member.cmd_modify_new_auth_email_address')}" />
|
||||
<input type="submit" value="{$lang->cmd_send_auth_new_emaill_address}" class="btn btn-inverse" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<include target="./common_footer.html" />
|
||||
34
modules/member/skins/simple_world/saved_list.html
Normal file
34
modules/member/skins/simple_world/saved_list.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$member_title = lang('member.cmd_view_saved_document')}</h1>
|
||||
<div class="rx_member-notice">{lang('common.total')}: {number_format($total_count)}</div>
|
||||
<div>
|
||||
<ul class="rx_sw_list">
|
||||
<li loop="$document_list => $key, $item">
|
||||
<a href="{getUrl('','document_srl',$item->document_srl)}" class="cont_a" onclick="window.open(this.href);return false;">
|
||||
<span class="content_basic">
|
||||
<span class="content_title">
|
||||
{escape($item->getTitle())}
|
||||
</span>
|
||||
<span class="content_subinfo">
|
||||
{$item->getRegdate("Y-m-d")}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
<span class="content_delete">
|
||||
<button type="button" class="text" onclick="doDeleteSavedDocument({$item->document_srl},'{lang('common.confirm_delete')}');return false;">{$lang->cmd_delete}</button>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','module_srl','')}" class="direction">‹ {$lang->first_page}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="direction">{$lang->last_page} ›</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
34
modules/member/skins/simple_world/scrapped_list.html
Normal file
34
modules/member/skins/simple_world/scrapped_list.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{$member_title = lang('member.cmd_view_scrapped_document')}</h1>
|
||||
<div class="rx_member-notice">{lang('common.total')}: {number_format($total_count)}</div>
|
||||
<div>
|
||||
<ul class="rx_sw_list">
|
||||
<li loop="$document_list => $key, $item">
|
||||
<a href="{getUrl('','document_srl',$item->document_srl)}" class="cont_a" onclick="window.open(this.href);return false;">
|
||||
<span class="content_basic">
|
||||
<span class="content_title">
|
||||
{escape($item->title)}
|
||||
</span>
|
||||
<span class="content_subinfo">
|
||||
{escape($item->nick_name)}, {zdate($item->regdate, "Y-m-d")}
|
||||
</span>
|
||||
</span>
|
||||
</a>
|
||||
<span class="content_delete">
|
||||
<button type="button" class="text" onclick="doDeleteScrap({$item->document_srl});return false;">{$lang->cmd_delete}</button>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</section>
|
||||
<div class="pagination pagination-centered">
|
||||
<ul>
|
||||
<li><a href="{getUrl('page','','module_srl','')}">‹ {$lang->first_page}</a></li>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<li class="active"|cond="$page == $page_no"><a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<li><a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}">{$lang->last_page} ›</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<include target="./common_footer.html" />
|
||||
110
modules/member/skins/simple_world/signup_form.html
Normal file
110
modules/member/skins/simple_world/signup_form.html
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
<load target="./js/signup_check.js" type="body" />
|
||||
<load target="./lang" />
|
||||
<!--// datepicker javascript plugin load -->
|
||||
<!--%load_js_plugin("ui")-->
|
||||
<!--%load_js_plugin("ui.datepicker")-->
|
||||
<include target="./common_header.html" />
|
||||
<section class="sw-body">
|
||||
<h1>{lang('member.cmd_signup')}</h1>
|
||||
<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>
|
||||
<div class="rx_member-notice info">
|
||||
<p>{lang('member_simple_world_about_star')}</p>
|
||||
</div>
|
||||
<form ruleset="@insertMember" id="rx_insert_member" action="./" method="post" enctype="multipart/form-data" class="form-horizontal">
|
||||
<input type="hidden" name="act" value="procMemberInsert" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/member/skins" />
|
||||
<input type="hidden" name="success_return_url" value="{getUrl('act','dispMemberInfo')}" />
|
||||
<div class="agreement" cond="$member_config->agreement">
|
||||
<div class="text">
|
||||
{$member_config->agreement}
|
||||
</div>
|
||||
<div class="confirm">
|
||||
<label for="accept_agree">
|
||||
<input type="checkbox" name="accept_agreement" value="Y" id="accept_agree" />
|
||||
{$lang->about_accept_agreement}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label for="{$identifierForm->name}">{$identifierForm->title}<sup style="color:red">*</sup></label>
|
||||
<input type="text"|cond="$identifierForm->name!='email_address'" type="email"|cond="$identifierForm->name=='email_address'" name="{$identifierForm->name}" id="{$identifierForm->name}" value="{$identifierForm->value}" required />
|
||||
<p class="rx_member-notice" cond="$identifierForm->name == 'email_address' && $email_confirmation_required == 'Y'">
|
||||
{$lang->msg_email_confirmation_required}
|
||||
</p>
|
||||
<label for="password" class="control-label">{lang('common.password')}<sup style="color:red">*</sup></label>
|
||||
<input type="password" name="password" id="password" value="" required />
|
||||
<p class="rx_member-notice">{lang('member.about_password_strength')[$member_config->password_strength]}</p>
|
||||
<label for="password2" class="control-label">{lang('common.password3')}<sup style="color:red">*</sup></label>
|
||||
<input type="password" name="password2" id="password2" value="" required />
|
||||
<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}
|
||||
<p class="rx_member-notice" cond="$formTag->name == 'email_address' && $email_confirmation_required == 'Y'">
|
||||
{$lang->msg_email_confirmation_required}
|
||||
</p>
|
||||
</block>
|
||||
<block cond="$formTag->name == 'signature'">
|
||||
<input type="hidden" name="signature" value="" />
|
||||
{$editor}
|
||||
</block>
|
||||
</block>
|
||||
<div class="control-label">{$lang->allow_mailing}</div>
|
||||
<div class="controls" style="padding-top:5px">
|
||||
<label for="mailingYes"><input type="radio" name="allow_mailing" id="mailingYes" value="Y" checked="checked"|cond="$member_info->allow_mailing == 'Y'" /> {$lang->cmd_yes}</label>
|
||||
<label for="mailingNo"><input type="radio" name="allow_mailing" id="mailingNo" value="N" checked="checked"|cond="$member_info->allow_mailing != 'Y'" /> {$lang->cmd_no}</label>
|
||||
</div>
|
||||
<div class="control-label">{$lang->allow_message}</div>
|
||||
<div class="controls" style="padding-top:5px">
|
||||
<label for="allow_{$key}" loop="$lang->allow_message_type=>$key,$val"><input type="radio" name="allow_message" value="{$key}" checked="checked"|cond="$member_info->allow_message == $key || (!$member_info && $key == 'Y')" id="allow_{$key}" /> {$val}</label>
|
||||
</div>
|
||||
<block cond="$captcha">
|
||||
<div class="control-label">{$lang->captcha}</div>
|
||||
<div class="controls">{$captcha}</div>
|
||||
</block>
|
||||
<input type="submit" value="{$lang->cmd_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
</section>
|
||||
<script>
|
||||
(function($){
|
||||
// label for setup
|
||||
$('.control-label[for]').each(function(){
|
||||
var $this = $(this);
|
||||
if($this.attr('for') == ''){
|
||||
$this.attr('for', $this.next().children(':visible:first').attr('id'));
|
||||
}
|
||||
});
|
||||
|
||||
$(function(){
|
||||
// check if the browser support type date.
|
||||
if ( $(".inputDate").prop('type') != 'date' ) {
|
||||
var option = {
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
gotoCurrent: false,
|
||||
yearRange:'-200:+10',
|
||||
dateFormat:'yy-mm-dd',
|
||||
defaultDate: new Date("{date('Y-m-d',time())}"),
|
||||
minDate: new Date("{date('Y-m-d',strtotime('-200 years'))}"),
|
||||
|
||||
onSelect:function(){
|
||||
$(this).prev('input[type="hidden"]').val(this.value.replace(/-/g,""))
|
||||
}
|
||||
};
|
||||
$.extend($.datepicker.regional['{$lang_type}'],option);
|
||||
|
||||
//if the browser does not support type date input, start datepicker. If it does, brower's UI will show their datepicker.
|
||||
$(".inputDate").datepicker(option);
|
||||
} else {
|
||||
$(".inputDate").prop('readonly', false);
|
||||
}
|
||||
$(".dateRemover").click(function() {
|
||||
$(this).prevAll('input').val('');
|
||||
return false;});
|
||||
});
|
||||
})(jQuery);
|
||||
</script>
|
||||
<include target="./common_footer.html" />
|
||||
16
modules/member/skins/simple_world/skin.xml
Normal file
16
modules/member/skins/simple_world/skin.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">네모의 꿈</title>
|
||||
<title xml:lang="en">Rectangular World</title>
|
||||
<description xml:lang="ko">깔끔한 면과 그림자를 이용한 회원 스킨</description>
|
||||
<description xml:lang="en">Simple rectangular planes and shadows</description>
|
||||
<version>0.1</version>
|
||||
<date>2017-01-09</date>
|
||||
<author email_address="misol.kr@gmail.com" link="https://github.com/misol">
|
||||
<name xml:lang="ko">misol</name>
|
||||
<name xml:lang="en">misol</name>
|
||||
</author>
|
||||
|
||||
<colorset type="colorpicker">
|
||||
</colorset>
|
||||
</skin>
|
||||
|
|
@ -74,15 +74,15 @@
|
|||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="webmaster_name">{$lang->webmaster_name}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" id="webmaster_name" name="webmaster_name" value="{$config->webmaster_name}" size="20" />
|
||||
<p class="x_help-inline">{$lang->about_webmaster_name}</p>
|
||||
<input type="text" id="webmaster_name" name="webmaster_name" value="{$config->webmaster_name}" />
|
||||
<label>{$lang->about_webmaster_name}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="webmaster_email">{$lang->webmaster_email}</label>
|
||||
<div class="x_controls">
|
||||
<input type="email" id="webmaster_email" name="webmaster_email" value="{$config->webmaster_email}" size="40" />
|
||||
<p class="x_help-inline">{$lang->about_webmaster_email}</p>
|
||||
<input type="email" id="webmaster_email" name="webmaster_email" value="{$config->webmaster_email}" />
|
||||
<label>{$lang->about_webmaster_email}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
|
|
|
|||
|
|
@ -83,6 +83,18 @@
|
|||
<span class="x_help-inline">{$lang->about_refused_reason}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group" cond="$member_srl">
|
||||
<label class="x_control-label">{$lang->signup_date}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" readonly value="{zdate($member_info->regdate, 'Y-m-d H:i:s')}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group" cond="$member_srl">
|
||||
<label class="x_control-label">{$lang->last_login}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" readonly value="{zdate($member_info->last_login, 'Y-m-d H:i:s')}" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group" cond="$member_srl">
|
||||
<label class="x_control-label" for="until">{$lang->limit_date}</label>
|
||||
<div class="x_controls">
|
||||
|
|
|
|||
|
|
@ -23,8 +23,7 @@
|
|||
</tbody>
|
||||
<tbody cond="!$nickname_list">
|
||||
<tr>
|
||||
<td colspan="3" style="text-align: center">{$lang->no_date}</td>
|
||||
|
||||
<td colspan="3" style="text-align: center">{$lang->no_data}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue