#314 board 모듈을 코어에 포함
174
modules/board/board.admin.controller.php
Normal file
|
|
@ -0,0 +1,174 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardAdminController
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module admin controller class
|
||||
**/
|
||||
|
||||
class boardAdminController extends board {
|
||||
|
||||
/**
|
||||
* @brief initialization
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief insert borad module
|
||||
**/
|
||||
function procBoardAdminInsertBoard($args = null) {
|
||||
// igenerate module model/controller object
|
||||
$oModuleController = getController('module');
|
||||
$oModuleModel = getModel('module');
|
||||
|
||||
// setup the board module infortmation
|
||||
$args = Context::getRequestVars();
|
||||
$args->module = 'board';
|
||||
$args->mid = $args->board_name;
|
||||
if(is_array($args->use_status)) $args->use_status = implode('|@|', $args->use_status);
|
||||
unset($args->board_name);
|
||||
|
||||
// setup other variables
|
||||
if($args->except_notice != 'Y') $args->except_notice = 'N';
|
||||
if($args->use_anonymous != 'Y') $args->use_anonymous = 'N';
|
||||
if($args->consultation != 'Y') $args->consultation = 'N';
|
||||
if($args->protect_content!= 'Y') $args->protect_content = 'N';
|
||||
if(!in_array($args->order_target,$this->order_target)) $args->order_target = 'list_order';
|
||||
if(!in_array($args->order_type, array('asc', 'desc'))) $args->order_type = 'asc';
|
||||
|
||||
// if there is an existed module
|
||||
if($args->module_srl) {
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
|
||||
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
|
||||
}
|
||||
|
||||
// insert/update the board module based on module_srl
|
||||
if(!$args->module_srl) {
|
||||
$args->hide_category = 'N';
|
||||
$output = $oModuleController->insertModule($args);
|
||||
$msg_code = 'success_registed';
|
||||
} else {
|
||||
$args->hide_category = $module_info->hide_category;
|
||||
$output = $oModuleController->updateModule($args);
|
||||
$msg_code = 'success_updated';
|
||||
}
|
||||
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// setup list config
|
||||
$list = explode(',',Context::get('list'));
|
||||
if(count($list))
|
||||
{
|
||||
$list_arr = array();
|
||||
foreach($list as $val)
|
||||
{
|
||||
$val = trim($val);
|
||||
if(!$val) continue;
|
||||
if(substr($val,0,10)=='extra_vars') $val = substr($val,10);
|
||||
$list_arr[] = $val;
|
||||
}
|
||||
$oModuleController = getController('module');
|
||||
$oModuleController->insertModulePartConfig('board', $output->get('module_srl'), $list_arr);
|
||||
}
|
||||
|
||||
$this->setMessage($msg_code);
|
||||
if (Context::get('success_return_url')){
|
||||
changeValueInUrl('mid', $args->mid, $module_info->mid);
|
||||
$this->setRedirectUrl(Context::get('success_return_url'));
|
||||
}else{
|
||||
$this->setRedirectUrl(getNotEncodedUrl('', 'module', 'admin', 'act', 'dispBoardAdminBoardInfo', 'module_srl', $output->get('module_srl')));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Board info update in basic setup page
|
||||
* @return void
|
||||
*/
|
||||
public function procBoardAdminUpdateBoardFroBasic()
|
||||
{
|
||||
$args = Context::getRequestVars();
|
||||
|
||||
// for board info
|
||||
$args->module = 'board';
|
||||
$args->mid = $args->board_name;
|
||||
if(is_array($args->use_status))
|
||||
{
|
||||
$args->use_status = implode('|@|', $args->use_status);
|
||||
}
|
||||
unset($args->board_name);
|
||||
|
||||
if(!in_array($args->order_target, $this->order_target))
|
||||
{
|
||||
$args->order_target = 'list_order';
|
||||
}
|
||||
if(!in_array($args->order_type, array('asc', 'desc')))
|
||||
{
|
||||
$args->order_type = 'asc';
|
||||
}
|
||||
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->updateModule($args);
|
||||
|
||||
// for grant info, Register Admin ID
|
||||
$oModuleController->deleteAdminId($args->module_srl);
|
||||
if($args->admin_member)
|
||||
{
|
||||
$admin_members = explode(',',$args->admin_member);
|
||||
for($i=0;$i<count($admin_members);$i++)
|
||||
{
|
||||
$admin_id = trim($admin_members[$i]);
|
||||
if(!$admin_id) continue;
|
||||
$oModuleController->insertAdminId($args->module_srl, $admin_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief delete the board module
|
||||
**/
|
||||
function procBoardAdminDeleteBoard() {
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// get the current module
|
||||
$oModuleController = getController('module');
|
||||
$output = $oModuleController->deleteModule($module_srl);
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
$this->add('module','board');
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
function procBoardAdminSaveCategorySettings()
|
||||
{
|
||||
$module_srl = Context::get('module_srl');
|
||||
$mid = Context::get('mid');
|
||||
|
||||
$oModuleModel = getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
if($module_info->mid != $mid)
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
$module_info->hide_category = Context::get('hide_category') == 'Y' ? 'Y' : 'N';
|
||||
$oModuleController = getController('module'); /* @var $oModuleController moduleController */
|
||||
$output = $oModuleController->updateModule($module_info);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->setMessage('success_updated');
|
||||
if (Context::get('success_return_url'))
|
||||
{
|
||||
$this->setRedirectUrl(Context::get('success_return_url'));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->setRedirectUrl(getNotEncodedUrl('', 'module', 'admin', 'act', 'dispBoardAdminCategoryInfo', 'module_srl', $output->get('module_srl')));
|
||||
}
|
||||
}
|
||||
}
|
||||
73
modules/board/board.admin.model.php
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* boardAdminModel class
|
||||
* Board the module's admin model class
|
||||
*
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @package /modules/board
|
||||
* @version 0.1
|
||||
*/
|
||||
class boardAdminModel extends board
|
||||
{
|
||||
/**
|
||||
* Initialization
|
||||
* @return void
|
||||
*/
|
||||
function init()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the board module admin simple setting page
|
||||
* @return void
|
||||
*/
|
||||
public function getBoardAdminSimpleSetup($moduleSrl, $setupUrl)
|
||||
{
|
||||
if(!$moduleSrl)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Context::set('module_srl', $moduleSrl);
|
||||
|
||||
// default module info setting
|
||||
$oModuleModel = getModel('module');
|
||||
$moduleInfo = $oModuleModel->getModuleInfoByModuleSrl($moduleSrl);
|
||||
$moduleInfo->use_status = explode('|@|', $moduleInfo->use_status);
|
||||
if($moduleInfo)
|
||||
{
|
||||
Context::set('module_info', $moduleInfo);
|
||||
}
|
||||
|
||||
// get document status list
|
||||
$oDocumentModel = getModel('document');
|
||||
$documentStatusList = $oDocumentModel->getStatusNameList();
|
||||
Context::set('document_status_list', $documentStatusList);
|
||||
|
||||
// set order target list
|
||||
foreach($this->order_target AS $key)
|
||||
{
|
||||
$order_target[$key] = Context::getLang($key);
|
||||
}
|
||||
$order_target['list_order'] = Context::getLang('document_srl');
|
||||
$order_target['update_order'] = Context::getLang('last_update');
|
||||
Context::set('order_target', $order_target);
|
||||
|
||||
// for advanced language & url
|
||||
$oAdmin = getClass('admin');
|
||||
Context::set('setupUrl', $setupUrl);
|
||||
|
||||
// Extract admin ID set in the current module
|
||||
$admin_member = $oModuleModel->getAdminId($moduleSrl);
|
||||
Context::set('admin_member', $admin_member);
|
||||
|
||||
$oTemplate = &TemplateHandler::getInstance();
|
||||
$html = $oTemplate->compile($this->module_path.'tpl/', 'board_setup_basic');
|
||||
|
||||
return $html;
|
||||
}
|
||||
|
||||
}
|
||||
/* End of file board.admin.model.php */
|
||||
/* Location: ./modules/board/board.admin.model.php */
|
||||
291
modules/board/board.admin.view.php
Normal file
|
|
@ -0,0 +1,291 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardAdminView
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module admin view class
|
||||
**/
|
||||
|
||||
class boardAdminView extends board {
|
||||
|
||||
/**
|
||||
* @brief initialization
|
||||
*
|
||||
* board module can be divided into general use and admin use.\n
|
||||
**/
|
||||
function init() {
|
||||
// check module_srl is existed or not
|
||||
$module_srl = Context::get('module_srl');
|
||||
if(!$module_srl && $this->module_srl) {
|
||||
$module_srl = $this->module_srl;
|
||||
Context::set('module_srl', $module_srl);
|
||||
}
|
||||
|
||||
// generate module model object
|
||||
$oModuleModel = getModel('module');
|
||||
|
||||
// get the module infomation based on the module_srl
|
||||
if($module_srl) {
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
if(!$module_info) {
|
||||
Context::set('module_srl','');
|
||||
$this->act = 'list';
|
||||
} else {
|
||||
ModuleModel::syncModuleToSite($module_info);
|
||||
$this->module_info = $module_info;
|
||||
$this->module_info->use_status = explode('|@|', $module_info->use_status);
|
||||
Context::set('module_info',$module_info);
|
||||
}
|
||||
}
|
||||
|
||||
if($module_info && $module_info->module != 'board') return $this->stop("msg_invalid_request");
|
||||
|
||||
// get the module category list
|
||||
$module_category = $oModuleModel->getModuleCategories();
|
||||
Context::set('module_category', $module_category);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('module_info.');
|
||||
$security->encodeHTML('module_category..');
|
||||
|
||||
// setup template path (board admin panel templates is resided in the tpl folder)
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
// install order (sorting) options
|
||||
foreach($this->order_target as $key) $order_target[$key] = Context::getLang($key);
|
||||
$order_target['list_order'] = Context::getLang('document_srl');
|
||||
$order_target['update_order'] = Context::getLang('last_update');
|
||||
Context::set('order_target', $order_target);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the board module admin contents
|
||||
**/
|
||||
function dispBoardAdminContent() {
|
||||
// setup the board module general information
|
||||
$args = new stdClass();
|
||||
$args->sort_index = "module_srl";
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = 20;
|
||||
$args->page_count = 10;
|
||||
$args->s_module_category_srl = Context::get('module_category_srl');
|
||||
|
||||
$search_target = Context::get('search_target');
|
||||
$search_keyword = Context::get('search_keyword');
|
||||
|
||||
switch ($search_target){
|
||||
case 'mid':
|
||||
$args->s_mid = $search_keyword;
|
||||
break;
|
||||
case 'browser_title':
|
||||
$args->s_browser_title = $search_keyword;
|
||||
break;
|
||||
}
|
||||
|
||||
$output = executeQueryArray('board.getBoardList', $args);
|
||||
ModuleModel::syncModuleToSite($output->data);
|
||||
|
||||
// get the skins path
|
||||
$oModuleModel = getModel('module');
|
||||
$skin_list = $oModuleModel->getSkins($this->module_path);
|
||||
Context::set('skin_list',$skin_list);
|
||||
|
||||
$mskin_list = $oModuleModel->getSkins($this->module_path, "m.skins");
|
||||
Context::set('mskin_list', $mskin_list);
|
||||
|
||||
// get the layouts path
|
||||
$oLayoutModel = getModel('layout');
|
||||
$layout_list = $oLayoutModel->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
|
||||
$mobile_layout_list = $oLayoutModel->getLayoutList(0,"M");
|
||||
Context::set('mlayout_list', $mobile_layout_list);
|
||||
|
||||
$oModuleAdminModel = getAdminModel('module');
|
||||
$selected_manage_content = $oModuleAdminModel->getSelectedManageHTML($this->xml_info->grant);
|
||||
Context::set('selected_manage_content', $selected_manage_content);
|
||||
|
||||
// use context::set to setup variables on the templates
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('board_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('board_list..browser_title','board_list..mid');
|
||||
$security->encodeHTML('skin_list..title','mskin_list..title');
|
||||
$security->encodeHTML('layout_list..title','layout_list..layout');
|
||||
$security->encodeHTML('mlayout_list..title','mlayout_list..layout');
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the selected board module admin information
|
||||
**/
|
||||
function dispBoardAdminBoardInfo() {
|
||||
$this->dispBoardAdminInsertBoard();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the module insert form
|
||||
**/
|
||||
function dispBoardAdminInsertBoard() {
|
||||
if(!in_array($this->module_info->module, array('admin', 'board','blog','guestbook'))) {
|
||||
return $this->alertMessage('msg_invalid_request');
|
||||
}
|
||||
|
||||
// get the skins list
|
||||
$oModuleModel = getModel('module');
|
||||
$skin_list = $oModuleModel->getSkins($this->module_path);
|
||||
Context::set('skin_list',$skin_list);
|
||||
|
||||
$mskin_list = $oModuleModel->getSkins($this->module_path, "m.skins");
|
||||
Context::set('mskin_list', $mskin_list);
|
||||
|
||||
// get the layouts list
|
||||
$oLayoutModel = getModel('layout');
|
||||
$layout_list = $oLayoutModel->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
|
||||
$mobile_layout_list = $oLayoutModel->getLayoutList(0,"M");
|
||||
Context::set('mlayout_list', $mobile_layout_list);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('skin_list..title','mskin_list..title');
|
||||
$security->encodeHTML('layout_list..title','layout_list..layout');
|
||||
$security->encodeHTML('mlayout_list..title','mlayout_list..layout');
|
||||
|
||||
// get document status list
|
||||
$oDocumentModel = getModel('document');
|
||||
$documentStatusList = $oDocumentModel->getStatusNameList();
|
||||
Context::set('document_status_list', $documentStatusList);
|
||||
|
||||
$oBoardModel = getModel('board');
|
||||
|
||||
// setup the extra vaiables
|
||||
Context::set('extra_vars', $oBoardModel->getDefaultListConfig($this->module_info->module_srl));
|
||||
|
||||
// setup the list config (install the default value if there is no list config)
|
||||
Context::set('list_config', $oBoardModel->getListConfig($this->module_info->module_srl));
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('extra_vars..name','list_config..name');
|
||||
|
||||
// set the template file
|
||||
$this->setTemplateFile('board_insert');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the additional setup panel
|
||||
* additonal setup panel is for connecting the service modules with other modules
|
||||
**/
|
||||
function dispBoardAdminBoardAdditionSetup() {
|
||||
// sice content is obtained from other modules via call by reference, declare it first
|
||||
$content = '';
|
||||
|
||||
// get the addtional setup trigger
|
||||
// the additional setup triggers can be used in many modules
|
||||
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
|
||||
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
|
||||
Context::set('setup_content', $content);
|
||||
|
||||
// setup the template file
|
||||
$this->setTemplateFile('addition_setup');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the board mdoule delete page
|
||||
**/
|
||||
function dispBoardAdminDeleteBoard() {
|
||||
if(!Context::get('module_srl')) return $this->dispBoardAdminContent();
|
||||
if(!in_array($this->module_info->module, array('admin', 'board','blog','guestbook'))) {
|
||||
return $this->alertMessage('msg_invalid_request');
|
||||
}
|
||||
|
||||
$module_info = Context::get('module_info');
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
$document_count = $oDocumentModel->getDocumentCount($module_info->module_srl);
|
||||
$module_info->document_count = $document_count;
|
||||
|
||||
Context::set('module_info',$module_info);
|
||||
|
||||
$security = new Security();
|
||||
$security->encodeHTML('module_info..mid','module_info..module','module_info..document_count');
|
||||
|
||||
// setup the template file
|
||||
$this->setTemplateFile('board_delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display category information
|
||||
**/
|
||||
function dispBoardAdminCategoryInfo() {
|
||||
$oDocumentModel = getModel('document');
|
||||
$category_content = $oDocumentModel->getCategoryHTML($this->module_info->module_srl);
|
||||
Context::set('category_content', $category_content);
|
||||
|
||||
Context::set('module_info', $this->module_info);
|
||||
$this->setTemplateFile('category_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the grant information
|
||||
**/
|
||||
function dispBoardAdminGrantInfo() {
|
||||
// get the grant infotmation from admin module
|
||||
$oModuleAdminModel = getAdminModel('module');
|
||||
$grant_content = $oModuleAdminModel->getModuleGrantHTML($this->module_info->module_srl, $this->xml_info->grant);
|
||||
Context::set('grant_content', $grant_content);
|
||||
|
||||
$this->setTemplateFile('grant_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display extra variables
|
||||
**/
|
||||
function dispBoardAdminExtraVars() {
|
||||
$oDocumentAdminModel = getModel('document');
|
||||
$extra_vars_content = $oDocumentAdminModel->getExtraVarsHTML($this->module_info->module_srl);
|
||||
Context::set('extra_vars_content', $extra_vars_content);
|
||||
|
||||
$this->setTemplateFile('extra_vars');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the module skin information
|
||||
**/
|
||||
function dispBoardAdminSkinInfo() {
|
||||
// get the grant infotmation from admin module
|
||||
$oModuleAdminModel = getAdminModel('module');
|
||||
$skin_content = $oModuleAdminModel->getModuleSkinHTML($this->module_info->module_srl);
|
||||
Context::set('skin_content', $skin_content);
|
||||
|
||||
$this->setTemplateFile('skin_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the module mobile skin information
|
||||
**/
|
||||
function dispBoardAdminMobileSkinInfo() {
|
||||
// get the grant infotmation from admin module
|
||||
$oModuleAdminModel = getAdminModel('module');
|
||||
$skin_content = $oModuleAdminModel->getModuleMobileSkinHTML($this->module_info->module_srl);
|
||||
Context::set('skin_content', $skin_content);
|
||||
|
||||
$this->setTemplateFile('skin_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief board module message
|
||||
**/
|
||||
function alertMessage($message) {
|
||||
$script = sprintf('<script> xAddEventListener(window,"load", function() { alert("%s"); } );</script>', Context::getLang($message));
|
||||
Context::addHtmlHeader( $script );
|
||||
}
|
||||
}
|
||||
160
modules/board/board.api.php
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardAPI
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module View Action에 대한 API 처리
|
||||
**/
|
||||
|
||||
class boardAPI extends board {
|
||||
|
||||
/* do not use dispBoardContent .
|
||||
function dispBoardContent(&$oModule) {
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* @brief notice list
|
||||
**/
|
||||
function dispBoardNoticeList(&$oModule) {
|
||||
$oModule->add('notice_list',$this->arrangeContentList(Context::get('notice_list')));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief content list
|
||||
**/
|
||||
function dispBoardContentList(&$oModule) {
|
||||
$api_type = Context::get('api_type');
|
||||
$document_list = $this->arrangeContentList(Context::get('document_list'));
|
||||
|
||||
if($api_type =='summary')
|
||||
{
|
||||
$content_cut_size = Context::get('content_cut_size');
|
||||
$content_cut_size = $content_cut_size?$content_cut_size:50;
|
||||
foreach($document_list as $k=>$v)
|
||||
{
|
||||
$oDocument = new documentItem();
|
||||
$oDocument->setAttribute($v, false);
|
||||
$document_list[$k]->content = $oDocument->getSummary($content_cut_size);
|
||||
unset($oDocument);
|
||||
}
|
||||
}
|
||||
|
||||
$oModule->add('document_list',$document_list);
|
||||
$oModule->add('page_navigation',Context::get('page_navigation'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief category list
|
||||
**/
|
||||
function dispBoardCatogoryList(&$oModule) {
|
||||
$oModule->add('category_list',Context::get('category_list'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief board content view
|
||||
**/
|
||||
function dispBoardContentView(&$oModule) {
|
||||
$oDocument = Context::get('oDocument');
|
||||
$extra_vars = $oDocument->getExtraVars();
|
||||
$oDocument->add('extra_vars',$this->arrangeExtraVars($extra_vars));
|
||||
$oModule->add('oDocument',$this->arrangeContent($oDocument));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief contents file list
|
||||
**/
|
||||
function dispBoardContentFileList(&$oModule) {
|
||||
$oModule->add('file_list',$this->arrangeFile(Context::get('file_list')));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief tag list
|
||||
**/
|
||||
function dispBoardTagList(&$oModule) {
|
||||
$oModule->add('tag_list',Context::get('tag_list'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief comments list
|
||||
**/
|
||||
function dispBoardContentCommentList(&$oModule) {
|
||||
$oModule->add('comment_list',$this->arrangeComment(Context::get('comment_list')));
|
||||
}
|
||||
|
||||
function arrangeContentList($content_list) {
|
||||
$output = array();
|
||||
if(count($content_list)) {
|
||||
foreach($content_list as $key => $val) $output[] = $this->arrangeContent($val);
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
function arrangeContent($content) {
|
||||
$output = new stdClass;
|
||||
if($content){
|
||||
$output = $content->gets('document_srl','category_srl','member_srl','nick_name','user_id','user_name','title','content','tags','readed_count','voted_count','blamed_count','comment_count','regdate','last_update','extra_vars','status');
|
||||
|
||||
$t_width = Context::get('thumbnail_width');
|
||||
$t_height = Context::get('thumbnail_height');
|
||||
$t_type = Context::get('thumbnail_type');
|
||||
|
||||
if ($t_width && $t_height && $t_type && $content->thumbnailExists($t_width, $t_height, $t_type)) {
|
||||
$output->thumbnail_src = $content->getThumbnail($t_width, $t_height, $t_type);
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
function arrangeComment($comment_list) {
|
||||
$output = array();
|
||||
if(count($comment_list) > 0 ) {
|
||||
foreach($comment_list as $key => $val){
|
||||
$item = null;
|
||||
$item = $val->gets('comment_srl','parent_srl','depth','is_secret','content','voted_count','blamed_count','user_id','user_name','nick_name','email_address','homepage','regdate','last_update');
|
||||
$output[] = $item;
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
|
||||
function arrangeFile($file_list) {
|
||||
$output = array();
|
||||
if(count($file_list) > 0) {
|
||||
foreach($file_list as $key => $val){
|
||||
$item = new stdClass;
|
||||
$item->sid = $val->sid;
|
||||
$item->download_count = $val->download_count;
|
||||
$item->source_filename = $val->source_filename;
|
||||
$item->uploaded_filename = $val->uploaded_filename;
|
||||
$item->file_size = $val->file_size;
|
||||
$item->regdate = $val->regdate;
|
||||
$item->download_url = $val->download_url;
|
||||
$output[] = $item;
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
function arrangeExtraVars($list) {
|
||||
$output = array();
|
||||
if(count($list)) {
|
||||
foreach($list as $key => $val){
|
||||
$item = new stdClass;
|
||||
$item->name = $val->name;
|
||||
$item->type = $val->type;
|
||||
$item->desc = $val->desc;
|
||||
$item->value = $val->value;
|
||||
$output[] = $item;
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
116
modules/board/board.class.php
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class board
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module high class
|
||||
**/
|
||||
|
||||
class board extends ModuleObject
|
||||
{
|
||||
var $search_option = array('title','content','title_content','comment','user_name','nick_name','user_id','tag'); ///< 검색 옵션
|
||||
|
||||
var $order_target = array('list_order', 'update_order', 'regdate', 'voted_count', 'blamed_count', 'readed_count', 'comment_count', 'title'); // 정렬 옵션
|
||||
|
||||
var $skin = "default"; ///< skin name
|
||||
var $list_count = 20; ///< the number of documents displayed in a page
|
||||
var $page_count = 10; ///< page number
|
||||
var $category_list = NULL; ///< category list
|
||||
|
||||
|
||||
/**
|
||||
* @brief install the module
|
||||
**/
|
||||
function moduleInstall()
|
||||
{
|
||||
// use action forward(enabled in the admin model)
|
||||
$oModuleController = getController('module');
|
||||
$oModuleModel = getModel('module');
|
||||
|
||||
// 2007. 10. 17 insert member menu trigger
|
||||
$oModuleController->insertTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after');
|
||||
|
||||
// install board module
|
||||
$args = new stdClass;
|
||||
$args->site_srl = 0;
|
||||
$output = executeQuery('module.getSite', $args);
|
||||
if(!$output->data->index_module_srl)
|
||||
{
|
||||
$args->mid = 'board';
|
||||
$args->module = 'board';
|
||||
$args->browser_title = 'XpressEngine';
|
||||
$args->skin = 'default';
|
||||
$args->site_srl = 0;
|
||||
$output = $oModuleController->insertModule($args);
|
||||
|
||||
if($output->toBool())
|
||||
{
|
||||
$module_srl = $output->get('module_srl');
|
||||
|
||||
$site_args = new stdClass;
|
||||
$site_args->site_srl = 0;
|
||||
$site_args->index_module_srl = $module_srl;
|
||||
|
||||
$oModuleController = getController('module');
|
||||
$oModuleController->updateSite($site_args);
|
||||
}
|
||||
}
|
||||
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief chgeck module method
|
||||
**/
|
||||
function checkUpdate()
|
||||
{
|
||||
$oModuleModel = getModel('module');
|
||||
|
||||
// 2007. 10. 17 get the member menu trigger
|
||||
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after')) return true;
|
||||
|
||||
// 2011. 09. 20 when add new menu in sitemap, custom menu add
|
||||
if(!$oModuleModel->getTrigger('menu.getModuleListInSitemap', 'board', 'model', 'triggerModuleListInSitemap', 'after')) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief update module
|
||||
**/
|
||||
function moduleUpdate()
|
||||
{
|
||||
$oModuleModel = getModel('module');
|
||||
$oModuleController = getController('module');
|
||||
|
||||
// 2007. 10. 17 check the member menu trigger, if it is not existed then insert
|
||||
if(!$oModuleModel->getTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after'))
|
||||
{
|
||||
$oModuleController->insertTrigger('member.getMemberMenu', 'board', 'controller', 'triggerMemberMenu', 'after');
|
||||
}
|
||||
|
||||
// 2011. 09. 20 when add new menu in sitemap, custom menu add
|
||||
if(!$oModuleModel->getTrigger('menu.getModuleListInSitemap', 'board', 'model', 'triggerModuleListInSitemap', 'after'))
|
||||
{
|
||||
$oModuleController->insertTrigger('menu.getModuleListInSitemap', 'board', 'model', 'triggerModuleListInSitemap', 'after');
|
||||
}
|
||||
|
||||
return new Object(0, 'success_updated');
|
||||
}
|
||||
|
||||
function moduleUninstall()
|
||||
{
|
||||
$output = executeQueryArray("board.getAllBoard");
|
||||
if(!$output->data) return new Object();
|
||||
@set_time_limit(0);
|
||||
|
||||
$oModuleController = getController('module');
|
||||
|
||||
foreach($output->data as $board)
|
||||
{
|
||||
$oModuleController->deleteModule($board->module_srl);
|
||||
}
|
||||
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
435
modules/board/board.controller.php
Normal file
|
|
@ -0,0 +1,435 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardController
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module Controller class
|
||||
**/
|
||||
|
||||
class boardController extends board
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief initialization
|
||||
**/
|
||||
function init()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief insert document
|
||||
**/
|
||||
function procBoardInsertDocument()
|
||||
{
|
||||
// check grant
|
||||
if($this->module_info->module != "board")
|
||||
{
|
||||
return new Object(-1, "msg_invalid_request");
|
||||
}
|
||||
if(!$this->grant->write_document)
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// setup variables
|
||||
$obj = Context::getRequestVars();
|
||||
$obj->module_srl = $this->module_srl;
|
||||
if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N';
|
||||
$obj->commentStatus = $obj->comment_status;
|
||||
|
||||
settype($obj->title, "string");
|
||||
if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');
|
||||
//setup dpcument title tp 'Untitled'
|
||||
if($obj->title == '') $obj->title = 'Untitled';
|
||||
|
||||
// unset document style if the user is not the document manager
|
||||
if(!$this->grant->manager)
|
||||
{
|
||||
unset($obj->title_color);
|
||||
unset($obj->title_bold);
|
||||
}
|
||||
|
||||
// generate document module model object
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
// generate document module의 controller object
|
||||
$oDocumentController = getController('document');
|
||||
|
||||
// check if the document is existed
|
||||
$oDocument = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager);
|
||||
|
||||
// if use anonymous is true
|
||||
if($this->module_info->use_anonymous == 'Y')
|
||||
{
|
||||
$this->module_info->admin_mail = '';
|
||||
$obj->notify_message = 'N';
|
||||
$obj->member_srl = -1*$logged_info->member_srl;
|
||||
$obj->email_address = $obj->homepage = $obj->user_id = '';
|
||||
$obj->user_name = $obj->nick_name = 'anonymous';
|
||||
$bAnonymous = true;
|
||||
$oDocument->add('member_srl', $obj->member_srl);
|
||||
}
|
||||
else
|
||||
{
|
||||
$bAnonymous = false;
|
||||
}
|
||||
|
||||
// update the document if it is existed
|
||||
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl)
|
||||
{
|
||||
if(!$oDocument->isGranted())
|
||||
{
|
||||
return new Object(-1,'msg_not_permitted');
|
||||
}
|
||||
|
||||
if($this->module_info->protect_content=="Y" && $oDocument->get('comment_count')>0 && $this->grant->manager==false)
|
||||
{
|
||||
return new Object(-1,'msg_protect_content');
|
||||
}
|
||||
|
||||
if(!$this->grant->manager)
|
||||
{
|
||||
// notice & document style same as before if not manager
|
||||
$obj->is_notice = $oDocument->get('is_notice');
|
||||
$obj->title_color = $oDocument->get('title_color');
|
||||
$obj->title_bold = $oDocument->get('title_bold');
|
||||
}
|
||||
|
||||
$output = $oDocumentController->updateDocument($oDocument, $obj);
|
||||
$msg_code = 'success_updated';
|
||||
|
||||
// insert a new document otherwise
|
||||
} else {
|
||||
$output = $oDocumentController->insertDocument($obj, $bAnonymous);
|
||||
$msg_code = 'success_registed';
|
||||
$obj->document_srl = $output->get('document_srl');
|
||||
|
||||
// send an email to admin user
|
||||
if($output->toBool() && $this->module_info->admin_mail)
|
||||
{
|
||||
$oMail = new Mail();
|
||||
$oMail->setTitle($obj->title);
|
||||
$oMail->setContent( sprintf("From : <a href=\"%s\">%s</a><br/>\r\n%s", getFullUrl('','document_srl',$obj->document_srl), getFullUrl('','document_srl',$obj->document_srl), $obj->content));
|
||||
$oMail->setSender($obj->user_name, $obj->email_address);
|
||||
|
||||
$target_mail = explode(',',$this->module_info->admin_mail);
|
||||
for($i=0;$i<count($target_mail);$i++)
|
||||
{
|
||||
$email_address = trim($target_mail[$i]);
|
||||
if(!$email_address) continue;
|
||||
$oMail->setReceiptor($email_address, $email_address);
|
||||
$oMail->send();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// if there is an error
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
// return the results
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
|
||||
// alert a message
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief delete the document
|
||||
**/
|
||||
function procBoardDeleteDocument()
|
||||
{
|
||||
// get the document_srl
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// if the document is not existed
|
||||
if(!$document_srl)
|
||||
{
|
||||
return $this->doError('msg_invalid_document');
|
||||
}
|
||||
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
// check protect content
|
||||
if($this->module_info->protect_content=="Y" && $oDocument->get('comment_count')>0 && $this->grant->manager==false)
|
||||
{
|
||||
return new Object(-1, 'msg_protect_content');
|
||||
}
|
||||
|
||||
// generate document module controller object
|
||||
$oDocumentController = getController('document');
|
||||
|
||||
// delete the document
|
||||
$output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
// alert an message
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', $output->get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief vote
|
||||
**/
|
||||
function procBoardVoteDocument()
|
||||
{
|
||||
// generate document module controller object
|
||||
$oDocumentController = getController('document');
|
||||
|
||||
$document_srl = Context::get('document_srl');
|
||||
return $oDocumentController->updateVotedCount($document_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief insert comments
|
||||
**/
|
||||
function procBoardInsertComment()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_comment)
|
||||
{
|
||||
return new Object(-1, 'msg_not_permitted');
|
||||
}
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// get the relevant data for inserting comment
|
||||
$obj = Context::getRequestVars();
|
||||
$obj->module_srl = $this->module_srl;
|
||||
|
||||
// check if the doument is existed
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($obj->document_srl);
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
return new Object(-1,'msg_not_permitted');
|
||||
}
|
||||
|
||||
// For anonymous use, remove writer's information and notifying information
|
||||
if($this->module_info->use_anonymous == 'Y')
|
||||
{
|
||||
$this->module_info->admin_mail = '';
|
||||
$obj->notify_message = 'N';
|
||||
$obj->member_srl = -1*$logged_info->member_srl;
|
||||
$obj->email_address = $obj->homepage = $obj->user_id = '';
|
||||
$obj->user_name = $obj->nick_name = 'anonymous';
|
||||
$bAnonymous = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$bAnonymous = false;
|
||||
}
|
||||
|
||||
// generate comment module model object
|
||||
$oCommentModel = getModel('comment');
|
||||
|
||||
// generate comment module controller object
|
||||
$oCommentController = getController('comment');
|
||||
|
||||
// check the comment is existed
|
||||
// if the comment is not existed, then generate a new sequence
|
||||
if(!$obj->comment_srl)
|
||||
{
|
||||
$obj->comment_srl = getNextSequence();
|
||||
} else {
|
||||
$comment = $oCommentModel->getComment($obj->comment_srl, $this->grant->manager);
|
||||
}
|
||||
|
||||
// if comment_srl is not existed, then insert the comment
|
||||
if($comment->comment_srl != $obj->comment_srl)
|
||||
{
|
||||
|
||||
// parent_srl is existed
|
||||
if($obj->parent_srl)
|
||||
{
|
||||
$parent_comment = $oCommentModel->getComment($obj->parent_srl);
|
||||
if(!$parent_comment->comment_srl)
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
$output = $oCommentController->insertComment($obj, $bAnonymous);
|
||||
|
||||
// parent_srl is not existed
|
||||
} else {
|
||||
$output = $oCommentController->insertComment($obj, $bAnonymous);
|
||||
}
|
||||
// update the comment if it is not existed
|
||||
} else {
|
||||
// check the grant
|
||||
if(!$comment->isGranted())
|
||||
{
|
||||
return new Object(-1,'msg_not_permitted');
|
||||
}
|
||||
|
||||
$obj->parent_srl = $comment->parent_srl;
|
||||
$output = $oCommentController->updateComment($obj, $this->grant->manager);
|
||||
$comment_srl = $obj->comment_srl;
|
||||
}
|
||||
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $obj->document_srl);
|
||||
$this->add('comment_srl', $obj->comment_srl);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief delete the comment
|
||||
**/
|
||||
function procBoardDeleteComment()
|
||||
{
|
||||
// get the comment_srl
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
if(!$comment_srl)
|
||||
{
|
||||
return $this->doError('msg_invalid_request');
|
||||
}
|
||||
|
||||
// generate comment controller object
|
||||
$oCommentController = getController('comment');
|
||||
|
||||
$output = $oCommentController->deleteComment($comment_srl, $this->grant->manager);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', Context::get('page'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief delete the tracjback
|
||||
**/
|
||||
function procBoardDeleteTrackback()
|
||||
{
|
||||
$trackback_srl = Context::get('trackback_srl');
|
||||
|
||||
// generate trackback module controller object
|
||||
$oTrackbackController = getController('trackback');
|
||||
|
||||
if(!$oTrackbackController) return;
|
||||
|
||||
$output = $oTrackbackController->deleteTrackback($trackback_srl, $this->grant->manager);
|
||||
if(!$output->toBool())
|
||||
{
|
||||
return $output;
|
||||
}
|
||||
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', Context::get('page'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief check the password for document and comment
|
||||
**/
|
||||
function procBoardVerificationPassword()
|
||||
{
|
||||
// get the id number of the document and the comment
|
||||
$password = Context::get('password');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
$oMemberModel = getModel('member');
|
||||
|
||||
// if the comment exists
|
||||
if($comment_srl)
|
||||
{
|
||||
// get the comment information
|
||||
$oCommentModel = getModel('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl);
|
||||
if(!$oComment->isExists())
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// compare the comment password and the user input password
|
||||
if(!$oMemberModel->isValidPassword($oComment->get('password'),$password))
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_password');
|
||||
}
|
||||
|
||||
$oComment->setGrant();
|
||||
} else {
|
||||
// get the document information
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// compare the document password and the user input password
|
||||
if(!$oMemberModel->isValidPassword($oDocument->get('password'),$password))
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_password');
|
||||
}
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief the trigger for displaying 'view document' link when click the user ID
|
||||
**/
|
||||
function triggerMemberMenu(&$obj)
|
||||
{
|
||||
$member_srl = Context::get('target_srl');
|
||||
$mid = Context::get('cur_mid');
|
||||
|
||||
if(!$member_srl || !$mid)
|
||||
{
|
||||
return new Object();
|
||||
}
|
||||
|
||||
$logged_info = Context::get('logged_info');
|
||||
|
||||
// get the module information
|
||||
$oModuleModel = getModel('module');
|
||||
$columnList = array('module');
|
||||
$cur_module_info = $oModuleModel->getModuleInfoByMid($mid, 0, $columnList);
|
||||
|
||||
if($cur_module_info->module != 'board')
|
||||
{
|
||||
return new Object();
|
||||
}
|
||||
|
||||
// get the member information
|
||||
if($member_srl == $logged_info->member_srl)
|
||||
{
|
||||
$member_info = $logged_info;
|
||||
} else {
|
||||
$oMemberModel = getModel('member');
|
||||
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
|
||||
}
|
||||
|
||||
if(!$member_info->user_id)
|
||||
{
|
||||
return new Object();
|
||||
}
|
||||
|
||||
//search
|
||||
$url = getUrl('','mid',$mid,'search_target','nick_name','search_keyword',$member_info->nick_name);
|
||||
$oMemberController = getController('member');
|
||||
$oMemberController->addMemberPopupMenu($url, 'cmd_view_own_document', '');
|
||||
|
||||
return new Object();
|
||||
}
|
||||
}
|
||||
96
modules/board/board.mobile.php
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
require_once(_XE_PATH_.'modules/board/board.view.php');
|
||||
|
||||
class boardMobile extends boardView
|
||||
{
|
||||
function init()
|
||||
{
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('document_srl', 'comment_srl', 'vid', 'mid', 'page', 'category', 'search_target', 'search_keyword', 'sort_index', 'order_type', 'trackback_srl');
|
||||
|
||||
if($this->module_info->list_count) $this->list_count = $this->module_info->list_count;
|
||||
if($this->module_info->search_list_count) $this->search_list_count = $this->module_info->search_list_count;
|
||||
if($this->module_info->page_count) $this->page_count = $this->module_info->page_count;
|
||||
$this->except_notice = $this->module_info->except_notice == 'N' ? false : true;
|
||||
|
||||
// $this->_getStatusNameListecret option backward compatibility
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
$statusList = $this->_getStatusNameList($oDocumentModel);
|
||||
if(isset($statusList['SECRET']))
|
||||
{
|
||||
$this->module_info->secret = 'Y';
|
||||
}
|
||||
|
||||
//If category are exsist, set value 'use_category' to 'Y'
|
||||
if(count($oDocumentModel->getCategoryList($this->module_info->module_srl)))
|
||||
$this->module_info->use_category = 'Y';
|
||||
else
|
||||
$this->module_info->use_category = 'N';
|
||||
|
||||
/**
|
||||
* check the consultation function, if the user is admin then swich off consultation function
|
||||
* if the user is not logged, then disppear write document/write comment./ view document
|
||||
**/
|
||||
if($this->module_info->consultation == 'Y' && !$this->grant->manager)
|
||||
{
|
||||
$this->consultation = true;
|
||||
if(!Context::get('is_logged')) $this->grant->list = $this->grant->write_document = $this->grant->write_comment = $this->grant->view = false;
|
||||
} else {
|
||||
$this->consultation = false;
|
||||
}
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
$extra_keys = $oDocumentModel->getExtraKeys($this->module_info->module_srl);
|
||||
Context::set('extra_keys', $extra_keys);
|
||||
|
||||
$template_path = sprintf("%sm.skins/%s/",$this->module_path, $this->module_info->mskin);
|
||||
if(!is_dir($template_path)||!$this->module_info->mskin)
|
||||
{
|
||||
$this->module_info->mskin = 'default';
|
||||
$template_path = sprintf("%sm.skins/%s/",$this->module_path, $this->module_info->mskin);
|
||||
}
|
||||
$this->setTemplatePath($template_path);
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'input_password.xml');
|
||||
}
|
||||
|
||||
function dispBoardCategory()
|
||||
{
|
||||
$this->dispBoardCategoryList();
|
||||
$category_list = Context::get('category_list');
|
||||
$this->setTemplateFile('category.html');
|
||||
}
|
||||
|
||||
function getBoardCommentPage()
|
||||
{
|
||||
$document_srl = Context::get('document_srl');
|
||||
$oDocumentModel =& getModel('document');
|
||||
if(!$document_srl)
|
||||
{
|
||||
return new Object(-1, "msg_invalid_request");
|
||||
}
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
return new Object(-1, "msg_invalid_request");
|
||||
}
|
||||
Context::set('oDocument', $oDocument);
|
||||
$oTemplate = TemplateHandler::getInstance();
|
||||
$html = $oTemplate->compile($this->getTemplatePath(), "comment.html");
|
||||
$this->add("html", $html);
|
||||
}
|
||||
|
||||
function dispBoardMessage($msg_code)
|
||||
{
|
||||
$msg = Context::getLang($msg_code);
|
||||
$oMessageObject = &ModuleHandler::getModuleInstance('message','mobile');
|
||||
$oMessageObject->setError(-1);
|
||||
$oMessageObject->setMessage($msg);
|
||||
$oMessageObject->dispMessage();
|
||||
|
||||
$this->setTemplatePath($oMessageObject->getTemplatePath());
|
||||
$this->setTemplateFile($oMessageObject->getTemplateFile());
|
||||
}
|
||||
}
|
||||
93
modules/board/board.model.php
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardModel
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module Model class
|
||||
**/
|
||||
class boardModel extends module
|
||||
{
|
||||
/**
|
||||
* @brief initialization
|
||||
**/
|
||||
function init()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief get the list configuration
|
||||
**/
|
||||
function getListConfig($module_srl)
|
||||
{
|
||||
$oModuleModel = getModel('module');
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
// get the list config value, if it is not exitsted then setup the default value
|
||||
$list_config = $oModuleModel->getModulePartConfig('board', $module_srl);
|
||||
if(!$list_config || !count($list_config))
|
||||
{
|
||||
$list_config = array( 'no', 'title', 'nick_name','regdate','readed_count');
|
||||
}
|
||||
|
||||
// get the extra variables
|
||||
$inserted_extra_vars = $oDocumentModel->getExtraKeys($module_srl);
|
||||
|
||||
foreach($list_config as $key)
|
||||
{
|
||||
if(preg_match('/^([0-9]+)$/',$key))
|
||||
{
|
||||
if($inserted_extra_vars[$key])
|
||||
{
|
||||
$output['extra_vars'.$key] = $inserted_extra_vars[$key];
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$output[$key] = new ExtraItem($module_srl, -1, Context::getLang($key), $key, 'N', 'N', 'N', null);
|
||||
}
|
||||
}
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief return the default list configration value
|
||||
**/
|
||||
function getDefaultListConfig($module_srl)
|
||||
{
|
||||
// add virtual srl, title, registered date, update date, nickname, ID, name, readed count, voted count etc.
|
||||
$virtual_vars = array( 'no', 'title', 'regdate', 'last_update', 'last_post', 'nick_name',
|
||||
'user_id', 'user_name', 'readed_count', 'voted_count', 'blamed_count', 'thumbnail', 'summary', 'comment_status');
|
||||
foreach($virtual_vars as $key)
|
||||
{
|
||||
$extra_vars[$key] = new ExtraItem($module_srl, -1, Context::getLang($key), $key, 'N', 'N', 'N', null);
|
||||
}
|
||||
|
||||
// get the extra variables from the document model
|
||||
$oDocumentModel = getModel('document');
|
||||
$inserted_extra_vars = $oDocumentModel->getExtraKeys($module_srl);
|
||||
|
||||
if(count($inserted_extra_vars))
|
||||
{
|
||||
foreach($inserted_extra_vars as $obj)
|
||||
{
|
||||
$extra_vars['extra_vars'.$obj->idx] = $obj;
|
||||
}
|
||||
}
|
||||
|
||||
return $extra_vars;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief return module name in sitemap
|
||||
**/
|
||||
function triggerModuleListInSitemap(&$obj)
|
||||
{
|
||||
array_push($obj, 'board');
|
||||
}
|
||||
}
|
||||
960
modules/board/board.view.php
Normal file
|
|
@ -0,0 +1,960 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardView
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module View class
|
||||
**/
|
||||
class boardView extends board
|
||||
{
|
||||
var $listConfig;
|
||||
var $columnList;
|
||||
|
||||
/**
|
||||
* @brief initialization
|
||||
* board module can be used in either normal mode or admin mode.\n
|
||||
**/
|
||||
function init()
|
||||
{
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('document_srl', 'comment_srl', 'vid', 'mid', 'page', 'category', 'search_target', 'search_keyword', 'sort_index', 'order_type', 'trackback_srl');
|
||||
|
||||
/**
|
||||
* setup the module general information
|
||||
**/
|
||||
if($this->module_info->list_count)
|
||||
{
|
||||
$this->list_count = $this->module_info->list_count;
|
||||
}
|
||||
if($this->module_info->search_list_count)
|
||||
{
|
||||
$this->search_list_count = $this->module_info->search_list_count;
|
||||
}
|
||||
if($this->module_info->page_count)
|
||||
{
|
||||
$this->page_count = $this->module_info->page_count;
|
||||
}
|
||||
$this->except_notice = $this->module_info->except_notice == 'N' ? FALSE : TRUE;
|
||||
|
||||
// $this->_getStatusNameListecret option backward compatibility
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
$statusList = $this->_getStatusNameList($oDocumentModel);
|
||||
if(isset($statusList['SECRET']))
|
||||
{
|
||||
$this->module_info->secret = 'Y';
|
||||
}
|
||||
|
||||
// use_category <=1.5.x, hide_category >=1.7.x
|
||||
$count_category = count($oDocumentModel->getCategoryList($this->module_info->module_srl));
|
||||
if($count_category && ($this->module_info->hide_category != 'Y' || $this->module_info->use_category != 'N'))
|
||||
{
|
||||
$this->module_info->hide_category = 'N';
|
||||
$this->module_info->use_category = 'Y';
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->module_info->hide_category = 'Y';
|
||||
$this->module_info->use_category = 'N';
|
||||
}
|
||||
|
||||
/**
|
||||
* check the consultation function, if the user is admin then swich off consultation function
|
||||
* if the user is not logged, then disppear write document/write comment./ view document
|
||||
**/
|
||||
if($this->module_info->consultation == 'Y' && !$this->grant->manager)
|
||||
{
|
||||
$this->consultation = TRUE;
|
||||
if(!Context::get('is_logged'))
|
||||
{
|
||||
$this->grant->list = FALSE;
|
||||
$this->grant->write_document = FALSE;
|
||||
$this->grant->write_comment = FALSE;
|
||||
$this->grant->view = FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->consultation = FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
* setup the template path based on the skin
|
||||
* the default skin is default
|
||||
**/
|
||||
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
|
||||
if(!is_dir($template_path)||!$this->module_info->skin)
|
||||
{
|
||||
$this->module_info->skin = 'default';
|
||||
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
|
||||
}
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
/**
|
||||
* use context::set to setup extra variables
|
||||
**/
|
||||
$oDocumentModel = getModel('document');
|
||||
$extra_keys = $oDocumentModel->getExtraKeys($this->module_info->module_srl);
|
||||
Context::set('extra_keys', $extra_keys);
|
||||
|
||||
/**
|
||||
* add extra variables to order(sorting) target
|
||||
**/
|
||||
if (is_array($extra_keys))
|
||||
{
|
||||
foreach($extra_keys as $val)
|
||||
{
|
||||
$this->order_target[] = $val->eid;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* load javascript, JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'input_password.xml');
|
||||
Context::addJsFile($this->module_path.'tpl/js/board.js');
|
||||
|
||||
// remove [document_srl]_cpage from get_vars
|
||||
$args = Context::getRequestVars();
|
||||
foreach($args as $name => $value)
|
||||
{
|
||||
if(preg_match('/[0-9]+_cpage/', $name))
|
||||
{
|
||||
Context::set($name, '', TRUE);
|
||||
Context::set($name, $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display board contents
|
||||
**/
|
||||
function dispBoardContent()
|
||||
{
|
||||
/**
|
||||
* check the access grant (all the grant has been set by the module object)
|
||||
**/
|
||||
if(!$this->grant->access || !$this->grant->list)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
/**
|
||||
* display the category list, and then setup the category list on context
|
||||
**/
|
||||
$this->dispBoardCategoryList();
|
||||
|
||||
/**
|
||||
* display the search options on the screen
|
||||
* add extra vaiables to the search options
|
||||
**/
|
||||
// use search options on the template (the search options key has been declared, based on the language selected)
|
||||
foreach($this->search_option as $opt) $search_option[$opt] = Context::getLang($opt);
|
||||
$extra_keys = Context::get('extra_keys');
|
||||
if($extra_keys)
|
||||
{
|
||||
foreach($extra_keys as $key => $val)
|
||||
{
|
||||
if($val->search == 'Y') $search_option['extra_vars'.$val->idx] = $val->name;
|
||||
}
|
||||
}
|
||||
Context::set('search_option', $search_option);
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
$statusNameList = $this->_getStatusNameList($oDocumentModel);
|
||||
if(count($statusNameList) > 0)
|
||||
{
|
||||
Context::set('status_list', $statusNameList);
|
||||
}
|
||||
|
||||
// display the board content
|
||||
$this->dispBoardContentView();
|
||||
|
||||
// list config, columnList setting
|
||||
$oBoardModel = getModel('board');
|
||||
$this->listConfig = $oBoardModel->getListConfig($this->module_info->module_srl);
|
||||
$this->_makeListColumnList();
|
||||
|
||||
// display the notice list
|
||||
$this->dispBoardNoticeList();
|
||||
|
||||
// list
|
||||
$this->dispBoardContentList();
|
||||
|
||||
/**
|
||||
* add javascript filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'search.xml');
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('search_option.');
|
||||
|
||||
// setup the tmeplate file
|
||||
$this->setTemplateFile('list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the category list
|
||||
**/
|
||||
function dispBoardCategoryList(){
|
||||
// check if the use_category option is enabled
|
||||
if($this->module_info->use_category=='Y')
|
||||
{
|
||||
$oDocumentModel = getModel('document');
|
||||
Context::set('category_list', $oDocumentModel->getCategoryList($this->module_srl));
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('category_list.', 'category_list.childs.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the board conent view
|
||||
**/
|
||||
function dispBoardContentView(){
|
||||
// get the variable value
|
||||
$document_srl = Context::get('document_srl');
|
||||
$page = Context::get('page');
|
||||
|
||||
// generate document model object
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
/**
|
||||
* if the document exists, then get the document information
|
||||
**/
|
||||
if($document_srl)
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl, false, true);
|
||||
|
||||
// if the document is existed
|
||||
if($oDocument->isExists())
|
||||
{
|
||||
// if the module srl is not consistent
|
||||
if($oDocument->get('module_srl')!=$this->module_info->module_srl )
|
||||
{
|
||||
return $this->stop('msg_invalid_request');
|
||||
}
|
||||
|
||||
// check the manage grant
|
||||
if($this->grant->manager) $oDocument->setGrant();
|
||||
|
||||
// if the consultation function is enabled, and the document is not a notice
|
||||
if($this->consultation && !$oDocument->isNotice())
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
if($oDocument->get('member_srl')!=$logged_info->member_srl)
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// if the document is not existed, then alert a warning message
|
||||
Context::set('document_srl','',true);
|
||||
$this->alertMessage('msg_not_founded');
|
||||
}
|
||||
|
||||
/**
|
||||
* if the document is not existed, get an empty document
|
||||
**/
|
||||
}
|
||||
else
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument(0);
|
||||
}
|
||||
|
||||
/**
|
||||
*check the document view grant
|
||||
**/
|
||||
if($oDocument->isExists())
|
||||
{
|
||||
if(!$this->grant->view && !$oDocument->isGranted())
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument(0);
|
||||
Context::set('document_srl','',true);
|
||||
$this->alertMessage('msg_not_permitted');
|
||||
}
|
||||
else
|
||||
{
|
||||
// add the document title to the browser
|
||||
Context::addBrowserTitle($oDocument->getTitleText());
|
||||
|
||||
// update the document view count (if the document is not secret)
|
||||
if(!$oDocument->isSecret() || $oDocument->isGranted())
|
||||
{
|
||||
$oDocument->updateReadedCount();
|
||||
}
|
||||
|
||||
// disappear the document if it is secret
|
||||
if($oDocument->isSecret() && !$oDocument->isGranted())
|
||||
{
|
||||
$oDocument->add('content',Context::getLang('thisissecret'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// setup the document oject on context
|
||||
$oDocument->add('module_srl', $this->module_srl);
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
/**
|
||||
* add javascript filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
|
||||
|
||||
// return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the document file list (can be used by API)
|
||||
**/
|
||||
function dispBoardContentFileList(){
|
||||
$oDocumentModel = getModel('document');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
Context::set('file_list',$oDocument->getUploadedFiles());
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('file_list..source_filename');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the document comment list (can be used by API)
|
||||
**/
|
||||
function dispBoardContentCommentList(){
|
||||
$oDocumentModel = getModel('document');
|
||||
$document_srl = Context::get('document_srl');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
$comment_list = $oDocument->getComments();
|
||||
|
||||
// setup the comment list
|
||||
if(is_array($comment_list))
|
||||
{
|
||||
foreach($comment_list as $key => $val)
|
||||
{
|
||||
if(!$val->isAccessible())
|
||||
{
|
||||
$val->add('content',Context::getLang('thisissecret'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Context::set('comment_list',$comment_list);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display notice list (can be used by API)
|
||||
**/
|
||||
function dispBoardNoticeList(){
|
||||
$oDocumentModel = getModel('document');
|
||||
$args = new stdClass();
|
||||
$args->module_srl = $this->module_srl;
|
||||
$notice_output = $oDocumentModel->getNoticeList($args, $this->columnList);
|
||||
Context::set('notice_list', $notice_output->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display board content list
|
||||
**/
|
||||
function dispBoardContentList(){
|
||||
// check the grant
|
||||
if(!$this->grant->list)
|
||||
{
|
||||
Context::set('document_list', array());
|
||||
Context::set('total_count', 0);
|
||||
Context::set('total_page', 1);
|
||||
Context::set('page', 1);
|
||||
Context::set('page_navigation', new PageHandler(0,0,1,10));
|
||||
return;
|
||||
}
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
// setup module_srl/page number/ list number/ page count
|
||||
$args = new stdClass();
|
||||
$args->module_srl = $this->module_srl;
|
||||
$args->page = Context::get('page');
|
||||
$args->list_count = $this->list_count;
|
||||
$args->page_count = $this->page_count;
|
||||
|
||||
// get the search target and keyword
|
||||
$args->search_target = Context::get('search_target');
|
||||
$args->search_keyword = Context::get('search_keyword');
|
||||
|
||||
// if the category is enabled, then get the category
|
||||
if($this->module_info->use_category=='Y')
|
||||
{
|
||||
$args->category_srl = Context::get('category');
|
||||
}
|
||||
|
||||
// setup the sort index and order index
|
||||
$args->sort_index = Context::get('sort_index');
|
||||
$args->order_type = Context::get('order_type');
|
||||
if(!in_array($args->sort_index, $this->order_target))
|
||||
{
|
||||
$args->sort_index = $this->module_info->order_target?$this->module_info->order_target:'list_order';
|
||||
}
|
||||
if(!in_array($args->order_type, array('asc','desc')))
|
||||
{
|
||||
$args->order_type = $this->module_info->order_type?$this->module_info->order_type:'asc';
|
||||
}
|
||||
|
||||
// set the current page of documents
|
||||
$_get = $_GET;
|
||||
if(!$args->page && ($_GET['document_srl'] || $_GET['entry']))
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument(Context::get('document_srl'));
|
||||
if($oDocument->isExists() && !$oDocument->isNotice())
|
||||
{
|
||||
$page = $oDocumentModel->getDocumentPage($oDocument, $args);
|
||||
Context::set('page', $page);
|
||||
$args->page = $page;
|
||||
}
|
||||
}
|
||||
|
||||
// setup the list count to be serach list count, if the category or search keyword has been set
|
||||
if($args->category_srl || $args->search_keyword)
|
||||
{
|
||||
$args->list_count = $this->search_list_count;
|
||||
}
|
||||
|
||||
// if the consultation function is enabled, the get the logged user information
|
||||
if($this->consultation)
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
$args->member_srl = $logged_info->member_srl;
|
||||
}
|
||||
|
||||
// setup the list config variable on context
|
||||
Context::set('list_config', $this->listConfig);
|
||||
// setup document list variables on context
|
||||
$output = $oDocumentModel->getDocumentList($args, $this->except_notice, TRUE, $this->columnList);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
}
|
||||
|
||||
function _makeListColumnList()
|
||||
{
|
||||
$configColumList = array_keys($this->listConfig);
|
||||
$tableColumnList = array('document_srl', 'module_srl', 'category_srl', 'lang_code', 'is_notice',
|
||||
'title', 'title_bold', 'title_color', 'content', 'readed_count', 'voted_count',
|
||||
'blamed_count', 'comment_count', 'trackback_count', 'uploaded_count', 'password', 'user_id',
|
||||
'user_name', 'nick_name', 'member_srl', 'email_address', 'homepage', 'tags', 'extra_vars',
|
||||
'regdate', 'last_update', 'last_updater', 'ipaddress', 'list_order', 'update_order',
|
||||
'allow_trackback', 'notify_message', 'status', 'comment_status');
|
||||
$this->columnList = array_intersect($configColumList, $tableColumnList);
|
||||
|
||||
if(in_array('summary', $configColumList)) array_push($this->columnList, 'content');
|
||||
|
||||
// default column list add
|
||||
$defaultColumn = array('document_srl', 'module_srl', 'category_srl', 'lang_code', 'member_srl', 'last_update', 'comment_count', 'trackback_count', 'uploaded_count', 'status', 'regdate', 'title_bold', 'title_color');
|
||||
|
||||
//TODO guestbook, blog style supports legacy codes.
|
||||
if($this->module_info->skin == 'xe_guestbook' || $this->module_info->default_style == 'blog')
|
||||
{
|
||||
$defaultColumn = $tableColumnList;
|
||||
}
|
||||
|
||||
if (in_array('last_post', $configColumList)){
|
||||
array_push($this->columnList, 'last_updater');
|
||||
}
|
||||
|
||||
// add is_notice
|
||||
if ($this->except_notice)
|
||||
{
|
||||
array_push($this->columnList, 'is_notice');
|
||||
}
|
||||
$this->columnList = array_unique(array_merge($this->columnList, $defaultColumn));
|
||||
|
||||
// add table name
|
||||
foreach($this->columnList as $no => $value)
|
||||
{
|
||||
$this->columnList[$no] = 'documents.' . $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display tag list
|
||||
**/
|
||||
function dispBoardTagList()
|
||||
{
|
||||
// check if there is not grant fot view list, then alert an warning message
|
||||
if(!$this->grant->list)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// generate the tag module model object
|
||||
$oTagModel = getModel('tag');
|
||||
|
||||
$obj = new stdClass;
|
||||
$obj->mid = $this->module_info->mid;
|
||||
$obj->list_count = 10000;
|
||||
$output = $oTagModel->getTagList($obj);
|
||||
|
||||
// automatically order
|
||||
if(count($output->data))
|
||||
{
|
||||
$numbers = array_keys($output->data);
|
||||
shuffle($numbers);
|
||||
|
||||
if(count($output->data))
|
||||
{
|
||||
foreach($numbers as $k => $v)
|
||||
{
|
||||
$tag_list[] = $output->data[$v];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Context::set('tag_list', $tag_list);
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('tag_list.');
|
||||
|
||||
$this->setTemplateFile('tag_list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display document write form
|
||||
**/
|
||||
function dispBoardWrite()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_document)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
/**
|
||||
* check if the category option is enabled not not
|
||||
**/
|
||||
if($this->module_info->use_category=='Y')
|
||||
{
|
||||
// get the user group information
|
||||
if(Context::get('is_logged'))
|
||||
{
|
||||
$logged_info = Context::get('logged_info');
|
||||
$group_srls = array_keys($logged_info->group_list);
|
||||
}
|
||||
else
|
||||
{
|
||||
$group_srls = array();
|
||||
}
|
||||
$group_srls_count = count($group_srls);
|
||||
|
||||
// check the grant after obtained the category list
|
||||
$normal_category_list = $oDocumentModel->getCategoryList($this->module_srl);
|
||||
if(count($normal_category_list))
|
||||
{
|
||||
foreach($normal_category_list as $category_srl => $category)
|
||||
{
|
||||
$is_granted = TRUE;
|
||||
if($category->group_srls)
|
||||
{
|
||||
$category_group_srls = explode(',',$category->group_srls);
|
||||
$is_granted = FALSE;
|
||||
if(count(array_intersect($group_srls, $category_group_srls))) $is_granted = TRUE;
|
||||
|
||||
}
|
||||
if($is_granted) $category_list[$category_srl] = $category;
|
||||
}
|
||||
}
|
||||
Context::set('category_list', $category_list);
|
||||
}
|
||||
|
||||
// GET parameter document_srl from request
|
||||
$document_srl = Context::get('document_srl');
|
||||
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
|
||||
$oDocument->setDocument($document_srl);
|
||||
|
||||
if($oDocument->get('module_srl') == $oDocument->get('member_srl')) $savedDoc = TRUE;
|
||||
$oDocument->add('module_srl', $this->module_srl);
|
||||
|
||||
if($oDocument->isExists() && $this->module_info->protect_content=="Y" && $oDocument->get('comment_count')>0 && $this->grant->manager==false)
|
||||
{
|
||||
return new Object(-1, 'msg_protect_content');
|
||||
}
|
||||
|
||||
// if the document is not granted, then back to the password input form
|
||||
$oModuleModel = getModel('module');
|
||||
if($oDocument->isExists()&&!$oDocument->isGranted())
|
||||
{
|
||||
return $this->setTemplateFile('input_password_form');
|
||||
}
|
||||
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
$point_config = $oModuleModel->getModulePartConfig('point',$this->module_srl);
|
||||
$logged_info = Context::get('logged_info');
|
||||
$oPointModel = getModel('point');
|
||||
$pointForInsert = $point_config["insert_document"];
|
||||
if($pointForInsert < 0)
|
||||
{
|
||||
if( !$logged_info )
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
else if (($oPointModel->getPoint($logged_info->member_srl) + $pointForInsert )< 0 )
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_enough_point');
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!$oDocument->get('status')) $oDocument->add('status', $oDocumentModel->getDefaultStatus());
|
||||
|
||||
$statusList = $this->_getStatusNameList($oDocumentModel);
|
||||
if(count($statusList) > 0) Context::set('status_list', $statusList);
|
||||
|
||||
// get Document status config value
|
||||
Context::set('document_srl',$document_srl);
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
// apply xml_js_filter on header
|
||||
$oDocumentController = getController('document');
|
||||
$oDocumentController->addXmlJsFilter($this->module_info->module_srl);
|
||||
|
||||
// if the document exists, then setup extra variabels on context
|
||||
if($oDocument->isExists() && !$savedDoc) Context::set('extra_keys', $oDocument->getExtraVars());
|
||||
|
||||
/**
|
||||
* add JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'insert.xml');
|
||||
|
||||
$oSecurity = new Security();
|
||||
$oSecurity->encodeHTML('category_list.text', 'category_list.title');
|
||||
|
||||
$this->setTemplateFile('write_form');
|
||||
}
|
||||
|
||||
function _getStatusNameList(&$oDocumentModel)
|
||||
{
|
||||
$resultList = array();
|
||||
if(!empty($this->module_info->use_status))
|
||||
{
|
||||
$statusNameList = $oDocumentModel->getStatusNameList();
|
||||
$statusList = explode('|@|', $this->module_info->use_status);
|
||||
|
||||
if(is_array($statusList))
|
||||
{
|
||||
foreach($statusList as $key => $value)
|
||||
{
|
||||
$resultList[$value] = $statusNameList[$value];
|
||||
}
|
||||
}
|
||||
}
|
||||
return $resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display board module deletion form
|
||||
**/
|
||||
function dispBoardDelete()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_document)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// get the document_srl from request
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// if document exists, get the document information
|
||||
if($document_srl)
|
||||
{
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
}
|
||||
|
||||
// if the document is not existed, then back to the board content page
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
return $this->dispBoardContent();
|
||||
}
|
||||
|
||||
// if the document is not granted, then back to the password input form
|
||||
if(!$oDocument->isGranted())
|
||||
{
|
||||
return $this->setTemplateFile('input_password_form');
|
||||
}
|
||||
|
||||
if($this->module_info->protect_content=="Y" && $oDocument->get('comment_count')>0 && $this->grant->manager==false)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_protect_content');
|
||||
}
|
||||
|
||||
Context::set('oDocument',$oDocument);
|
||||
|
||||
/**
|
||||
* add JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'delete_document.xml');
|
||||
|
||||
$this->setTemplateFile('delete_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display comment wirte form
|
||||
**/
|
||||
function dispBoardWriteComment()
|
||||
{
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// check grant
|
||||
if(!$this->grant->write_comment)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// get the document information
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists())
|
||||
{
|
||||
return $this->dispBoardMessage('msg_invalid_request');
|
||||
}
|
||||
|
||||
// Check allow comment
|
||||
if(!$oDocument->allowComment())
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_allow_comment');
|
||||
}
|
||||
|
||||
// obtain the comment (create an empty comment document for comment_form usage)
|
||||
$oCommentModel = getModel('comment');
|
||||
$oSourceComment = $oComment = $oCommentModel->getComment(0);
|
||||
$oComment->add('document_srl', $document_srl);
|
||||
$oComment->add('module_srl', $this->module_srl);
|
||||
|
||||
// setup document variables on context
|
||||
Context::set('oDocument',$oDocument);
|
||||
Context::set('oSourceComment',$oSourceComment);
|
||||
Context::set('oComment',$oComment);
|
||||
|
||||
/**
|
||||
* add JS filter
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
|
||||
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display comment replies page
|
||||
**/
|
||||
function dispBoardReplyComment()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_comment)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// get the parent comment ID
|
||||
$parent_srl = Context::get('comment_srl');
|
||||
|
||||
// if the parent comment is not existed
|
||||
if(!$parent_srl)
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// get the comment
|
||||
$oCommentModel = getModel('comment');
|
||||
$oSourceComment = $oCommentModel->getComment($parent_srl, $this->grant->manager);
|
||||
|
||||
// if the comment is not existed, opoup an error message
|
||||
if(!$oSourceComment->isExists())
|
||||
{
|
||||
return $this->dispBoardMessage('msg_invalid_request');
|
||||
}
|
||||
if(Context::get('document_srl') && $oSourceComment->get('document_srl') != Context::get('document_srl'))
|
||||
{
|
||||
return $this->dispBoardMessage('msg_invalid_request');
|
||||
}
|
||||
|
||||
// Check allow comment
|
||||
$oDocumentModel = getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($oSourceComment->get('document_srl'));
|
||||
if(!$oDocument->allowComment())
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_allow_comment');
|
||||
}
|
||||
|
||||
// get the comment information
|
||||
$oComment = $oCommentModel->getComment();
|
||||
$oComment->add('parent_srl', $parent_srl);
|
||||
$oComment->add('document_srl', $oSourceComment->get('document_srl'));
|
||||
|
||||
// setup comment variables
|
||||
Context::set('oSourceComment',$oSourceComment);
|
||||
Context::set('oComment',$oComment);
|
||||
Context::set('module_srl',$this->module_info->module_srl);
|
||||
|
||||
/**
|
||||
* add JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
|
||||
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the comment modification from
|
||||
**/
|
||||
function dispBoardModifyComment()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_comment)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// get the document_srl and comment_srl
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// if the comment is not existed
|
||||
if(!$comment_srl)
|
||||
{
|
||||
return new Object(-1, 'msg_invalid_request');
|
||||
}
|
||||
|
||||
// get comment information
|
||||
$oCommentModel = getModel('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
|
||||
// if the comment is not exited, alert an error message
|
||||
if(!$oComment->isExists())
|
||||
{
|
||||
return $this->dispBoardMessage('msg_invalid_request');
|
||||
}
|
||||
|
||||
// if the comment is not granted, then back to the password input form
|
||||
if(!$oComment->isGranted())
|
||||
{
|
||||
return $this->setTemplateFile('input_password_form');
|
||||
}
|
||||
|
||||
// setup the comment variables on context
|
||||
Context::set('oSourceComment', $oCommentModel->getComment());
|
||||
Context::set('oComment', $oComment);
|
||||
|
||||
/**
|
||||
* add JS fitlers
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
|
||||
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the delete comment form
|
||||
**/
|
||||
function dispBoardDeleteComment()
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->write_comment)
|
||||
{
|
||||
return $this->dispBoardMessage('msg_not_permitted');
|
||||
}
|
||||
|
||||
// get the comment_srl to be deleted
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// if the comment exists, then get the comment information
|
||||
if($comment_srl)
|
||||
{
|
||||
$oCommentModel = getModel('comment');
|
||||
$oComment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
}
|
||||
|
||||
// if the comment is not existed, then back to the board content page
|
||||
if(!$oComment->isExists() )
|
||||
{
|
||||
return $this->dispBoardContent();
|
||||
}
|
||||
|
||||
// if the comment is not granted, then back to the password input form
|
||||
if(!$oComment->isGranted())
|
||||
{
|
||||
return $this->setTemplateFile('input_password_form');
|
||||
}
|
||||
|
||||
Context::set('oComment',$oComment);
|
||||
|
||||
/**
|
||||
* add JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'delete_comment.xml');
|
||||
|
||||
$this->setTemplateFile('delete_comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display the delete trackback form
|
||||
**/
|
||||
function dispBoardDeleteTrackback()
|
||||
{
|
||||
$oTrackbackModel = getModel('trackback');
|
||||
|
||||
if(!$oTrackbackModel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// get the trackback_srl
|
||||
$trackback_srl = Context::get('trackback_srl');
|
||||
|
||||
// get the trackback data
|
||||
$columnList = array('trackback_srl');
|
||||
$output = $oTrackbackModel->getTrackback($trackback_srl, $columnList);
|
||||
$trackback = $output->data;
|
||||
|
||||
// if no trackback, then display the board content
|
||||
if(!$trackback)
|
||||
{
|
||||
return $this->dispBoardContent();
|
||||
}
|
||||
|
||||
//Context::set('trackback',$trackback); //perhaps trackback variables not use in UI
|
||||
|
||||
/**
|
||||
* add JS filters
|
||||
**/
|
||||
Context::addJsFilter($this->module_path.'tpl/filter', 'delete_trackback.xml');
|
||||
|
||||
$this->setTemplateFile('delete_trackback_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief display board message
|
||||
**/
|
||||
function dispBoardMessage($msg_code)
|
||||
{
|
||||
$msg = Context::getLang($msg_code);
|
||||
if(!$msg) $msg = $msg_code;
|
||||
Context::set('message', $msg);
|
||||
$this->setTemplateFile('message');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief the method for displaying the warning messages
|
||||
* display an error message if it has not a special design
|
||||
**/
|
||||
function alertMessage($message)
|
||||
{
|
||||
$script = sprintf('<script> jQuery(function(){ alert("%s"); } );</script>', Context::getLang($message));
|
||||
Context::addHtmlFooter( $script );
|
||||
}
|
||||
|
||||
}
|
||||
138
modules/board/board.wap.php
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
<?php
|
||||
/* Copyright (C) NAVER <http://www.navercorp.com> */
|
||||
|
||||
/**
|
||||
* @class boardWAP
|
||||
* @author NAVER (developers@xpressengine.com)
|
||||
* @brief board module WAP class
|
||||
**/
|
||||
|
||||
class boardWAP extends board
|
||||
{
|
||||
/**
|
||||
* @brief wap procedure method
|
||||
**/
|
||||
function procWAP(&$oMobile)
|
||||
{
|
||||
// check grant
|
||||
if(!$this->grant->list || $this->module_info->consultation == 'Y')
|
||||
{
|
||||
return $oMobile->setContent(Context::getLang('msg_not_permitted'));
|
||||
}
|
||||
|
||||
// generate document model object
|
||||
$oDocumentModel = getModel('document');
|
||||
|
||||
// if the doument is existed
|
||||
$document_srl = Context::get('document_srl');
|
||||
if($document_srl)
|
||||
{
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if($oDocument->isExists())
|
||||
{
|
||||
// check the grant
|
||||
if(!$this->grant->view)
|
||||
{
|
||||
return $oMobile->setContent(Context::getLang('msg_not_permitted'));
|
||||
}
|
||||
|
||||
// setup the browser title
|
||||
Context::setBrowserTitle($oDocument->getTitleText());
|
||||
|
||||
// if the act is display comment list
|
||||
if($this->act=='dispBoardContentCommentList')
|
||||
{
|
||||
|
||||
$oCommentModel = getModel('comment');
|
||||
$output = $oCommentModel->getCommentList($oDocument->document_srl, 0, false, $oDocument->getCommentCount());
|
||||
|
||||
$content = '';
|
||||
if(count($output->data))
|
||||
{
|
||||
foreach($output->data as $key => $val)
|
||||
{
|
||||
$oComment = new commentItem();
|
||||
$oComment->setAttribute($val);
|
||||
|
||||
if(!$oComment->isAccessible()) continue;
|
||||
|
||||
$content .= "<b>".$oComment->getNickName()."</b> (".$oComment->getRegdate("Y-m-d").")<br>\r\n".$oComment->getContent(false,false)."<br>\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
// setup mobile contents
|
||||
$oMobile->setContent( $content );
|
||||
|
||||
// setup upper URL
|
||||
$oMobile->setUpperUrl( getUrl('act',''), Context::getLang('cmd_go_upper') );
|
||||
|
||||
// display the document if the act is not display the comment list
|
||||
} else {
|
||||
|
||||
// setup contents (strip all html tags)
|
||||
$content = strip_tags(str_replace('<p>','<br> ',$oDocument->getContent(false,false,false)),'<br><b><i><u><em><small><strong><big>');
|
||||
|
||||
|
||||
// setup content information(include the comments link)
|
||||
$content = Context::getLang('replies').' : <a href="'.getUrl('act','dispBoardContentCommentList').'">'.$oDocument->getCommentCount().'</a><br>'."\r\n".$content;
|
||||
$content = '<b>'.$oDocument->getNickName().'</b> ('.$oDocument->getRegdate("Y-m-d").")<br>\r\n".$content;
|
||||
|
||||
// setup mobile contents
|
||||
$oMobile->setContent( $content );
|
||||
|
||||
// setup upper URL
|
||||
$oMobile->setUpperUrl( getUrl('document_srl',''), Context::getLang('cmd_list') );
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// board index
|
||||
$args = new stdClass;
|
||||
$args->module_srl = $this->module_srl;
|
||||
$args->page = Context::get('page');;
|
||||
$args->list_count = 9;
|
||||
$args->sort_index = $this->module_info->order_target?$this->module_info->order_target:'list_order';
|
||||
$args->order_type = $this->module_info->order_type?$this->module_info->order_type:'asc';
|
||||
$output = $oDocumentModel->getDocumentList($args, $this->except_notice);
|
||||
$document_list = $output->data;
|
||||
$page_navigation = $output->page_navigation;
|
||||
|
||||
$childs = array();
|
||||
if($document_list && count($document_list))
|
||||
{
|
||||
foreach($document_list as $key => $val)
|
||||
{
|
||||
$href = getUrl('mid',$_GET['mid'],'document_srl',$val->document_srl);
|
||||
$obj = null;
|
||||
$obj['href'] = $val->getPermanentUrl();
|
||||
|
||||
$title = htmlspecialchars($val->getTitleText());
|
||||
if($val->getCommentCount()) $title .= ' ['.$val->getCommentCount().']';
|
||||
$obj['link'] = $obj['text'] = '['.$val->getNickName().'] '.$title;
|
||||
$childs[] = $obj;
|
||||
}
|
||||
$oMobile->setChilds($childs);
|
||||
}
|
||||
|
||||
$totalPage = $page_navigation->last_page;
|
||||
$page = (int)Context::get('page');
|
||||
if(!$page) $page = 1;
|
||||
|
||||
// next/prevUrl specification
|
||||
if($page > 1)
|
||||
{
|
||||
$oMobile->setPrevUrl(getUrl('mid',$_GET['mid'],'page',$page-1), sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $page-1, $totalPage));
|
||||
}
|
||||
|
||||
if($page < $totalPage)
|
||||
{
|
||||
$oMobile->setNextUrl(getUrl('mid',$_GET['mid'],'page',$page+1), sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $page+1, $totalPage));
|
||||
}
|
||||
|
||||
$oMobile->mobilePage = $page;
|
||||
$oMobile->totalPage = $totalPage;
|
||||
}
|
||||
}
|
||||
36
modules/board/conf/info.xml
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="0.2">
|
||||
<title xml:lang="ko">게시판</title>
|
||||
<title xml:lang="zh-CN">版面管理</title>
|
||||
<title xml:lang="en">Board</title>
|
||||
<title xml:lang="vi">Board</title>
|
||||
<title xml:lang="es">Tablero</title>
|
||||
<title xml:lang="jp">掲示板</title>
|
||||
<title xml:lang="ru">Форум</title>
|
||||
<title xml:lang="zh-TW">討論板</title>
|
||||
<title xml:lang="tr">Pano</title>
|
||||
<description xml:lang="ko">게시판의 기능을 담당. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다.</description>
|
||||
<description xml:lang="zh-CN">给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。</description>
|
||||
<description xml:lang="en">In charge of function of the board. Also includes administrator functions such as creating/managing boards.</description>
|
||||
<description xml:lang="vi">Module tích hợp những chức năng của Board. Bao gồm những chức năng của Administrator cho việc tạo và quản lý Board.</description>
|
||||
<description xml:lang="es">Módulo para la función del tablero. Incluye funciones de administración como crear/ agregar o el manejo de los tableros.</description>
|
||||
<description xml:lang="jp">掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。</description>
|
||||
<description xml:lang="ru">Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами.</description>
|
||||
<description xml:lang="zh-TW">提供用戶相對應的討論板功能,包含建立/新增及管理等功能。</description>
|
||||
<description xml:lang="tr">Pano yapılandırmaları için kullanılan modüldür. Ayrıca oluşturma/yönetme gibi yönetici özellikleri de içerir.</description>
|
||||
<version>1.7.2-beta.3</version>
|
||||
<date>2014-01-09</date>
|
||||
<category>service</category>
|
||||
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NAVER</name>
|
||||
<name xml:lang="zh-CN">NAVER</name>
|
||||
<name xml:lang="en">NAVER</name>
|
||||
<name xml:lang="vi">NAVER</name>
|
||||
<name xml:lang="es">NAVER</name>
|
||||
<name xml:lang="jp">NAVER</name>
|
||||
<name xml:lang="ru">NAVER</name>
|
||||
<name xml:lang="zh-TW">NAVER</name>
|
||||
<name xml:lang="tr">NAVER</name>
|
||||
</author>
|
||||
</module>
|
||||
123
modules/board/conf/module.xml
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants>
|
||||
<grant name="list" default="guest">
|
||||
<title xml:lang="ko">목록</title>
|
||||
<title xml:lang="zh-CN">目录</title>
|
||||
<title xml:lang="jp">リスト</title>
|
||||
<title xml:lang="en">list</title>
|
||||
<title xml:lang="vi">Danh sách</title>
|
||||
<title xml:lang="es">Lista</title>
|
||||
<title xml:lang="zh-TW">列表</title>
|
||||
<title xml:lang="tr">Liste</title>
|
||||
</grant>
|
||||
<grant name="view" default="guest">
|
||||
<title xml:lang="ko">열람</title>
|
||||
<title xml:lang="zh-CN">查看</title>
|
||||
<title xml:lang="jp">閲覧</title>
|
||||
<title xml:lang="en">view</title>
|
||||
<title xml:lang="vi">Xem</title>
|
||||
<title xml:lang="es">Opinión</title>
|
||||
<title xml:lang="zh-TW">檢視</title>
|
||||
<title xml:lang="tr">görüş</title>
|
||||
</grant>
|
||||
<grant name="write_document" default="guest">
|
||||
<title xml:lang="ko">글 작성</title>
|
||||
<title xml:lang="zh-CN">发表新主题</title>
|
||||
<title xml:lang="jp">書き込み作成</title>
|
||||
<title xml:lang="en">write document</title>
|
||||
<title xml:lang="vi">Gửi bài viết</title>
|
||||
<title xml:lang="es">Escribir el documento</title>
|
||||
<title xml:lang="zh-TW">發表主題</title>
|
||||
<title xml:lang="tr">belge yaz</title>
|
||||
</grant>
|
||||
<grant name="write_comment" default="guest">
|
||||
<title xml:lang="ko">댓글 작성</title>
|
||||
<title xml:lang="zh-CN">发表评论</title>
|
||||
<title xml:lang="jp">コメント作成</title>
|
||||
<title xml:lang="en">write comment</title>
|
||||
<title xml:lang="vi">Gửi bình luận</title>
|
||||
<title xml:lang="es">Escribir comentario</title>
|
||||
<title xml:lang="zh-TW">發表評論</title>
|
||||
<title xml:lang="es">yorum yaz</title>
|
||||
</grant>
|
||||
</grants>
|
||||
<permissions>
|
||||
<permission action="dispBoardAdminInsertBoard" target="manager" />
|
||||
<permission action="dispBoardAdminBoardInfo" target="manager" />
|
||||
<permission action="dispBoardAdminExtraVars" target="manager" />
|
||||
<permission action="dispBoardAdminBoardAdditionSetup" target="manager" />
|
||||
<permission action="dispBoardAdminSkinInfo" target="manager" />
|
||||
|
||||
<permission action="procBoardAdminInsertBoard" target="manager" />
|
||||
<permission action="procBoardAdminUpdateBoardFroBasic" target="manager" />
|
||||
<permission action="procBoardAdminSaveCategorySettings" target="manager" />
|
||||
|
||||
<permission action="getBoardAdminSimpleSetup" target="manager" />
|
||||
</permissions>
|
||||
<actions>
|
||||
<action name="dispBoardContent" type="view" index="true" />
|
||||
<action name="dispBoardNoticeList" type="view" />
|
||||
<action name="dispBoardContentList" type="view" />
|
||||
<action name="dispBoardContentView" type="view" />
|
||||
<action name="dispBoardCatogoryList" type="view" />
|
||||
<action name="dispBoardContentCommentList" type="view" />
|
||||
<action name="dispBoardContentFileList" type="view" />
|
||||
|
||||
<action name="dispBoardTagList" type="view" />
|
||||
<action name="dispBoardWrite" type="view" standalone="false" />
|
||||
<action name="dispBoardDelete" type="view" standalone="false" />
|
||||
<action name="dispBoardWriteComment" type="view" standalone="false" />
|
||||
<action name="dispBoardReplyComment" type="view" standalone="false" />
|
||||
<action name="dispBoardModifyComment" type="view" standalone="false" />
|
||||
<action name="dispBoardDeleteComment" type="view" standalone="false" />
|
||||
<action name="dispBoardDeleteTrackback" type="view" standalone="false" />
|
||||
<action name="dispBoardMessage" type="view" />
|
||||
|
||||
<action name="procBoardInsertDocument" type="controller" ruleset="insertDocument" standalone="false" />
|
||||
<action name="procBoardDeleteDocument" type="controller" standalone="false" />
|
||||
<action name="procBoardVoteDocument" type="controller" standalone="false" />
|
||||
<action name="procBoardInsertComment" type="controller" standalone="false" />
|
||||
<action name="procBoardDeleteComment" type="controller" standalone="false" />
|
||||
<action name="procBoardDeleteTrackback" type="controller" standalone="false" />
|
||||
<action name="procBoardVerificationPassword" type="controller" />
|
||||
<action name="procBoardDeleteFile" type="controller" standalone="false" />
|
||||
<action name="procBoardUploadFile" type="controller" standalone="false" />
|
||||
<action name="procBoardDownloadFile" type="controller" standalone="false" />
|
||||
|
||||
<action name="dispBoardAdminContent" type="view" admin_index="true" menu_name="board" menu_index="true" />
|
||||
<action name="dispBoardAdminBoardInfo" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminExtraVars" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminBoardAdditionSetup" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminInsertBoard" type="view" setup_index="true" menu_name="board" />
|
||||
<action name="dispBoardAdminDeleteBoard" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminSkinInfo" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminMobileSkinInfo" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminGrantInfo" type="view" menu_name="board" />
|
||||
<action name="dispBoardAdminCategoryInfo" type="view" menu_name="board" />
|
||||
<action name="procBoardAdminInsertBoard" type="controller" ruleset="insertBoard" />
|
||||
<action name="procBoardAdminDeleteBoard" type="controller" />
|
||||
<action name="procBoardAdminUpdateBoardFroBasic" type="controller" ruleset="insertBoardForBasic" />
|
||||
<action name="procBoardAdminSaveCategorySettings" type="controller" ruleset="saveCategorySettings" />
|
||||
|
||||
<action name="getBoardAdminSimpleSetup" type="model" simple_setup_index="true" />
|
||||
|
||||
<action name="dispBoardCategory" type="mobile" />
|
||||
<action name="getBoardCommentPage" type="mobile" />
|
||||
</actions>
|
||||
<menus>
|
||||
<menu name="board" type="all">
|
||||
<title xml:lang="en">Board</title>
|
||||
<title xml:lang="ko">게시판</title>
|
||||
<title xml:lang="zh-CN">Board</title>
|
||||
<title xml:lang="jp">Board</title>
|
||||
<title xml:lang="es">Board</title>
|
||||
<title xml:lang="ru">Board</title>
|
||||
<title xml:lang="fr">Board</title>
|
||||
<title xml:lang="zh-TW">Board</title>
|
||||
<title xml:lang="vi">Board</title>
|
||||
<title xml:lang="mn">Board</title>
|
||||
<title xml:lang="tr">Board</title>
|
||||
</menu>
|
||||
</menus>
|
||||
</module>
|
||||
368
modules/board/lang/lang.xml
Normal file
|
|
@ -0,0 +1,368 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<lang>
|
||||
<item name="board">
|
||||
<value xml:lang="ko"><![CDATA[게시판]]></value>
|
||||
<value xml:lang="en"><![CDATA[Board]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[版面]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Panneau]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Форум]]></value>
|
||||
<value xml:lang="es"><![CDATA[Tablero]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Pano]]></value>
|
||||
</item>
|
||||
<item name="except_notice">
|
||||
<value xml:lang="ko"><![CDATA[공지사항 제외]]></value>
|
||||
<value xml:lang="en"><![CDATA[Exclude Notices]]></value>
|
||||
<value xml:lang="jp"><![CDATA[お知らせの非表示]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[公告选项]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[公告選項]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Exclure des Notices]]></value>
|
||||
<value xml:lang="es"><![CDATA[Excluir Avisos]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bildirimler Harici]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Trừ những thông báo]]></value>
|
||||
</item>
|
||||
<item name="use_anonymous">
|
||||
<value xml:lang="ko"><![CDATA[익명 사용]]></value>
|
||||
<value xml:lang="en"><![CDATA[Use Anonymous]]></value>
|
||||
<value xml:lang="jp"><![CDATA[匿名機能を使う]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[匿名功能]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Anonim Kullan]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Sử dụng ẩn danh]]></value>
|
||||
</item>
|
||||
<item name="cmd_manage_menu">
|
||||
<value xml:lang="ko"><![CDATA[메뉴관리]]></value>
|
||||
<value xml:lang="en"><![CDATA[Manage Menus]]></value>
|
||||
<value xml:lang="jp"><![CDATA[メニュー管理]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[菜单管理]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[選單管理]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Administration de Menu]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Управление меню]]></value>
|
||||
<value xml:lang="es"><![CDATA[Manejo del menú]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Menüleri Yönet]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Quản lý Menu]]></value>
|
||||
</item>
|
||||
<item name="list_target_item">
|
||||
<value xml:lang="ko"><![CDATA[대상 항목]]></value>
|
||||
<value xml:lang="en"><![CDATA[Target Item]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ターゲットアイテム]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[备选项]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[目標項目]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Hedef Parça]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Danh sách vị trí bài viết]]></value>
|
||||
</item>
|
||||
<item name="list_display_item">
|
||||
<value xml:lang="ko"><![CDATA[표시 항목]]></value>
|
||||
<value xml:lang="en"><![CDATA[Display Item]]></value>
|
||||
<value xml:lang="jp"><![CDATA[表示アイテム]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[显示项]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[顯示項目]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Parçayı Göster]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Hiển thị danh sách bài viết]]></value>
|
||||
</item>
|
||||
<item name="summary">
|
||||
<value xml:lang="ko"><![CDATA[요약]]></value>
|
||||
<value xml:lang="en"><![CDATA[Summary]]></value>
|
||||
<value xml:lang="jp"><![CDATA[要約]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[概要]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Özet]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Sơ lược]]></value>
|
||||
</item>
|
||||
<item name="thumbnail">
|
||||
<value xml:lang="ko"><![CDATA[섬네일]]></value>
|
||||
<value xml:lang="en"><![CDATA[Thumbnail]]></value>
|
||||
<value xml:lang="jp"><![CDATA[サムネール]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[縮圖]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Küçük Resim]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Hình nhỏ]]></value>
|
||||
</item>
|
||||
<item name="last_post">
|
||||
<value xml:lang="ko"><![CDATA[최종 글]]></value>
|
||||
<value xml:lang="en"><![CDATA[Last post]]></value>
|
||||
<value xml:lang="jp"><![CDATA[最新投稿]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[最新發表]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Son Gönderi]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bài gửi trước]]></value>
|
||||
</item>
|
||||
<item name="board_management">
|
||||
<value xml:lang="ko"><![CDATA[게시판 관리]]></value>
|
||||
<value xml:lang="en"><![CDATA[Board Management]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板の管理]]></value>
|
||||
</item>
|
||||
<item name="search_result">
|
||||
<value xml:lang="ko"><![CDATA[검색결과]]></value>
|
||||
<value xml:lang="en"><![CDATA[Search Result]]></value>
|
||||
<value xml:lang="jp"><![CDATA[検索結果]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[搜索结果]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[搜尋結果]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Résultat de la Recherche]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Результат поиска]]></value>
|
||||
<value xml:lang="es"><![CDATA[Resultado de la búsqueda]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Arama Sonuçları]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Kết quả tìm kiếm]]></value>
|
||||
</item>
|
||||
<item name="consultation">
|
||||
<value xml:lang="ko"><![CDATA[상담 기능]]></value>
|
||||
<value xml:lang="en"><![CDATA[Consultation]]></value>
|
||||
<value xml:lang="jp"><![CDATA[相談機能]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[咨询功能]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[咨詢功能]]></value>
|
||||
<value xml:lang="es"><![CDATA[Funciones de asesoramiento]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Başvuru]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Tra cứu]]></value>
|
||||
</item>
|
||||
<item name="secret">
|
||||
<value xml:lang="ko"><![CDATA[비밀글 기능]]></value>
|
||||
<value xml:lang="en"><![CDATA[Secret]]></value>
|
||||
<value xml:lang="jp"><![CDATA[非公開文機能]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[密帖]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[秘密]]></value>
|
||||
<value xml:lang="es"><![CDATA[Características Bimilgeul]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Gizli]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bí mật]]></value>
|
||||
</item>
|
||||
<item name="thisissecret">
|
||||
<value xml:lang="ko"><![CDATA[비밀글입니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This is a secret article.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[非公開文です。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[此为密帖。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[這是秘密文。]]></value>
|
||||
<value xml:lang="es"><![CDATA[Es bimilgeul.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bu gizli bir makaledir.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bài viết này đã được đặt bí mật.]]></value>
|
||||
</item>
|
||||
<item name="admin_mail">
|
||||
<value xml:lang="ko"><![CDATA[관리자 메일]]></value>
|
||||
<value xml:lang="en"><![CDATA[Administrator's Mail]]></value>
|
||||
<value xml:lang="jp"><![CDATA[管理者メールアドレス]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[管理员电子邮件]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[管理員電子郵件]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Mél de l'administrateur]]></value>
|
||||
<value xml:lang="es"><![CDATA[Administrador de Correo]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yönetici E-postası]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Email của Administrator]]></value>
|
||||
</item>
|
||||
<item name="cmd_board_list">
|
||||
<value xml:lang="ko"><![CDATA[게시판 목록]]></value>
|
||||
<value xml:lang="en"><![CDATA[Boards List]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板リスト]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[版面目录]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板列表]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Liste des Panneaux]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Список форумов]]></value>
|
||||
<value xml:lang="es"><![CDATA[Lista del tableros]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Pano Listesi]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Danh sách Board]]></value>
|
||||
</item>
|
||||
<item name="cmd_module_config">
|
||||
<value xml:lang="ko"><![CDATA[게시판 공통 설정]]></value>
|
||||
<value xml:lang="en"><![CDATA[Common Board Setting]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板共通設定]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[版面共同设置]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板共同設置]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Configuration commun pour les Panneaux]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Общие настройки форума]]></value>
|
||||
<value xml:lang="es"><![CDATA[Configuración común del Tablero]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Genel Pano Ayarları]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Thiết lập Module]]></value>
|
||||
</item>
|
||||
<item name="cmd_board_info">
|
||||
<value xml:lang="ko"><![CDATA[게시판 정보]]></value>
|
||||
<value xml:lang="en"><![CDATA[Board Info]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板情報]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[版面信息]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板資料]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Information des Panneaux]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Информация форума]]></value>
|
||||
<value xml:lang="es"><![CDATA[Información del Tablero]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Pano Bilgisi]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Xem thông tin Board]]></value>
|
||||
</item>
|
||||
<item name="cmd_list_setting">
|
||||
<value xml:lang="ko"><![CDATA[목록설정]]></value>
|
||||
<value xml:lang="en"><![CDATA[List Setting]]></value>
|
||||
<value xml:lang="jp"><![CDATA[リストの設定]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[列表设置]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[列表設定]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Liste Ayarları]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Điều chỉnh danh sách]]></value>
|
||||
</item>
|
||||
<item name="cmd_create_board">
|
||||
<value xml:lang="ko"><![CDATA[게시판 등록]]></value>
|
||||
<value xml:lang="en"><![CDATA[Create a new board]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板の登録]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[建立討論板]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yeni pano oluştur]]></value>
|
||||
</item>
|
||||
<item name="cmd_manage_selected_board">
|
||||
<value xml:lang="ko"><![CDATA[선택한 게시판 관리]]></value>
|
||||
<value xml:lang="en"><![CDATA[Manage Selected Board]]></value>
|
||||
<value xml:lang="jp"><![CDATA[選択された掲示板の管理]]></value>
|
||||
</item>
|
||||
<item name="about_layout_setup">
|
||||
<value xml:lang="ko"><![CDATA[블로그의 레이아웃 코드를 직접 수정할 수 있습니다. 위젯 코드를 원하는 곳에 삽입하시거나 관리하세요]]></value>
|
||||
<value xml:lang="en"><![CDATA[You can manually modify board layout code. Insert or manage the widget code anywhere you want]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ブログのレイアウトのコードを直接修正します。ウィジェットコードを好きなところに入力、又は管理して下さい。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[可直接编辑博客布局代码。可以把控件代码插入到您喜欢的位置。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可直接編輯部落格版面設計原始碼。可把 Widget 原始碼插入到您喜歡的位置。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Vous pouvez manuellement modifier le code de Mise en Page du blogue. Insérez ou administrez le code de Gadget n'importe où vous voulez.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Вы можете вручную изменять лейаут код блога. Вставляйте или управляйте кодом виджетов везде, где хотите]]></value>
|
||||
<value xml:lang="es"><![CDATA[Puede modificar manualmente el código del diseño de tableros. Insertar o modificar el código de widget.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Pano yerleşim düzeni kodunu kendiniz değiştirebilirsiniz. Widget kodunu, istediğiniz yere yerleştirebilir veya yönetebilirsiniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bạn có thể tự sửa đổi code trong giao diện của Board. Chèn hay tùy chỉnh vị trí, code của các Widget nếu bạn muốn.]]></value>
|
||||
</item>
|
||||
<item name="about_board_category">
|
||||
<value xml:lang="ko"><![CDATA[분류를 만들 수 있습니다. 분류가 오동작을 할 경우 캐시파일 재생성을 수동으로 해주시면 해결이 될 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You can make board categories. When board category is broken, try rebuilding the cache file manually.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[ブログのカテゴリを作成します。 ブログのカテゴリが誤作動する場合、「キャッシュファイルの再生性」を手動で行うことで解決出来ます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[可以添加/删除分类项 分类有异常情况时,可以尝试重新生成缓冲文件。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可以新增/刪除分類項目 分類有異常情況時,可以嘗試重新建立暫存檔。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Vous pouvez créer des catégories de Panneau d'Affichage. Quand la catégorie d'affichage est cassé, essayez manuellement rétablir l'antémémoire du fichier.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Вы можете сделать категории блога. Когда категория блога испорчена, попробуйте перепостроить файл кеша вручную.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Puede crear las categorias de tableros. Cuando no funciona la categoría de tableros, rehacer el archivo caché manualmente para solucionar.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Pano kategorileri oluşturabilirsiniz. Pano kategorisi bozulduğunda, önbellek dosyasını yeniden kurmayı deneyiniz.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bạn có thể tạo Board theo thể loại. Nếu tạo thể loại mà bị lỗi, hãy "Tạo lại File Cache".]]></value>
|
||||
</item>
|
||||
<item name="about_except_notice">
|
||||
<value xml:lang="ko"><![CDATA[목록 상단에 늘 나타나는 공지사항을 일반 목록에서 공지사항을 출력하지 않도록 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Notice articles will not be displayed on normal list.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[リストの上段に常に表示されるお知らせの書き込みを一般リストからお知らせの書き込みが表示されないようにします。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置公告目录项不再重复显示到普通目录当中。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[設置公告列表項目,不再重複顯示到普通列表當中。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Le titre de Notice dont l'article se représentera toujours en tête de la liste ne sera exposé sur la liste générale.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Aviso de los artículos no se mostrará en la lista normal.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bildiri makaleleri normal listede görüntülenmeyecektir.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Bài viết dạng thông báo sẽ không được hiển thị trên danh sách bình thường.]]></value>
|
||||
</item>
|
||||
<item name="about_use_anonymous">
|
||||
<value xml:lang="ko"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓴이 정보등을 보이지 않도록 하시면 더욱 유용합니다. 추가설정의 문서 히스토리 사용이 꺼져있지 않으면 문서 수정시 작성자가 표시될 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Make this board into an anonymous board by hiding the author's information. <strong>Please turn off history at additional setup. If not, editing document might show the author's info.</strong>]]></value>
|
||||
<value xml:lang="jp"><![CDATA[匿名掲示板として活用出来ます。スキンの設定で「登録者の情報を表示しない」の設定をお勧めします。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[討論板可使用匿名功能。可在面板設定中設置隱藏作者的資料。 ]]></value>
|
||||
<value xml:lang="fr"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="ru"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="es"><![CDATA[글쓴이의 정보를 없애고 익명으로 게시판 사용을 할 수 있게 합니다. 스킨설정에서 글쓰인 정보등을 보이지 않도록 하시면 더욱 유용합니다]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bu panoyu, yazar bilgisini saklayarak anonim pano haline dönüştür. <strong>Lütfen ek ayarlardan geçmiş'i kapatınız. Eğer kapatmazsanız, belgeyi değiştirmek yazar bilgisinin görüntülenmesine neden olacaktır.</strong>]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Tạo Board ẩn danh sẽ ẩn những thông tin của người sử dụng.]]></value>
|
||||
</item>
|
||||
<item name="about_board">
|
||||
<value xml:lang="ko"><![CDATA[게시판을 생성하고 관리할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This module is for creating and managing boards.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板の生成、および管理するモジュールです。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[可生成及管理版面的模块。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可建立及管理討論板的模組。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Ce module se sert à créer et à administrer des Panneaux d'Affichage.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[Этот модуль служит для создания и управления форумами.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Este módulo es para crear y manejar los tableros.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bu modül, pano oluşturmak ve panoları yönetmek içindir.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Module này dùng để tạo và tùy chỉnh Board.]]></value>
|
||||
</item>
|
||||
<item name="about_consultation">
|
||||
<value xml:lang="ko"><![CDATA[상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다. 단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Non-administrator members would see their own articles. Non-members would not be able to write articles when using consultation.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[相談機能とは、管理権限のない会員に本人の書き込みだけを表示する機能です。但し、相談機能を使用する際は、非会員の書き込みは自動的に禁止されます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[咨询功能是指除有管理权限的会员以外,其他会员只能浏览自己发表的主题。使用咨询功能时系统将自动禁止非会员的发表主题权限。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[咨詢功能是指除有管理權限的會員以外,其他會員只能瀏覽自己發表的主題。使用咨詢功能時系統將自動禁止非會員的發表主題權限。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Les membres non-administratifs verront seulement les ariticles d'eux-même. Non-membres ne pourraient pas écrire des articles quand la Consultation est appliqué.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다. 단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다.]]></value>
|
||||
<value xml:lang="es"><![CDATA[No administrador de los miembros que consideran que su propia artocles. \ NNon miembros no serían capaces de escribir artículos al utilizar la consulta.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yönetici olmayan üyeler, kendi makalelerini görebileceklerdir.Üye olmayan kullanıcılar başvuruyu kullanıp, makale yazamayacaklardır.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Người không phải là Admin, thành viên họ cũng có thể xem được bài viết. Không phải là thành viên thì không thể gửi bài hay bình luận.]]></value>
|
||||
</item>
|
||||
<item name="about_secret">
|
||||
<value xml:lang="ko"><![CDATA[게시판 및 댓글의 비밀글 사용할 수 있도록 합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Users will be able to write secret articles or comments.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板およびコメントの非公開文を登録出来るようにします。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置主题及评论当中使用密帖与否。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可用於討論板或回覆時選擇是否使用。]]></value>
|
||||
<value xml:lang="es"><![CDATA[Boletín y los comentarios de bimilgeul utilizar.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Kullanıcılar gizli makaleler veya gizli yorumlar yazabileceklerdir.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Người dùng được phép đặt bí mật cho bài viết hay bình luận của mình.]]></value>
|
||||
</item>
|
||||
<item name="about_admin_mail">
|
||||
<value xml:lang="ko"><![CDATA[글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다. 콤마(,)로 연결시 다수의 메일주소로 발송할 수 있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[A mail will be sent when an article or comment is submitted. Multiple mails can be sent with commas(,).]]></value>
|
||||
<value xml:lang="jp"><![CDATA[書き込みやコメントが掲載される時、登録メールアドレス宛にメールが送信されます。 複数のメールアドレスへ送信する場合は「,」(半額コンマ)区切りで登録して下さい。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[有新的主题或评论时,将自动发电子邮件来通知管理员。 多数电子邮件由逗号(,)来分隔。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[有新的主題或評論時,將自動發電子郵件來通知管理員。 多數電子郵件由逗號(,)區隔。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[Un message éléctronique sera envoyé à l'adresse inscrite quand un article ou commentaire se soumet. On peut inscrire multiple adresses délimité par les virgules.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다 ,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Comentarios por e-mail registrado geulyina cuando la inscripción se enviará a , (coma) como una conexión, puede enviar a varios e-mail.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Makale ya da yorum gönderildiğinde e-posta gönderilecektir. Çoklu mailler noktalarla(,) ayrılıp gönderilecektir.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Một Email sẽ được gửi khi có bài viết hay bình luận mới. Có thể gửi cho nhiều Email cách nhau bằng dấu (,).]]></value>
|
||||
</item>
|
||||
<item name="about_list_config">
|
||||
<value xml:lang="ko"><![CDATA[게시판의 목록형식 사용시 원하는 항목들로 배치를 할 수 있습니다. 단 스킨에서 지원하지 않는 경우 불가능합니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[If using list-style skin, you may arrange items to display. However, this feature might not be availble for non-official skins. If you double-click target items and display items, then you can add / remove them]]></value>
|
||||
<value xml:lang="jp"><![CDATA[掲示板スタイルが「リスト型」の場合、好きな列の項目配置・表示が出来ます。 ただし、スキンによってはサポートしない場合もあります。 ターゲットアイテム/表示アイテムをダブルクリックすると追加・削除が出来ます。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[设置使用目录型目录页面时要显示的项目。 前提是使用的皮肤也支持此功能。 添加/删除项目,双击备选项/显示项即可。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[可以放置想要的項目種類。 當所使用的面板支援此功能時才會正常實現。 對目標項目/顯示項目中的物件按兩下可新增或移除。]]></value>
|
||||
<value xml:lang="fr"><![CDATA[게시판의 목록형식 사용시 원하는 항목들로 배치를 할 수 있습니다. 단 스킨에서 지원하지 않는 경우 지원되지 않을 수 있습니다 대상항목/ 표시항목의 항목을 더블클릭하면 추가/ 제거가 됩니다.]]></value>
|
||||
<value xml:lang="ru"><![CDATA[게시판의 목록형식 사용시 원하는 항목들로 배치를 할 수 있습니다. 단 스킨에서 지원하지 않는 경우 지원되지 않을 수 있습니다 대상항목/ 표시항목의 항목을 더블클릭하면 추가/ 제거가 됩니다.]]></value>
|
||||
<value xml:lang="es"><![CDATA[Boletín de la lista, utilice el tipo de elemento que desee, puede colocar. Si no está sólo apoyada por la piel no puede ser apoyada meta de entrada y mostrar el tema cuando hace doble clic en la entrada en Agregar o quitar es.]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Eğer liste-tarzı dış görünüm kullanıyorsanız, gösterilecek parçaları düzenleyebilirsiniz. Fakat; bu özellik resmi olmayan dış görünümler için mevcut olmayabilir. Parçalara çift tıklamak ekleme/çıkarma özelliği sağlayacaktır.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Nếu sử dụng danh sách giao diện, bạn có thể sắp xếp các mục hiển thị. Tuy nhiên, tính năng này không sử dụng được cho giao diện chính thức. Nếu bạn bấm 2 lần vào các mục sẽ kích hoạt chức năng thêm hay xóa chúng.]]></value>
|
||||
</item>
|
||||
<item name="about_use_status">
|
||||
<value xml:lang="ko"><![CDATA[글 작성 시 선택할 수 있는 상태를 지정해주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please select status that can be selected when write article.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[記事作成時に選択することができる状態を指定してください。]]></value>
|
||||
</item>
|
||||
<item name="msg_not_enough_point">
|
||||
<value xml:lang="ko"><![CDATA[포인트가 부족합니다]]></value>
|
||||
<value xml:lang="en"><![CDATA[Your point is not enough to write an article in this board.]]></value>
|
||||
<value xml:lang="jp"><![CDATA[書き込みするためのポイントが足りません。]]></value>
|
||||
<value xml:lang="zh-CN"><![CDATA[很遗憾!您的积分不够。]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[你的點數不夠在此討論板發表主題。]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Bu panoya makele yazmak için yeterli puanınız bulunmamaktadır.]]></value>
|
||||
<value xml:lang="vi"><![CDATA[Điểm của bạn chưa đủ để gửi bài tại đây!]]></value>
|
||||
</item>
|
||||
<item name="write_comment">
|
||||
<value xml:lang="ko"><![CDATA[댓글 쓰기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Write a comment]]></value>
|
||||
<value xml:lang="jp"><![CDATA[コメントを投稿]]></value>
|
||||
<value xml:lang="zh-TW"><![CDATA[發表評論]]></value>
|
||||
<value xml:lang="tr"><![CDATA[Yorum Yaz]]></value>
|
||||
</item>
|
||||
<item name="msg_not_allow_comment">
|
||||
<value xml:lang="ko"><![CDATA[해당 글의 댓글 쓰기가 잠겨있습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[This article does not allow write comment.]]></value>
|
||||
</item>
|
||||
<item name="no_board_instance">
|
||||
<value xml:lang="ko"><![CDATA[생성된 게시판이 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[There is no board created.]]></value>
|
||||
</item>
|
||||
<item name="choose_board_instance">
|
||||
<value xml:lang="ko"><![CDATA[관리할 게시판을 선택해 주세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Please choose one or more board instance.]]></value>
|
||||
</item>
|
||||
<item name="comment_status">
|
||||
<value xml:lang="ko"><![CDATA[댓글]]></value>
|
||||
<value xml:lang="en"><![CDATA[Comments]]></value>
|
||||
</item>
|
||||
<item name="category_settings">
|
||||
<value xml:lang="ko"><![CDATA[분류 설정]]></value>
|
||||
<value xml:lang="en"><![CDATA[Category settings]]></value>
|
||||
</item>
|
||||
<item name="hide_category">
|
||||
<value xml:lang="ko"><![CDATA[분류 숨기기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Hide categories]]></value>
|
||||
</item>
|
||||
<item name="about_hide_category">
|
||||
<value xml:lang="ko"><![CDATA[임시로 분류를 사용하지 않으려면 체크하세요.]]></value>
|
||||
<value xml:lang="en"><![CDATA[You can disable a category feature.]]></value>
|
||||
</item>
|
||||
<item name="protect_content">
|
||||
<value xml:lang="ko"><![CDATA[글 보호 기능]]></value>
|
||||
<value xml:lang="en"><![CDATA[Protect contents]]></value>
|
||||
</item>
|
||||
<item name="about_protect_content">
|
||||
<value xml:lang="ko"><![CDATA[작성된 글에 댓글이 작성된 경우 글 작성자는 해당 글을 수정하거나 삭제 할 수 없습니다.]]> </value>
|
||||
<value xml:lang="en"><![CDATA[If there is comment on document, document's owner cannot modify or delete that.]]></value>
|
||||
</item>
|
||||
<item name="msg_protect_content">
|
||||
<value xml:lang="ko"><![CDATA[댓글이 작성된 게시물의 글을 수정 또는 삭제 할 수 없습니다.]]></value>
|
||||
<value xml:lang="en"><![CDATA[Cannot modify or delete document. Because there is comments.]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
46
modules/board/m.skins/default/_list.html
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<div class="hx h2">
|
||||
<h2><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a> <em>[{number_format($total_count)}]</em></h2>
|
||||
<!--@if($module_info->use_category == "Y")--><a href="{getUrl('page','','act','dispBoardCategory','')}" class="ca">{$lang->category}</a><!--@endif-->
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="write">{$lang->cmd_write}</a>
|
||||
</div>
|
||||
<ul class="lt">
|
||||
<!--@foreach($notice_list as $no => $document)-->
|
||||
<li>
|
||||
<a href="{getUrl('document_srl', $document->document_srl)}">
|
||||
<span class="title"><span class="notice">{$lang->notice}</span> <!--@if($module_info->use_category == "Y" && $document->get('category_srl'))-->{$category_list[$document->get('category_srl')]->title} ›<!--@end--> <strong>{$document->getTitle($module_info->subject_cut_size)}</strong> <!--@if($document->getCommentCount())--><em>[{$document->getCommentCount()}]</em><!--@endif--></span>
|
||||
<span class="auth"><strong>{$document->getNickName()}</strong> <span class="time">{$document->getRegDate("Y.m.d")}</span></span>
|
||||
</a>
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<li>
|
||||
<a href="{getUrl('document_srl', $document->document_srl)}">
|
||||
<span class="title"><!--@if($module_info->use_category == "Y" && $document->get('category_srl'))-->{$category_list[$document->get('category_srl')]->title} ›<!--@end--> <strong>{$document->getTitle($module_info->subject_cut_size)}</strong> <!--@if($document->getCommentCount())--><em>[{$document->getCommentCount()}]</em><!--@endif--></span>
|
||||
<span class="auth"><strong>{$document->getNickName()}</strong> <span class="time">{$document->getRegDate("Y.m.d")}</span></span>
|
||||
</a>
|
||||
</li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<div class="pn">
|
||||
<!--@if($page != 1)-->
|
||||
<a href="{getUrl('page',$page-1,'document_srl','','division',$division,'last_division',$last_division,'entry','')}" class="prev">{$lang->cmd_prev}</a>
|
||||
<!--@endif-->
|
||||
<strong>{$page} / {$page_navigation->last_page}</strong>
|
||||
<!--@if($page != $page_navigation->last_page)-->
|
||||
<a href="{getUrl('page',$page+1,'document_srl','','division',$division,'last_division',$last_division,'entry','')}" class="next">{$lang->cmd_next}</a>
|
||||
<!--@endif-->
|
||||
</div>
|
||||
<div class="sh">
|
||||
<form action="{getUrl()}" method="get">
|
||||
<input type="hidden" name="vid" value="{$vid}" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="category" value="{$category}" />
|
||||
<select name="search_target">
|
||||
<!--@foreach($search_option as $key => $val)-->
|
||||
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<input type="search" name="search_keyword" value="{htmlspecialchars($search_keyword)}" title="{$lang->cmd_search}" />
|
||||
<button type="submit" class="shbn" title="{$lang->cmd_search}"></button>
|
||||
</form>
|
||||
</div>
|
||||
37
modules/board/m.skins/default/category.html
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a> › {$lang->category}</h2>
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="write">{$lang->cmd_write}</a>
|
||||
</div>
|
||||
<ul class="gn">
|
||||
{@ $start = true }
|
||||
{@ $depth = 0 }
|
||||
<!--@foreach($category_list as $category)-->
|
||||
<!--@if(!$start && $category->depth == $depth)-->
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@if($category->depth > $depth)--> <!--more depth-->
|
||||
<ul>
|
||||
<!--@else-->
|
||||
<!--@while($category->depth < $depth)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
<!--@endif-->
|
||||
<li><a href="{getUrl('act','','category',$category->category_srl)}">{$category->title} <em>[{$category->document_count}]</em></a>
|
||||
{@ $start = false }
|
||||
{@ $depth = $category->depth }
|
||||
<!--@endforeach-->
|
||||
<!--@while($depth > 0)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
</li>
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<a href="{getUrl('','vid',$vid,'mid',$mid,'mobile',$mobile)}" class="bn dark">{$lang->cmd_list}</a>
|
||||
</div>
|
||||
</div>
|
||||
48
modules/board/m.skins/default/comment.html
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
<ul id="cl" class="rp tgo open">
|
||||
{@ $_comment_list = $oDocument->getComments() }
|
||||
{@ $start = true }
|
||||
{@ $depth = 0 }
|
||||
<!--@foreach($_comment_list as $key => $comment)-->
|
||||
<!--@if(!$start && $comment->get('depth') == $depth)-->
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@if($comment->get('depth') > $depth)-->
|
||||
<ul>
|
||||
<!--@else-->
|
||||
<!--@while($comment->get('depth') < $depth)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1 }
|
||||
<!--@end-->
|
||||
<!--@endif-->
|
||||
<li>
|
||||
{$comment->getContent(false)}
|
||||
<span class="auth">
|
||||
<em>{$comment->getNickName()}</em>
|
||||
<span class="time">{$comment->getRegdate("Y.m.d")}</span>
|
||||
<!--@if($comment->isGranted() || !$comment->get('member_srl'))-->
|
||||
<a href="{getUrl('act','dispBoardDeleteComment','comment_srl',$comment->comment_srl)}" class="btn de">{$lang->cmd_delete}</a>
|
||||
<!--@endif-->
|
||||
<a href="{getUrl('act','dispBoardReplyComment','comment_srl',$comment->comment_srl)}" class="btn re">{$lang->cmd_reply}</a>
|
||||
{@ $start = false }
|
||||
{@ $depth = $comment->get('depth') }
|
||||
</span>
|
||||
<!--@endforeach-->
|
||||
<!--@while($depth > 0)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
</li>
|
||||
</ul>
|
||||
<!--@if($oDocument->comment_page_navigation)-->
|
||||
<div id="clpn" class="pn">
|
||||
<!--@if($oDocument->comment_page_navigation->cur_page != 1)-->
|
||||
<a href="#" onclick="loadPage({$oDocument->document_srl}, {$oDocument->comment_page_navigation->cur_page-1}); return false;">‹ {$lang->cmd_prev}</a>
|
||||
<!--@endif-->
|
||||
<strong id="curpage">{$oDocument->comment_page_navigation->cur_page} / {$oDocument->comment_page_navigation->last_page}</strong>
|
||||
<!--@if($oDocument->comment_page_navigation->cur_page != $oDocument->comment_page_navigation->last_page)-->
|
||||
<a href="#" onclick="loadPage({$oDocument->document_srl}, {$oDocument->comment_page_navigation->cur_page+1}); return false;">{$lang->cmd_next} ›</a>
|
||||
<!--@endif-->
|
||||
</div>
|
||||
<!--@endif-->
|
||||
51
modules/board/m.skins/default/comment_form.html
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd rd">
|
||||
<div class="hx h2">
|
||||
<h2><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a></h2>
|
||||
</div>
|
||||
|
||||
<!--@if($oSourceComment->isExists())-->
|
||||
<div class="origin">{$oSourceComment->getContent(false)}</div>
|
||||
<!--@end-->
|
||||
|
||||
<form action="./" method="post" class="ff tgo open" onsubmit="return procFilter(this, insert_comment);">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
<input type="hidden" name="parent_srl" value="{$oComment->get('parent_srl')}" />
|
||||
<ul>
|
||||
<li>
|
||||
<label for="rText">{$lang->comment}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="rText"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" value="" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<input name="" type="submit" class="bn dark" value="{$lang->cmd_comment_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
571
modules/board/m.skins/default/css/mboard.css
Normal file
|
|
@ -0,0 +1,571 @@
|
|||
@charset "utf-8";
|
||||
/* Mobile XE (/modules/board/m.skins/default) */
|
||||
/*csslint unqualified-attributes:false, display-property-grouping:false, universal-selector:false, font-sizes:false, known-properties:false*/
|
||||
body {
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
body,
|
||||
input,
|
||||
textarea,
|
||||
select,
|
||||
button,
|
||||
table {
|
||||
font-family: Tahoma, Geneva, sans-serif;
|
||||
}
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
em {
|
||||
font-style: normal;
|
||||
}
|
||||
form {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
fieldset {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
textarea {
|
||||
resize: vertical;
|
||||
}
|
||||
input[type=checkbox],
|
||||
|
||||
input[type=radio] {
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
/* Common */
|
||||
.fl {
|
||||
float: left;
|
||||
}
|
||||
.fr {
|
||||
float: right;
|
||||
}
|
||||
/* Background */
|
||||
.rp li li,
|
||||
.rp .answer,
|
||||
.rp .btn,
|
||||
.hx .write {
|
||||
background-image: url(../img/mx.png);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
/* Body */
|
||||
.bd {
|
||||
background: #f8f8f8;
|
||||
padding: 1px 0;
|
||||
}
|
||||
.co {
|
||||
margin: 10px;
|
||||
line-height: 1.4;
|
||||
font-size: 14px;
|
||||
color: #333;
|
||||
}
|
||||
.co:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
zoom: 1;
|
||||
}
|
||||
/* Hx */
|
||||
.hx {
|
||||
position: relative;
|
||||
border-bottom: 1px solid #ccc8be;
|
||||
padding: 8px 10px;
|
||||
margin: 0;
|
||||
}
|
||||
.hx:after {
|
||||
content: "";
|
||||
margin: 0 -10px;
|
||||
position: relative;
|
||||
top: 10px;
|
||||
display: block;
|
||||
clear: both;
|
||||
height: 1px;
|
||||
background: #fff;
|
||||
}
|
||||
.hx.h2 {
|
||||
background: #e5e5e5;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
padding-right: 40px;
|
||||
font-size: 16px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.hx.h2 em {
|
||||
font-size: 12px;
|
||||
color: #6352d2;
|
||||
}
|
||||
.hx.h3 {
|
||||
background: #868686;
|
||||
font-size: 14px;
|
||||
color: #fff;
|
||||
}
|
||||
.hx.h3 em {
|
||||
font-size: 12px;
|
||||
}
|
||||
.hx h2,
|
||||
.hx h3 {
|
||||
margin: 0 10px 0 0;
|
||||
display: inline;
|
||||
}
|
||||
.hx a {
|
||||
color: #000;
|
||||
}
|
||||
.hx .ex {
|
||||
font-size: 12px;
|
||||
}
|
||||
.hx .tg {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
overflow: visible;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
opacity: 0;
|
||||
background: none;
|
||||
}
|
||||
.hx .ca {
|
||||
font-size: 12px;
|
||||
text-decoration: underline;
|
||||
color: #333;
|
||||
}
|
||||
.hx .ca:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
left: 4px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border: 4px solid;
|
||||
border-color: transparent;
|
||||
border-left-color: #8d7de1;
|
||||
margin: 0 -8px 0 0;
|
||||
}
|
||||
.hx .write {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 10px;
|
||||
background-position: 0 0;
|
||||
display: inline-block;
|
||||
width: 28px;
|
||||
height: 27px;
|
||||
font-size: 0;
|
||||
overflow: hidden;
|
||||
text-indent: -28px;
|
||||
}
|
||||
/* Global Navigation */
|
||||
.gn {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #d3d1cc;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
}
|
||||
.gn li {
|
||||
border: 1px solid #a3a09a;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
margin: 0 0 -1px 0;
|
||||
background: #c3c3c3;
|
||||
}
|
||||
.gn li li {
|
||||
border: 1px solid #c9c9c9;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
background: #f8f8f8;
|
||||
}
|
||||
.gn li li li {
|
||||
background: #e8e8e8;
|
||||
}
|
||||
.gn ul {
|
||||
margin: 0 0 -1px 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.gn a {
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 10px;
|
||||
font-size: 16px;
|
||||
}
|
||||
.gn li a {
|
||||
color: #333;
|
||||
}
|
||||
.gn li a:after {
|
||||
position: absolute;
|
||||
top: 7px;
|
||||
right: 10px;
|
||||
content: "›";
|
||||
color: #888;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
font-family: Verdana, Geneva, sans-serif;
|
||||
}
|
||||
.gn li li a:before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border: 1px dotted #666;
|
||||
border-top: 0;
|
||||
border-right: 0;
|
||||
margin: 0 4px 0 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
.gn li li a {
|
||||
padding-left: 15px;
|
||||
}
|
||||
.gn li li li a {
|
||||
padding-left: 30px;
|
||||
}
|
||||
.gn li li li li a {
|
||||
padding-left: 45px;
|
||||
}
|
||||
.gn li li li li li a {
|
||||
padding-left: 60px;
|
||||
}
|
||||
.gn em {
|
||||
color: #6352d2;
|
||||
font-size: 12px;
|
||||
}
|
||||
/* List */
|
||||
.lt {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
background: #f8f8f8;
|
||||
font-size: 14px;
|
||||
}
|
||||
.lt li {
|
||||
border-bottom: 1px solid #ccc8be;
|
||||
}
|
||||
.lt a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
padding: 10px;
|
||||
}
|
||||
.lt .notice {
|
||||
display: inline-block;
|
||||
background: #a06acd;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
padding: 1px;
|
||||
-moz-border-radius: 2px;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.lt .title {
|
||||
display: block;
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
.lt .title strong {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.lt .title em {
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
color: #6352d2;
|
||||
}
|
||||
.lt .auth {
|
||||
display: block;
|
||||
font-size: 12px;
|
||||
}
|
||||
.lt .auth .time {
|
||||
padding: 0 5px;
|
||||
border-left: 1px solid #bfbfbf;
|
||||
}
|
||||
/* Toggle Open */
|
||||
.tgo {
|
||||
display: none;
|
||||
background: #f8f8f8;
|
||||
color: #333;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
font-size: 14px;
|
||||
}
|
||||
.tgo.open {
|
||||
display: block;
|
||||
}
|
||||
.file {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.file li {
|
||||
border-top: 1px solid #c9c9c9;
|
||||
border-bottom: 1px solid #c9c9c9;
|
||||
margin: 0 0 -1px 0;
|
||||
}
|
||||
.file a {
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 10px 0 10px 10px;
|
||||
color: #333;
|
||||
}
|
||||
.file .size {
|
||||
font-size: 12px;
|
||||
border-left: 1px solid #bfbfbf;
|
||||
margin: 0 5px;
|
||||
padding: 0 10px;
|
||||
color: #666;
|
||||
}
|
||||
.rp ul {
|
||||
margin: 10px 0 -11px -10px;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.rp li {
|
||||
border-top: 1px solid #c9c9c9;
|
||||
border-bottom: 1px solid #c9c9c9;
|
||||
padding: 10px 0 10px 10px;
|
||||
margin: 0 0 -1px 0;
|
||||
}
|
||||
.rp .xe_content,
|
||||
.rp p {
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
.rp ul ul {
|
||||
margin-left: -25px;
|
||||
}
|
||||
.rp ul ul ul {
|
||||
margin-left: -40px;
|
||||
}
|
||||
.rp ul ul ul ul {
|
||||
margin-left: -55px;
|
||||
}
|
||||
.rp ul ul ul ul ul {
|
||||
margin-left: -70px;
|
||||
}
|
||||
.rp ul ul ul ul ul ul {
|
||||
margin-left: -85px;
|
||||
}
|
||||
.rp li li,
|
||||
|
||||
.rp .answer {
|
||||
padding-left: 25px;
|
||||
background-position: 10px -145px;
|
||||
}
|
||||
.rp li li li {
|
||||
padding-left: 40px;
|
||||
background-position: 25px -145px;
|
||||
}
|
||||
.rp li li li li {
|
||||
padding-left: 55px;
|
||||
background-position: 40px -145px;
|
||||
}
|
||||
.rp li li li li li {
|
||||
padding-left: 70px;
|
||||
background-position: 55px -145px;
|
||||
}
|
||||
.rp li li li li li li {
|
||||
padding-left: 85px;
|
||||
background-position: 70px -145px;
|
||||
}
|
||||
.rp .btn {
|
||||
display: inline-block;
|
||||
width: 15px;
|
||||
height: 15px;
|
||||
overflow: hidden;
|
||||
vertical-align: middle;
|
||||
text-indent: 15px;
|
||||
}
|
||||
.rp .btn.ed {
|
||||
background-position: 0 -32px;
|
||||
}
|
||||
.rp .btn.de {
|
||||
background-position: -15px -32px;
|
||||
}
|
||||
.rp .btn.re {
|
||||
background-position: -30px -32px;
|
||||
}
|
||||
.rp .auth {
|
||||
font-size: 12px;
|
||||
}
|
||||
.rp .auth .time {
|
||||
padding: 0 5px;
|
||||
border-left: 1px solid #bfbfbf;
|
||||
}
|
||||
/* Form Field */
|
||||
.origin {
|
||||
padding: 10px 0;
|
||||
margin: 0 10px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.ff {
|
||||
margin: 0;
|
||||
padding: 10px 0;
|
||||
}
|
||||
.ff ul {
|
||||
margin: 0 10px 10px 10px;
|
||||
padding: 10px 0 0 0;
|
||||
list-style: none;
|
||||
}
|
||||
.ff li {
|
||||
margin: 0 0 5px 0;
|
||||
padding: 0;
|
||||
}
|
||||
.ff label {
|
||||
margin-right: 10px;
|
||||
}
|
||||
.ff label+input[type=text],
|
||||
.ff label+input[type=email],
|
||||
.ff label+input[type=url],
|
||||
.ff label+input[type=password],
|
||||
.ff label+textarea,
|
||||
.ff label+select {
|
||||
display: block;
|
||||
width: 96%;
|
||||
font-size: 14px;
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
.ff label+input[type=text],
|
||||
.ff label+input[type=email],
|
||||
.ff label+input[type=url],
|
||||
.ff label+input[type=password],
|
||||
.ff label+textarea {
|
||||
padding: 5px;
|
||||
}
|
||||
/* Button Area */
|
||||
.bna {
|
||||
text-align: center;
|
||||
padding: 0 10px;
|
||||
margin: 10px 0;
|
||||
zoom: 1;
|
||||
}
|
||||
.bna:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.bn {
|
||||
display: inline-block;
|
||||
line-height: 26px !important;
|
||||
padding: 0 10px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
border: 1px solid;
|
||||
text-decoration: none;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
vertical-align: middle;
|
||||
}
|
||||
.bn[type=submit],
|
||||
.bn[type=button] {
|
||||
height: 28px;
|
||||
}
|
||||
.bn[href] {
|
||||
height: 26px;
|
||||
}
|
||||
.bn.dark {
|
||||
border-color: #666;
|
||||
background: -webkit-gradient(top, #7e7c78, #5c5b58);
|
||||
background: -webkit-linear-gradient(top, #7e7c78, #5c5b58);
|
||||
background: -moz-linear-gradient(top, #7e7c78, #5c5b58);
|
||||
background: -o-linear-gradient(top, #7e7c78, #5c5b58);
|
||||
background: -ms-linear-gradient(top, #7e7c78, #5c5b58);
|
||||
background: linear-gradient(top, #7e7c78, #5c5b58);
|
||||
background-color: #777;
|
||||
color: #fff;
|
||||
-moz-box-shadow: 0 0 1px #fff inset;
|
||||
-webkit-box-shadow: 0 0 1px #fff inset;
|
||||
box-shadow: 0 0 1px #fff inset;
|
||||
}
|
||||
.bn.white {
|
||||
border-color: #b5b5b5;
|
||||
background: -webkit-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background: -webkit-linear-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background: -moz-linear-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background: -o-linear-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background: -ms-linear-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background: linear-gradient(top, #fff, #f0f0f0 50%, #e4e4e4 50%, #f6f6f6 100%);
|
||||
background-color: #fff;
|
||||
color: #000;
|
||||
}
|
||||
/* Pagination */
|
||||
.pn {
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
background: #f2f0ec;
|
||||
padding: 15px 0;
|
||||
border-top: 1px solid #fff;
|
||||
}
|
||||
.pn a {
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
.pn strong {
|
||||
margin: 0 10px;
|
||||
}
|
||||
.pn .prev:before {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin: 0 4px 0 0;
|
||||
border: 4px solid;
|
||||
border-color: transparent;
|
||||
border-right-color: #999;
|
||||
}
|
||||
.pn .next:after {
|
||||
content: "";
|
||||
display: inline-block;
|
||||
width: 0;
|
||||
height: 0;
|
||||
margin: 0 0 0 4px;
|
||||
border: 4px solid;
|
||||
border-color: transparent;
|
||||
border-left-color: #999;
|
||||
}
|
||||
/* Search */
|
||||
.sh {
|
||||
border: 1px solid #bfbfbf;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
background: #e8e8e8;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
.sh * {
|
||||
vertical-align: top;
|
||||
}
|
||||
.sh select {
|
||||
width: 80px;
|
||||
font-size: 14px;
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
.sh input[type=search] {
|
||||
width: 160px;
|
||||
margin: 0;
|
||||
font-size: 14px;
|
||||
padding: 5px;
|
||||
}
|
||||
.sh .shbn {
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
border: 1px solid #666;
|
||||
background: #777 url(../img/mx.png) no-repeat 5px -60px;
|
||||
-moz-box-shadow: 0 0 1px #fff inset;
|
||||
-webkit-box-shadow: 0 0 1px #fff inset;
|
||||
box-shadow: 0 0 1px #fff inset;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
1
modules/board/m.skins/default/css/mboard.min.css
vendored
Normal file
24
modules/board/m.skins/default/delete_comment_form.html
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->confirm_delete}</h2>
|
||||
</div>
|
||||
<form action="./" method="get" class="ff" onsubmit="return procFilter(this, delete_comment)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
|
||||
<div class="bna">
|
||||
<button type="submit" class="bn dark">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('act','','comment_srl','')}" class="bn dark"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
23
modules/board/m.skins/default/delete_form.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->confirm_delete}</h2>
|
||||
</div>
|
||||
<form action="./" method="get" class="ff" onsubmit="return procFilter(this, delete_document)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
||||
<div class="bna">
|
||||
<button type="submit" class="bn dark">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('act','')}" class="bn dark">{$lang->cmd_cancel}</a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
BIN
modules/board/m.skins/default/img/mx.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
23
modules/board/m.skins/default/input_password_form.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--%import("css/mboard.css")-->
|
||||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2>{$lang->msg_input_password}</h2>
|
||||
</div>
|
||||
<form action="./" method="post" class="ff" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<ul class="sn">
|
||||
<li><label for="pw">비밀번호</label><input name="password" type="password" id="pw" value="" /></li>
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<button type="submit" class="bn dark">{$lang->cmd_input}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
79
modules/board/m.skins/default/js/mboard.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
function completeInsertComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var comment_srl = ret_obj.comment_srl;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(comment_srl) url = url.setQuery('rnd',comment_srl)+"#comment_"+comment_srl;
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeDocumentInserted(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var category_srl = ret_obj.category_srl;
|
||||
|
||||
var url;
|
||||
if(!document_srl)
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('act','');
|
||||
}
|
||||
else
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
}
|
||||
if(category_srl) url = url.setQuery('category',category_srl);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeGetPage(ret_val)
|
||||
{
|
||||
jQuery("#cl").remove();
|
||||
jQuery("#clpn").remove();
|
||||
jQuery("#clb").parent().after(ret_val.html);
|
||||
}
|
||||
|
||||
function loadPage(document_srl, page)
|
||||
{
|
||||
var params = {};
|
||||
params.cpage = page;
|
||||
params.document_srl = document_srl;
|
||||
params.mid = current_mid;
|
||||
jQuery.exec_json('board.getBoardCommentPage', params, completeGetPage);
|
||||
}
|
||||
|
||||
function completeDeleteComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeDeleteDocument(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('document_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
1
modules/board/m.skins/default/js/mboard.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
function completeInsertComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.comment_srl,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("rnd",d)+"#comment_"+d),location.href=e}function completeDocumentInserted(a){var b,c=(a.error,a.message,a.mid),d=a.document_srl,e=a.category_srl;b=d?current_url.setQuery("mid",c).setQuery("document_srl",d).setQuery("act",""):current_url.setQuery("mid",c).setQuery("act",""),e&&(b=b.setQuery("category",e)),location.href=b}function completeGetPage(a){jQuery("#cl").remove(),jQuery("#clpn").remove(),jQuery("#clb").parent().after(a.html)}function loadPage(a,b){var c={};c.cpage=b,c.document_srl=a,c.mid=current_mid,jQuery.exec_json("board.getBoardCommentPage",c,completeGetPage)}function completeDeleteComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.page,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("page",d)),location.href=e}function completeDeleteDocument(a){var b=(a.error,a.message,a.mid),c=a.page,d=current_url.setQuery("mid",b).setQuery("act","").setQuery("document_srl","");c&&(d=d.setQuery("page",c)),location.href=d}
|
||||
7
modules/board/m.skins/default/lang/lang.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<lang>
|
||||
<item name="skip_to_content">
|
||||
<value xml:lang="ko"><![CDATA[본문 건너뛰기]]></value>
|
||||
<value xml:lang="en"><![CDATA[Skip to content]]></value>
|
||||
</item>
|
||||
</lang>
|
||||
13
modules/board/m.skins/default/list.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<!--@if($oDocument->isExists())-->
|
||||
<!--#include("read.html")-->
|
||||
<!--@else-->
|
||||
<!--#include("_list.html")-->
|
||||
<!--@end-->
|
||||
</div>
|
||||
148
modules/board/m.skins/default/read.html
Normal file
|
|
@ -0,0 +1,148 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
{@ Context::loadLang('./modules/board/m.skins/default/lang')}
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="hx h2">
|
||||
<h2><a href="{getUrl('document_srl','','category','','page','')}">{$module_info->browser_title}</a>
|
||||
<!--@if($module_info->use_category == "Y" && $oDocument->get('category_srl'))-->› <a href="{getUrl('document_srl','','category',$oDocument->get('category_srl'))}">{$category_list[$oDocument->get('category_srl')]->title}</a><!--@end--> › {$oDocument->getTitle()}</h2>
|
||||
<span class="ex">{$oDocument->getNickName()} | {$oDocument->getRegdate()} | <a href="#skip_co">{$lang->skip_to_content}</a></span>
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="write">{$lang->cmd_write}</a>
|
||||
</div>
|
||||
<div class="co">
|
||||
<!--@if($oDocument->isSecret() && !$oDocument->isGranted())-->
|
||||
<form action="./" method="get" class="ff" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
<label for="cpw">{$lang->msg_is_secret}</label>
|
||||
<input type="password" name="password" id="cpw" />
|
||||
<input type="submit" value="{$lang->cmd_input}" class="bn dark" />
|
||||
</form>
|
||||
<!--@else-->
|
||||
<!--@if($oDocument->isExtraVarsExists())-->
|
||||
{@ $_extra_vars = $oDocument->getExtraVars(); }
|
||||
<dl class="xv">
|
||||
<!--@foreach($_extra_vars as $key => $val)-->
|
||||
<dt>{$val->name}</dt>
|
||||
<dd>{$val->getValueHTML()}</dd>
|
||||
<!--@end-->
|
||||
</dl>
|
||||
<!--@end-->
|
||||
{$oDocument->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div id="skip_co"></div>
|
||||
<!--@if($oDocument->hasUploadedFiles())-->
|
||||
{@ $uploaded_list = $oDocument->getUploadedFiles() }
|
||||
<div class="hx h3">
|
||||
<h3>{$lang->uploaded_file} <em>[{count($uploaded_list)}]</em></h3>
|
||||
<button type="button" class="tg" title="open/close"></button>
|
||||
</div>
|
||||
<ul class="file tgo open">
|
||||
<!--@foreach($uploaded_list as $key => $file)-->
|
||||
<li><a href="{getUrl('')}{$file->download_url}">{$file->source_filename} <span class="size">{FileHandler::filesize($file->file_size)}</span></a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!--@endif-->
|
||||
<!--@if($oDocument->allowTrackback() && $oDocument->getTrackbackCount())-->
|
||||
<div class="hx h3">
|
||||
<h3>{$lang->trackback} <em>[{$oDocument->getTrackbackCount()}]</em></h3>
|
||||
<button type="button" class="tg" title="open/close"></button>
|
||||
</div>
|
||||
<ul class="rp tgo open">
|
||||
{@ $_trackback_list = $oDocument->getTrackbacks() }
|
||||
<!--@foreach($_trackback_list as $key => $val)-->
|
||||
<li>
|
||||
<p>{$val->excerpt}</p>
|
||||
<span class="auth">
|
||||
<em>{htmlspecialchars($val->title)} - {htmlspecialchars($val->blog_name)}</em>
|
||||
<span class="time">{zdate($val->regdate, "Y.m.d")}</span>
|
||||
<!--@if($grant->manager)-->
|
||||
<a href="07_password.html" class="btn de">삭제</a>
|
||||
<!--@endif-->
|
||||
</span>
|
||||
</li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!--@endif-->
|
||||
<!--@if($oDocument->getCommentCount())-->
|
||||
<div class="hx h3">
|
||||
<h3 id="clb">{$lang->comment} <em>[{$oDocument->getCommentCount()}]</em></h3>
|
||||
<button type="button" class="tg tgr" title="open/close"></button>
|
||||
</div>
|
||||
<!--@endif-->
|
||||
<!--@if($grant->write_comment && $oDocument->isEnableComment() )-->
|
||||
<div class="hx h3">
|
||||
<h3>{$lang->write_comment}</h3>
|
||||
<button type="button" class="tg" title="open/close"></button>
|
||||
</div>
|
||||
<form action="./" method="post" class="ff tgo open" onsubmit="return procFilter(this, insert_comment);">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="" />
|
||||
<ul>
|
||||
<li>
|
||||
<label for="rText">{$lang->comment}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="rText"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" value="http://" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<input name="" type="submit" value="{$lang->cmd_comment_registration}" class="bn dark" />
|
||||
</div>
|
||||
</form>
|
||||
<!--@end-->
|
||||
<div style="height:1px;overflow:hidden;background:#ddd"></div>
|
||||
<div class="bna">
|
||||
<span class="fl"><a href="{getUrl('document_srl','')}" class="bn white">{$lang->cmd_list}</a></span>
|
||||
<span class="fr">
|
||||
<!--@if($oDocument->isEditable())-->
|
||||
<a href="{getUrl('act','dispBoardDelete','document_srl',$oDocument->document_srl,'comment_srl','')}" class="bn white">{$lang->cmd_delete}</a>
|
||||
<!--@end-->
|
||||
</span>
|
||||
</ul>
|
||||
<script>
|
||||
//<![CDATA[
|
||||
jQuery(function($){
|
||||
$('.co .mm').next().hide();
|
||||
$('.mm').click(function(){ $(this).hide().next().show();});
|
||||
$('.tgo').removeClass('open');
|
||||
$('.tg').click(function(){
|
||||
$(this).parent('.h3').next('.tgo').toggleClass('open');
|
||||
});
|
||||
var loaded = false;
|
||||
$('.tgr').click(function(){
|
||||
if(!loaded) {
|
||||
loaded = true;
|
||||
{@ $lastpage = 1; }
|
||||
{@ $temp = $oDocument->getComments() }
|
||||
<!--@if($oDocument->comment_page_navigation)-->
|
||||
{@ $lastpage = $oDocument->comment_page_navigation->last_page }
|
||||
<!--@endif-->
|
||||
loadPage({$oDocument->document_srl}, {$lastpage});
|
||||
}
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
31
modules/board/m.skins/default/skin.xml
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE 게시판 기본 스킨</title>
|
||||
<title xml:lang="en">XE Basic Board Skin</title>
|
||||
<title xml:lang="zh-TW">XE 基本面板</title>
|
||||
<title xml:lang="tr">XE Temel Pano Dış Görünümü</title>
|
||||
<description xml:lang="ko">
|
||||
XE 게시판의 기본 스킨입니다.
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
This is the basic board skin of XE.
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="tr">
|
||||
XE'nin temel pano dış görünümüdür
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<description xml:lang="zh-TW">
|
||||
XE 基本討論板面板。
|
||||
NHN (developers@xpressengine.com)
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2010-06-10</date>
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
<name xml:lang="tr">NHN</name>
|
||||
</author>
|
||||
</skin>
|
||||
87
modules/board/m.skins/default/write_form.html
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/x.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<div class="hx h2">
|
||||
<h2><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a></h2>
|
||||
</div>
|
||||
<div class="hx h3">
|
||||
<h3>{$lang->cmd_write}</h3>
|
||||
</div>
|
||||
<form action="./" method="post" class="ff" onsubmit="return procFilter(this, insert)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<ul>
|
||||
<!--@if($module_info->use_category == "Y")-->
|
||||
<li>
|
||||
<label for="nCategory">{$lang->category}</label>
|
||||
<select name="category_srl" id="nCategory">
|
||||
<!--@foreach($category_list as $val)-->
|
||||
<option <!--@if(!$val->grant)-->disabled="disabled"<!--@endif--> value="{$val->category_srl}" <!--@if($val->grant&&$val->selected||$val->category_srl==$oDocument->get('category_srl'))-->selected="selected"<!--@endif-->>
|
||||
{str_repeat(" ",$val->depth)} {$val->title} ({$val->document_count})
|
||||
</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
</li>
|
||||
<!--@end-->
|
||||
<li>
|
||||
<label for="nTitle">{$lang->title}</label>
|
||||
<input name="title" type="text" id="nTitle" />
|
||||
</li>
|
||||
<!--@if(count($extra_keys))-->
|
||||
<!--@foreach($extra_keys as $key=> $val)-->
|
||||
<li class="exvar">
|
||||
<label for="ex_{$val->name}">{$val->name} <!--@if($val->is_required=="Y")-->*<!--@end--></label>
|
||||
{$val->getFormHTML()}
|
||||
</li>
|
||||
<!--@endforeach-->
|
||||
<!--@end-->
|
||||
<li>
|
||||
<label for="nText">{$lang->content}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="nText"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" value="" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
<li>
|
||||
<input type="checkbox" name="comment_status" value="ALLOW" <!--@if($oDocument->allowComment())-->checked="checked"<!--@end--> id="reAllow" />
|
||||
<label for="reAllow">{$lang->allow_comment}</label>
|
||||
<input type="checkbox" name="allow_trackback" value="Y" <!--@if($oDocument->allowTrackback())-->checked="checked"<!--@end--> id="trAllow" />
|
||||
<label for="trAllow">{$lang->allow_trackback}</label>
|
||||
|
||||
<!--@if(is_array($status_list))-->
|
||||
<div>
|
||||
{$lang->status}
|
||||
<!--@foreach($status_list AS $key=>$value)-->
|
||||
<input type="radio" name="status" value="{$key}" <!--@if($oDocument->get('status') == $key)-->checked<!--@end--> /> {$value}
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
</li>
|
||||
</ul>
|
||||
<div class="bna">
|
||||
<button type="submit" class="bn dark">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
31
modules/board/m.skins/simpleGray/_list.html
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
<h2 class="h2"><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a> <em>{number_format($total_count)}</em> <!--@if($module_info->use_category == "Y")--><a href="{getUrl('page','','act','dispBoardCategory','')}" class="bn">{$lang->category}</a><!--@endif--></h2>
|
||||
<ul class="lt">
|
||||
<!--@foreach($notice_list as $no => $document)-->
|
||||
<li>
|
||||
<a href="{getUrl('document_srl', $document->document_srl)}">
|
||||
<span class="notice">{$lang->notice}</span> <span class="title"><!--@if($module_info->use_category == "Y" && $document->get('category_srl'))-->{$category_list[$document->get('category_srl')]->title} ›<!--@end--><strong>{$document->getTitle($module_info->subject_cut_size)}</strong> <!--@if($document->getCommentCount())--><span>[{$document->getCommentCount()}]</span><!--@endif--></span>
|
||||
<span class="auth"><em>{$document->getNickName()}</em> <span>{$document->getRegDate("Y.m.d")}</span></span>
|
||||
</a>
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<li>
|
||||
<a href="{getUrl('document_srl', $document->document_srl)}">
|
||||
<span class="title"><!--@if($module_info->use_category == "Y" && $document->get('category_srl'))-->{$category_list[$document->get('category_srl')]->title} ›<!--@end--><strong>{$document->getTitle($module_info->subject_cut_size)}</strong> <!--@if($document->getCommentCount())--><span>[{$document->getCommentCount()}]</span><!--@endif--></span>
|
||||
<span class="auth"><em>{$document->getNickName()}</em> <span>{$document->getRegDate("Y.m.d")}</span></span>
|
||||
</a>
|
||||
</li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<div class="pn">
|
||||
<!--@if($page != 1)-->
|
||||
<a href="{getUrl('page',$page-1,'document_srl','','division',$division,'last_division',$last_division,'entry','')}">‹ {$lang->cmd_prev}</a>
|
||||
<!--@endif-->
|
||||
<strong>{$page} / {$page_navigation->last_page}</strong>
|
||||
<!--@if($page != $page_navigation->last_page)-->
|
||||
<a href="{getUrl('page',$page+1,'document_srl','','division',$division,'last_division',$last_division,'entry','')}">{$lang->cmd_next} ›</a>
|
||||
<!--@endif-->
|
||||
</div>
|
||||
<div class="cm">
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="bn">{$lang->cmd_write}</a>
|
||||
</div>
|
||||
35
modules/board/m.skins/simpleGray/category.html
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<h2 class="h2"><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a> › {$lang->category}</h2>
|
||||
<ul class="gn">
|
||||
{@ $start = true }
|
||||
{@ $depth = 0 }
|
||||
<!--@foreach($category_list as $category)-->
|
||||
<!--@if(!$start && $category->depth == $depth)-->
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@if($category->depth > $depth)--> <!--more depth-->
|
||||
<ul>
|
||||
<!--@else-->
|
||||
<!--@while($category->depth < $depth)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
<!--@endif-->
|
||||
<li><a href="{getUrl('act','','category',$category->category_srl)}">» {$category->title} <em>[{$category->document_count}]</em></a>
|
||||
{@ $start = false }
|
||||
{@ $depth = $category->depth }
|
||||
<!--@endforeach-->
|
||||
<!--@while($depth > 0)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="cm">
|
||||
<li class="fl"><a href="{getUrl('','vid',$vid,'mid',$mid,'mobile',$mobile)}" class="bn">{$lang->cmd_list}</a></li>
|
||||
<li class="fr"><a href="write.html" class="bn">새글</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
46
modules/board/m.skins/simpleGray/comment.html
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<ul id="cl" class="rp tgo open">
|
||||
{@ $_comment_list = $oDocument->getComments() }
|
||||
{@ $start = true }
|
||||
{@ $depth = 0 }
|
||||
<!--@foreach($_comment_list as $key => $comment)-->
|
||||
<!--@if(!$start && $comment->get('depth') == $depth)-->
|
||||
</li>
|
||||
<!--@end-->
|
||||
<!--@if($comment->get('depth') > $depth)-->
|
||||
<ul>
|
||||
<!--@else-->
|
||||
<!--@while($comment->get('depth') < $depth)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1 }
|
||||
<!--@end-->
|
||||
<!--@endif-->
|
||||
<li>
|
||||
{$comment->getContent(false)}
|
||||
<em>{$comment->getNickName()}</em>
|
||||
<span>{$comment->getRegdate("Y.m.d")}</span>
|
||||
<!--@if($comment->isGranted() || !$comment->get('member_srl'))-->
|
||||
<a href="{getUrl('act','dispBoardDeleteComment','comment_srl',$comment->comment_srl)}" class="md">{$lang->cmd_delete}</a>
|
||||
<!--@endif-->
|
||||
<a href="{getUrl('act','dispBoardReplyComment','comment_srl',$comment->comment_srl)}" class="md">{$lang->cmd_reply}</a>
|
||||
{@ $start = false }
|
||||
{@ $depth = $comment->get('depth') }
|
||||
<!--@endforeach-->
|
||||
<!--@while($depth > 0)-->
|
||||
</li>
|
||||
</ul>
|
||||
{@ $depth -= 1}
|
||||
<!--@end-->
|
||||
</li>
|
||||
</ul>
|
||||
<!--@if($oDocument->comment_page_navigation)-->
|
||||
<div id="clpn" class="pn">
|
||||
<!--@if($oDocument->comment_page_navigation->cur_page != 1)-->
|
||||
<a href="#" onclick="loadPage({$oDocument->document_srl}, {$oDocument->comment_page_navigation->cur_page-1}); return false;">‹ {$lang->cmd_prev}</a>
|
||||
<!--@endif-->
|
||||
<strong id="curpage">{$oDocument->comment_page_navigation->cur_page} / {$oDocument->comment_page_navigation->last_page}</strong>
|
||||
<!--@if($oDocument->comment_page_navigation->cur_page != $oDocument->comment_page_navigation->last_page)-->
|
||||
<a href="#" onclick="loadPage({$oDocument->document_srl}, {$oDocument->comment_page_navigation->cur_page+1}); return false;">{$lang->cmd_next} ›</a>
|
||||
<!--@endif-->
|
||||
</div>
|
||||
<!--@endif-->
|
||||
48
modules/board/m.skins/simpleGray/comment_form.html
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd rd">
|
||||
|
||||
<!--@if($oSourceComment->isExists())-->
|
||||
<div class="origin">{$oSourceComment->getContent(false)}</div>
|
||||
<!--@end-->
|
||||
|
||||
<form action="./" method="POST" class="sn tgo open" onsubmit="return procFilter(this, insert_comment);">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
<input type="hidden" name="parent_srl" value="{$oComment->get('parent_srl')}" />
|
||||
<ul>
|
||||
<li>
|
||||
<label for="rText" class="db fb">{$lang->comment}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="rText" class="itxx"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName" class="db fb">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail" class="db fb">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw" class="db fb">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite" class="db fb">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" class="itx" value="" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
</ul>
|
||||
<div class="ar">
|
||||
<input name="" type="submit" value="{$lang->cmd_comment_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
542
modules/board/m.skins/simpleGray/css/mboard.css
Normal file
|
|
@ -0,0 +1,542 @@
|
|||
@charset "utf-8";
|
||||
/* Mobile XE */
|
||||
/*csslint unqualified-attributes:false, display-property-grouping:false, universal-selector:false, font-sizes:false*/
|
||||
body {
|
||||
margin: 0;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
body,
|
||||
input,
|
||||
textarea,
|
||||
select,
|
||||
button,
|
||||
table {
|
||||
font-family: Tahoma, Geneva, sans-serif;
|
||||
}
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
em {
|
||||
font-style: normal;
|
||||
}
|
||||
form {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
form ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
form li {
|
||||
margin: 0 0 10px 0;
|
||||
padding: 0 0 10px 0;
|
||||
border-bottom: 1px dashed #999;
|
||||
}
|
||||
form li:last-child {
|
||||
border: 0;
|
||||
}
|
||||
form p {
|
||||
margin: 0;
|
||||
}
|
||||
form p.help {
|
||||
color: #666;
|
||||
}
|
||||
fieldset {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
input,
|
||||
textarea,
|
||||
select {
|
||||
font-size: 16px;
|
||||
}
|
||||
button {
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
background: #eee;
|
||||
border: 1px solid #666;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
overflow: visible;
|
||||
padding: 3px;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
-moz-box-shadow: 0 0 2px #666;
|
||||
-webkit-box-shadow: 0 0 2px #666;
|
||||
box-shadow: 0 0 2px #666;
|
||||
text-decoration: none;
|
||||
font-weight: normal;
|
||||
}
|
||||
select {
|
||||
width: 90%;
|
||||
}
|
||||
/* Common Class */
|
||||
.fl {
|
||||
float: left;
|
||||
}
|
||||
.fr {
|
||||
float: right;
|
||||
}
|
||||
.cb {
|
||||
clear: both;
|
||||
}
|
||||
.al {
|
||||
text-align: left;
|
||||
}
|
||||
.ar {
|
||||
text-align: right;
|
||||
}
|
||||
.ac {
|
||||
text-align: center;
|
||||
}
|
||||
.itx {
|
||||
border: 1px solid #ccc;
|
||||
width: 90%;
|
||||
font-size: 20px;
|
||||
height: 30px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.itxx {
|
||||
border: 1px solid #ccc;
|
||||
width: 90%;
|
||||
font-size: 20px;
|
||||
padding: 5px 10px;
|
||||
resize: vertical;
|
||||
}
|
||||
.db {
|
||||
display: block;
|
||||
}
|
||||
.di {
|
||||
display: inline;
|
||||
}
|
||||
.fb {
|
||||
font-weight: bold;
|
||||
}
|
||||
.fn {
|
||||
font-weight: normal;
|
||||
}
|
||||
.sn {
|
||||
margin: 10px;
|
||||
zoom: 1;
|
||||
}
|
||||
.sn:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.wn {
|
||||
background: #f00;
|
||||
color: #fff;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
}
|
||||
.mm {
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
background: #f4f4f4;
|
||||
border: 1px solid #6c0;
|
||||
border-top-color: #660;
|
||||
border-left-color: #660;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.mm strong {
|
||||
font-size: 20px;
|
||||
}
|
||||
/* Read */
|
||||
.rd .hx {
|
||||
padding: 10px;
|
||||
background: #ddd;
|
||||
border: 1px solid #ccc;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
text-shadow: 1px 1px #fff;
|
||||
}
|
||||
.rd .hx h2 {
|
||||
display: inline;
|
||||
font-size: 20px;
|
||||
}
|
||||
.rd .hx em,.rd .hx span {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
}
|
||||
.rd .hx span {
|
||||
padding: 0 0 0 10px;
|
||||
border-left: 1px solid #ccc;
|
||||
}
|
||||
.rd .hx a {
|
||||
color: #000;
|
||||
}
|
||||
.rd .co {
|
||||
margin: 10px;
|
||||
word-break: break-word;
|
||||
overflow: hidden;
|
||||
}
|
||||
.rd .tg {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
text-align: right;
|
||||
top: 0;
|
||||
left: 0;
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
-moz-box-shadow: none;
|
||||
-webkit-box-shadow: none;
|
||||
box-shadow: none;
|
||||
-moz-border-radius: 0;
|
||||
-webkit-border-radius: 0;
|
||||
border-radius: 0;
|
||||
}
|
||||
.rd .tgo {
|
||||
display: none;
|
||||
}
|
||||
.rd .tgo.open {
|
||||
display: block;
|
||||
}
|
||||
.rd .tgo a {
|
||||
color: #333;
|
||||
}
|
||||
/* Reply */
|
||||
.rp {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.rp ul {
|
||||
margin: 0;
|
||||
padding: 10px 0 0 0;
|
||||
}
|
||||
.rp li {
|
||||
border-bottom: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.rp li li {
|
||||
border-bottom: 0;
|
||||
border-left: 1px solid #ccc;
|
||||
}
|
||||
.rp li:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.rp p {
|
||||
display: inline;
|
||||
}
|
||||
.rp em,.rp span {
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
}
|
||||
.rp span,.rp .md {
|
||||
padding: 0 0 0 5px;
|
||||
border-left: 1px solid #ccc;
|
||||
}
|
||||
.rp em a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.rp .md {
|
||||
font-size: 12px;
|
||||
}
|
||||
/* List */
|
||||
.lt,.lt ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.lt li {
|
||||
border-bottom: 1px solid #999;
|
||||
}
|
||||
.lt li:last-child {
|
||||
border: 0;
|
||||
}
|
||||
.lt .notice {
|
||||
background: #000;
|
||||
color: #fff;
|
||||
padding: 0 3px;
|
||||
}
|
||||
.lt a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
padding: 10px;
|
||||
color: #000;
|
||||
zoom: 1;
|
||||
}
|
||||
.lt a:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.lt a:visited {
|
||||
color: #666;
|
||||
}
|
||||
.lt .title span {
|
||||
color: #f60;
|
||||
}
|
||||
.lt .titlex {
|
||||
display: block;
|
||||
padding: 10px;
|
||||
color: #000;
|
||||
}
|
||||
.lt .auth {
|
||||
font-size: 12px;
|
||||
color: #666;
|
||||
}
|
||||
.lt .auth em {
|
||||
margin: 0 5px 0 0;
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
.lt .auth span {
|
||||
border-left: 1px solid #ccc;
|
||||
padding: 0 0 0 5px;
|
||||
}
|
||||
.lt .th {
|
||||
float: left;
|
||||
margin: 0 10px 5px 0;
|
||||
border: 1px solid #ccc;
|
||||
background: #afafaf;
|
||||
color: #efefef;
|
||||
text-align: center;
|
||||
line-height: 80px;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
font-size: 14px;
|
||||
}
|
||||
.lt p {
|
||||
margin: 0 0 10px 0;
|
||||
padding: 0 10px;
|
||||
color: #666;
|
||||
}
|
||||
.lt p a {
|
||||
display: inline;
|
||||
padding: 0;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.lt p a:after {
|
||||
display: none;
|
||||
}
|
||||
.lt em {
|
||||
color: #f60;
|
||||
}
|
||||
/* Pagenation */
|
||||
.pn {
|
||||
padding: 10px 0;
|
||||
text-align: center;
|
||||
border-top: 1px solid #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
.pn a,.pn strong {
|
||||
padding: 5px 10px;
|
||||
display: inline-block;
|
||||
border: 1px solid #ccc;
|
||||
text-decoration: none;
|
||||
background: #f8f8f8;
|
||||
color: #333;
|
||||
}
|
||||
.pn a:visited {
|
||||
color: #666;
|
||||
}
|
||||
.pn strong {
|
||||
border: 0;
|
||||
background: none;
|
||||
}
|
||||
/* Body */
|
||||
.bd {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
clear: both;
|
||||
}
|
||||
.bd .h2 {
|
||||
font-size: 20px;
|
||||
background: #ccc;
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
.bd .h3 {
|
||||
font-size: 16px;
|
||||
background: #eee;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
.bd .h2,.bd .h3 {
|
||||
position: relative;
|
||||
margin: -1px 0;
|
||||
padding: 10px;
|
||||
border: 1px solid #aaa;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
text-shadow: 1px 1px #fff;
|
||||
}
|
||||
.bd .h2 em,.bd .h3 em {
|
||||
font-weight: normal;
|
||||
color: #f60;
|
||||
font-size: 12px;
|
||||
}
|
||||
.bd .h2 a,.bd .h3 a {
|
||||
color: #000;
|
||||
}
|
||||
.bd .h2 .bn {
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
right: 10px;
|
||||
font-size: 12px;
|
||||
margin: 0;
|
||||
}
|
||||
/* Context */
|
||||
.cm {
|
||||
margin: 0;
|
||||
padding: 10px;
|
||||
background: #777;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
list-style: none;
|
||||
border-top: 1px solid #555;
|
||||
zoom: 1;
|
||||
}
|
||||
.cm:after {
|
||||
content: "";
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
.cm .fl {
|
||||
margin: 0 5px 0 0;
|
||||
}
|
||||
.cm .fr {
|
||||
margin: 0 0 0 5px;
|
||||
}
|
||||
/* Button */
|
||||
.bn {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
font-weight: normal;
|
||||
font-size: 14px;
|
||||
border: 1px solid #333;
|
||||
background: #eee;
|
||||
color: #000;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
-moz-box-shadow: 0 0 3px #333;
|
||||
-webkit-box-shadow: 0 0 3px #333;
|
||||
box-shadow: 0 0 3px #333;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
text-decoration: none;
|
||||
}
|
||||
/* GNB */
|
||||
.gn,.gn ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
.gn li {
|
||||
margin: -1px 0;
|
||||
border: 1px solid #999;
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
vertical-align: top;
|
||||
}
|
||||
.gn li a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
height: 45px;
|
||||
line-height: 45px;
|
||||
padding: 0 10px;
|
||||
color: #000;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.gn li a em {
|
||||
font-weight: normal;
|
||||
color: #f60;
|
||||
font-size: 12px;
|
||||
}
|
||||
.gn li a:visited {
|
||||
color: #666;
|
||||
}
|
||||
.gn li li a {
|
||||
padding: 0 10px 0 20px;
|
||||
}
|
||||
.gn li li li a {
|
||||
padding: 0 10px 0 30px;
|
||||
}
|
||||
.gn li li li li a {
|
||||
padding: 0 10px 0 50px;
|
||||
}
|
||||
/* Extension Vars */
|
||||
.xv {
|
||||
background: #eee;
|
||||
border: 1px solid #999;
|
||||
padding: 10px;
|
||||
}
|
||||
.xv dt {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.xv dd {
|
||||
margin: 0 0 10px 0;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
}
|
||||
.exvar input[type=text],
|
||||
.exvar input[type=email],
|
||||
.exvar input[type=url],
|
||||
.exvar input[type=search] {
|
||||
border: 1px solid #ccc;
|
||||
font-size: 20px;
|
||||
height: 30px;
|
||||
padding: 5px 10px;
|
||||
}
|
||||
.exvar input[type=text].text {
|
||||
width: 90%;
|
||||
}
|
||||
.exvar input[type=email].email_address {
|
||||
width: 90%;
|
||||
}
|
||||
.exvar input[type=url].address {
|
||||
width: 70%;
|
||||
}
|
||||
.exvar textarea {
|
||||
border: 1px solid #ccc;
|
||||
width: 90%;
|
||||
font-size: 20px;
|
||||
padding: 5px 10px;
|
||||
height: 200px;
|
||||
resize: vertical;
|
||||
}
|
||||
.exvar li {
|
||||
border: 0;
|
||||
display: inline;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-block;
|
||||
padding: 5px 10px;
|
||||
font-weight: normal;
|
||||
font-size: 14px;
|
||||
border: 1px solid #333;
|
||||
background: #eee;
|
||||
color: #000;
|
||||
text-shadow: 1px 1px 0 #fff;
|
||||
-moz-box-shadow: 0 0 3px #333;
|
||||
-webkit-box-shadow: 0 0 3px #333;
|
||||
box-shadow: 0 0 3px #333;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.rd .origin {
|
||||
padding: 10px;
|
||||
margin: 10px 10px 20px 10px;
|
||||
background: #ddd;
|
||||
}
|
||||
1
modules/board/m.skins/simpleGray/css/mboard.min.css
vendored
Normal file
22
modules/board/m.skins/simpleGray/delete_comment_form.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<h2 class="ac">{$lang->confirm_delete}</h2>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_comment)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
|
||||
<div class="cm">
|
||||
<button type="submit" class="bn">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('act','','comment_srl','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
21
modules/board/m.skins/simpleGray/delete_form.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<h2 class="ac">{$lang->confirm_delete}</h2>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_document)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
|
||||
<div class="cm">
|
||||
<button type="submit" class="bn">{$lang->cmd_delete}</button>
|
||||
<a href="{getUrl('act','')}" class="bn"><span>{$lang->cmd_cancel}</span></a>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
21
modules/board/m.skins/simpleGray/input_password_form.html
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
<!--%import("css/mboard.css")-->
|
||||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<div class="bd">
|
||||
<h2 class="h2">{$lang->msg_input_password}</h2>
|
||||
<form action="./" method="POST" onsubmit="return procFilter(this, input_password)" class="requirePassword">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<ul class="sn">
|
||||
<li><label for="pw" class="db fb al">비밀번호</label><input name="password" type="password" id="pw" class="itx" value="" /></li>
|
||||
</ul>
|
||||
<div class="cm">
|
||||
<button type="submit" class="bn">{$lang->cmd_input}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
79
modules/board/m.skins/simpleGray/js/mboard.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
function completeInsertComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var comment_srl = ret_obj.comment_srl;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(comment_srl) url = url.setQuery('rnd',comment_srl)+"#comment_"+comment_srl;
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeDocumentInserted(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var category_srl = ret_obj.category_srl;
|
||||
var url;
|
||||
|
||||
if(!document_srl)
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('act','');
|
||||
}
|
||||
else
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
}
|
||||
if(category_srl) url = url.setQuery('category',category_srl);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeGetPage(ret_val)
|
||||
{
|
||||
jQuery("#cl").remove();
|
||||
jQuery("#clpn").remove();
|
||||
jQuery("#clb").after(ret_val.html);
|
||||
}
|
||||
|
||||
function loadPage(document_srl, page)
|
||||
{
|
||||
var params =
|
||||
{};
|
||||
params.cpage = page;
|
||||
params.document_srl = document_srl;
|
||||
params.mid = current_mid;
|
||||
jQuery.exec_json('board.getBoardCommentPage', params, completeGetPage);
|
||||
}
|
||||
|
||||
function completeDeleteComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
function completeDeleteDocument(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('document_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
1
modules/board/m.skins/simpleGray/js/mboard.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
function completeInsertComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.comment_srl,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("rnd",d)+"#comment_"+d),location.href=e}function completeDocumentInserted(a){var b,c=(a.error,a.message,a.mid),d=a.document_srl,e=a.category_srl;b=d?current_url.setQuery("mid",c).setQuery("document_srl",d).setQuery("act",""):current_url.setQuery("mid",c).setQuery("act",""),e&&(b=b.setQuery("category",e)),location.href=b}function completeGetPage(a){jQuery("#cl").remove(),jQuery("#clpn").remove(),jQuery("#clb").after(a.html)}function loadPage(a,b){var c={};c.cpage=b,c.document_srl=a,c.mid=current_mid,jQuery.exec_json("board.getBoardCommentPage",c,completeGetPage)}function completeDeleteComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.page,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("page",d)),location.href=e}function completeDeleteDocument(a){var b=(a.error,a.message,a.mid),c=a.page,d=current_url.setQuery("mid",b).setQuery("act","").setQuery("document_srl","");c&&(d=d.setQuery("page",c)),location.href=d}
|
||||
13
modules/board/m.skins/simpleGray/list.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<!--@if($oDocument->isExists())-->
|
||||
<!--#include("read.html")-->
|
||||
<!--@else-->
|
||||
<!--#include("_list.html")-->
|
||||
<!--@end-->
|
||||
</div>
|
||||
137
modules/board/m.skins/simpleGray/read.html
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="rd">
|
||||
<div class="hx">
|
||||
<h2><a href="{getUrl('document_srl','','category','','page','')}">{$module_info->browser_title}</a>
|
||||
<!--@if($module_info->use_category == "Y" && $oDocument->get('category_srl'))-->› <a href="{getUrl('document_srl','','category',$oDocument->get('category_srl'))}">{$category_list[$oDocument->get('category_srl')]->title}</a><!--@end--> › {$oDocument->getTitle()}</h2>
|
||||
<em><a href="#">{$oDocument->getNickName()}</a></em>
|
||||
<span>{$oDocument->getRegdate()}</span>
|
||||
</div>
|
||||
<div class="co">
|
||||
<!--@if($oDocument->isSecret() && !$oDocument->isGranted())-->
|
||||
<div class="secretContent">
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
|
||||
<div class="title">{$lang->msg_is_secret}</div>
|
||||
<div class="content">
|
||||
<input type="password" name="password" id="cpw" /><input type="submit" value="{$lang->cmd_input}" />
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<!--@else-->
|
||||
<!--@if($oDocument->isExtraVarsExists())-->
|
||||
{@ $_extra_vars = $oDocument->getExtraVars(); }
|
||||
<dl class="xv">
|
||||
<!--@foreach($_extra_vars as $key => $val)-->
|
||||
<dt>{$val->name}</dt>
|
||||
<dd>{$val->getValueHTML()}</dd>
|
||||
<!--@end-->
|
||||
</dl>
|
||||
<!--@end-->
|
||||
{$oDocument->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@if($oDocument->hasUploadedFiles())-->
|
||||
{@ $uploaded_list = $oDocument->getUploadedFiles() }
|
||||
<h3 class="h3">{$lang->uploaded_file} <em>[{count($uploaded_list)}]</em> <button type="button" class="tg" title="open/close"></button></h3>
|
||||
<ul class="sn tgo open">
|
||||
<!--@foreach($uploaded_list as $key => $file)-->
|
||||
<li><a href="{getUrl('')}{$file->download_url}">{$file->source_filename}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!--@endif-->
|
||||
<!--@if($oDocument->allowTrackback() && $oDocument->getTrackbackCount())-->
|
||||
<h3 class="h3">{$lang->trackback} <em>[{$oDocument->getTrackbackCount()}]</em> <button type="button" class="tg" title="open/close"></button></h3>
|
||||
<ul class="rp tgo open">
|
||||
{@ $_trackback_list = $oDocument->getTrackbacks() }
|
||||
<!--@foreach($_trackback_list as $key => $val)-->
|
||||
<li>
|
||||
<p>{$val->excerpt}</p>
|
||||
<em>{htmlspecialchars($val->title)} - {htmlspecialchars($val->blog_name)}</em>
|
||||
<span>zdate($val->regdate, "Y.m.d")</span>
|
||||
<!--@if($grant->manager)-->
|
||||
<a href="07_password.html" class="md">삭제</a>
|
||||
<!--@endif-->
|
||||
</li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<!--@endif-->
|
||||
<!--@if($oDocument->getCommentCount())-->
|
||||
<h3 class="h3" id="clb">{$lang->comment} <em>[{$oDocument->getCommentCount()}]</em> <button type="button" class="tg tgr" title="open/close"></button></h3>
|
||||
<!--@endif-->
|
||||
<!--@if($grant->write_comment && $oDocument->isEnableComment() )-->
|
||||
<h3 class="h3">{$lang->write_comment} <button type="button" class="tg" title="open/close"></button></h3>
|
||||
<form action="./" method="POST" class="sn tgo open" onsubmit="return procFilter(this, insert_comment);">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="" />
|
||||
<ul>
|
||||
<li>
|
||||
<label for="rText" class="db fb">{$lang->comment}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="rText" class="itxx"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName" class="db fb">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail" class="db fb">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw" class="db fb">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite" class="db fb">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" class="itx" value="" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
</ul>
|
||||
<div class="ar">
|
||||
<input name="" type="submit" value="{$lang->cmd_comment_registration}" />
|
||||
</div>
|
||||
</form>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<ul class="cm">
|
||||
<li class="fl"><a href="{getUrl('document_srl','')}" class="bn">{$lang->cmd_list}</a></li>
|
||||
<li class="fr"><a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="bn">{$lang->cmd_write}</a></li>
|
||||
<!--@if($oDocument->isEditable())-->
|
||||
<li class="fr"><a href="{getUrl('act','dispBoardDelete','document_srl',$oDocument->document_srl,'comment_srl','')}" class="bn">{$lang->cmd_delete}</a></li>
|
||||
<!--@end-->
|
||||
</ul>
|
||||
<script>
|
||||
//<![CDATA[
|
||||
jQuery(function($){
|
||||
$('.co .mm').next().hide();
|
||||
$('.mm').click(function(){ $(this).hide().next().show();});
|
||||
$('.tgo').removeClass('open');
|
||||
$('.tg').click(function(){
|
||||
$(this).parent('.h3').next('.tgo').toggleClass('open');
|
||||
});
|
||||
var loaded = false;
|
||||
$('.tgr').click(function(){
|
||||
if(!loaded) {
|
||||
loaded = true;
|
||||
{@ $lastpage = 1; }
|
||||
{@ $temp = $oDocument->getComments() }
|
||||
<!--@if($oDocument->comment_page_navigation)-->
|
||||
{@ $lastpage = $oDocument->comment_page_navigation->last_page }
|
||||
<!--@endif-->
|
||||
loadPage({$oDocument->document_srl}, {$lastpage});
|
||||
}
|
||||
});
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
22
modules/board/m.skins/simpleGray/skin.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE 게시판 심플 회색 스킨</title>
|
||||
<title xml:lang="en">XE Board Simple Gray Skin</title>
|
||||
<title xml:lang="zh-TW">簡易灰色面板</title>
|
||||
<description xml:lang="ko">
|
||||
XE 게시판의 기본 스킨입니다.
|
||||
</description>
|
||||
<description xml:lang="en">
|
||||
This is the basic board skin of XE.
|
||||
</description>
|
||||
<description xml:lang="zh-TW">
|
||||
XE 基本討論板面板。
|
||||
</description>
|
||||
<version>0.1</version>
|
||||
<date>2010-06-10</date>
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
<name xml:lang="en">NHN</name>
|
||||
<name xml:lang="zh-TW">NHN</name>
|
||||
</author>
|
||||
</skin>
|
||||
81
modules/board/m.skins/simpleGray/write_form.html
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
{@ Context::addJsFile("./common/js/jquery.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/js_app.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/x.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/common.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_handler.js", true, '', -100000) }
|
||||
{@ Context::addJsFile("./common/js/xml_js_filter.js", true, '', -100000) }
|
||||
<!--%import("js/mboard.js")-->
|
||||
<!--%import("css/mboard.css")-->
|
||||
<div class="bd">
|
||||
<h2 class="h2"><a href="{getUrl('','vid',$vid,'mid',$mid)}">{$module_info->browser_title}</a> › {$lang->cmd_write}</h2>
|
||||
<form action="./" method="POST" onsubmit="return procFilter(this, insert)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<ul class="sn">
|
||||
<!--@if($module_info->use_category == "Y")-->
|
||||
<li>
|
||||
<label for="nCategory" class="db fb">{$lang->category}</label>
|
||||
<select name="category_srl" id="nCategory">
|
||||
<!--@foreach($category_list as $val)-->
|
||||
<option <!--@if(!$val->grant)-->disabled="disabled"<!--@endif--> value="{$val->category_srl}" <!--@if($val->grant&&$val->selected||$val->category_srl==$oDocument->get('category_srl'))-->selected=="selected"<!--@endif-->>
|
||||
{str_repeat(" ",$val->depth)} {$val->title} ({$val->document_count})
|
||||
</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
</li>
|
||||
<!--@end-->
|
||||
<li>
|
||||
<label for="nTitle" class="db fb">{$lang->title}</label>
|
||||
<input name="title" type="text" id="nTitle" class="itx" />
|
||||
</li>
|
||||
<!--@if(count($extra_keys))-->
|
||||
<!--@foreach($extra_keys as $key=> $val)-->
|
||||
<li class="exvar">
|
||||
<label for="ex_{$val->name}" class="db fb">{$val->name} <!--@if($val->is_required=="Y")-->*<!--@end--></label>
|
||||
{$val->getFormHTML()}
|
||||
</li>
|
||||
<!--@endforeach-->
|
||||
<!--@end-->
|
||||
<li>
|
||||
<label for="nText" class="db fb">{$lang->content}</label>
|
||||
<textarea name="content" rows="8" cols="42" id="nText" class="itxx" value="{$oDocument->getContentText()}"></textarea>
|
||||
</li>
|
||||
<!--@if(!$is_logged)-->
|
||||
<li>
|
||||
<label for="uName" class="db fb">{$lang->writer}</label>
|
||||
<input name="nick_name" type="text" id="uName" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uMail" class="db fb">{$lang->email_address}</label>
|
||||
<input name="email_address" type="email" id="uMail" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uPw" class="db fb">{$lang->password}</label>
|
||||
<input name="password" type="password" id="uPw" class="itx" />
|
||||
</li>
|
||||
<li>
|
||||
<label for="uSite" class="db fb">{$lang->homepage}</label>
|
||||
<input name="homepage" type="url" id="uSite" class="itx" value="" />
|
||||
</li>
|
||||
<!--@endif-->
|
||||
<li>
|
||||
<input type="checkbox" name="comment_status" value="ALLOW" <!--@if($oDocument->allowComment())-->checked="checked"<!--@end--> id="reAllow" />
|
||||
<label for="reAllow">{$lang->allow_comment}</label>
|
||||
<input type="checkbox" name="allow_trackback" value="Y" <!--@if($oDocument->allowTrackback())-->checked="checked"<!--@end--> id="trAllow" />
|
||||
<label for="trAllow">{$lang->allow_trackback}</label>
|
||||
|
||||
<!--@if(is_array($status_list))-->
|
||||
<div>
|
||||
{$lang->status}
|
||||
<!--@foreach($status_list AS $key=>$value)-->
|
||||
<input type="radio" name="status" value="{$key}" <!--@if($oDocument->get('status') == $key)-->checked<!--@end--> /> {$value}
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
</li>
|
||||
</ul>
|
||||
<div class="cm">
|
||||
<button type="submit" class="bn">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
14
modules/board/queries/getAllBoard.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<query id="getAllBoard" action="select">
|
||||
<tables>
|
||||
<table name="modules" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module" default="board" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="mid" order="asc" />
|
||||
</navigation>
|
||||
</query>
|
||||
23
modules/board/queries/getBoardList.xml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<query id="getBoardList" action="select">
|
||||
<tables>
|
||||
<table name="modules" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module" default="board" />
|
||||
<group pipe="and">
|
||||
<condition operation="like" column="mid" var="s_mid" pipe="or" />
|
||||
<condition operation="like" column="browser_title" var="s_browser_title" pipe="or" />
|
||||
<condition operation="like" column="comment" var="s_comment" pipe="or" />
|
||||
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="or" />
|
||||
</group>
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="module_srl" order="desc" />
|
||||
<list_count var="list_count" default="20" />
|
||||
<page_count var="page_count" default="10" />
|
||||
<page var="page" default="1" />
|
||||
</navigation>
|
||||
</query>
|
||||
10
modules/board/ruleset/insertBoard.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ruleset version="1.5.0">
|
||||
<fields>
|
||||
<field name="board_name" required="true" length="1:40" rule="alpha_number" />
|
||||
<field name="browser_title" required="true" length="1:250" />
|
||||
<field name="list_count" required="true" rule="number" />
|
||||
<field name="search_list_count" required="true" rule="number" />
|
||||
<field name="page_count" required="true" rule="number" />
|
||||
</fields>
|
||||
</ruleset>
|
||||
7
modules/board/ruleset/insertBoardForBasic.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ruleset version="1.5.0">
|
||||
<fields>
|
||||
<field name="board_name" required="true" length="1:40" rule="alpha_number" />
|
||||
<field name="list_count" required="true" rule="number" />
|
||||
</fields>
|
||||
</ruleset>
|
||||
85
modules/board/skins/default/_comment.html
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
<!-- COMMENT -->
|
||||
<div class="feedback" id="comment">
|
||||
<div class="fbHeader">
|
||||
<h2>{$lang->comment} <em>{$oDocument->getCommentcount()}</em></h2>
|
||||
</div>
|
||||
<ul cond="$oDocument->getCommentcount()" class="fbList">
|
||||
<li loop="$oDocument->getComments()=>$key,$comment" class="fbItem"|cond="!$comment->get('depth')" class="fbItem indent indent{($comment->get('depth'))}"|cond="$comment->get('depth')" id="comment_{$comment->comment_srl}">
|
||||
<div class="fbMeta">
|
||||
<img cond="$comment->getProfileImage()" src="{$comment->getProfileImage()}" alt="Profile" class="profile" />
|
||||
<span cond="!$comment->getProfileImage()" class="profile"></span>
|
||||
<h3 class="author">
|
||||
<a cond="!$comment->member_srl && $comment->homepage" href="{$comment->getHomepageUrl()}">{$comment->getNickName()}</a>
|
||||
<strong cond="!$comment->member_srl && !$comment->homepage">{$comment->getNickName()}</strong>
|
||||
<a cond="$comment->member_srl" href="#popup_menu_area" class="member_{$comment->member_srl}" onclick="return false">{$comment->getNickName()}</a>
|
||||
</h3>
|
||||
<p class="time">{$comment->getRegdate('Y.m.d H:i')}</p>
|
||||
</div>
|
||||
<!--@if(!$comment->isAccessible())-->
|
||||
<form action="./" method="get" class="xe_content" onsubmit="return procFilter(this, input_password)">
|
||||
<p><label for="cpw_{$comment->comment_srl}">{$lang->msg_is_secret} {$lang->msg_input_password}</label></p>
|
||||
<p><input type="password" name="password" id="cpw_{$comment->comment_srl}" class="iText" /><input type="submit" class="btn" value="{$lang->cmd_input}" /></p>
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$comment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment->get('comment_srl')}" />
|
||||
</form>
|
||||
<!--@else-->
|
||||
{$comment->getContent(false)}
|
||||
<!--@end-->
|
||||
<div cond="$comment->hasUploadedFiles()" class="fileList">
|
||||
<button type="button" class="toggleFile" onclick="jQuery(this).next('ul.files').toggle();">{$lang->uploaded_file} [<strong>{$comment->get('uploaded_count')}</strong>]</button>
|
||||
<ul class="files">
|
||||
<li loop="$comment->getUploadedFiles()=>$key,$file"><a href="{getUrl('')}{$file->download_url}">{$file->source_filename} <span class="fileSize">[File Size:{FileHandler::filesize($file->file_size)}/Download:{number_format($file->download_count)}]</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<p class="action">
|
||||
<span class="vote" cond="$comment->get('voted_count')!=0">{$lang->cmd_vote}:{$comment->get('voted_count')?$comment->get('voted_count'):0}</span>
|
||||
<a cond="$oDocument->allowComment()" href="{getUrl('act','dispBoardReplyComment','comment_srl',$comment->comment_srl)}" class="reply">{$lang->cmd_reply}</a>
|
||||
<a cond="$comment->isGranted()||!$comment->get('member_srl')" href="{getUrl('act','dispBoardModifyComment','comment_srl',$comment->comment_srl)}" class="modify">{$lang->cmd_modify}</a>
|
||||
<a cond="$comment->isGranted()||!$comment->get('member_srl')" href="{getUrl('act','dispBoardDeleteComment','comment_srl',$comment->comment_srl)}" class="delete">{$lang->cmd_delete}</a>
|
||||
<a cond="$is_logged" class="comment_{$comment->comment_srl} this" href="#popup_menu_area" onclick="return false">{$lang->cmd_comment_do}</a>
|
||||
</p>
|
||||
</li>
|
||||
</ul>
|
||||
<div cond="$oDocument->comment_page_navigation" class="pagination">
|
||||
<a href="{getUrl('cpage',1)}#comment" class="direction prev"><span></span><span></span> {$lang->first_page}</a>
|
||||
<block loop="$page_no=$oDocument->comment_page_navigation->getNextPage()">
|
||||
<strong cond="$cpage==$page_no">{$page_no}</strong>
|
||||
<a cond="$cpage!=$page_no" href="{getUrl('cpage',$page_no)}#comment">{$page_no}</a>
|
||||
</block>
|
||||
<a href="{getUrl('cpage',$oDocument->comment_page_navigation->last_page)}#comment" class="direction next">{$lang->last_page} <span></span><span></span></a>
|
||||
</div>
|
||||
<form cond="$grant->write_comment && $oDocument->isEnableComment()" action="./" method="post" onsubmit="return procFilter(this, insert_comment)" class="write_comment" id="write_comment">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="" />
|
||||
<input type="hidden" name="content" value="" />
|
||||
{$oDocument->getCommentEditor()}
|
||||
<div class="write_author">
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userName" class="iLabel">{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" id="userName" class="iText userName" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userPw" class="iLabel">{$lang->password}</label>
|
||||
<input type="password" name="password" id="userPw" class="iText userPw" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="homePage" class="iLabel">{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" id="homePage" class="iText homePage" />
|
||||
</span>
|
||||
<input cond="$is_logged" type="checkbox" name="notify_message" value="Y" id="notify_message" class="iCheck" />
|
||||
<label cond="$is_logged" for="notify_message">{$lang->notify}</label>
|
||||
<input cond="$module_info->secret=='Y'" type="checkbox" name="is_secret" value="Y" id="is_secret" class="iCheck" />
|
||||
<label cond="$module_info->secret=='Y'" for="is_secret">{$lang->secret}</label>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<button type="submit" class="btn">{$lang->cmd_comment_registration}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="fbFooter">
|
||||
<a href="{getUrl('document_srl','')}" class="btn">{$lang->cmd_list}</a>
|
||||
</div>
|
||||
<!-- /COMMENT -->
|
||||
2
modules/board/skins/default/_footer.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
{$module_info->footer_text}
|
||||
</div>
|
||||
34
modules/board/skins/default/_header.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<load target="board.default.css" />
|
||||
<load target="board.default.js" type="body" />
|
||||
<!--@if($order_type == "desc")-->
|
||||
{@ $order_type = "asc"; }
|
||||
<!--@else-->
|
||||
{@ $order_type = "desc"; }
|
||||
<!--@end-->
|
||||
<block cond="!$module_info->duration_new = (int)$module_info->duration_new">{@ $module_info->duration_new = 12 }</block>
|
||||
{@ $cate_list = array(); $current_key = null; }
|
||||
<!--@foreach($category_list as $key=>$val)-->
|
||||
<!--@if(!$val->depth)-->
|
||||
{@
|
||||
$cate_list[$key] = $val;
|
||||
$cate_list[$key]->children = array();
|
||||
$current_key = $key;
|
||||
}
|
||||
<!--@elseif($current_key)-->
|
||||
{@ $cate_list[$current_key]->children[] = $val }
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<div class="board">
|
||||
{$module_info->header_text}
|
||||
<div class="board_header" cond="$module_info->title_image || $grant->manager">
|
||||
<h2 cond="$module_info->title_image"><a href="{getUrl('','mid',$mid)}"><img src="{$module_info->title_image}" alt="{$module_info->title_alt}" /></a></h2>
|
||||
<a cond="$grant->manager" class="setup" href="{getUrl('act','dispBoardAdminBoardInfo')}" title="{$lang->cmd_setup}">{$lang->cmd_setup}</a>
|
||||
</div>
|
||||
<ul class="cTab" cond="$module_info->use_category=='Y'">
|
||||
<li class="on"|cond="!$category"><a href="{getUrl('category','','page','')}">{$lang->total}</a></li>
|
||||
<li loop="$cate_list=>$key,$val" class="on"|cond="$category==$val->category_srl"><a href="{getUrl(category,$val->category_srl,'document_srl','', 'page', '')}">{$val->title}<!--<em cond="$val->document_count">[{$val->document_count}]</em>--></a>
|
||||
<ul cond="count($val->children)">
|
||||
<li loop="$val->children=>$idx,$item" class="on_"|cond="$category==$item->category_srl"><a href="{getUrl(category,$item->category_srl,'document_srl','', 'page', '')}">{$item->title}<!--<em cond="$val->document_count">[{$item->document_count}]</em>--></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
105
modules/board/skins/default/_read.html
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
<div class="board_read">
|
||||
<!-- READ HEADER -->
|
||||
<div class="read_header">
|
||||
<h1>
|
||||
<a href="{getUrl('category',$oDocument->get('category_srl'), 'document_srl', '')}" class="category" cond="$module_info->use_category=='Y'">{$category_list[$oDocument->get('category_srl')]->title}</a>
|
||||
<a href="{$oDocument->getPermanentUrl()}">{$oDocument->getTitle()}</a>
|
||||
</h1>
|
||||
<p class="time">
|
||||
{$oDocument->getRegdate('Y.m.d H:i')}
|
||||
</p>
|
||||
<p class="meta">
|
||||
<a cond="$module_info->display_author!='N' && !$oDocument->getMemberSrl() && $oDocument->isExistsHomepage()" href="{$oDocument->getHomepageUrl()}" onclick="window.open(this.href);return false;" class="author">{$oDocument->getNickName()}</a>
|
||||
<block cond="$module_info->display_author!='N' && !$oDocument->getMemberSrl() && !$oDocument->isExistsHomepage()">{$oDocument->getNickName()}</block>
|
||||
<a cond="$module_info->display_author!='N' && $oDocument->getMemberSrl()" href="#popup_menu_area" class="member_{$oDocument->get('member_srl')} author" onclick="return false">{$oDocument->getNickName()}</a>
|
||||
<span class="sum">
|
||||
<span class="read">{$lang->readed_count}:{$oDocument->get('readed_count')}</span>
|
||||
<span class="vote" cond="$oDocument->get('voted_count')!=0">{$lang->cmd_vote}:{$oDocument->get('voted_count')}</span>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /READ HEADER -->
|
||||
<!-- Extra Output -->
|
||||
<div class="exOut" cond="$oDocument->isExtraVarsExists() && (!$oDocument->isSecret() || $oDocument->isGranted())">
|
||||
<table border="1" cellspacing="0" summary="Extra Form Output">
|
||||
<tr loop="$oDocument->getExtraVars() => $key,$val">
|
||||
<th scope="row">{$val->name}</th>
|
||||
<td>{$val->getValueHTML()} </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!-- /Extra Output -->
|
||||
<!-- READ BODY -->
|
||||
<div class="read_body">
|
||||
<!--@if($oDocument->isSecret() && !$oDocument->isGranted())-->
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
|
||||
<p><label for="cpw">{$lang->msg_is_secret} {$lang->msg_input_password}</label></p>
|
||||
<p><input type="password" name="password" id="cpw" class="iText" /><input type="submit" value="{$lang->cmd_input}" class="btn" />
|
||||
</p>
|
||||
</form>
|
||||
<!--@else-->
|
||||
{$oDocument->getContent(false)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!-- /READ BODY -->
|
||||
<!-- READ FOOTER -->
|
||||
<div class="read_footer">
|
||||
<div cond="$oDocument->hasUploadedFiles()" class="fileList">
|
||||
<button type="button" class="toggleFile" onclick="jQuery(this).next('ul.files').toggle();">{$lang->uploaded_file} [<strong>{$oDocument->get('uploaded_count')}</strong>]</button>
|
||||
<ul class="files">
|
||||
<li loop="$oDocument->getUploadedFiles()=>$key,$file"><a href="{getUrl('')}{$file->download_url}">{$file->source_filename} <span class="fileSize">[File Size:{FileHandler::filesize($file->file_size)}/Download:{number_format($file->download_count)}]</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tns">
|
||||
{@ $tag_list = $oDocument->get('tag_list') }
|
||||
<span class="tags" cond="count($tag_list)">
|
||||
<!--@for($i=0;$i<count($tag_list);$i++)-->
|
||||
{@ $tag = $tag_list[$i]; }
|
||||
<a href="{getUrl('search_target','tag','search_keyword',$tag,'document_srl','')}" class="tag" rel="tag">{htmlspecialchars($tag)}</a><span>,</span>
|
||||
<!--@end-->
|
||||
</span>
|
||||
<a class="document_{$oDocument->document_srl} action" href="#popup_menu_area" onclick="return false">{$lang->cmd_document_do}</a>
|
||||
<ul class="sns">
|
||||
<li class="twitter link"><a href="http://twitter.com/">Twitter</a></li>
|
||||
<li class="facebook link"><a href="http://facebook.com/">Facebook</a></li>
|
||||
<li class="delicious link"><a href="http://delicious.com/">Delicious</a></li>
|
||||
</ul>
|
||||
<script>
|
||||
var sTitle = '{str_ireplace(array('<script', '</script'), array("<scr'+'ipt", "</scr'+'ipt"), addslashes($oDocument->getTitleText()))}';
|
||||
jQuery(function($){
|
||||
$('.twitter>a').snspost({
|
||||
type : 'twitter',
|
||||
content : sTitle + ' {$oDocument->getPermanentUrl()}'
|
||||
});
|
||||
$('.facebook>a').snspost({
|
||||
type : 'facebook',
|
||||
content : sTitle
|
||||
});
|
||||
$('.delicious>a').snspost({
|
||||
type : 'delicious',
|
||||
content : sTitle
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</div>
|
||||
<div class="sign" cond="$module_info->display_sign!='N'&&($oDocument->getProfileImage()||$oDocument->getSignature())">
|
||||
<img cond="$oDocument->getProfileImage()" src="{$oDocument->getProfileImage()}" alt="Profile" class="pf" />
|
||||
<div cond="$oDocument->getSignature()" class="tx">{$oDocument->getSignature()}</div>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<a cond="$oDocument->isEditable()" class="btn" href="{getUrl('act','dispBoardWrite','document_srl',$oDocument->document_srl,'comment_srl','')}">{$lang->cmd_modify}</a>
|
||||
<a cond="$oDocument->isEditable()" class="btn" href="{getUrl('act','dispBoardDelete','document_srl',$oDocument->document_srl,'comment_srl','')}">{$lang->cmd_delete}</a>
|
||||
<span class="etc">
|
||||
<a href="{getUrl('document_srl','')}" class="btn">{$lang->cmd_list}</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /READ FOOTER -->
|
||||
</div>
|
||||
<block cond="$oDocument->allowTrackback()">
|
||||
<include target="_trackback.html" />
|
||||
</block>
|
||||
<include target="_comment.html" />
|
||||
18
modules/board/skins/default/_trackback.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<!-- TRACKBACK -->
|
||||
<div class="feedback" id="trackback">
|
||||
<div class="fbHeader">
|
||||
<h2>{$lang->trackback} <em>{$oDocument->getTrackbackCount()}</em></h2>
|
||||
<p class="trackbackURL"><a href="{$oDocument->getTrackbackUrl()}" onclick="return false;">{$oDocument->getTrackbackUrl()}</a></p>
|
||||
</div>
|
||||
<ul cond="$oDocument->getTrackbackCount()" class="fbList">
|
||||
<li class="fbItem" loop="$oDocument->getTrackbacks()=>$key,$val" id="trackback_{$val->trackback_srl}">
|
||||
<div class="fbMeta">
|
||||
<h3 class="author"><a href="{$val->url}" title="{htmlspecialchars($val->blog_name)}">{htmlspecialchars($val->blog_name)}</a></h3>
|
||||
<p class="time">{zdate($val->regdate, "Y.m.d H:i")}</p>
|
||||
</div>
|
||||
<p class="xe_content"><strong>{htmlspecialchars($val->title)}</strong> {$val->excerpt}</p>
|
||||
<p class="action" cond="$grant->manager"><a href="{getUrl('act','dispBoardDeleteTrackback','trackback_srl',$val->trackback_srl)}" class="delete">{$lang->cmd_delete}</a></p>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /TRACKBACK -->
|
||||
BIN
modules/board/skins/default/bgHeader.gif
Normal file
|
After Width: | Height: | Size: 12 KiB |
1164
modules/board/skins/default/board.default.css
Normal file
71
modules/board/skins/default/board.default.js
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
jQuery(function($) {
|
||||
// delete the border for the last row
|
||||
$('.board_list tr:last-child>td').css('border','0');
|
||||
// hide last tag
|
||||
$('.read_footer .tags span:last-child').hide();
|
||||
// display/hide serach box
|
||||
var bs = $('.board_search');
|
||||
bs.hide().addClass('off');
|
||||
$('.bsToggle').click(function() {
|
||||
if(bs.hasClass('off')) {
|
||||
bs.show().removeClass('off').find('.iText').focus();
|
||||
} else {
|
||||
bs.hide().addClass('off');
|
||||
}
|
||||
});
|
||||
// user input text blur/focus/change
|
||||
var iText = $('.item .iLabel').next('.iText');
|
||||
$('.item .iLabel').css('position','absolute');
|
||||
iText
|
||||
.focus(function() {
|
||||
$(this).prev('.iLabel').css('visibility','hidden');
|
||||
})
|
||||
.blur(function() {
|
||||
if(!$(this).val()) {
|
||||
$(this).prev('.iLabel').css('visibility','visible');
|
||||
} else {
|
||||
$(this).prev('.iLabel').css('visibility','hidden');
|
||||
}
|
||||
})
|
||||
.change(function() {
|
||||
if(!$(this).val()) {
|
||||
$(this).prev('.iLabel').css('visibility','visible');
|
||||
} else {
|
||||
$(this).prev('.iLabel').css('visibility','hidden');
|
||||
}
|
||||
})
|
||||
.blur();
|
||||
// add class to the parent category
|
||||
$('.cTab>li>ul>li.on_').parents('li:first').addClass('on');
|
||||
// delete the margin-top for the first child of the ccomments
|
||||
$('.feedback .xe_content>*:first-child').css('margin-top','0');
|
||||
});
|
||||
|
||||
// SNS post
|
||||
(function($) {
|
||||
$.fn.snspost = function(opts) {
|
||||
var loc = '';
|
||||
opts = $.extend({}, {type:'twitter', event:'click', content:''}, opts);
|
||||
opts.content = encodeURIComponent(opts.content);
|
||||
switch(opts.type) {
|
||||
case 'facebook':
|
||||
loc = 'http://www.facebook.com/share.php?t='+opts.content+'&u='+encodeURIComponent(opts.url||location.href);
|
||||
break;
|
||||
case 'delicious':
|
||||
loc = 'http://www.delicious.com/save?v=5&noui&jump=close&url='+encodeURIComponent(opts.url||location.href)+'&title='+opts.content;
|
||||
break;
|
||||
case 'twitter':
|
||||
loc = 'http://twitter.com/home?status='+opts.content;
|
||||
break;
|
||||
}
|
||||
this.bind(opts.event, function() {
|
||||
window.open(loc);
|
||||
return false;
|
||||
});
|
||||
};
|
||||
$.snspost = function(selectors, action) {
|
||||
$.each(selectors, function(key,val) {
|
||||
$(val).snspost( $.extend({}, action, {type:key}) );
|
||||
});
|
||||
};
|
||||
})(jQuery);
|
||||
1
modules/board/skins/default/board.default.min.css
vendored
Normal file
1
modules/board/skins/default/board.default.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
jQuery(function(a){a(".board_list tr:last-child>td").css("border","0"),a(".read_footer .tags span:last-child").hide();var b=a(".board_search");b.hide().addClass("off"),a(".bsToggle").click(function(){b.hasClass("off")?b.show().removeClass("off").find(".iText").focus():b.hide().addClass("off")});var c=a(".item .iLabel").next(".iText");a(".item .iLabel").css("position","absolute"),c.focus(function(){a(this).prev(".iLabel").css("visibility","hidden")}).blur(function(){a(this).val()?a(this).prev(".iLabel").css("visibility","hidden"):a(this).prev(".iLabel").css("visibility","visible")}).change(function(){a(this).val()?a(this).prev(".iLabel").css("visibility","hidden"):a(this).prev(".iLabel").css("visibility","visible")}).blur(),a(".cTab>li>ul>li.on_").parents("li:first").addClass("on"),a(".feedback .xe_content>*:first-child").css("margin-top","0")}),function(a){a.fn.snspost=function(b){var c="";switch(b=a.extend({},{type:"twitter",event:"click",content:""},b),b.content=encodeURIComponent(b.content),b.type){case"facebook":c="http://www.facebook.com/share.php?t="+b.content+"&u="+encodeURIComponent(b.url||location.href);break;case"delicious":c="http://www.delicious.com/save?v=5&noui&jump=close&url="+encodeURIComponent(b.url||location.href)+"&title="+b.content;break;case"twitter":c="http://twitter.com/home?status="+b.content}this.bind(b.event,function(){return window.open(c),!1})},a.snspost=function(b,c){a.each(b,function(b,d){a(d).snspost(a.extend({},c,{type:b}))})}}(jQuery);
|
||||
BIN
modules/board/skins/default/btnSearch.gif
Normal file
|
After Width: | Height: | Size: 994 B |
40
modules/board/skins/default/comment_form.html
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<include target="_header.html" />
|
||||
<div cond="$oSourceComment->isExists()" class="context_data">
|
||||
<h3 class="author">
|
||||
<a cond="$oSourceComment->homepage" href="{$oSourceComment->homepage}">{$oSourceComment->getNickName()}</a>
|
||||
<strong cond="!$oSourceComment->homepage">{$oSourceComment->getNickName()}</strong>
|
||||
</h3>
|
||||
{$oSourceComment->getContent(false)}
|
||||
</div>
|
||||
<div class="feedback">
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" class="write_comment">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
<input type="hidden" name="parent_srl" value="{$oComment->get('parent_srl')}" />
|
||||
<input type="hidden" name="content" value="{htmlspecialchars($oComment->get('content'))}" />
|
||||
{$oComment->getEditor()}
|
||||
<div class="write_author">
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userName" class="iLabel">{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" id="userName" class="iText userName" value="{$oComment->getNickName()}" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userPw" class="iLabel">{$lang->password}</label>
|
||||
<input type="password" name="password" id="userPw" class="iText userPw" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="homePage" class="iLabel">{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" id="homePage" class="iText homePage" value="{htmlspecialchars($oComment->get('homepage'))}" />
|
||||
</span>
|
||||
<input cond="$is_logged" type="checkbox" name="notify_message" value="Y" checked="checked"|cond="$oComment->get('notify_message')=='Y'" id="notify_message" class="iCheck" />
|
||||
<label cond="$is_logged" for="notify_message">{$lang->notify}</label>
|
||||
<input cond="$module_info->secret=='Y'" type="checkbox" name="is_secret" value="Y" id="is_secret" checked="checked"|cond="$oComment->get('is_secret')=='Y'" class="iCheck" />
|
||||
<label cond="$module_info->secret=='Y'" for="is_secret">{$lang->secret}</label>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<button type="submit" class="btn">{$lang->cmd_comment_registration}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<include target="_footer.html" />
|
||||
20
modules/board/skins/default/delete_comment_form.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<include target="_header.html" />
|
||||
<div cond="$oComment->isExists()" class="context_data">
|
||||
<h3 class="author">
|
||||
<a cond="$oComment->homepage" href="{$oComment->homepage}">{$oComment->getNickName()}</a>
|
||||
<strong cond="!$oComment->homepage">{$oComment->getNickName()}</strong>
|
||||
</h3>
|
||||
{$oComment->getContent(false)}
|
||||
</div>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_comment)" class="context_message">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$oComment->get('document_srl')}" />
|
||||
<input type="hidden" name="comment_srl" value="{$oComment->get('comment_srl')}" />
|
||||
<h1>{$lang->cmd_comment_do} {$lang->confirm_delete}</h1>
|
||||
<div class="btnArea">
|
||||
<input type="submit" class="btn" value="{$lang->cmd_delete}" />
|
||||
<button type="button" class="btn" onclick="history.back()">{$lang->cmd_cancel}</button>
|
||||
</div>
|
||||
</form>
|
||||
<include target="_footer.html" />
|
||||
18
modules/board/skins/default/delete_form.html
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<include target="_header.html" />
|
||||
<div cond="$oDocument->isExists()" class="context_data">
|
||||
<h3 class="title">{$oDocument->getTitle()}</h3>
|
||||
<p class="author">
|
||||
<strong>{$oDocument->getNickName()}</strong>
|
||||
</p>
|
||||
</div>
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_document)" class="context_message">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<h1>{$lang->cmd_document_do} {$lang->confirm_delete}</h1>
|
||||
<div class="btnArea">
|
||||
<input type="submit" class="btn" value="{$lang->cmd_delete}" />
|
||||
<button type="button" class="btn" onclick="history.back()">{$lang->cmd_cancel}</button>
|
||||
</div>
|
||||
</form>
|
||||
<include target="_footer.html" />
|
||||
13
modules/board/skins/default/delete_trackback_form.html
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<include target="_header.html" />
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_trackback)" class="context_message">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{document_srl}" />
|
||||
<input type="hidden" name="trackback_srl" value="{$trackback_srl}" />
|
||||
<h1>{$lang->confirm_delete}</h1>
|
||||
<div class="btnArea">
|
||||
<input type="submit" class="btn" value="{$lang->cmd_delete}" />
|
||||
<button type="button" class="btn" onclick="history.back()">{$lang->cmd_cancel}</button>
|
||||
</div>
|
||||
</form>
|
||||
<include target="_footer.html" />
|
||||
BIN
modules/board/skins/default/icoIndent.gif
Normal file
|
After Width: | Height: | Size: 66 B |
BIN
modules/board/skins/default/icoSet.gif
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
11
modules/board/skins/default/input_password_form.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<include target="_header.html" />
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, input_password)" class="context_message">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<h1>{$lang->msg_input_password}</h1>
|
||||
<input type="password" name="password" title="{$lang->password}" class="iText" />
|
||||
<input type="submit" class="btn" value="{$lang->cmd_input}" />
|
||||
</form>
|
||||
<include target="_footer.html" />
|
||||
145
modules/board/skins/default/list.html
Normal file
|
|
@ -0,0 +1,145 @@
|
|||
<include target="_header.html" />
|
||||
<include cond="$oDocument->isExists()" target="_read.html" />
|
||||
<div class="board_list" id="board_list">
|
||||
<table width="100%" border="1" cellspacing="0" summary="List of Articles">
|
||||
<thead>
|
||||
<!-- LIST HEADER -->
|
||||
<tr>
|
||||
<block loop="$list_config=>$key,$val">
|
||||
<th scope="col" cond="$val->type=='no' && $val->idx==-1"><span>{$lang->no}</span></th>
|
||||
<th scope="col" class="title" cond="$val->type=='title' && $val->idx==-1"><span>{$lang->title}</span></th>
|
||||
<th scope="col" cond="$val->type=='nick_name' && $val->idx==-1"><span>{$lang->writer}</span></th>
|
||||
<th scope="col" cond="$val->type=='user_id' && $val->idx==-1"><span>{$lang->user_id}</span></th>
|
||||
<th scope="col" cond="$val->type=='user_name' && $val->idx==-1"><span>{$lang->user_name}</span></th>
|
||||
<th scope="col" cond="$val->type=='regdate' && $val->idx==-1"><span><a href="{getUrl('sort_index','regdate','order_type',$order_type)}">{$lang->date}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_update' && $val->idx==-1"><span><a href="{getUrl('sort_index','last_update','order_type',$order_type)}">{$lang->last_update}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='last_post' && $val->idx==-1"><span><a href="{getUrl('sort_index','last_update','order_type',$order_type)}">{$lang->last_post}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='readed_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','readed_count','order_type',$order_type)}">{$lang->readed_count}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='voted_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','voted_count','order_type',$order_type)}">{$lang->voted_count}</a></span></th>
|
||||
<th scope="col" cond="$val->type=='blamed_count' && $val->idx==-1"><span><a href="{getUrl('sort_index','blamed_count','order_type',$order_type)}">{$lang->blamed_count}</a></span></th>
|
||||
<th scope="col" cond="$val->idx!=-1"><span><a href="{getUrl('sort_index', $val->eid, 'order_type', $order_type)}">{$val->name}</a></span></th>
|
||||
</block>
|
||||
<th scope="col" cond="$grant->manager" style="width:44px"><span><input type="checkbox" onclick="XE.checkboxToggleAll({ doClick:true });" class="iCheck" title="Check All" /></span></th>
|
||||
</tr>
|
||||
<!-- /LIST HEADER -->
|
||||
</thead>
|
||||
<tbody cond="!$document_list && !$notice_list">
|
||||
<tr>
|
||||
<td colspan="{count($list_config)}"|cond="!$grant->manager" colspan="{count($list_config)+1}"|cond="$grant->manager">
|
||||
<p style="text-align:center">{$lang->no_documents}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody cond="$document_list || $notice_list">
|
||||
<!-- NOTICE -->
|
||||
<tr class="notice" loop="$notice_list=>$no,$document">
|
||||
<block loop="$list_config=>$key,$val">
|
||||
<td class="notice" cond="$val->type=='no' && $val->idx==-1">
|
||||
<block cond="$document_srl==$document->document_srl">»</block>
|
||||
<block cond="$document_srl!=$document->document_srl">{$lang->notice}</block>
|
||||
</td>
|
||||
<td class="title" cond="$val->type=='title' && $val->idx==-1">
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle, 'cpage','')}">
|
||||
{$document->getTitle()}
|
||||
</a>
|
||||
<a cond="$document->getCommentCount()" href="{getUrl('document_srl', $document->document_srl)}#comment" class="replyNum" title="Replies">
|
||||
[{$document->getCommentCount()}]
|
||||
</a>
|
||||
<a cond="$document->getTrackbackCount()" href="{getUrl('document_srl', $document->document_srl)}#trackback" class="trackbackNum" title="Trackbacks">
|
||||
[{$document->getTrackbackCount()}]
|
||||
</a>
|
||||
</td>
|
||||
<td class="author" cond="$val->type=='nick_name' && $val->idx==-1"><a href="#popup_menu_area" class="member_{$document->get('member_srl')}" onclick="return false">{$document->getNickName()}</a></td>
|
||||
<td class="author" cond="$val->type=='user_id' && $val->idx==-1">{$document->getUserID()}</td>
|
||||
<td class="author" cond="$val->type=='user_name' && $val->idx==-1">{$document->getUserName()}</td>
|
||||
<td class="time" cond="$val->type=='regdate' && $val->idx==-1">{$document->getRegdate('Y.m.d')}</td>
|
||||
<td class="time" cond="$val->type=='last_update' && $val->idx==-1">{zdate($document->get('last_update'),'Y.m.d')}</td>
|
||||
<td class="lastReply" cond="$val->type=='last_post' && $val->idx==-1">
|
||||
<block cond="(int)($document->get('comment_count'))>0">
|
||||
<a href="{$document->getPermanentUrl()}#comment" title="Last Reply">
|
||||
{zdate($document->get('last_update'),'Y.m.d')}
|
||||
</a>
|
||||
<span cond="$document->getLastUpdater()">
|
||||
<sub>by</sub>
|
||||
{$document->getLastUpdater()}
|
||||
</span>
|
||||
</block>
|
||||
<block cond="(int)($document->get('comment_count'))==0"> </block>
|
||||
</td>
|
||||
<td class="readNum" cond="$val->type=='readed_count' && $val->idx==-1">{$document->get('readed_count')>0?$document->get('readed_count'):'0'}</td>
|
||||
<td class="voteNum" cond="$val->type=='voted_count' && $val->idx==-1">{$document->get('voted_count')!=0?$document->get('voted_count'):'0'}</td>
|
||||
<td class="voteNum" cond="$val->type=='blamed_count' && $val->idx==-1">{$document->get('blamed_count')!=0?$document->get('blamed_count'):'0'}</td>
|
||||
<td cond="$val->idx!=-1">{$document->getExtraValueHTML($val->idx)} </td>
|
||||
</block>
|
||||
<td cond="$grant->manager" class="check"><input type="checkbox" name="cart" value="{$document->document_srl}" class="iCheck" title="Check This Article" onclick="doAddDocumentCart(this)" checked="checked"|cond="$document->isCarted()" /></td>
|
||||
</tr>
|
||||
<!-- /NOTICE -->
|
||||
<!-- LIST -->
|
||||
<tr loop="$document_list=>$no,$document">
|
||||
<block loop="$list_config=>$key,$val">
|
||||
<td class="no" cond="$val->type=='no' && $val->idx==-1">
|
||||
<block cond="$document_srl==$document->document_srl">»</block>
|
||||
<block cond="$document_srl!=$document->document_srl">{$no}</block>
|
||||
</td>
|
||||
<td class="title" cond="$val->type=='title' && $val->idx==-1">
|
||||
<a href="{getUrl('document_srl',$document->document_srl, 'listStyle', $listStyle, 'cpage','')}">{$document->getTitle()}</a>
|
||||
<a cond="$document->getCommentCount()" href="{getUrl('document_srl', $document->document_srl)}#comment" class="replyNum" title="Replies">[{$document->getCommentCount()}]</a>
|
||||
<a cond="$document->getTrackbackCount()" href="{getUrl('document_srl', $document->document_srl)}#trackback" class="trackbackNum" title="Trackbacks">[{$document->getTrackbackCount()}]</a>
|
||||
{$document->printExtraImages(60*60*$module_info->duration_new)}
|
||||
</td>
|
||||
<td class="author" cond="$val->type=='nick_name' && $val->idx==-1"><a href="#popup_menu_area" class="member_{$document->get('member_srl')}" onclick="return false">{$document->getNickName()}</a></td>
|
||||
<td class="author" cond="$val->type=='user_id' && $val->idx==-1">{$document->getUserID()}</td>
|
||||
<td class="author" cond="$val->type=='user_name' && $val->idx==-1">{$document->getUserName()}</td>
|
||||
<td class="time" cond="$val->type=='regdate' && $val->idx==-1">{$document->getRegdate('Y.m.d')}</td>
|
||||
<td class="time" cond="$val->type=='last_update' && $val->idx==-1">{zdate($document->get('last_update'),'Y.m.d')}</td>
|
||||
<td class="lastReply" cond="$val->type=='last_post' && $val->idx==-1">
|
||||
<block cond="(int)($document->get('comment_count'))>0">
|
||||
<a href="{$document->getPermanentUrl()}#comment" title="Last Reply">
|
||||
{zdate($document->get('last_update'),'Y.m.d')}
|
||||
</a>
|
||||
<span cond="$document->getLastUpdater()">
|
||||
<sub>by</sub>
|
||||
{$document->getLastUpdater()}
|
||||
</span>
|
||||
</block>
|
||||
<block cond="(int)($document->get('comment_count'))==0"> </block>
|
||||
</td>
|
||||
<td class="readNum" cond="$val->type=='readed_count' && $val->idx==-1">{$document->get('readed_count')>0?$document->get('readed_count'):'0'}</td>
|
||||
<td class="voteNum" cond="$val->type=='voted_count' && $val->idx==-1">{$document->get('voted_count')!=0?$document->get('voted_count'):'0'}</td>
|
||||
<td class="voteNum" cond="$val->type=='blamed_count' && $val->idx==-1">{$document->get('blamed_count')!=0?$document->get('blamed_count'):'0'}</td>
|
||||
<td cond="$val->idx!=-1">{$document->getExtraValueHTML($val->idx)} </td>
|
||||
</block>
|
||||
<td cond="$grant->manager" class="check"><input type="checkbox" name="cart" value="{$document->document_srl}" class="iCheck" title="Check This Article" onclick="doAddDocumentCart(this)" checked="checked"|cond="$document->isCarted()" /></td>
|
||||
</tr>
|
||||
<!-- /LIST -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="list_footer">
|
||||
<div class="pagination" cond="$document_list || $notice_list">
|
||||
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="direction prev"><span></span><span></span> {$lang->first_page}</a>
|
||||
<block loop="$page_no=$page_navigation->getNextPage()">
|
||||
<strong cond="$page==$page_no">{$page_no}</strong>
|
||||
<a cond="$page!=$page_no" href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}">{$page_no}</a>
|
||||
</block>
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="direction next">{$lang->last_page} <span></span><span></span></a>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<a href="{getUrl('act','dispBoardWrite','document_srl','')}" class="btn">{$lang->cmd_write}</a>
|
||||
<a cond="$grant->manager" href="{getUrl('','module','document','act','dispDocumentManageDocument')}" class="btn" onclick="popopen(this.href,'manageDocument'); return false;">{$lang->cmd_manage_document}</a>
|
||||
</div>
|
||||
<button type="button" class="bsToggle" title="{$lang->cmd_search}">{$lang->cmd_search}</button>
|
||||
<form cond="$grant->view" action="{getUrl()}" method="get" onsubmit="return procFilter(this, search)" id="board_search" class="board_search" no-error-return-url="true">
|
||||
<input type="hidden" name="vid" value="{$vid}" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="category" value="{$category}" />
|
||||
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" title="{$lang->cmd_search}" class="iText" />
|
||||
<select name="search_target">
|
||||
<option loop="$search_option=>$key,$val" value="{$key}" selected="selected"|cond="$search_target==$key">{$val}</option>
|
||||
</select>
|
||||
<button type="submit" class="btn" onclick="xGetElementById('board_search').submit();return false;">{$lang->cmd_search}</button>
|
||||
<a cond="$last_division" href="{getUrl('page',1,'document_srl','','division',$last_division,'last_division','')}" class="btn">{$lang->cmd_search_next}</a>
|
||||
</form>
|
||||
<a href="{getUrl('act','dispBoardTagList')}" class="tagSearch" title="{$lang->tag}">{$lang->tag}</a>
|
||||
</div>
|
||||
<include target="_footer.html" />
|
||||
9
modules/board/skins/default/message.html
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
<include target="_header.html" />
|
||||
<div class="context_message">
|
||||
<h1>{$message}</h1>
|
||||
<div class="btnArea">
|
||||
<a cond="!$is_logged" class="btn" href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
|
||||
<button type="button" class="btn" onclick="history.back()">{$lang->cmd_back}</button>
|
||||
</div>
|
||||
</div>
|
||||
<include target="_footer.html" />
|
||||
BIN
modules/board/skins/default/profile.gif
Normal file
|
After Width: | Height: | Size: 516 B |
22
modules/board/skins/default/skin.xml
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<skin version="0.2">
|
||||
<title xml:lang="ko">XE Default</title>
|
||||
<description xml:lang="ko">XE 기본 게시판.</description>
|
||||
<version>1.0</version>
|
||||
<date>2010-12-24</date>
|
||||
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
|
||||
<name xml:lang="ko">NHN</name>
|
||||
</author>
|
||||
<license>LGPL v2</license>
|
||||
<extra_vars>
|
||||
<var name="title_image" type="image">
|
||||
<title xml:lang="ko">게시판 제목 이미지</title>
|
||||
<description xml:lang="ko">작성하면 화면에 표시 됨</description>
|
||||
</var>
|
||||
<var name="title_alt" type="text">
|
||||
<title xml:lang="ko">게시판 제목 이미지 alt</title>
|
||||
<description xml:lang="ko">게시판 제목 이미지 대체 텍스트</description>
|
||||
</var>
|
||||
</extra_vars>
|
||||
</skin>
|
||||
|
||||
27
modules/board/skins/default/tag_list.html
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<include target="_header.html" />
|
||||
<div class="tagList">
|
||||
<!--@foreach($tag_list as $val)-->
|
||||
<!--@if($val->count>5)-->
|
||||
{@ $tag_class = "rank1" }
|
||||
<!--@elseif($val->count>3)-->
|
||||
{@ $tag_class = "rank2" }
|
||||
<!--@elseif($val->count>2)-->
|
||||
{@ $tag_class = "rank3" }
|
||||
<!--@elseif($val->count>1)-->
|
||||
{@ $tag_class = "rank4" }
|
||||
<!--@else-->
|
||||
{@ $tag_class = "rank5" }
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($layout_info->mid)-->
|
||||
<a class="{$tag_class}"|cond="$tag_class" href="{getUrl('','mid',$layout_info->mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
|
||||
<!--@else-->
|
||||
<a class="{$tag_class}"|cond="$tag_class" href="{getUrl('','mid',$mid,'search_target','tag','search_keyword',$val->tag)}">{htmlspecialchars($val->tag)}</a>
|
||||
<!--@end-->
|
||||
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div class="tagFooter">
|
||||
<a href="{getUrl('act','')}" class="btn">{$lang->cmd_back}</a>
|
||||
</div>
|
||||
<include target="_footer.html" />
|
||||
BIN
modules/board/skins/default/thumbnail.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
80
modules/board/skins/default/write_form.html
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<include target="_header.html" />
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, window.insert)" class="board_write">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="content" value="{$oDocument->getContentText()}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl}" />
|
||||
<div class="write_header">
|
||||
<select name="category_srl" cond="$module_info->use_category=='Y'">
|
||||
<option value="">{$lang->category}</option>
|
||||
<option loop="$category_list => $val" disabled="disabled"|cond="!$val->grant" value="{$val->category_srl}" selected="selected"|cond="$val->grant&&$val->selected||$val->category_srl==$oDocument->get('category_srl')">
|
||||
{str_repeat(" ",$val->depth)} {$val->title} ({$val->document_count})
|
||||
</option>
|
||||
</select>
|
||||
<input cond="$oDocument->getTitleText()" type="text" name="title" class="iText" title="{$lang->title}" value="{htmlspecialchars($oDocument->getTitleText())}" />
|
||||
<input cond="!$oDocument->getTitleText()" type="text" name="title" class="iText" title="{$lang->title}" />
|
||||
<input cond="$grant->manager" type="checkbox" name="is_notice" value="Y" class="iCheck" checked="checked"|cond="$oDocument->isNotice()" id="is_notice" />
|
||||
<label cond="$grant->manager" for="is_notice">{$lang->notice}</label>
|
||||
</div>
|
||||
<div class="exForm" cond="count($extra_keys)">
|
||||
<table cond="count($extra_keys)" border="1" cellspacing="0" summary="Extra Form">
|
||||
<caption><em>*</em> : {$lang->is_required}</caption>
|
||||
<tr loop="$extra_keys=>$key,$val">
|
||||
<th scope="row"><em cond="$val->is_required=='Y'">*</em> {$val->name}</th>
|
||||
<td>{$val->getFormHTML()}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="write_editor">
|
||||
{$oDocument->getEditor()}
|
||||
</div>
|
||||
<div class="write_footer">
|
||||
<div class="write_option">
|
||||
<block cond="$grant->manager">
|
||||
<input type="checkbox" name="title_bold" id="title_bold" class="iCheck" value="Y" checked="checked"|cond="$oDocument->get('title_bold')=='Y'" />
|
||||
<label for="title_bold">{$lang->title_bold}</label>
|
||||
</block>
|
||||
<input cond="$module_info->secret=='Y'" type="checkbox" name="is_secret" class="iCheck" value="Y" checked="checked"|cond="$oDocument->isSecret()" id="is_secret" />
|
||||
<label cond="$module_info->secret=='Y'" for="is_secret">{$lang->secret}</label>
|
||||
<input type="checkbox" name="comment_status" class="iCheck" value="ALLOW" checked="checked"|cond="$oDocument->allowComment()" id="comment_status" />
|
||||
<label for="comment_status">{$lang->allow_comment}</label>
|
||||
<input type="checkbox" name="allow_trackback" class="iCheck" value="Y" checked="checked"|cond="$oDocument->allowTrackback()" id="allow_trackback" />
|
||||
<label for="allow_trackback">{$lang->allow_trackback}</label>
|
||||
<block cond="$is_logged">
|
||||
<input type="checkbox" name="notify_message" class="iCheck" value="Y" checked="checked"|cond="$oDocument->useNotify()" id="notify_message" />
|
||||
<label for="notify_message">{$lang->notify}</label>
|
||||
</block>
|
||||
<!--@if(is_array($status_list))-->
|
||||
<!--@foreach($status_list AS $key=>$value)-->
|
||||
<input type="radio" name="status" value="{$key}" id="{$key}" <!--@if($oDocument->get('status') == $key || ($key == 'PUBLIC' && !$document_srl))-->checked="checked"<!--@end--> />
|
||||
<label for="{$key}">{$value}</label>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
</div>
|
||||
<div class="write_author">
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userName" class="iLabel">{$lang->writer}</label>
|
||||
<input type="text" name="nick_name" id="userName" class="iText userName" style="width:80px" value="{htmlspecialchars($oDocument->get('nick_name'))}" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="userPw" class="iLabel">{$lang->password}</label>
|
||||
<input type="password" name="password" id="userPw" class="iText userPw" style="width:80px" />
|
||||
</span>
|
||||
<span class="item" cond="!$is_logged">
|
||||
<label for="homePage" class="iLabel">{$lang->homepage}</label>
|
||||
<input type="text" name="homepage" id="homePage" class="iText homePage" style="width:140px"value="{htmlspecialchars($oDocument->get('homepage'))}" />
|
||||
</span>
|
||||
<span class="item">
|
||||
<label for="tags" class="iLabel">{$lang->tag}: {$lang->about_tag}</label>
|
||||
<input type="text" name="tags" id="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="iText" style="width:300px" title="Tag" />
|
||||
</span>
|
||||
</div>
|
||||
<div class="btnArea">
|
||||
<input type="submit" value="{$lang->cmd_registration}" class="btn" />
|
||||
<block cond="!$oDocument->isExists() || $oDocument->get('status') == 'TEMP'">
|
||||
<button cond="$is_logged" class="btn" type="button" onclick="doDocumentSave(this);">{$lang->cmd_temp_save}</button>
|
||||
<button cond="$is_logged" class="btn" type="button" onclick="doDocumentLoad(this);">{$lang->cmd_load}</button>
|
||||
</block>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<include target="_footer.html" />
|
||||
6
modules/board/tpl/addition_setup.html
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<include target="./header.html" />
|
||||
<!--// no use validator id. -->
|
||||
<div cond="$XE_VALIDATOR_MESSAGE" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
{$setup_content}
|
||||
20
modules/board/tpl/board_delete.html
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<load target="filter/delete_board.xml" />
|
||||
<load target="js/board_admin.js" />
|
||||
<include target="header.html" />
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_board)" class="section">
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
<h1>{$lang->confirm_delete}</h1>
|
||||
<dl class="x_dl-horizontal">
|
||||
<dt>{$lang->module_name}</dt>
|
||||
<dd>{$module_info->mid}</dd>
|
||||
<dt>{$lang->module}</dt>
|
||||
<dd>{$module_info->module}</dd>
|
||||
<dt>{$lang->document_count}</dt>
|
||||
<dd>{$module_info->document_count}</dd>
|
||||
</dl>
|
||||
<div class="btnArea">
|
||||
<a href="{getUrl('act','dispBoardAdminContent')}" class="x_btn x_pull-left">{$lang->cmd_back}</a>
|
||||
<span><input class="x_btn x_btn-danger" type="submit" value="{$lang->cmd_delete}" /></span>
|
||||
</div>
|
||||
</form>
|
||||
234
modules/board/tpl/board_insert.html
Normal file
|
|
@ -0,0 +1,234 @@
|
|||
<include target="header.html" />
|
||||
<load target="../../module/tpl/js/multi_order.js" />
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/board/tpl/board_insert/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
<form ruleset="insertBoard" class="x_form-horizontal" action="./" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="module" value="board" />
|
||||
<input type="hidden" name="act" value="procBoardAdminInsertBoard" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
<input cond="$mid || $module_srl" type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
|
||||
<input cond="$logged_info->is_admin != 'Y'" type="hidden" name="board_name" value="{$module_info->mid}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/board/tpl/board_insert/1" />
|
||||
<section class="section">
|
||||
<h1>{$lang->subtitle_primary}</h1>
|
||||
<div cond="$logged_info->is_admin == 'Y'" class="x_control-group">
|
||||
<label class="x_control-label" for="board_name">{$lang->mid}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="board_name" id="board_name" value="{$module_info->mid}" />
|
||||
<a href="#module_name_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="module_name_help" class="x_help-block" hidden>{$lang->about_mid}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="lang_browser_title">{$lang->browser_title}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="browser_title" id="browser_title" value="<!--@if(strpos($module_info->browser_title, '$user_lang->') === false)-->{$module_info->browser_title}<!--@else-->{htmlspecialchars($module_info->browser_title)}<!--@end-->" class="lang_code" />
|
||||
<a href="#browser_title_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="browser_title_help" class="x_help-block" hidden>{$lang->about_browser_title}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="layout_srl">{$lang->layout}</label>
|
||||
<div class="x_controls">
|
||||
<select name="layout_srl" id="layout_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$layout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->layout_srl== $val->layout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
<a href="#layout_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="layout_help" class="x_help-block" hidden>{$lang->about_layout}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="skin">{$lang->skin}</label>
|
||||
<div class="x_controls">
|
||||
<select name="skin" id="skin" style="width:auto">
|
||||
<option loop="$skin_list=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->skin== $key || (!$module_info->skin && $key=='default')">{$val->title}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="lang_header_text">{$lang->header_text}</label>
|
||||
<div class="x_controls">
|
||||
<textarea name="header_text" id="header_text" class="lang_code" rows="8" cols="42" placeholder="{$lang->about_header_text}"><!--@if(strpos($module_info->header_text, '$user_lang->') === false)-->{$module_info->header_text}<!--@else-->{htmlspecialchars($module_info->header_text)}<!--@end--></textarea>
|
||||
<a href="#header_text_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="header_text_help" class="x_help-block" hidden>{$lang->about_header_text}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="lang_footer_text">{$lang->footer_text}</label>
|
||||
<div class="x_controls">
|
||||
<textarea name="footer_text" id="footer_text" class="lang_code" rows="8" cols="42" placeholder="{$lang->about_footer_text}"><!--@if(strpos($module_info->footer_text, '$user_lang->') === false)-->{$module_info->footer_text}<!--@else-->{htmlspecialchars($module_info->footer_text)}<!--@end--></textarea>
|
||||
<a href="#footer_text_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="footer_text_help" class="x_help-block" hidden>{$lang->about_footer_text}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section">
|
||||
<h1>{$lang->mobile_settings}</h1>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->mobile_view}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="use_mobile"><input type="checkbox" name="use_mobile" id="use_mobile" value="Y" checked="checked"|cond="$module_info->use_mobile == 'Y'" /> {$lang->about_mobile_view}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="mlayout_srl">{$lang->mobile_layout}</label>
|
||||
<div class="x_controls">
|
||||
<select name="mlayout_srl" id="mlayout_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$mlayout_list => $key, $val" value="{$val->layout_srl}" selected="selected"|cond="$module_info->mlayout_srl== $val->layout_srl">{$val->title} ({$val->layout})</option>
|
||||
</select>
|
||||
<a href="#mobile_layout_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="mobile_layout_help" class="x_help-block" hidden>{$lang->about_layout}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="mskin">{$lang->mobile_skin}</label>
|
||||
<div class="x_controls">
|
||||
<select name="mskin" id="mskin">
|
||||
<option loop="$mskin_list=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->mskin== $key || (!$module_info->skin && $key=='default')">{$val->title}</option>
|
||||
</select>
|
||||
<a href="#mobile_skin_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="mobile_skin_help" class="x_help-block" hidden>{$lang->about_skin}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<section class="section collapsed">
|
||||
<h1>{$lang->subtitle_advanced}</h1>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->cmd_list_setting}</label>
|
||||
<div class="x_controls">
|
||||
{@$list = array_keys($list_config)}
|
||||
<input type="hidden" name="list" value="{implode(',', $list)}" />
|
||||
<p style="padding:3px 0 0 0">{$lang->about_list_config}</p>
|
||||
<div style="display:inline-block">
|
||||
<select class="multiorder_show" size="8" multiple="multiple" style="width:220px;vertical-align:top;margin-bottom:8px">
|
||||
<option loop="$extra_vars => $key, $val" cond="!$list_config[$key]" value="{$key}">{$val->name}</option>
|
||||
</select><br />
|
||||
<button type="button" class="x_btn multiorder_add" style="vertical-align:top">{$lang->cmd_insert}</button>
|
||||
</div>
|
||||
<div style="display:inline-block">
|
||||
<select class="multiorder_selected" size="8" multiple="multiple" style="width:220px;vertical-align:top;margin-bottom:8px">
|
||||
<option loop="$list_config => $key, $val" value="{$key}">{$val->name}</option>
|
||||
</select><br />
|
||||
<span class="x_btn-group">
|
||||
<button type="button" class="x_btn multiorder_up" style="vertical-align:top">{$lang->cmd_move_up}</button>
|
||||
<button type="button" class="x_btn multiorder_down" style="vertical-align:top">{$lang->cmd_move_down}</button>
|
||||
<button type="button" class="x_btn multiorder_del" style="vertical-align:top">{$lang->cmd_delete}</button>
|
||||
</span>
|
||||
</div>
|
||||
<script>
|
||||
xe.registerApp(new xe.MultiOrderManager('list'));
|
||||
</script>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->order_type}</label>
|
||||
<div class="x_controls">
|
||||
<select name="order_target" id="order_target" title="{$lang->order_target}">
|
||||
<option loop="$order_target=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->order_target== $key">{$val}</option>
|
||||
</select>
|
||||
<select name="order_type" id="order_type" title="{$lang->order_type}">
|
||||
<option value="asc" selected="selected"|cond="$module_info->order_type != 'desc'">{$lang->order_asc}</option>
|
||||
<option value="desc" selected="selected"|cond="$module_info->order_type == 'desc'">{$lang->order_desc}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="list_count">{$lang->list_count}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="list_count" id="list_count" value="{$module_info->list_count?$module_info->list_count:20}" style="width:30px" />
|
||||
<p class="x_help-inline">{$lang->about_list_count}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="search_list_count">{$lang->search_list_count}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="search_list_count" id="search_list_count" value="{$module_info->search_list_count?$module_info->search_list_count:20}" style="width:30px" />
|
||||
<p class="x_help-inline">{$lang->about_search_list_count}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="page_count">{$lang->page_count}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="page_count" id="page_count" value="{$module_info->page_count?$module_info->page_count:10}" style="width:30px" />
|
||||
<p class="x_help-inline">{$lang->about_page_count}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->except_notice}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="except_notice"><input type="checkbox" name="except_notice" id="except_notice" value="Y" checked="checked"|cond="$module_info->except_notice != 'N'" /> {$lang->about_except_notice}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->use_anonymous}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="use_anonymous"><input type="checkbox" name="use_anonymous" id="use_anonymous" value="Y" checked="checked"|cond="$module_info->use_anonymous == 'Y'" /> {$lang->about_use_anonymous}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->consultation}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="consultation"><input type="checkbox" name="consultation" id="consultation" value="Y" checked="checked"|cond="$module_info->consultation == 'Y'" /> {$lang->about_consultation}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->protect_content}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="protect_content"><input type="checkbox" name="protect_content" id="protect_content" value="Y" checked="checked"|cond="$module_info->protect_content == 'Y'" /> {$lang->about_protect_content}</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->status}</label>
|
||||
<div class="x_controls">
|
||||
<input type="hidden" name="use_status[]" value="PUBLIC" />
|
||||
<label class="x_inline"><input type="checkbox" name="" value="" checked="checked" disabled="disabled" /> {$document_status_list['PUBLIC']}</label>
|
||||
<block loop="$document_status_list => $key, $value">
|
||||
<block cond="$key != 'PRIVATE' && $key != 'TEMP' && $key != 'PUBLIC'">
|
||||
<label class="x_inline" for="{$key}"><input type="checkbox" name="use_status[]" id="{$key}" value="{$key}" checked="checked"|cond="@in_array($key, $module_info->use_status) || ($key == 'PUBLIC' && !$module_srl)" /> {$value}</label>
|
||||
</block>
|
||||
</block>
|
||||
<p class="x_help-block">{$lang->about_use_status}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="admin_mail">{$lang->admin_mail}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="admin_mail" id="admin_mail" value="{$module_info->admin_mail}" />
|
||||
<a href="#admin_mail_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="admin_mail_help" class="x_help-block" hidden>{$lang->about_admin_mail}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="module_category_srl">{$lang->module_category}</label>
|
||||
<div class="x_controls">
|
||||
<select name="module_category_srl" id="module_category_srl">
|
||||
<option value="0">{$lang->notuse}</option>
|
||||
<option loop="$module_category => $key, $val" value="{$key}" selected="selected"|cond="$module_info->module_category_srl == $key">{$val->title}</option>
|
||||
</select>
|
||||
<a href="#module_category_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="module_category_help" class="x_help-block" hidden>{$lang->about_module_category}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="description">{$lang->description}</label>
|
||||
<div class="x_controls">
|
||||
<textarea name="description" id="description" rows="4" cols="42" placeholder="{$lang->about_description}" style="vertical-align:top">{htmlspecialchars($module_info->description)}</textarea>
|
||||
<a href="#description_help" class="x_icon-question-sign" data-toggle>{$lang->help}</a>
|
||||
<p id="description_help" class="x_help-block" hidden>{$lang->about_description}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="x_clearfix btnArea">
|
||||
<div class="x_pull-left">
|
||||
<a href="{getUrl('act', 'dispBoardAdminContent')}" type="button" class="x_btn">{$lang->cmd_cancel}</a>
|
||||
</div>
|
||||
<div class="x_pull-right">
|
||||
<button class="x_btn x_btn-primary" type="submit">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<style>.g11n{vertical-align:top !important}</style>
|
||||
84
modules/board/tpl/board_setup_basic.html
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
<script src="modules/board/tpl/js/board_admin.js"></script>
|
||||
<script src="modules/module/tpl/js/module_admin.js"></script>
|
||||
<script>
|
||||
</script>
|
||||
<form ruleset="insertBoardForBasic" id="fo_obj" class="x_form-horizontal" action="./" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="act" value="procBoardAdminUpdateBoardFroBasic" />
|
||||
<input type="hidden" name="board_name" value="{$module_info->mid}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
<input type="hidden" name="admin_member" value="<!--@foreach($admin_member as $key => $val)--><!--@if($member_config->identifier == 'email_address')-->{$val->email_address},<!--@else-->{$val->user_id},<!--@end--><!--@end-->" />
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="lang_header_text">{$lang->header_text}</label>
|
||||
<div class="x_controls">
|
||||
<textarea name="header_text" id="header_text" class="lang_code" rows="8" cols="42" placeholder="{$lang->about_header_text}">{htmlspecialchars($module_info->header_text)}</textarea>
|
||||
<a href="#header_text_help" class="x_icon-question-sign" data-toggle style="vertical-align:top;margin-top:6px">{$lang->help}</a>
|
||||
<p id="header_text_help" class="x_help-block" hidden>{$lang->about_header_text}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="lang_footer_text">{$lang->footer_text}</label>
|
||||
<div class="x_controls">
|
||||
<textarea name="footer_text" id="footer_text" class="lang_code" rows="8" cols="42" placeholder="{$lang->about_footer_text}">{htmlspecialchars($module_info->footer_text)}</textarea>
|
||||
<a href="#footer_text_help" class="x_icon-question-sign" data-toggle style="vertical-align:top;margin-top:6px">{$lang->help}</a>
|
||||
<p id="footer_text_help" class="x_help-block" hidden>{$lang->about_footer_text}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->order_type}</label>
|
||||
<div class="x_controls">
|
||||
<select name="order_target" id="order_target" title="{$lang->order_target}">
|
||||
<option loop="$order_target=> $key, $val" value="{$key}" selected="selected"|cond="$module_info->order_target== $key">{$val}</option>
|
||||
</select>
|
||||
<select name="order_type" id="order_type" title="{$lang->order_type}">
|
||||
<option value="asc" selected="selected"|cond="$module_info->order_type != 'desc'">{$lang->order_asc}</option>
|
||||
<option value="desc" selected="selected"|cond="$module_info->order_type == 'desc'">{$lang->order_desc}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" for="list_count">{$lang->list_count}</label>
|
||||
<div class="x_controls">
|
||||
<input type="text" name="list_count" id="list_count" value="{$module_info->list_count?$module_info->list_count:20}" style="width:30px" />
|
||||
<p class="x_help-inline">{$lang->about_list_count}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->status}</label>
|
||||
<div class="x_controls">
|
||||
<input type="hidden" name="use_status[]" value="PUBLIC" />
|
||||
<label class="x_inline"><input type="checkbox" name="" value="" checked="checked" disabled="disabled" /> {$document_status_list['PUBLIC']}</label>
|
||||
<block loop="$document_status_list => $key, $value">
|
||||
<block cond="$key != 'PRIVATE' && $key != 'TEMP' && $key != 'PUBLIC'">
|
||||
<label class="x_inline" for="{$key}"><input type="checkbox" name="use_status[]" id="{$key}" value="{$key}" checked="checked"|cond="@in_array($key, $module_info->use_status) || ($key == 'PUBLIC' && !$module_srl)" /> {$value}</label>
|
||||
</block>
|
||||
</block>
|
||||
<p class="x_help-block">{$lang->about_use_status}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label" cond="$member_config->identifier == 'email_address'">
|
||||
{$lang->admin_email_address}
|
||||
</label>
|
||||
<label class="x_control-label" cond="$member_config->identifier != 'email_address'">
|
||||
{$lang->admin_id}
|
||||
</label>
|
||||
<div class="x_controls">
|
||||
<div class="x_input-append" style="margin-bottom:8px">
|
||||
<select name="_admin_member" multiple="multiple" size="{count($admin_member)?count($admin_member):1}">
|
||||
<option loop="$admin_member => $key, $val" value="{$val->email_address}"|cond="$member_config->identifier=='email_address'" value="{$val->user_id}"|cond="$member_config->identifier!='email_address'">
|
||||
{$val->nick_name} (<block cond="$member_config->identifier=='email_address'">{$val->email_address}</block><block cond="$member_config->identifier!='email_address'">{$val->user_id}</block>)
|
||||
</option>
|
||||
</select>
|
||||
<button class="x_btn" type="button" onclick="doDeleteAdmin()">{$lang->cmd_delete}</button>
|
||||
</div>
|
||||
<br>
|
||||
<div class="x_input-append">
|
||||
<input type="text" name="admin_id" />
|
||||
<button class="x_btn" type="button" onclick="doInsertAdmin()">{$lang->cmd_insert}</button>
|
||||
</div>
|
||||
<a href="#adminListHelp" class="x_icon-question-sign">{$lang->help}</a>
|
||||
<span id="adminListHelp" hidden>{$lang->about_admin_id}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p style="text-align:right;border-top:1px dotted #ddd;padding:10px 0"><a href="{$setupUrl}" style="text-decoration:underline">{$lang->advanced_settings}</a></p>
|
||||
</form>
|
||||
28
modules/board/tpl/category_list.html
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
<include target="./header.html" />
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == 'modules/board/tpl/category_list/1'" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
{$category_content}
|
||||
<form class="x_form-horizontal" action="./" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="module" value="board" />
|
||||
<input type="hidden" name="act" value="procBoardAdminSaveCategorySettings" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
<input type="hidden" name="success_return_url" value="{getRequestUriByServerEnviroment()}" />
|
||||
<input type="hidden" name="mid" value="{$module_info->mid}" />
|
||||
<input type="hidden" name="xe_validator_id" value="modules/board/tpl/category_list/1" />
|
||||
<section class="section">
|
||||
<h1>{$lang->category_settings}</h1>
|
||||
<div class="x_control-group">
|
||||
<label class="x_control-label">{$lang->hide_category}</label>
|
||||
<div class="x_controls">
|
||||
<label class="x_inline" for="hide_category"><input type="checkbox" name="hide_category" id="hide_category" value="Y" checked="checked"|cond="$module_info->hide_category == 'Y'" /> {$lang->about_hide_category}</label>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div class="x_clearfix btnArea">
|
||||
<div class="x_pull-right">
|
||||
<button class="x_btn x_btn-primary" type="submit">{$lang->cmd_registration}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
2
modules/board/tpl/extra_vars.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<include target="./header.html" />
|
||||
{$extra_vars_content}
|
||||
10
modules/board/tpl/filter/delete_board.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<filter name="delete_board" module="board" act="procBoardAdminDeleteBoard">
|
||||
<form>
|
||||
<node target="module_srl" required="true" />
|
||||
</form>
|
||||
<response callback_func="completeDeleteBoard">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
18
modules/board/tpl/filter/delete_comment.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="delete_comment" module="board" act="procBoardDeleteComment">
|
||||
<form>
|
||||
<node target="comment_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteComment">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
16
modules/board/tpl/filter/delete_document.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<filter name="delete_document" module="board" act="procBoardDeleteDocument">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteDocument">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
18
modules/board/tpl/filter/delete_trackback.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="delete_trackback" module="board" act="procBoardDeleteTrackback">
|
||||
<form>
|
||||
<node target="trackback_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="page" target="page" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="trackback_srl" target="trackback_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeDeleteTrackback">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
16
modules/board/tpl/filter/input_password.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<filter name="input_password" module="board" act="procBoardVerificationPassword" >
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="password" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
<param name="password" target="password" />
|
||||
</parameter>
|
||||
<response>
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
18
modules/board/tpl/filter/insert.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="insert" module="board" act="procBoardInsertDocument">
|
||||
<form>
|
||||
<node target="nick_name" required="true" maxlength="20"/>
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" filter="email" />
|
||||
<node target="homepage" maxlength="250" filter="url" />
|
||||
<node target="title" required="true" minlength="1" maxlength="250" />
|
||||
<node target="content" required="true" />
|
||||
<node target="category_srl" required="true" />
|
||||
</form>
|
||||
<response callback_func="completeDocumentInserted">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="category_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
40
modules/board/tpl/filter/insert_board.xml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<filter name="insert_board" module="board" act="procBoardAdminInsertBoard" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="mid" required="true" maxlength="40" filter="alpha_number" />
|
||||
<node target="browser_title" required="true" maxlength="250" />
|
||||
<node target="list_count" required="true" filter="number" />
|
||||
<node target="search_list_count" required="true" filter="number" />
|
||||
<node target="page_count" required="true" filter="number" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="board_name" target="mid" />
|
||||
<param name="module_srl" target="module_srl" />
|
||||
<param name="module_category_srl" target="module_category_srl" />
|
||||
<param name="layout_srl" target="layout_srl" />
|
||||
<param name="skin" target="skin" />
|
||||
<param name="browser_title" target="browser_title" />
|
||||
<param name="use_category" target="use_category" />
|
||||
<param name="order_target" target="order_target" />
|
||||
<param name="order_type" target="order_type" />
|
||||
<param name="list_count" target="list_count" />
|
||||
<param name="search_list_count" target="search_list_count" />
|
||||
<param name="except_notice" target="except_notice" />
|
||||
<param name="use_anonymous" target="use_anonymous" />
|
||||
<param name="consultation" target="consultation" />
|
||||
<param name="secret" target="secret" />
|
||||
<param name="admin_mail" target="admin_mail" />
|
||||
<param name="page_count" target="page_count" />
|
||||
<param name="is_default" target="is_default" />
|
||||
<param name="description" target="description" />
|
||||
<param name="header_text" target="header_text" />
|
||||
<param name="footer_text" target="footer_text" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertBoard">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="module" />
|
||||
<tag name="act" />
|
||||
<tag name="page" />
|
||||
<tag name="module_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
30
modules/board/tpl/filter/insert_comment.xml
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
<filter name="insert_comment" module="board" act="procBoardInsertComment">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="nick_name" required="true" maxlength="20"/>
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" filter="email" />
|
||||
<node target="homepage" maxlength="250" filter="url" />
|
||||
<node target="content" required="true" minlength="1" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
<param name="comment_srl" target="comment_srl" />
|
||||
<param name="parent_srl" target="parent_srl" />
|
||||
<param name="nick_name" target="nick_name" />
|
||||
<param name="password" target="password" />
|
||||
<param name="email_address" target="email_address" />
|
||||
<param name="homepage" target="homepage" />
|
||||
<param name="content" target="content" />
|
||||
<param name="is_secret" target="is_secret" />
|
||||
<param name="notify_message" target="notify_message" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertComment">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="comment_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
7
modules/board/tpl/filter/manage_checked_document.xml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<filter name="manage_checked_document" module="board" act="procBoardAdminManageCheckedDocument">
|
||||
<form />
|
||||
<response callback_func="completeManageDocument">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
15
modules/board/tpl/filter/search.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<filter name="search" module="board">
|
||||
<form>
|
||||
<node target="search_target" required="true" />
|
||||
<node target="search_keyword" minlength="2" maxlength="40" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="search_target" target="search_target" />
|
||||
<param name="search_keyword" target="search_keyword" />
|
||||
</parameter>
|
||||
<response callback_func="completeSearch">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
11
modules/board/tpl/filter/update_category.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<filter name="update_category" module="board" act="procBoardAdminUpdateCategory">
|
||||
<form>
|
||||
<node target="category_srl" required="true" />
|
||||
<node target="mode" required="true" />
|
||||
</form>
|
||||
<response callback_func="completeUpdateCategory">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="module_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
13
modules/board/tpl/filter/vote.xml
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
<filter name="vote" module="board" act="procBoardVoteDocument" confirm_msg_code="confirm_vote">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_srl" />
|
||||
</parameter>
|
||||
<response callback_func="completeVote">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
</response>
|
||||
</filter>
|
||||
2
modules/board/tpl/grant_list.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<include target="./header.html" />
|
||||
{$grant_content}
|
||||
22
modules/board/tpl/header.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
<load target="js/board_admin.js" />
|
||||
<div class="x_page-header">
|
||||
<h1>
|
||||
{$lang->board_management}
|
||||
<span class="path" cond="$module_info->mid">
|
||||
> <a href="{getSiteUrl($module_info->domain,'','mid',$module_info->mid)}" target="_blank"|cond="$module=='admin'">{$module_info->mid}<block cond="$module_info->is_default=='Y'">({$lang->is_default})</block></a>
|
||||
</span>
|
||||
<a href="#aboutModule" data-toggle class="x_icon-question-sign">{$lang->help}</a>
|
||||
</h1>
|
||||
</div>
|
||||
<p class="x_alert x_alert-info" id="aboutModule" hidden>{$lang->about_board}</p>
|
||||
<ul class="x_nav x_nav-tabs" cond="$module_info && $act != 'dispBoardAdminContent' && $act != 'dispBoardAdminDeleteBoard'">
|
||||
<li cond="$module=='admin'" class="x_active"|cond="$act=='dispBoardAdminContent'"><a href="{getUrl('act','dispBoardAdminContent','module_srl','', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_board_list}</a></li>
|
||||
<!--<li class="x_active" cond="$act=='dispBoardAdminInsertBoard'"><a href="{getUrl('act','dispBoardAdminInsertBoard', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_create_board}</a></li>-->
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminBoardInfo'"><a href="{getUrl('act','dispBoardAdminBoardInfo', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_board_info}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminCategoryInfo'"><a href="{getUrl('act','dispBoardAdminCategoryInfo', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_manage_category}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminExtraVars'"><a href="{getUrl('act','dispBoardAdminExtraVars', 'selected_var_idx', '', 'type', '')}">{$lang->extra_vars}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminGrantInfo'"><a href="{getUrl('act','dispBoardAdminGrantInfo', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_manage_grant}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminBoardAdditionSetup'"><a href="{getUrl('act','dispBoardAdminBoardAdditionSetup', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_addition_setup}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminSkinInfo'"><a href="{getUrl('act','dispBoardAdminSkinInfo', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_manage_skin}</a></li>
|
||||
<li cond="$module_srl" class="x_active"|cond="$act=='dispBoardAdminMobileSkinInfo'"><a href="{getUrl('act','dispBoardAdminMobileSkinInfo', 'selected_var_idx', '', 'type', '')}">{$lang->cmd_manage_mobile_skin}</a></li>
|
||||
</ul>
|
||||
127
modules/board/tpl/index.html
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
<include target="header.html" />
|
||||
<!--TODO-->
|
||||
<div cond="$XE_VALIDATOR_MESSAGE && $XE_VALIDATOR_ID == ''" class="message {$XE_VALIDATOR_MESSAGE_TYPE}">
|
||||
<p>{$XE_VALIDATOR_MESSAGE}</p>
|
||||
</div>
|
||||
|
||||
<table id="boardList" class="x_table x_table-striped x_table-hover">
|
||||
<caption>
|
||||
<strong>Total: {number_format($total_count)}, Page: {number_format($page)}/{number_format($total_page)}</strong>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{$lang->no}</th>
|
||||
<th scope="col">{$lang->module_category}</th>
|
||||
<th scope="col">{$lang->mid}</th>
|
||||
<th scope="col">{$lang->browser_title}</th>
|
||||
<th scope="col">{$lang->regdate}</th>
|
||||
<th scope="col">{$lang->cmd_edit}</th>
|
||||
<th scope="col"><input type="checkbox" data-name="cart" title="Check All" /></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr loop="$board_list => $no,$val">
|
||||
<td>{$no}</td>
|
||||
<td>
|
||||
<block cond="!$val->module_category_srl">
|
||||
<block cond="$val->site_srl">{$lang->virtual_site}</block>
|
||||
<block cond="!$val->site_srl">{$lang->not_exists}</block>
|
||||
</block>
|
||||
<block cond="$val->module_category_srl">{$module_category[$val->module_category_srl]->title}</block>
|
||||
</td>
|
||||
<td>{$val->mid}</td>
|
||||
<td><a href="{getSiteUrl($val->domain,'','mid',$val->mid)}">{$val->browser_title}</a></td>
|
||||
<td>{zdate($val->regdate,"Y-m-d")}</td>
|
||||
<td>
|
||||
<a href="{getUrl('act','dispBoardAdminBoardInfo','module_srl',$val->module_srl)}" class="x_icon-cog" title="{$lang->cmd_setup}">{$lang->cmd_setup}</a>
|
||||
<a href="{getUrl('','module','module','act','dispModuleAdminCopyModule','module_srl',$val->module_srl)}" class="x_icon-plus" onclick="popopen(this.href);return false;" title="{$lang->cmd_copy}">{$lang->cmd_copy}</a>
|
||||
<a href="{getUrl('act','dispBoardAdminDeleteBoard','module_srl', $val->module_srl)}" class="x_icon-remove" title="{$lang->cmd_delete}">{$lang->cmd_delete}</a>
|
||||
</td>
|
||||
<td><input type="checkbox" name="cart" value="{$val->module_srl}" class="selectedModule" data-mid="{$val->mid}" data-browser_title="{$val->browser_title}" /></td>
|
||||
</tr>
|
||||
<tr cond="!$board_list">
|
||||
<td>{$lang->no_board_instance}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="x_clearfix">
|
||||
<form cond="$page_navigation" action="./" class="x_pagination x_pull-left" no-error-return-url="true" style="margin-top:0">
|
||||
{@
|
||||
$urlInfo = parse_url(getRequestUriByServerEnviroment());
|
||||
parse_str($urlInfo['query'], $param);
|
||||
}
|
||||
<input loop="$param => $key, $val" cond="!in_array($key, array('mid', 'vid', 'act'))" type="hidden" name="{$key}" value="{$val}" />
|
||||
<ul>
|
||||
<li class="x_disabled"|cond="!$page || $page == 1"><a href="{getUrl('page', '')}">« {$lang->first_page}</a></li>
|
||||
<block cond="$page_navigation->first_page != 1 && $page_navigation->first_page + $page_navigation->page_count > $page_navigation->last_page - 1 && $page_navigation->page_count != $page_navigation->total_page">
|
||||
{@$isGoTo = true}
|
||||
<li>
|
||||
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">…</a>
|
||||
<span cond="$isGoTo" id="goTo" class="x_input-append">
|
||||
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit" class="x_add-on">Go</button>
|
||||
</span>
|
||||
</li>
|
||||
</block>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
{@$last_page = $page_no}
|
||||
<li class="x_active"|cond="$page_no == $page"><a href="{getUrl('page', $page_no)}">{$page_no}</a></li>
|
||||
<!--@end-->
|
||||
<block cond="$last_page != $page_navigation->last_page && $last_page + 1 != $page_navigation->last_page">
|
||||
{@$isGoTo = true}
|
||||
<li>
|
||||
<a href="#goTo" data-toggle title="{$lang->cmd_go_to_page}">…</a>
|
||||
<span cond="$isGoTo" id="goTo" class="x_input-append">
|
||||
<input type="number" min="1" max="{$page_navigation->last_page}" required name="page" title="{$lang->cmd_go_to_page}" />
|
||||
<button type="submit" class="x_add-on">Go</button>
|
||||
</span>
|
||||
</li>
|
||||
</block>
|
||||
<li class="x_disabled"|cond="$page == $page_navigation->last_page"><a href="{getUrl('page', $page_navigation->last_page)}" title="{$page_navigation->last_page}">{$lang->last_page} »</a></li>
|
||||
</ul>
|
||||
</form>
|
||||
<span class="x_pull-right x_btn-group">
|
||||
<!--<a class="x_btn x_btn-inverse" href="{getUrl('act','dispBoardAdminInsertBoard','module_srl','')}">{$lang->cmd_create_board}</a>-->
|
||||
<a class="x_btn modalAnchor _manage_selected" href="#manageSelectedModule">{$lang->cmd_manage_selected_board}</a>
|
||||
</span>
|
||||
</div>
|
||||
<form action="" class="search x_input-append center" no-error-return-url="true">
|
||||
<input loop="$param => $key, $val" cond="!in_array($key, array('mid', 'vid', 'act', 'page', 'search_target', 'search_keyword'))" type="hidden" name="{$key}" value="{$val}" />
|
||||
<select cond="count($module_category)" name="module_category_srl" title="{$lang->module_category}" style="margin-right:4px">
|
||||
<option value="0" selected="selected"|cond="$module_category_srl==='0'">{$lang->not_exists}</option>
|
||||
<option value="{$key}" loop="$module_category => $key,$val" selected="selected"|cond="$module_category==$key">{$val->title}</option>
|
||||
</select>
|
||||
<select name="search_target" title="{$lang->search_target}" style="margin-right:4px">
|
||||
<option value="mid" selected="selected"|cond="$search_target=='mid'">{$lang->mid}</option>
|
||||
<option value="browser_title" selected="selected"|cond="$search_target=='browser_title'">{$lang->browser_title}</option>
|
||||
</select>
|
||||
<input type="search" required name="search_keyword" value="{htmlspecialchars($search_keyword)}" />
|
||||
<button class="x_btn x_btn-inverse" type="submit">{$lang->cmd_search}</button>
|
||||
<a class="x_btn" href="{getUrl('', 'module', $module, 'act', $act)}">{$lang->cmd_cancel}</a>
|
||||
</form>
|
||||
|
||||
{$selected_manage_content}
|
||||
|
||||
<script>
|
||||
jQuery(function($){
|
||||
// Modal anchor activation
|
||||
var $docTable = $('#boardList');
|
||||
$docTable.find(':checkbox').change(function(){
|
||||
var $modalAnchor = $('a.modalAnchor._manage_selected');
|
||||
if($docTable.find('tbody :checked').length == 0){
|
||||
$modalAnchor.removeAttr('href').addClass('x_disabled');
|
||||
} else {
|
||||
$modalAnchor.attr('href','#manageSelectedModule').removeClass('x_disabled');
|
||||
}
|
||||
}).change();
|
||||
// Button action
|
||||
$('a.modalAnchor._manage_selected').click(function(){
|
||||
if($docTable.find('tbody :checked').length == 0){
|
||||
$('body').css('overflow','auto');
|
||||
alert('{$lang->choose_board_instance}');
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
176
modules/board/tpl/js/board.js
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
/**
|
||||
* @file modules/board/js/board.js
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief board 모듈의 javascript
|
||||
**/
|
||||
|
||||
/* complete tp insert document */
|
||||
function completeDocumentInserted(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var category_srl = ret_obj.category_srl;
|
||||
|
||||
//alert(message);
|
||||
|
||||
var url;
|
||||
if(!document_srl)
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('act','');
|
||||
}
|
||||
else
|
||||
{
|
||||
url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
}
|
||||
if(category_srl) url = url.setQuery('category',category_srl);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* delete the document */
|
||||
function completeDeleteDocument(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('document_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
//alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* document search */
|
||||
function completeSearch(ret_obj, response_tags, params, fo_obj)
|
||||
{
|
||||
fo_obj.submit();
|
||||
}
|
||||
|
||||
function completeVote(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
alert(message);
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
// current page reload
|
||||
function completeReload(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
/* complete to insert comment*/
|
||||
function completeInsertComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var comment_srl = ret_obj.comment_srl;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(comment_srl) url = url.setQuery('rnd',comment_srl)+"#comment_"+comment_srl;
|
||||
|
||||
//alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* delete the comment */
|
||||
function completeDeleteComment(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
//alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* delete the trackback */
|
||||
function completeDeleteTrackback(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var mid = ret_obj.mid;
|
||||
var document_srl = ret_obj.document_srl;
|
||||
var page = ret_obj.page;
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
|
||||
//alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* change category */
|
||||
function doChangeCategory()
|
||||
{
|
||||
var category_srl = jQuery('#board_category option:selected').val();
|
||||
location.href = decodeURI(current_url).setQuery('category',category_srl).setQuery('page', '');
|
||||
}
|
||||
|
||||
/* scrap */
|
||||
function doScrap(document_srl)
|
||||
{
|
||||
var params = [];
|
||||
params.document_srl = document_srl;
|
||||
jQuery.exec_json('member.procMemberScrapDocument', params);
|
||||
}
|
||||
|
||||
jQuery(function($){
|
||||
$(document.body).click(function(e){
|
||||
var t = $(e.target), act, params = {};
|
||||
|
||||
if(t.parents('.layer_voted_member').length === 0 && !t.is('.layer_voted_member')){
|
||||
$('.layer_voted_member').hide().remove();
|
||||
}
|
||||
|
||||
if(!t.is('a[class^=voted_member_]')) return;
|
||||
|
||||
var srl = parseInt(t.attr('class').replace(/[^0-9]/g,''));
|
||||
if(!srl) return;
|
||||
|
||||
if(t.hasClass('comment')){
|
||||
act = 'comment.getCommentVotedMemberList';
|
||||
params =
|
||||
{'comment_srl':srl,'point':(t.hasClass('votedup')?1:-1)};
|
||||
}else{
|
||||
act = 'document.getDocumentVotedMemberList';
|
||||
params =
|
||||
{'document_srl':srl,'point':(t.hasClass('votedup')?1:-1)};
|
||||
}
|
||||
|
||||
$.exec_json(act, params, function(data){
|
||||
var l = data.voted_member_list;
|
||||
var ul = [];
|
||||
|
||||
if(!l || l.length === 0) return;
|
||||
|
||||
$.each(l,function(){
|
||||
ul.push(this.nick_name);
|
||||
});
|
||||
|
||||
t.after($('<ul>')
|
||||
.addClass('layer_voted_member')
|
||||
.css({'position':'absolute','top':e.pageY+5,'left':e.pageX})
|
||||
.append('<li>'+ul.join('</li><li>')+'</li>')
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
1
modules/board/tpl/js/board.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
function completeDocumentInserted(a){var b,c=(a.error,a.message,a.mid),d=a.document_srl,e=a.category_srl;b=d?current_url.setQuery("mid",c).setQuery("document_srl",d).setQuery("act",""):current_url.setQuery("mid",c).setQuery("act",""),e&&(b=b.setQuery("category",e)),location.href=b}function completeDeleteDocument(a){var b=(a.error,a.message,a.mid),c=a.page,d=current_url.setQuery("mid",b).setQuery("act","").setQuery("document_srl","");c&&(d=d.setQuery("page",c)),location.href=d}function completeSearch(a,b,c,d){d.submit()}function completeVote(a){var b=(a.error,a.message);alert(b),location.href=location.href}function completeReload(a){a.error,a.message;location.href=location.href}function completeInsertComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.comment_srl,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("rnd",d)+"#comment_"+d),location.href=e}function completeDeleteComment(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.page,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("page",d)),location.href=e}function completeDeleteTrackback(a){var b=(a.error,a.message,a.mid),c=a.document_srl,d=a.page,e=current_url.setQuery("mid",b).setQuery("document_srl",c).setQuery("act","");d&&(e=e.setQuery("page",d)),location.href=e}function doChangeCategory(){var a=jQuery("#board_category option:selected").val();location.href=decodeURI(current_url).setQuery("category",a).setQuery("page","")}function doScrap(a){var b=[];b.document_srl=a,jQuery.exec_json("member.procMemberScrapDocument",b)}jQuery(function(a){a(document.body).click(function(b){var c,d=a(b.target),e={};if(0!==d.parents(".layer_voted_member").length||d.is(".layer_voted_member")||a(".layer_voted_member").hide().remove(),d.is("a[class^=voted_member_]")){var f=parseInt(d.attr("class").replace(/[^0-9]/g,""));f&&(d.hasClass("comment")?(c="comment.getCommentVotedMemberList",e={comment_srl:f,point:d.hasClass("votedup")?1:-1}):(c="document.getDocumentVotedMemberList",e={document_srl:f,point:d.hasClass("votedup")?1:-1}),a.exec_json(c,e,function(c){var e=c.voted_member_list,f=[];e&&0!==e.length&&(a.each(e,function(){f.push(this.nick_name)}),d.after(a("<ul>").addClass("layer_voted_member").css({position:"absolute",top:b.pageY+5,left:b.pageX}).append("<li>"+f.join("</li><li>")+"</li>")))}))}})});
|
||||
149
modules/board/tpl/js/board_admin.js
Normal file
|
|
@ -0,0 +1,149 @@
|
|||
/**
|
||||
* @file modules/board/js/board_admin.js
|
||||
* @author NHN (developers@xpressengine.com)
|
||||
* @brief board 모듈의 관리자용 javascript
|
||||
**/
|
||||
/* complete to insert board module */
|
||||
function completeInsertBoard(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
|
||||
var page = ret_obj.page;
|
||||
var module_srl = ret_obj.module_srl;
|
||||
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('act','dispBoardAdminBoardInfo');
|
||||
if(module_srl) url = url.setQuery('module_srl',module_srl);
|
||||
if(page) url.setQuery('page',page);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* delete the board module*/
|
||||
function completeDeleteBoard(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var page = ret_obj.page;
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('act','dispBoardAdminContent').setQuery('module_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* update category */
|
||||
function doUpdateCategory(category_srl, mode, message)
|
||||
{
|
||||
if(typeof(message)!='undefined'&&!confirm(message)) return;
|
||||
|
||||
var fo_obj = xGetElementById('fo_category_info');
|
||||
fo_obj.category_srl.value = category_srl;
|
||||
fo_obj.mode.value = mode;
|
||||
|
||||
procFilter(fo_obj, update_category);
|
||||
}
|
||||
|
||||
/* change category */
|
||||
function completeUpdateCategory(ret_obj)
|
||||
{
|
||||
var error = ret_obj.error;
|
||||
var message = ret_obj.message;
|
||||
var module_srl = ret_obj.module_srl;
|
||||
var page = ret_obj.page;
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('module_srl',module_srl).setQuery('act','dispBoardAdminCategoryInfo');
|
||||
if(page) url.setQuery('page',page);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* setup all*/
|
||||
function doCartSetup(url)
|
||||
{
|
||||
var module_srl = [];
|
||||
jQuery('#fo_list input[name=cart]:checked').each(function()
|
||||
{
|
||||
module_srl[module_srl.length] = jQuery(this).val();
|
||||
});
|
||||
|
||||
if(module_srl.length<1) return;
|
||||
|
||||
url += "&module_srls="+module_srl.join(',');
|
||||
popopen(url,'modulesSetup');
|
||||
}
|
||||
|
||||
/* setup index */
|
||||
function doInsertItem()
|
||||
{
|
||||
var target_obj = xGetElementById('targetItem');
|
||||
var display_obj = xGetElementById('displayItem');
|
||||
if(!target_obj || !display_obj) return;
|
||||
|
||||
var text = target_obj.options[target_obj.selectedIndex].text;
|
||||
var value = target_obj.options[target_obj.selectedIndex].value;
|
||||
|
||||
for(var i=0;i<display_obj.options.length;i++) if(display_obj.options[i].value == value) return;
|
||||
|
||||
var obj = new Option(text, value, true, true);
|
||||
display_obj.options[display_obj.options.length] = obj;
|
||||
|
||||
}
|
||||
function doDeleteItem()
|
||||
{
|
||||
var sel_obj = xGetElementById('displayItem');
|
||||
var idx = sel_obj.selectedIndex;
|
||||
if(idx<0 || sel_obj.options.length<2) return;
|
||||
sel_obj.remove(idx);
|
||||
sel_obj.selectedIndex = idx-1;
|
||||
}
|
||||
function doMoveUpItem()
|
||||
{
|
||||
var sel_obj = xGetElementById('displayItem');
|
||||
var idx = sel_obj.selectedIndex;
|
||||
if(idx<1 || !idx) return;
|
||||
|
||||
var text = sel_obj.options[idx].text;
|
||||
var value = sel_obj.options[idx].value;
|
||||
|
||||
sel_obj.options[idx].text = sel_obj.options[idx-1].text;
|
||||
sel_obj.options[idx].value = sel_obj.options[idx-1].value;
|
||||
sel_obj.options[idx-1].text = text;
|
||||
sel_obj.options[idx-1].value = value;
|
||||
sel_obj.selectedIndex = idx-1;
|
||||
}
|
||||
function doMoveDownItem()
|
||||
{
|
||||
var sel_obj = xGetElementById('displayItem');
|
||||
var idx = sel_obj.selectedIndex;
|
||||
if(idx>=sel_obj.options.length-1) return;
|
||||
|
||||
var text = sel_obj.options[idx].text;
|
||||
var value = sel_obj.options[idx].value;
|
||||
|
||||
sel_obj.options[idx].text = sel_obj.options[idx+1].text;
|
||||
sel_obj.options[idx].value = sel_obj.options[idx+1].value;
|
||||
sel_obj.options[idx+1].text = text;
|
||||
sel_obj.options[idx+1].value = value;
|
||||
sel_obj.selectedIndex = idx+1;
|
||||
}
|
||||
|
||||
function doSaveListConfig(module_srl)
|
||||
{
|
||||
if(!module_srl) return;
|
||||
var sel_obj = xGetElementById('displayItem');
|
||||
var idx = sel_obj.selectedIndex;
|
||||
|
||||
var list = [];
|
||||
for(var i=0;i<sel_obj.options.length;i++) list[list.length] = sel_obj.options[i].value;
|
||||
if(list.length<1) return;
|
||||
|
||||
var params = {};
|
||||
params.module_srl = module_srl;
|
||||
params.list = list.join(',');
|
||||
|
||||
var response_tags = new Array('error','message');
|
||||
|
||||
exec_json('board.procBoardAdminInsertListConfig', params, function() { location.reload(); });
|
||||
}
|
||||
1
modules/board/tpl/js/board_admin.min.js
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
function completeInsertBoard(a){var b=(a.error,a.message),c=a.page,d=a.module_srl;alert(b);var e=current_url.setQuery("act","dispBoardAdminBoardInfo");d&&(e=e.setQuery("module_srl",d)),c&&e.setQuery("page",c),location.href=e}function completeDeleteBoard(a){var b=(a.error,a.message),c=a.page;alert(b);var d=current_url.setQuery("act","dispBoardAdminContent").setQuery("module_srl","");c&&(d=d.setQuery("page",c)),location.href=d}function doUpdateCategory(a,b,c){if("undefined"==typeof c||confirm(c)){var d=xGetElementById("fo_category_info");d.category_srl.value=a,d.mode.value=b,procFilter(d,update_category)}}function completeUpdateCategory(a){var b=(a.error,a.message),c=a.module_srl,d=a.page;alert(b);var e=current_url.setQuery("module_srl",c).setQuery("act","dispBoardAdminCategoryInfo");d&&e.setQuery("page",d),location.href=e}function doCartSetup(a){var b=[];jQuery("#fo_list input[name=cart]:checked").each(function(){b[b.length]=jQuery(this).val()}),b.length<1||(a+="&module_srls="+b.join(","),popopen(a,"modulesSetup"))}function doInsertItem(){var a=xGetElementById("targetItem"),b=xGetElementById("displayItem");if(a&&b){for(var c=a.options[a.selectedIndex].text,d=a.options[a.selectedIndex].value,e=0;e<b.options.length;e++)if(b.options[e].value==d)return;var f=new Option(c,d,!0,!0);b.options[b.options.length]=f}}function doDeleteItem(){var a=xGetElementById("displayItem"),b=a.selectedIndex;0>b||a.options.length<2||(a.remove(b),a.selectedIndex=b-1)}function doMoveUpItem(){var a=xGetElementById("displayItem"),b=a.selectedIndex;if(!(1>b)&&b){var c=a.options[b].text,d=a.options[b].value;a.options[b].text=a.options[b-1].text,a.options[b].value=a.options[b-1].value,a.options[b-1].text=c,a.options[b-1].value=d,a.selectedIndex=b-1}}function doMoveDownItem(){var a=xGetElementById("displayItem"),b=a.selectedIndex;if(!(b>=a.options.length-1)){var c=a.options[b].text,d=a.options[b].value;a.options[b].text=a.options[b+1].text,a.options[b].value=a.options[b+1].value,a.options[b+1].text=c,a.options[b+1].value=d,a.selectedIndex=b+1}}function doSaveListConfig(a){if(a){for(var b=xGetElementById("displayItem"),c=(b.selectedIndex,[]),d=0;d<b.options.length;d++)c[c.length]=b.options[d].value;if(!(c.length<1)){var e={};e.module_srl=a,e.list=c.join(",");{new Array("error","message")}exec_json("board.procBoardAdminInsertListConfig",e,function(){location.reload()})}}}
|
||||
2
modules/board/tpl/skin_info.html
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
<include target="./header.html" />
|
||||
{$skin_content}
|
||||