1. 메인 페이지 생성 :: cafeXE 관리자 페이지에서 mid 지정 가능
2. 사용자가 카페를 생성하기 위한 옵션을 추가
3. 사용자 카페 생성 기능 추가



git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6176 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-04-23 11:17:41 +00:00
parent 010923790d
commit 7d67cee78e
41 changed files with 888 additions and 132 deletions

View file

@ -35,7 +35,7 @@
<tr>
<th><div>{$lang->start_module}</div></th>
<td>
<select name="index_module_srl">
<select name="index_module_srl" class="w200">
<!--@foreach($mid_list as $key => $val)-->
<option value="" disabled="disabled">{$key}</option>
<!--@foreach($val as $k => $v)-->

View file

@ -158,17 +158,21 @@
<tbody>
<tr>
<th><div>{$lang->current_version}</div></th>
<td>
<td class="wide">
<strong>{$current_version}</strong><!--@if($current_version == $released_version)--> [<a href="{$download_link}" onclick="window.open(this.href);return false;">{$lang->cmd_view}</a>]<!--@end-->
</td>
</tr>
<tr>
<th><div>{$lang->current_path}</div></th>
<td>{$installed_path}/</td>
<th colspan="2"><div>{$lang->current_path}</div></th>
</tr>
<tr>
<th><div>{$lang->start_module}</div></th>
<td><a href="{getSiteUrl('','','mid',$start_module->mid)}" onclick="window.open(this.href);return false;">{cut_str($start_module->browser_title,10)}</a></td>
<td colspan="2">{$installed_path}/</td>
</tr>
<tr>
<th colspan="2"><div>{$lang->start_module}</div></th>
</tr>
<Tr>
<td colspan="2"><a href="{getSiteUrl('','','mid',$start_module->mid)}" onclick="window.open(this.href);return false;">{cut_str($start_module->browser_title,10)}</a></td>
</tr>
<tr>
<th><div>{$lang->time_zone}</div></th>

View file

@ -19,6 +19,7 @@
<permission action="dispHomepageBoardCategoryInfo" target="manager" />
<permission action="dispHomepageBoardExtraVars" target="manager" />
<permission action="procHomepageCafeCreation" target="member" />
<permission action="procHomepageChangeLayout" target="manager" />
<permission action="procHomepageChangeLanguage" target="manager" />
<permission action="procHomepageLayoutUpdate" target="manager" />
@ -31,13 +32,13 @@
<permission action="procHomepageInsertGroup" target="manager" />
<permission action="procHomepageUpdateMemberGroup" target="manager" />
<permission action="procHomepageDeleteMember" target="manager" />
<permission action="procHomepageInsertBoard" target="manager" />
<permission action="procHomepageInsertPage" target="manager" />
<permission action="procHomepageUpdateBoardSkin" target="manager" />
<permission action="procHomepageChangeIndex" target="manager" />
</permissions>
<actions>
<action name="dispHomepageManage" type="view" standalone="true" index="true" />
<action name="dispHomepageIndex" type="view" standalone="true" index="true" />
<action name="dispHomepageManage" type="view" standalone="true" />
<action name="dispHomepageMemberGroupManage" type="view" standalone="true" />
<action name="dispHomepageMemberManage" type="view" standalone="true" />
<action name="dispHomepageTopMenu" type="view" standalone="true" />
@ -56,6 +57,7 @@
<action name="getHomepageMenuItem" type="model" standalone="true" />
<action name="procHomepageCafeCreation" type="controller" standalone="true" />
<action name="procHomepageChangeLayout" type="controller" standalone="true" />
<action name="procHomepageChangeLanguage" type="controller" standalone="true" />
<action name="procHomepageLayoutUpdate" type="controller" standalone="true" />
@ -68,14 +70,15 @@
<action name="procHomepageInsertGroup" type="controller" standalone="true" />
<action name="procHomepageDeleteMember" type="controller" standalone="true" />
<action name="procHomepageUpdateMemberGroup" type="controller" standalone="true" />
<action name="procHomepageInsertBoard" type="controller" standalone="true" />
<action name="procHomepageInsertPage" type="controller" standalone="true" />
<action name="procHomepageChangeIndex" type="controller" standalone="true" />
<action name="procHomepageInsertCafeBanner" type="controller" standalone="true" />
<action name="dispHomepageAdminContent" type="view" standalone="true" admin_index="true" />
<action name="dispHomepageAdminSetup" type="view" standalone="true" />
<action name="dispHomepageAdminSkinSetup" type="view" standalone="true" />
<action name="dispHomepageAdminDelete" type="view" standalone="true" />
<action name="procHomepageAdminInsertConfig" type="controller" />
<action name="procHomepageAdminInsertHomepage" type="controller" />
<action name="procHomepageAdminUpdateHomepage" type="controller" />
<action name="procHomepageAdminDeleteHomepage" type="controller" />

View file

@ -14,7 +14,11 @@
* @brief 카페 설정
**/
function procHomepageAdminInsertConfig() {
global $lang;
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$oHomepageModel = &getModel('homepage');
$vars = Context::getRequestVars();
@ -24,8 +28,52 @@
if(strpos($key,'allow_service_')===false) continue;
$args->allow_service[substr($key, strlen('allow_service_'))] = $val;
}
if($vars->site_srl) $oModuleController->insertModulePartConfig('homepage', $vars->site_srl, $args);
else $oModuleController->insertModuleConfig('homepage', $args);
if($vars->site_srl) {
unset($vars->creation_group);
unset($vars->cafe_main_mid);
unset($vars->skin);
$oModuleController->insertModulePartConfig('homepage', $vars->site_srl, $args);
}else {
$args->access_type = $vars->access_type;
$args->default_domain = $vars->default_domain;
if(strpos($args->default_domain,':')===false) $args->default_domain = 'http://'.$args->default_domain;
if(substr($args->default_domain,-1)!='/') $args->default_domain .= '/';
if($args->access_type != 'vid' && !$args->default_domain) return new Object(-1,sprintf($lang->filter->isnull, $lang->domain));
$args->cafe_main_mid = $vars->cafe_main_mid;
$args->browser_title = $vars->browser_title;
if(!$args->browser_title) $args->browser_title = 'cafeXE';
if(!$args->cafe_main_mid) return new Object(-1,sprintf($lang->filter->isnull,$lang->cafe_main_mid));
$args->skin = $vars->skin;
if(!$args->skin) $args->skin = 'xe_default';
$homepage_config = $oHomepageModel->getConfig(0);
$mid = $homepage_config->cafe_main_mid;
$module_info = $oModuleModel->getModuleInfoByMid($mid, 0);
if(!$module_info->module_srl) {
$module_args->site_srl = 0;
$module_args->mid = $args->cafe_main_mid;
$module_args->skin = $args->skin;
$module_args->browser_title = $args->browser_title;
$module_args->module = 'homepage';
$output = $oModuleController->insertModule($module_args);
if(!$output->toBool()) return $output;
} else {
$module_args->module = 'homepage';
$module_args->mid = $args->cafe_main_mid;
$module_args->skin = $args->skin;
$module_args->site_srl = 0;
$module_args->browser_title = $args->browser_title;
$module_args->module_srl = $module_info->module_srl;
$output = $oModuleController->updateModule($module_args);
if(!$output->toBool()) return $output;
}
$module_info = $oModuleModel->getModuleInfoByMid($mid, 0);
$args->module_srl = $module_info->module_srl;
$args->creation_group = implode(',',explode('|@|',$vars->creation_group));
$oModuleController->insertModuleConfig('homepage', $args);
}
}
/**

View file

@ -17,6 +17,7 @@
$oHomepageAdminModel = &getAdminModel('homepage');
$oHomepageModel = &getModel('homepage');
$oModuleModel = &getModel('module');
$oMemberModel = &getModel('member');
// cafe 전체 설정을 구함
$homepage_config = $oHomepageModel->getConfig();
@ -34,10 +35,17 @@
}
Context::set('service_modules', $service_modules);
// 기본 사이트의 그룹 구함
$groups = $oMemberModel->getGroups(0);
Context::set('groups', $groups);
// 생성된 카페 목록을 구함
$page = Context::get('page');
$output = $oHomepageAdminModel->getHomepageList($page);
// 카페 메인 스킨 설정
Context::set('skins', $oModuleModel->getSkins($this->module_path));
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
@ -92,6 +100,17 @@
$this->setTemplateFile('delete');
}
function dispHomepageAdminSkinSetup() {
$oModuleAdminModel = &getAdminModel('module');
$oHomepageModel = &getModel('homepage');
$homepage_config = $oHomepageModel->getConfig(0);
$skin_content = $oModuleAdminModel->getModuleSkinHTML($homepage_config->module_srl);
Context::set('skin_content', $skin_content);
$this->setTemplateFile('skin_info');
}
}
?>

View file

@ -12,6 +12,7 @@
**/
function moduleInstall() {
$oModuleController = &getController('module');
$oModuleController->insertTrigger('display', 'homepage', 'controller', 'triggerMemberMenu', 'before');
return new Object();
@ -23,9 +24,14 @@
function checkUpdate() {
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$oDB = &DB::getInstance();
// 2009. 02. 11 가상 사이트의 로그인 정보 영역에 관리 기능이 추가되어 표시되도록 트리거 등록
if(!$oModuleModel->getTrigger('display', 'homepage', 'controller', 'triggerMemberMenu', 'before')) return true;
// 2009. 04. 23 카페의 설명
if(!$oDB->isColumnExists("homepages","description")) return true;
return false;
}
@ -35,11 +41,17 @@
function moduleUpdate() {
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$oDB = &DB::getInstance();
// 2009. 02. 11 가상 사이트의 로그인 정보 영역에 관리 기능이 추가되어 표시되도록 트리거 등록
if(!$oModuleModel->getTrigger('display', 'homepage', 'controller', 'triggerMemberMenu', 'before'))
$oModuleController->insertTrigger('display', 'homepage', 'controller', 'triggerMemberMenu', 'before');
// 2009. 04. 23 카페의 설명
if(!$oDB->isColumnExists("homepages","description"))
$oDB->addColumn("homepages","description","text");
return new Object(0, 'success_updated');
}

View file

@ -18,7 +18,7 @@
$oLayoutModel = &getModel('layout');
$logged_info = Context::get('logged_info');
if(!$oModuleModel->isSiteAdmin($logged_info)) return $this->stop('msg_not_permitted');
if($this->act != 'procHomepageCafeCreation' && !$oModuleModel->isSiteAdmin($logged_info)) return $this->stop('msg_not_permitted');
// site_module_info값으로 홈페이지의 정보를 구함
$this->site_module_info = Context::get('site_module_info');
@ -39,6 +39,54 @@
return $oModuleController->updateSite($args);
}
function procHomepageCafeCreation() {
global $lang;
$oHomepageAdminController = &getAdminController('homepage');
$oHomepageModel = &getModel('homepage');
$oModuleModel = &getModel('module');
$oModuleController = &getController('module');
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
if(!$oHomepageModel->isCreationGranted()) return new Object(-1,'msg_not_permitted');
$cafe_id = Context::get('cafe_id');
if(!$cafe_id || $oModuleModel->isIDExists($cafe_id)) return new Object(-1,'msg_not_enabled_id');
$cafe_title = Context::get('cafe_title');
if(!$cafe_title) return new Object(-1,sprintf($lang->filter->isnull, $lang->cafe_title));
$cafe_description = Context::get('cafe_description');
if(!$cafe_description) return new Object(-1,sprintf($lang->filter->isnull, $lang->cafe_description));
$homepage_config = $oHomepageModel->getConfig();
if($homepage_config->access_type == 'vid') $domain = $cafe_id;
else $domain = $homepage_config->default_domain.$cafe_id;
$oHomepageAdminController->insertHomepage($cafe_title, $domain);
if(!$oHomepageAdminController->toBool()) return $output;
$site_srl = $oHomepageAdminController->get('site_srl');
// 홈페이지 제목/내용 변경
$homepage_info = $oHomepageModel->getHomepageInfo($site_srl);
$args->title = $cafe_title;
$args->description = $cafe_description;
$args->layout_srl = $homepage_info->layout_srl;
$args->site_srl = $site_srl;
$output = executeQuery('homepage.updateHomepage', $args);
if(!$output->toBool()) return $output;
// 현재 사용자 가입 및 관리자 주기
$logged_info = Context::get('logged_info');
$default_group = $oMemberModel->getDefaultGroup($site_srl);
$oMemberController->addMemberToGroup($logged_info->member_srl, $default_group->group_srl, $site_srl);
$output = $oModuleController->insertSiteAdmin($site_srl, array($logged_info->user_id));
$this->setRedirectUrl(getSiteUrl($domain));
}
function procHomepageChangeLayout() {
$oLayoutModel = &getModel('layout');
$oLayoutAdminController = &getAdminController('layout');
@ -271,14 +319,6 @@
$this->add('xml_file', $xml_file);
}
function procHomepageInsertBoard() {
$oBoardAdminController = &getAdminController('board');
$output = $oBoardAdminController->procBoardAdminInsertBoard();
if(is_object($output) && !$output->toBool()) return $output;
$this->add('module_srl', $oBoardAdminController->get('module_srl'));
$this->setMessage($oBoardAdminController->getMessage());
}
function procHomepageDeleteGroup() {
$oMemberAdminController = &getAdminController('member');
$group_srl = Context::get('group_srl');
@ -346,29 +386,6 @@
$this->setMessage('success_registed');
}
function procHomepageInsertPage() {
$module_srl = Context::get('module_srl');
// 현 모듈의 권한 목록을 가져옴
$oModuleModel = &getModel('module');
$xml_info = $oModuleModel->getModuleActionXml('page');
$grant_list = $xml_info->grant;
if(count($grant_list)) {
foreach($grant_list as $key => $val) {
$group_srls = Context::get($key);
if($group_srls) $arr_grant[$key] = explode('|@|',$group_srls);
}
$grants = serialize($arr_grant);
}
$oModuleController = &getController('module');
$oModuleController->updateModuleGrant($module_srl, $grants);
$this->add("module_srl", $args->module_srl);
$this->setMessage('success_registed');
}
function procHomepageChangeIndex() {
$index_mid = Context::get('index_mid');
if(!$index_mid) return new Object(-1,'msg_invalid_request');
@ -381,6 +398,40 @@
return $output;
}
function procHomepageInsertCafeBanner() {
global $lang;
$oHomepageModel = &getModel('homepage');
$site_srl = Context::get('site_srl');
if(!$site_srl) return new Object(-1,'msg_invalid_request');
$title = Context::get('cafe_title');
if(!$title) return new Object(-1,sprintf($lang->filter->isnull,$lang->cafe_title));
$description = Context::get('cafe_description');
if(!$description) return new Object(-1,sprintf($lang->filter->isnull,$lang->cafe_description));
// 홈페이지 제목/내용 변경
$homepage_info = $oHomepageModel->getHomepageInfo($site_srl);
if(!$homepage_info->site_srl) return new Object(-1,'msg_invalid_request');
$args->title = $title;
$args->description = $description;
$args->layout_srl = $homepage_info->layout_srl;
$args->site_srl = $homepage_info->site_srl;
$output = executeQuery('homepage.updateHomepage', $args);
if(!$output->toBool()) return $output;
$cafe_banner = Context::get('cafe_banner');
if($cafe_banner['name']) {
$banner_src = 'files/attach/cafe_banner/'.$homepage_info->site_srl.'.jpg';
FileHandler::createImageFile($cafe_banner['tmp_name'], $banner_src,100,100,'jpg','crop');
}
$this->setTemplatePath($this->module_path.'tpl');
$this->setTemplateFile('redirect.html');
}
function triggerMemberMenu(&$content) {
$site_module_info = Context::get('site_module_info');
$logged_info = Context::get('logged_info');
@ -391,7 +442,6 @@
$oMemberController->addMemberMenu('dispHomepageManage','cmd_cafe_setup');
}
return new Object();
}
}
?>

View file

@ -23,6 +23,20 @@
$config->default_layout = 'cafeXE';
$config->enable_change_layout = 'N';
$config->allow_service = array('board'=>10,'page'=>2);
$config->creation_group = array();
$config->cafe_main_mid = 'cafe';
$config->skin = 'xe_default';
$config->access_type = 'vid';
$config->default_domain = '';
} else {
$config->creation_group = explode(',',$config->creation_group);
if(!isset($config->cafe_main_mid)) $config->cafe_main_mid = 'cafe';
if(!isset($config->skin)) $config->skin = 'xe_default';
if(!isset($config->access_type)) $config->access_type = 'vid';
if($config->default_domain) {
if(strpos($config->default_domain,':')===false) $config->default_domain = 'http://'.$config->default_domain;
if(substr($config->default_domain,-1)!='/') $config->default_domain .= '/';
}
}
if($site_srl) {
$part_config = $oModuleModel->getModulePartConfig('homepage', $site_srl);
@ -33,10 +47,29 @@
return $config;
}
function isCreationGranted($member_info = null) {
if(!$member_info) $member_info = Context::get('logged_info');
if(!$member_info->member_srl) return false;
if($member_info->is_admin == 'Y') return true;
$config = $this->getConfig(0);
if(!is_array($member_info->group_list) || !count($member_info->group_list) || !count($config->creation_group)) return;
$keys = array_keys($member_info->group_list);
for($i=0,$c=count($keys);$i<$c;$i++) {
if(in_array($keys[$i],$config->creation_group)) return true;
}
return false;
}
function getHomepageInfo($site_srl) {
$args->site_srl = $site_srl;
$output = executeQuery('homepage.getHomepageInfo', $args);
if(!$output->toBool() || !$output->data) return;
$banner_src = 'files/attach/cafe_banner/'.$site_srl.'.jpg';
if(file_exists(_XE_PATH_.$banner_src)) $output->data->cafe_banner = $banner_src.'?rnd='.filemtime(_XE_PATH_.$banner_src);
return $output->data;
}

View file

@ -17,6 +17,8 @@
function init() {
$oModuleModel = &getModel('module');
if($this->act != 'dispHomepageIndex') {
// 현재 접속 권한 체크하여 사이트 관리자가 아니면 접근 금지
$logged_info = Context::get('logged_info');
if(!Context::get('is_logged') || !$oModuleModel->isSiteAdmin($logged_info)) return $this->stop('msg_not_permitted');
@ -44,6 +46,60 @@
Context::set('module_info', $module_info);
}
}
}
/**
* @brief 카페 메인 출력
**/
function dispHomepageIndex() {
$oHomepageAdminModel = &getAdminModel('homepage');
$oHomepageModel = &getModel('homepage');
$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 = 'xe_default';
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
}
$this->setTemplatePath($template_path);
// 카페 목록을 구함
$page = Context::get('page');
$output = $oHomepageAdminModel->getHomepageList($page);
if($output->data && count($output->data)) {
foreach($output->data as $key => $val) {
$banner_src = 'files/attach/cafe_banner/'.$val->site_srl.'.jpg';
if(file_exists(_XE_PATH_.$banner_src)) $output->data[$key]->cafe_banner = $banner_src.'?rnd='.filemtime(_XE_PATH_.$banner_src);
}
}
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('homepage_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
// 카페 생성 권한 세팅
if($oHomepageModel->isCreationGranted()) {
Context::set('isEnableCreateCafe', true);
Context::addJsFilter($this->module_path.'tpl/filter', 'cafe_creation.xml');
}
// 카페의 최신 글 추출
$output = executeQueryArray('homepage.getNewestDocuments');
Context::set('newest_documents', $output->data);
// 카페의 최신 댓글 추출
$output = executeQueryArray('homepage.getNewestComments');
Context::set('newest_comments', $output->data);
$logged_info = Context::get('logged_info');
if($logged_info->member_srl) {
$myargs->member_srl = $logged_info->member_srl;
$output = executeQueryArray('homepage.getMyCafes', $myargs);
Context::set('my_cafes', $output->data);
}
$this->setTemplateFile('index');
}
/**
* @brief 홈페이지 기본 관리
@ -56,7 +112,6 @@
$homepage_config = $oHomepageModel->getConfig($this->site_srl);
Context::set('homepage_config', $homepage_config);
debugPrint($homepage_config);
// 다운로드 되어 있는 레이아웃 목록을 구함
$layout_list = $oLayoutModel->getDownloadedLayoutList();

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = "CafeXE";
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = "Title of cafe";
$lang->cafe_description = 'Description of cafe';
$lang->cafe_banner = 'Banner of Cafe';
$lang->module_type = "Type of target module";
$lang->board = "Board";
$lang->page = "Page";
@ -15,6 +18,11 @@
$lang->cafe_info = "Cafe Infomation";
$lang->cafe_admin = "CafeXE administrator";
$lang->do_selected_member = "Change the selected members into : ";
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -23,9 +31,13 @@
$lang->allow_service = '허용 서비스';
$lang->about_allow_service = '개별 카페에서 사용할 기본 서비스를 설정할 수 있습니다';
$lang->cmd_make_cafe = 'create Cafe';
$lang->cmd_make_cafe = 'Cafe creation';
$lang->cmd_import = 'Import';
$lang->cmd_export = 'Export';
$lang->cafe_creation_privilege = 'Cafe creation privilege';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => 'Home',
@ -87,6 +99,7 @@
$lang->confirm_change_layout = "If you change the layout, some information of the layout might be reset. Would you like to change it?";
$lang->confirm_delete_menu_item = "If you delete the menu item, the linked module(board or page) will be removed, too. Would you like to delete it?";
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = 'CafeXE';
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = 'Nombre de café';
$lang->cafe_description = 'Description of cafe';
$lang->cafe_banner = 'Banner of Cafe';
$lang->module_type = 'Meta';
$lang->board = 'Boletines';
$lang->page = 'Página';
@ -15,6 +18,11 @@
$lang->cafe_info = 'Cafe Información';
$lang->cafe_admin = 'Gerente de café';
$lang->do_selected_member = 'Los miembros seleccionados: ';
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -23,9 +31,13 @@
$lang->allow_service = '허용 서비스';
$lang->about_allow_service = '개별 카페에서 사용할 기본 서비스를 설정할 수 있습니다';
$lang->cmd_make_cafe = '카페 생성';
$lang->cmd_make_cafe = 'Café creación';
$lang->cmd_import = 'Import';
$lang->cmd_export = 'Export';
$lang->cafe_creation_privilege = 'Café creación privilegio';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => 'Inicio',
@ -86,6 +98,7 @@
$lang->confirm_change_layout = 'Si cambia el diseño de algunas de la información relativa al diseño puede desaparecer. ¿Te gustaría cambiar?';
$lang->confirm_delete_menu_item = 'Eliminación de un elemento de menú o de la página, el módulo está conectado con el boletín se eliminarán. Si desea eliminar?';
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = "CafeXE";
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = "ホームページ名";
$lang->cafe_description = 'Description of cafe';
$lang->cafe_banner = 'Banner of Cafe';
$lang->module_type = "タイプ";
$lang->board = "掲示板";
$lang->page = "ページ";
@ -15,6 +18,11 @@
$lang->cafe_info = "Cafe Infomation";
$lang->cafe_admin = "ホームページ管理者";
$lang->do_selected_member = "選択した会員を : ";
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -26,6 +34,10 @@
$lang->cmd_make_cafe = '카페 생성';
$lang->cmd_import = 'Import';
$lang->cmd_export = 'Export';
$lang->cafe_creation_privilege = 'カフェの作成権限';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => 'ホーム',
@ -86,6 +98,7 @@
$lang->confirm_change_layout = "レイアウトの変更時、一部のレイアウト情報が失われる可能性があります。 変更しますか?";
$lang->confirm_delete_menu_item = "メニューの削除時、リンクされている掲示板やページモジュールも一緒に削除されます。削除しますか?";
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = 'CafeXE';
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = 'Cafe 이름';
$lang->cafe_description = 'Cafe 설명';
$lang->cafe_banner = 'Cafe 배너이미지';
$lang->module_type = '대상';
$lang->board = '게시판';
$lang->page = '페이지';
@ -15,6 +18,11 @@
$lang->cafe_info = '카페 정보';
$lang->cafe_admin = 'Cafe 관리자';
$lang->do_selected_member = '선택된 회원을 : ';
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -26,6 +34,10 @@
$lang->cmd_make_cafe = '카페 생성';
$lang->cmd_import = '가져오기';
$lang->cmd_export = '내보내기';
$lang->cafe_creation_privilege = '카페 생성 권한';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => '홈',
@ -86,6 +98,7 @@
$lang->confirm_change_layout = '레이아웃을 변경할 경우 레이아웃 정보들 중 일부가 사라질 수가 있습니다. 변경하시겠습니까?';
$lang->confirm_delete_menu_item = '메뉴 항목 삭제시 연결되어 있는 게시판이나 페이지 모듈도 같이 삭제가 됩니다. 그래도 삭제하시겠습니까?';
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = "站点";
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = "站点名称";
$lang->cafe_description = 'Description of cafe';
$lang->cafe_banner = 'Banner of Cafe';
$lang->module_type = "对象";
$lang->board = "版面";
$lang->page = "页面";
@ -15,6 +18,11 @@
$lang->cafe_info = "站点信息";
$lang->cafe_admin = "管理员";
$lang->do_selected_member = "把所选用户 : ";
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -26,6 +34,10 @@
$lang->cmd_make_cafe = '카페 생성';
$lang->cmd_import = 'Import';
$lang->cmd_export = 'Export';
$lang->cafe_creation_privilege = '咖啡厅建立特权';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => '首页',
@ -86,6 +98,7 @@
$lang->confirm_change_layout = "切换布局可能一些原有的信息将无法显示。你确定要切换吗?";
$lang->confirm_delete_menu_item = "删除菜单:即同时删除链接到此菜单的版面或页面模块。你确定要删除吗?";
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,7 +6,10 @@
**/
$lang->cafe = "虛擬網站";
$lang->cafe_id = "카페 접속 ID";
$lang->cafe_title = "網站名稱";
$lang->cafe_description = 'Description of cafe';
$lang->cafe_banner = 'Banner of Cafe';
$lang->module_type = "目標";
$lang->board = "討論板";
$lang->page = "頁面";
@ -15,6 +18,11 @@
$lang->cafe_info = "網站資訊";
$lang->cafe_admin = "網站管理者";
$lang->do_selected_member = "選擇會員 : ";
$lang->cafe_latest_documents = '카페 최신 글';
$lang->cafe_latest_comments = '카페 최신 댓글';
$lang->mycafe_list = '가입한 카페';
$lang->cafe_creation_type = '카페 접속 방법';
$lang->about_cafe_creation_type = '사용자들이 카페를 생성할때 카페 접속 방법을 정해야 합니다. Site ID는 http://기본주소/ID 로 접속 가능하고 Domain 접속은 입력하신 도메인의 2차 도메인(http://domain.mydomain.net) 으로 카페가 생성됩니다';
$lang->default_layout = '기본 레이아웃';
$lang->about_default_layout = '카페가 생성될때 설정될 기본 레이아웃을 지정할 수 있습니다';
@ -26,6 +34,10 @@
$lang->cmd_make_cafe = '建立網站';
$lang->cmd_import = 'Import';
$lang->cmd_export = 'Export';
$lang->cafe_creation_privilege = '咖啡廳建立特權';
$lang->cafe_main_mid = '카페 메인 ID';
$lang->about_cafe_main_mid = '카페 메인 페이지를 http://주소/ID 값으로 접속하기 위한 ID값을 입력해주세요.';
$lang->default_menus = array(
'home' => '首頁',
@ -87,6 +99,7 @@
$lang->confirm_change_layout = "變換版面可能會使原來的資料無法顯示。確定要變換嗎?";
$lang->confirm_delete_menu_item = "刪除選單:刪除選單的同時,將會使連結到選單的討論板或頁面一起刪除。確定要刪除嗎?";
$lang->msg_module_count_exceed = '허용된 모듈의 개수를 초과하였기에 생성할 수 없습니다';
$lang->msg_not_enabled_id = '사용할 수 없는 아이디입니다';
$lang->msg_same_site = '동일한 가상 사이트의 모듈은 이동할 수가 없습니다';
$lang->about_move_module = '가상사이트와 기본사이트간의 모듈을 옮길 수 있습니다.<br/>다만 가상사이트끼리 모듈을 이동하거나 같은 이름의 mid가 있을 경우 예기치 않은 오류가 생길 수 있으니 꼭 가상 사이트와 기본 사이트간의 다른 이름을 가지는 모듈만 이동하세요';
?>

View file

@ -6,6 +6,7 @@
</tables>
<columns>
<column name="homepages.*" />
<column name="homepages.description" alias="cafe_description"/>
<column name="sites.domain" alias="domain" />
<column name="modules.*" />
</columns>

View file

@ -6,7 +6,8 @@
</tables>
<columns>
<column name="homepages.site_srl" alias="site_srl" />
<column name="homepages.title" alias="homepage_title" />
<column name="homepages.title" alias="cafe_title" />
<column name="homepages.description" alias="cafe_description" />
<column name="sites.domain" alias="domain" />
<column name="modules.*" />
</columns>

View file

@ -0,0 +1,24 @@
<query id="getMyCafes" action="select">
<tables>
<table name="homepages" />
<table name="sites" />
<table name="modules" />
<table name="member_group_member" />
</tables>
<columns>
<column name="homepages.site_srl" alias="site_srl" />
<column name="homepages.title" alias="cafe_title" />
<column name="homepages.description" alias="cafe_description" />
<column name="sites.domain" alias="domain" />
<column name="modules.*" />
</columns>
<conditions>
<condition operation="equal" column="sites.site_srl" default="homepages.site_srl" filter="number" notnull="notnull" />
<condition operation="equal" column="modules.module_srl" default="sites.index_module_srl" pipe="and" />
<condition operation="equal" column="member_group_member.site_srl" default="modules.site_srl" pipe="and" />
<condition operation="equal" column="member_group_member.member_srl" var="member_srl" filter="number" notnull="notnull" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="member_group_member.regdate" order="desc" />
</navigation>
</query>

View file

@ -0,0 +1,23 @@
<query id="getNewestComments" action="select">
<tables>
<table name="homepages" />
<table name="sites" />
<table name="modules" />
<table name="comments" />
</tables>
<columns>
<column name="sites.domain" alias="domain" />
<column name="comments.*" />
</columns>
<conditions>
<condition operation="equal" column="homepages.site_srl" default="sites.site_srl" notnull="notnull" />
<condition operation="equal" column="homepages.site_srl" default="modules.site_srl" notnull="notnull" pipe="and" />
<condition operation="equal" column="comments.module_srl" default="modules.module_srl" notnull="notnull" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="comments.list_order" order="asc" />
<list_count var="list_count" default="10" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -0,0 +1,23 @@
<query id="getNewestDocuments" action="select">
<tables>
<table name="homepages" />
<table name="sites" />
<table name="modules" />
<table name="documents" />
</tables>
<columns>
<column name="sites.domain" alias="domain" />
<column name="documents.*" />
</columns>
<conditions>
<condition operation="equal" column="homepages.site_srl" default="sites.site_srl" notnull="notnull" />
<condition operation="equal" column="homepages.site_srl" default="modules.site_srl" notnull="notnull" pipe="and" />
<condition operation="equal" column="documents.module_srl" default="modules.module_srl" notnull="notnull" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="documents.list_order" order="asc" />
<list_count var="list_count" default="10" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -4,6 +4,7 @@
</tables>
<columns>
<column name="title" var="title" notnull="notnull" />
<column name="description" var="description" />
<column name="layout_srl" var="layout_srl" notnull="notnull" />
</columns>
<conditions>

View file

@ -5,5 +5,6 @@
<column name="first_menu_srl" type="number" size="11" notnull="notnull" />
<column name="second_menu_srl" type="number" size="11" notnull="notnull" />
<column name="list_order" type="number" size="11" notnull="notnull" index="idx_list_order" />
<column name="description" type="text" />
<column name="regdate" type="date" />
</table>

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 B

View file

@ -0,0 +1,149 @@
<!--%import("./style.css")-->
<!--@if($module_info->title)-->
<div class="cafeHeader">
<div class="cafeTitle">
<h2 class="cafeTitleText"><a href="{getUrl('','mid',$mid,'listStyle',$listStyle)}">{$module_info->title}<!--@if($module_info->sub_title)--> : <em>{$module_info->sub_title}</em><!--@end--></a></h2>
</div>
<!--@end-->
<!--@if($module_info->comment)-->
<p class="cafeDescription">{$module_info->comment}</p>
</div>
<!--@end-->
<div class="cafeBox">
<div class="cafeLeftBox">
<!--@if($module_info->intro_title)-->
<div class="intro">
<h3>{$module_info->intro_title}</h3>
<img src="{$module_info->intro_image}" alt="" align="left" />
{$module_info->intro_description}
<span class="url"><a href="{$module_info->intro_url}" onclick="window.open(this.href); return false;">{$module_info->intro_url}</a></span>
</div>
<!--@end-->
<div>
<ul class="cafeList">
<!--@foreach($homepage_list as $key => $val)-->
<li>
<p class="titleArea">
<a class="title" href="{getSiteUrl($val->domain)}" onclick="window.open(this.href); return false;">{($val->cafe_title)}</a>
</p>
<p class="text">
<!--@if($val->cafe_banner)-->
<a class="thumb" href="{$val->link}" onclick="window.open(this.href); return false;"><img src="{$val->cafe_banner}" width="100" height="100" align="left"/></a>
<!--@end-->
<!--@if($val->cafe_description)-->
{preg_replace('/<([^>]+)>/i','',$val->cafe_description)}
<!--@end-->
</p>
<p class="url">
<a href="{getSiteUrl($val->domain)}" onclick="window.open(this.href); return false;">{getSiteUrl($val->domain)}</a>
</p>
<p class="date">
{zdate($val->regdate,"Y/m/d H:i")}
</p>
</li>
<!--@end-->
</ul>
</div>
<div class="pagination a1">
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="prevEnd">{$lang->first_page}</a>
<!--@if($page_navigation)-->
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="nextEnd">{$lang->last_page}</a>
</div>
</div>
<hr class="cafeHR" />
<div class="cafeRightBox">
<!--@if($is_logged)-->
<div class="cafeContext">
<!--@if($isEnableCreateCafe)-->
<h3>{$lang->cmd_make_cafe}</h3>
<form action="./" method="post" onsubmit="return procFilter(this, cafe_creation);">
<table cellspacing="0" class="cafeTable">
<tr>
<th><div>{$lang->cafe_id}</div></th>
</tr>
<tr>
<td class="wide">
<input type="text" name="cafe_id" class="inputTypeText cafeID" />
</td>
</tr>
<tr>
<th><div>{$lang->cafe_title}</div></th>
</tr>
<tr>
<td class="wide"><input type="text" name="cafe_title" class="inputTypeText cafeTitle"/></td>
</tr>
<tr>
<th><div>{$lang->cafe_description}</div></th>
</tr>
<tr>
<td><textarea name="cafe_description" class="inputTypeTextArea cafeDescription"></textarea></td>
</tr>
<tr>
<th class="button"><span class="button black strong"><input type="submit" value="{$lang->cmd_make_cafe}" /></span></th>
</tr>
</table>
</form>
<!--@end-->
<!--@if($my_cafes && count($my_cafes))-->
<h3>{$lang->mycafe_list} ({count($my_cafes)})</h3>
<ul>
<!--@foreach($my_cafes as $key => $val)-->
<li>
<a href="{getSiteUrl($val->domain)}" onclick="window.open(this.href);return false;">{cut_str($val->cafe_title,30)}</a>
</li>
<!--@end-->
</ul>
<!--@end-->
</div>
<!--@end-->
<!--@if($newest_documents)-->
<div class="cafeContext">
<h3>{$lang->cafe_latest_documents}</h3>
<ul>
<!--@foreach($newest_documents as $key => $val)-->
<li>
<span class="member_{$val->member_srl}">{cut_str($val->nick_name,10)}</span> - <a href="{getSiteUrl($val->domain,'document_srl',$val->document_srl)}" onclick="window.open(this.href);return false;">{cut_str($val->title,30)}</a>
</li>
<!--@end-->
</ul>
</div>
<!--@end-->
<!--@if($newest_comments)-->
<div class="cafeContext">
<h3>{$lang->cafe_latest_comments}</h3>
<ul>
<!--@foreach($newest_comments as $key => $val)-->
<li>
<span class="member_{$val->member_srl}">{cut_str($val->nick_name,10)}</span> - <a href="{getSiteUrl($val->domain,'document_srl',$val->document_srl)}#comment_{$val->comment_srl}" onclick="window.open(this.href);return false;">{cut_str(preg_replace('/<([^>]+)>/i','',$val->content),30)}</a>
</li>
<!--@end-->
</ul>
</div>
<!--@end-->
</div>
</div>

View file

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">Cafe 기본 Skin</title>
<description xml:lang="ko">
Cafe 기본 스킨입니다.
</description>
<version>0.1</version>
<date>2009-04-03</date>
<author email_address="zero@xpressengine.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
</author>
<license>GPL</license>
<colorset>
<color name="default">
<title xml:lang="ko">기본</title>
</color>
</colorset>
<extra_vars>
<var name="title" type="text">
<title xml:lang="ko">제목</title>
<description xml:lang="ko">제목을 적어주세요.</description>
</var>
<var name="sub_title" type="text">
<title xml:lang="ko">부제목</title>
<description xml:lang="ko">제목 옆에 나타날 부제목을 적어주세요.</description>
</var>
<var name="comment" type="textarea">
<title xml:lang="ko">상세 설명</title>
<description xml:lang="ko">제목 아래 표시될 설명을 입력하실 수 있습니다.</description>
</var>
<var name="intro_title" type="text">
<title xml:lang="ko">카페 소개 제목</title>
<description xml:lang="ko">소개할 카페의 제목을 입력해주세요. (메인 노출)</description>
</var>
<var name="intro_description" type="textarea">
<title xml:lang="ko">카페 소개 내용</title>
<description xml:lang="ko">소개할 카페의 내용을 입력해주세요. (메인 노출)</description>
</var>
<var name="intro_image" type="image">
<title xml:lang="ko">카페 소개 이미지</title>
<description xml:lang="ko">소개할 카페의 내용에 포함되는 이미지를 등록해주세요. (메인 노출)</description>
</var>
<var name="intro_url" type="text">
<title xml:lang="ko">카페 소개 링크 </title>
<description xml:lang="ko">소개할 카페의 링크를 입력해주세요. (http:// 모두 포함)</description>
</var>
</extra_vars>
</skin>

View file

@ -0,0 +1,120 @@
@charset "utf-8";
/* header */
.cafeHeader *{ margin:0 0 30px 0; padding:0;}
.cafeHeader .cafeTitle{ font-size:1em; letter-spacing:-.1em; margin-bottom:10px; border-bottom:3px solid; *zoom:1; background-repeat:no-repeat; background-position:left center;}
.cafeHeader .cafeTitle:after{ content:""; display:block; clear:both;}
.cafeHeader .cafeTitleText{ float:left; clear:both; margin-bottom:-3px; padding:5px 15px 5px 5px; border-bottom:3px solid; background-repeat:no-repeat; background-position:right bottom;}
.cafeHeader .cafeTitleText a{ text-decoration:none;}
.cafeHeader .cafeTitleText em{ font-style:normal; font-weight:normal;}
.cafeHeader .cafeDescription{ padding:7px 15px; -moz-border-radius:3px; -webkit-border-radius:3px; position:relative;}
.cafeHeader .cafeTitle{ border-color:#ddd; }
.cafeHeader .cafeTitleText{ border-color:#666; background-image:url(./img/lineVr11.gif);}
.cafeHeader .cafeTitleText a{ color:#000;}
.cafeHeader .cafeTitleText em{ color:#666;}
.cafeHeader .cafeDescription{ background:#f8f8f8; }
/* layout */
div.cafeBox { position:relative; padding:0 250px 0 0; *zoom:1; }
div.cafeBox:after{ content:""; display:block; clear:both;}
div.cafeBox a { text-decoration:none; }
div.cafeBox a:hover { text-decoration:underline; position:relative; }
div.cafeLeftBox { position:relative; margin-bottom:20px; text-align:justify; float:left; width:100%;}
div.cafeRightBox { position:relative; width:230px; float:right; clear:right; margin-left:-230px; right:-250px; }
hr.cafeHR { display:none; position:absolute;}
/* intro */
div.intro { border:4px solid #ddd; margin-bottom:20px; padding:10px; *zoom:1; overflow:hidden;}
div.intro h3 { width:100%; padding:0 0 5px 0; border-bottom:2px solid #aaa; margin-bottom:10px; }
div.intro img { padding:0; margin:10px; }
div.intro .url { text-align:right; display:block; }
div.intro .url a { color:#5B96C2; }
/* cafe list */
.cafeList div.tabContent { display:none; }
.cafeList{ position:relative; margin:0; padding:0; font-size:12px; line-height:1.5; *zoom:1;}
.cafeList:after{ content:""; display:block; clear:both;}
.cafeList li { list-style:none; clear:both; margin-bottom:10px; padding-bottom:10px; *zoom:1; overflow:hidden; border-bottom:1px dotted #ddd;}
.cafeList li p{ margin:0; padding:0;}
.cafeList li p.thumbArea{ position:relative; float:left; overflow:hidden; margin-right:10px; }
.cafeList li p.titleArea{ margin-bottom:4px; overflow:hidden; white-space:nowrap; padding-right:2px; font-size:16px; }
.cafeList li p.titleArea .board{ padding-right:5px;}
.cafeList li p.text{ margin-bottom:4px; clear:both; padding-left:10px;}
.cafeList li p.url { color:#5B96C2; float:left; clear:left; }
.cafeList li p.url a { color:#5B96C2!important; }
.cafeList li p.date { float:right; color:#999; font-weight:normal;}
.cafeList li .thumb{ text-decoration:none; overflow:hidden; width:100px; height:100px; }
.cafeList li .thumb img { margin:0 5px 5px 0; padding:1px; border:1px solid #eee; }
.cafeList li .title{ font-weight:bold;}
.cafeList li .replyNum a{ font:10px Tahoma; margin:0 -1px;}
.cafeList li .trackbackNum a{ font:10px Tahoma; margin:0 -1px;}
.cafeList li .author{ margin-right:10px;}
.cafeList li .date{ font:11px Tahoma; }
.cafeList li .hour{ font:11px Tahoma;}
.cafeList li .board{ color:#333; background:url(./img/lineTextDiv.gif) no-repeat right center;}
.cafeList li .title{ color:#666;}
.cafeList li .replyNum a{ color:#ff1a1a;}
.cafeList li .trackbackNum a{ color:#66c;}
.cafeList li .author{ color:#333;}
.cafeList li .category{ color:#333; background:url(./img/lineTextDiv.gif) no-repeat right center;}
.cafeList li .date{ font-weight:bold; }
.cafeList li .hour{ color:#888;}
.cafeList li .text{ color:#888;}
/* Pagination Reset */
.pagination{ padding:15px 0; margin:0; text-align:center;}
.pagination *{ margin:0; padding:0;}
.pagination img{ border:0;}
.pagination a,
.pagination strong{ position:relative; display:inline-block; text-decoration:none; line-height:normal; color:#333; font-family:Tahoma, Sans-serif; vertical-align:middle;}
.pagination a:hover,
.pagination a:active,
.pagination a:focus{ background-color:#f4f4f4 !important; }
.pagination strong{ color:#ff6600 !important;}
.pagination a.prev,
.pagination a.prevEnd,
.pagination a.next,
.pagination a.nextEnd{ font-weight:normal !important; border:none !important; margin:0 !important; white-space:nowrap; }
/* Pagination A1 */
.pagination.a1 a,
.pagination.a1 strong{ margin:0 -4px; padding:1px 10px 1px 8px; border:none; border-left:1px solid #ccc; border-right:1px solid #ddd; font-weight:bold; font-size:12px; background:#fff;}
.pagination.a1 a.prev{ padding-left:10px; background:#fff url(./img/arrowPrevA1.gif) no-repeat left center; }
.pagination.a1 a.prevEnd{ padding-left:15px; background:#fff url(./img/arrowPrevEndA1.gif) no-repeat left center; }
.pagination.a1 a.next{ padding-right:10px; background:#fff url(./img/arrowNextA1.gif) no-repeat right center; }
.pagination.a1 a.nextEnd{ padding-right:15px; background:#fff url(./img/arrowNextEndA1.gif) no-repeat right center; }
/* cafe creation */
#cafeCreation { margin-bottom:10px; overflow:hidden; *zoom:1; position:relative;}
#cafeCreation a { text-decoration:none; }
#cafeCreation a:hover { text-decoration:underline; }
#cafeCreation { margin-bottom:30px; position:relative; *zoom:1;}
/* cafe context */
div.cafeContext { margin-bottom:20px; }
div.cafeContext h3 { font-size:12px; color:#777; border-bottom:2px solid #ccc; padding:3px; margin:0 0 10px 0;}
div.cafeContext ul { list-style:none; margin:10px 5px; padding:0; }
div.cafeContext ul li { margin:0 0 3px 0; padding:0; color:#aaa; white-space:nowrap; overflow:hidden; height:20px; }
div.cafeContext ul li span { color:#5B96C2; cursor:pointer;}
div.cafeContext ul li a { color:#728694!important; }
div.cafeContext ul li a img { vertical-align:middle; }
.cafeTable{ width:100%; border:0; margin:0 0 20px 0; padding:0;}
.cafeTable th div { white-space:nowrap; }
.cafeTable th,
.cafeTable td{ border:0; padding:5px 10px; vertical-align:top;}
.cafeTable th{ background:#f4f4f4;}
.cafeTable thead th{ border-top:2px solid #cfcfcf; border-bottom:1px solid #e5e5e5; background-image:url(../img/lineVrText.gif); background-repeat:no-repeat; background-position:left center;}
.cafeTable thead th:first-child{ background-image:none;}
.cafeTable tbody th{ border-bottom:1px solid #e5e5e5; text-align:left;}
.cafeTable td{ border-bottom:1px solid #f0f0f0;}
.cafeTable th.button { text-align:right; }
.cafeTable td.alert { color:red !important; }
.cafeTable td.alert a { text-decoration:none; color:red !important; }
input.cafeID { width:150px; }
input.cafeTitle { width:90%; }
textarea.cafeDescription{ width:90%; height:40px;}

View file

@ -0,0 +1,11 @@
<filter name="cafe_creation" module="homepage" act="procHomepageCafeCreation">
<form>
<node target="cafe_id" required="true" filter="userid" minlength="4" maxlength="12"/>
<node target="cafe_title" required="true" minlength="4" maxlength="20"/>
<node target="cafe_description" required="true" minlength="10" maxlength="200"/>
</form>
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -1,39 +0,0 @@
<filter name="insert_board" module="homepage" act="procHomepageInsertBoard" 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="consultation" target="consultation" />
<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" />
<param name="admin_id" target="admin_id" />
</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>

View file

@ -1,11 +0,0 @@
<filter name="insert_grant" module="homepage" act="procHomepageInsertBoardGrant" confirm_msg_code="confirm_submit">
<form>
<node target="module_srl" required="true" />
</form>
<response callback_func="completeInsertGrant">
<tag name="error" />
<tag name="message" />
<tag name="page" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -1,10 +0,0 @@
<filter name="insert_page" module="homepage" act="procHomepageInsertPage" confirm_msg_code="confirm_submit">
<form>
<node target="module_srl" required="true" filter="number" />
</form>
<parameter />
<response callback_func="completeInsertPage">
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -13,7 +13,7 @@
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col" class="half_wide"><div>{$lang->title}</div></th>
<th scope="col" class="half_wide"><div>{$lang->domain} / {$lang->vid}</div></th>
<th scope="col" class="half_wide"><div>{$lang->domain} / Site ID</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col" colspan="3"><div>&nbsp;</div></th>
</tr>
@ -22,7 +22,7 @@
<!--@foreach($homepage_list as $no => $val)-->
<tr class="row{$cycle_idx}">
<td>{$no}</td>
<td><a href="{getSiteUrl($val->domain,'module','homepage','act','dispHomepageManage','site_srl',$val->site_srl)}">{htmlspecialchars($val->homepage_title)}</a></td>
<td><a href="{getSiteUrl($val->domain,'module','homepage','act','dispHomepageManage','site_srl',$val->site_srl)}">{htmlspecialchars($val->cafe_title)}</a></td>
<td><a href="{getSiteUrl($val->domain)}" onclick="window.open(this.href);return false;">{$val->domain}</a></td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="{getUrl('act','dispHomepageAdminSetup','site_srl',$val->site_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a></td>
@ -80,10 +80,65 @@
</table>
</form>
<form action="./" method="post" onsubmit="return procFilter(this, insert_config)">
<form action="./" method="post" onsubmit="return procFilter(this, insert_config)" id="cafeSetup">
<h3 class="xeAdmin">{$lang->cmd_setup}</h3>
<table cellspacing="0" class="rowTable">
<tbody>
<tr>
<th colspan="2" scope="row"><div>{$lang->cafe_main_mid}</div></th>
</tr>
<tr>
<td colspan="2">
<input type="input" name="cafe_main_mid" value="{$homepage_config->cafe_main_mid}" class="inputTypeText" />
<p>{$lang->about_cafe_main_mid}</p>
</td>
</tr>
<tr>
<th colspan="2" scope="row"><div>{$lang->browser_title}</div></th>
</tr>
<tr>
<td colspan="2">
<input type="input" name="browser_title" value="{$homepage_config->browser_title}" class="inputTypeText" />
</td>
</tr>
<tr>
<th colspan="2" scope="row"><div>{$lang->skin}</div></th>
</tr>
<tr>
<td colspan="2">
<select name="skin">
<!--@foreach($skins as $key => $val)-->
<option value="{$key}" <!--@if($homepage_config->skin== $key)-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<!--@if($homepage_config->module_srl)-->
<a href="{getUrl('act','dispHomepageAdminSkinSetup','module_srl',$homepage_config->module_srl)}" class="button"><span>{$lang->cmd_setup}</span></a>
<!--@end-->
</td>
</tr>
<tr>
<th colspan="2" scope="row"><div>{$lang->cafe_creation_type}</div></th>
</tr>
<tr>
<td colspan="2">
<label for="chkCafeVid"><input type="radio" id="chkCafeVid" name="access_type" value="vid" onclick="toggleCafeAccessType('vid');" <!--@if($homepage_config->access_type=='vid')-->checked="checked"<!--@end--> /> {$lang->access_vid}</label>
<label for="chkCafeDomain"><input type="radio" id="chkCafeDomain" name="access_type" value="domain" onclick="toggleCafeAccessType('domain');" <!--@if($homepage_config->access_type!='vid')-->checked="checked"<!--@end--> /> {$lang->access_domain}</label>
<div id="accessCafeDomain" style="display:<!--@if($homepage_config->access_type=='vid')-->none<!--@end-->; margin-top:10px;">
URL : <input type="text" name="default_domain" value="{$homepage_config->default_domain}" class="inputTypeText w200" />
</div>
<p>{$lang->about_cafe_creation_type}</p>
</td>
</tr>
<tr>
<th colspan="2" scope="row"><div>{$lang->cafe_creation_privilege}</div></th>
</tr>
<tr>
<td colspan="2">
<!--@foreach($groups as $key => $val)-->
<input type="checkbox" name="creation_group" <!--@if(in_array($val->group_srl, $homepage_config->creation_group))-->checked="checked"<!--@end--> value="{$val->group_srl}" id="creation_group_{$key}"/><label for="creation_group_{$key}">{$val->title}</label>
<!--@end-->
</td>
</tr>
<tr>
<th colspan="2" scope="row"><div>{$lang->default_layout}</div></th>
</tr>

View file

@ -414,6 +414,17 @@ function toggleAccessType(target) {
}
}
function toggleCafeAccessType(target) {
switch(target) {
case 'domain' :
xGetElementById('accessCafeDomain').style.display = 'block';
break;
case 'vid' :
xGetElementById('accessCafeDomain').style.display = 'none';
break;
}
}
function importModule(id) {
popopen( request_uri.setQuery('module','module').setQuery('act','dispModuleSelectList').setQuery('id',id).setQuery('type','single'), 'ModuleSelect');
}

View file

@ -4,6 +4,39 @@
<!--#include("_header.html")-->
<h4 class="xeAdmin">{$lang->cafe_info}</h4>
<form method="post" action="{Context::getRequestUri()}" enctype="multipart/form-data" >
<!--@if(isSiteID($site_module_info->domain))-->
<input type="hidden" name="vid" value="{$site_module_info->domain}"/>
<!--@end-->
<input type="hidden" name="site_srl" value="{$homepage_info->site_srl}" />
<input type="hidden" name="module" value="homepage" />
<input type="hidden" name="act" value="procHomepageInsertCafeBanner" />
<table cellspacing="0" class="rowTable">
<tr>
<th><div>{$lang->cafe_title}</div></th>
<td class="wide"><input type="text" name="cafe_title" value="{htmlspecialchars($homepage_info->title)}" class="inputTypeText" /></td>
</tr>
<tr>
<th><div>{$lang->cafe_description}</div></th>
<td class="wide"><textarea name="cafe_description" class="inputTypeTextArea" style="width:90%;">{htmlspecialchars($homepage_info->cafe_description)}</textarea></td>
</tr>
<tr>
<th><div>{$lang->cafe_banner}</div></th>
<td class="wide">
<!--@if($homepage_info->cafe_banner)-->
<img src="{$homepage_info->cafe_banner}" alt="cafe banner" style="display:block;margin-bottom:10px;"/>
<!--@end-->
<input type="file" name="cafe_banner" value="" class="inputTypeText" />
</td>
</tr>
<tr>
<th class="button" colspan="2">
<span class="button black strong"><input type="submit" value="{$lang->cmd_save}" /></span>
</th>
</tr>
</table>
</form>
<h4 class="xeAdmin">{$lang->cmd_select_index}</h4>
<form method="post" action="./" onsubmit="return procFilter(this,update_index_mid)" class="midDefault">

View file

@ -0,0 +1,3 @@
<script type="text/javascript">
history.back();
</script>

View file

@ -0,0 +1,3 @@
<a href="{getUrl('act','dispHomepageAdminContent','module_srl','')}" class="button black fr"><span>{$lang->cmd_back}</span></a>
{$skin_content}

View file

@ -17,6 +17,8 @@
* @brief mid, vid 사용할 있는지 검사
**/
function isIDExists($id, $site_srl = 0) {
if(!preg_match('/^[a-z]{1}([a-z0-9_]+)$/i',$id)) return true;
// directory 및 rss/atom/api 등 예약어 검사
$dirs = FileHandler::readDir(_XE_PATH_);
$dirs[] = 'rss';