git-svn-id: http://xe-core.googlecode.com/svn/trunk@815 201d5d3c-b55e-5fd7-737f-ddc643e51545

This commit is contained in:
zero 2007-03-30 06:57:56 +00:00
parent d7038c609f
commit ff8af9927f
17 changed files with 0 additions and 0 deletions

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<title xml:lang="ko">페이지 제작</title>
<author email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
<name xml:lang="ko">제로</name>
<description xml:lang="ko">페이지를 제작하여 컨텐츠로 연결할 수 있는 모듈</description>
</author>
</module>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants />
<actions>
<action name="dispIndex" type="view" index="true" />
<action name="dispAdminContent" type="view" admin_index="true" standalone="true" />
<action name="dispAdminModuleConfig" type="view" standalone="true" />
<action name="dispAdminPageInfo" type="view" standalone="true" />
<action name="dispAdminInsertPage" type="view" standalone="true" />
<action name="dispAdminDeletePage" type="view" standalone="true" />
<action name="procInsertPage" type="controller" standalone="true" />
<action name="procDeletePage" type="controller" standalone="true" />
<action name="procInsertConfig" type="controller" standalone="true" />
<action name="procUploadFile" type="controller" standalone="true" />
<action name="procDeleteFile" type="controller" standalone="true" />
</actions>
</module>

View file

@ -0,0 +1,14 @@
<?php
/**
* @file modules/pagemaker/lang/ko.lang.php
* @author zero <zero@nzeo.com>
* @brief 페이지생성기 (pagemaker) 모듈의 기본 언어팩
**/
$lang->about_mid = "모듈이름은 http://주소/?mid=모듈이름 처럼 직접 호출할 수 있는 값입니다. (영문+숫자만 가능)";
$lang->about_category = "분류를 통한 관리를 할 수 있도록 합니다. 모듈 분류의 관리는 <a href=\"./?module=admin&amp;act=dispCategory&amp;mo=module\">모듈관리 > 모듈카테고리</a>에서 하실 수 있습니다.";
$lang->about_browser_title = "브라우저의 제목에 나타나는 값입니다. RSS/Trackback에서도 사용됩니다.";
$lang->about_default = "선택하시면 사이트에 mid값 없이 접속하였을 경우 기본으로 보여줍니다";
$lang->msg_new_module = "모듈 생성";
$lang->msg_update_module = "모듈 수정";
?>

View file

@ -0,0 +1,35 @@
<?php
/**
* @class pagemaker
* @author zero (zero@nzeo.com)
* @brief pagemaker 모듈의 high class
**/
class pagemaker extends ModuleObject {
/**
* @brief 설치시 추가 작업이 필요할시 구현
**/
function moduleInstall() {
// plugin 에서 사용할 cache디렉토리 생성
FileHandler::makeDir('./files/cache/page');
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function moduleIsInstalled() {
return new Object();
}
/**
* @brief 업데이트 실행
**/
function moduleUpdate() {
return new Object();
}
}
?>

View file

@ -0,0 +1,123 @@
<?php
/**
* @class pagemakerController
* @author zero (zero@nzeo.com)
* @brief pagemaker 모듈의 controller class
**/
class pagemakerController extends pagemaker {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 페이지 추가
**/
function procInsertPage() {
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
$args = Context::gets('module_srl','layout_srl','module_category_srl','page_name','browser_title','content','is_default');
$args->module = 'pagemaker';
$args->mid = $args->page_name;
unset($args->page_name);
if($args->is_default!='Y') $args->is_default = 'N';
// module_srl이 넘어오면 원 모듈이 있는지 확인
if($args->module_srl) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
// 만약 원래 모듈이 없으면 새로 입력하기 위한 처리
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
}
// module 모듈의 controller 객체 생성
$oModuleController = &getController('module');
// is_default=='Y' 이면
if($args->is_default=='Y') $oModuleController->clearDefaultModule();
// module_srl의 값에 따라 insert/update
if(!$args->module_srl) {
$output = $oModuleController->insertModule($args);
$msg_code = 'success_registed';
} else {
$output = $oModuleController->updateModule($args);
$msg_code = 'success_updated';
}
if(!$output->toBool()) return $output;
$this->add("module_srl", $args->module_srl);
$this->add("page", Context::get('page'));
$this->setMessage($msg_code);
}
/**
* @brief 페이지 삭제
**/
function procDeletePage() {
$module_srl = Context::get('module_srl');
// 원본을 구해온다
$oModuleController = &getController('module');
$output = $oModuleController->deleteModule($module_srl);
if(!$output->toBool()) return $output;
$this->add('module','pagemaker');
$this->add('page',Context::get('page'));
$this->setMessage('success_deleted');
}
/**
* @brief 페이지 기본 정보의 추가
**/
function procInsertConfig() {
// 기본 정보를 받음
$args = Context::gets('test');
// module Controller 객체 생성하여 입력
$oModuleController = &getController('module');
$output = $oModuleController->insertModuleConfig('page',$args);
return $output;
}
/**
* @brief 첨부파일 업로드
**/
function procUploadFile() {
// 기본적으로 필요한 변수 설정
$upload_target_srl = Context::get('upload_target_srl');
$module_srl = Context::get('module_srl');
// file class의 controller 객체 생성
$oFileController = &getController('file');
$output = $oFileController->insertFile($module_srl, $upload_target_srl);
// 첨부파일의 목록을 java script로 출력
$oFileController->printUploadedFileList($upload_target_srl);
}
/**
* @brief 첨부파일 삭제
* 에디터에서 개별 파일 삭제시 사용
**/
function procDeleteFile() {
// 기본적으로 필요한 변수인 upload_target_srl, module_srl을 설정
$upload_target_srl = Context::get('upload_target_srl');
$module_srl = Context::get('module_srl');
$file_srl = Context::get('file_srl');
// file class의 controller 객체 생성
$oFileController = &getController('file');
if($file_srl) $output = $oFileController->deleteFile($file_srl, $this->grant->manager);
// 첨부파일의 목록을 java script로 출력
$oFileController->printUploadedFileList($upload_target_srl);
}
}
?>

View file

@ -0,0 +1,199 @@
<?php
/**
* @class pagemakerView
* @author zero (zero@nzeo.com)
* @brief pagemaker 모듈의 view 클래스
**/
class pagemakerView extends pagemaker {
var $module_srl = 0;
var $list_count = 20;
var $page_count = 10;
/**
* @brief 초기화
**/
function init() {
// template path 지정
$this->setTemplatePath($this->module_path.'tpl.admin');
}
/**
* @brief 관리자 기능 호출시에 관련 정보들 세팅해줌
**/
function initAdmin() {
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
$module_srl = Context::get('module_srl');
// module model 객체 생성
$oModuleModel = &getModel('module');
// 모듈 카테고리 목록을 구함
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
// 템플릿 경로 구함 (page의 경우 tpl.admin에 관리자용 템플릿 모아놓음)
$this->setTemplatePath($this->module_path.'tpl.admin');
}
/**
* @brief 일반 요청시 출력
**/
function dispIndex() {
// 템플릿에서 사용할 변수를 Context::set()
if($this->module_srl) Context::set('module_srl',$this->module_srl);
Context::set('module_info', $this->module_info);
Context::set('page_content', $this->module_info->content);
$this->setTemplatePath($this->module_path.'tpl.admin');
$this->setTemplateFile('content');
}
/**
* @brief 페이지 관리 목록 보여줌
**/
function dispAdminContent() {
// 모듈 관련 정보 세팅
$this->initAdmin();
// 등록된 page 모듈을 불러와 세팅
$oDB = &DB::getInstance();
$args->sort_index = "module_srl";
$args->page = Context::get('page');
$args->list_count = 40;
$args->page_count = 10;
$args->s_module_category_srl = Context::get('module_category_srl');
$output = $oDB->executeQuery('pagemaker.getPageList', $args);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('page_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
// 템플릿 파일 지정
$this->setTemplateFile('index');
}
/**
* @brief 페이지에 필요한 기본 설정들
**/
function dispAdminModuleConfig() {
// 관리자 관련 정보 세팅
$this->initAdmin();
// 설정 정보를 받아옴 (module model 객체를 이용)
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('pagemaker');
Context::set('config',$config);
// 템플릿 파일 지정
$this->setTemplateFile('page_config');
}
/**
* @brief 선택된 페이지의 정보 출력
**/
function dispAdminPageInfo() {
// 관리자 관련 정보 세팅
$this->initAdmin();
// GET parameter에서 module_srl을 가져옴
$module_srl = Context::get('module_srl');
// module model 객체 생성
if($module_srl) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if($module_info->module_srl == $module_srl) Context::set('module_info',$module_info);
else {
unset($module_info);
unset($module_srl);
}
}
// module_srl 값이 없다면 그냥 index 페이지를 보여줌
if(!$module_srl) return $this->dispAdminContent();
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
if($module_info->layout_srl) {
$oLayoutModel = &getModel('layout');
$layout_info = $oLayoutModel->getLayout($module_info->layout_srl);
$module_info->layout = $layout_info->layout;
$module_info->layout_title = $layout_info->layout_title;
}
// 템플릿 파일 지정
$this->setTemplateFile('page_info');
}
/**
* @brief 페이지 추가 출력
**/
function dispAdminInsertPage() {
// 관리자 관련 정보 세팅
$this->initAdmin();
// 레이아웃 목록을 구해옴
$oLayoutMode = &getModel('layout');
$layout_list = $oLayoutMode->getLayoutList();
Context::set('layout_list', $layout_list);
// GET parameter에서 module_srl을 가져옴
$module_srl = Context::get('module_srl');
// module_srl이 있으면 해당 모듈의 정보를 구해서 세팅
if($module_srl) {
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
if($module_info->module_srl == $module_srl) Context::set('module_info',$module_info);
else {
unset($module_info);
unset($module_srl);
}
}
// module_srl이 없으면 sequence값으로 미리 구해 놓음
if(!$module_srl) {
$oDB = &DB::getInstance();
$module_srl = $oDB->getNextSequence();
}
Context::set('module_srl',$module_srl);
// 플러그인 목록을 세팅
$oPluginModel = &getModel('plugin');
$plugin_list = $oPluginModel->getDownloadedPluginList();
Context::set('plugin_list', $plugin_list);
// 에디터 모듈의 getEditor를 호출하여 세팅
$oEditorView = &getView('editor');
$editor = $oEditorView->getEditor($module_srl, true);
Context::set('editor', $editor);
// 템플릿 파일 지정
$this->setTemplateFile('page_insert');
}
/**
* @brief 페이지 삭제 화면 출력
**/
function dispAdminDeletePage() {
// 관리자 관련 정보 세팅
$this->initAdmin();
$module_srl = Context::get('module_srl');
if(!$module_srl) return $this->dispContent();
$oModuleModel = &getModel('module');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
Context::set('module_info',$module_info);
// 템플릿 파일 지정
$this->setTemplateFile('page_delete');
}
}
?>

View file

@ -0,0 +1,24 @@
<query id="getPageList" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module" default="pagemaker" />
<group pipe="and">
<condition operation="like" column="mid" var="s_mid" pipe="or" />
<condition operation="like" column="title" var="s_title" pipe="or" />
<condition operation="like" column="comment" var="s_comment" pipe="or" />
<condition operation="equal" column="module" var="s_module" pipe="or" />
<condition operation="equal" column="module_category_srl" var="s_module_category_srl" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" order="desc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -0,0 +1 @@
{$page_content}

View file

@ -0,0 +1,10 @@
<filter name="delete_page" module="pagemaker" act="procDeletePage">
<form>
<node target="module_srl" required="true" />
</form>
<response callback_func="completeDeletePage">
<tag name="error" />
<tag name="message" />
<tag name="page" />
</response>
</filter>

View file

@ -0,0 +1,7 @@
<filter name="insert_config" module="pagemaker" act="procInsertConfig" confirm_msg_code="confirm_submit">
<form />
<response>
<tag name="error" />
<tag name="message" />
</response>
</filter>

View file

@ -0,0 +1,22 @@
<filter name="insert_page" module="pagemaker" act="procInsertPage" confirm_msg_code="confirm_submit">
<form>
<node target="mid" required="true" filter="alpha_number" />
<node target="browser_title" required="true" maxlength="250" />
<node target="content" required="true" />
</form>
<parameter>
<param name="page_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="browser_title" target="browser_title" />
<param name="is_default" target="is_default" />
<param name="content" target="content" />
</parameter>
<response callback_func="completeInsertPage">
<tag name="error" />
<tag name="message" />
<tag name="module_srl" />
<tag name="page" />
</response>
</filter>

View file

@ -0,0 +1,71 @@
<!--%import("js/admin.js")-->
<!-- 페이지 정보 -->
<div>
{$lang->total_count} {number_format($total_count)},
{$lang->page_count} : {number_format($page)} / {number_format($total_page)}
</div>
<!-- 목록 -->
<div>
<table>
<tr>
<th>{$lang->no}</th>
<th>
<form action="./" method="get">
<select name="category" onchange="doChangeCategory(this, '{getUrl('module_category_srl','')}')" >
<option value="">{$lang->category}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="true"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</form>
</th>
<th>{$lang->mid}</th>
<th>{$lang->browser_title}</th>
<th>{$lang->is_default}</th>
<th>{$lang->regdate}</th>
<th>{$lang->cmd_move}</th>
<th>{$lang->cmd_delete}</th>
</tr>
<!--@foreach($page_list as $no => $val)-->
<tr>
<td>{$no}</td>
<td>
<!--@if(!$val->module_category_srl)-->
{$lang->not_exists}
<!--@else-->
{$module_category[$val->module_category_srl]->title}
<!--@end-->
</td>
<td><a href="{getUrl('act','dispAdminPageInfo','module_srl',$val->module_srl)}">{$val->mid}</a></td>
<td>{$val->browser_title}</td>
<td>{$val->is_default}</td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="./?mid={$val->mid}" target="_blank">{$lang->cmd_move}</a></td>
<td><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispAdminDeletePage','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
</tr>
<!--@end-->
</table>
</div>
<!-- 버튼 -->
<div>
[<a href="{getUrl('act','dispAdminInsertPage','module_srl','')}">{$lang->cmd_make}</a>]
</div>
<!-- 페이지 네비게이션 -->
<div>
<a href="{getUrl('page','','module_srl','')}">[{$lang->first_page}]</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
{$page_no}
<!--@else-->
<a href="{getUrl('page',$page_no,'module_srl','')}">[{$page_no}]</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}">[{$lang->last_page}]</a>
</div>

View file

@ -0,0 +1,42 @@
/**
* @file : modules/pagemaker/js/admin.js
* @author : zero <zero@nzeo.com>
* @desc : pagemaker 모듈의 관리자용 javascript
**/
/* 모듈 생성 후 */
function completeInsertPage(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 = "./?module=admin&mo=pagemaker&module_srl="+module_srl+"&act=dispAdminPageInfo";
if(page) url += "&page="+page;
location.href = url;
}
/* 모듈 삭제 후 */
function completeDeletePage(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var page = ret_obj['page'];
alert(message);
var url = "./?module=admin&mo=pagemaker&act=dispAdminContent";
if(page) url += "&page="+page;
location.href = url;
}
/* 카테고리 이동 */
function doChangeCategory(sel_obj, url) {
var module_category_srl = sel_obj.options[sel_obj.selectedIndex].value;
if(!module_category_srl) location.href=url;
else location.href=url+'&module_category_srl='+module_category_srl;
}

View file

@ -0,0 +1,18 @@
<!--%import("filter/insert_config.xml")-->
<form action="./" method="get" onsubmit="return procFilter(this, insert_config)">
<table border="1">
<tr>
<th rowspan="2">{$lang->test}</th>
<td><input type="text" name="test" value="{$config->test}" /></td>
</tr>
<tr>
<td>{$lang->about_test}</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_registration}" accesskey="s" />
</td>
</tr>
</table>
</form>

View file

@ -0,0 +1,28 @@
<!--%import("filter/delete_page.xml")-->
<!--%import("js/admin.js")-->
<form action="./" method="get" onsubmit="return procFilter(this, delete_page)">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<table>
<tr>
<th colspan="2">{$lang->confirm_delete}</th>
</tr>
<tr>
<th>{$lang->module_name}</th>
<td>{$module_info->mid}</td>
</tr>
<tr>
<th>{$lang->module}</th>
<td>{$module_info->module}</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="{$lang->cmd_delete}" />
<input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','dispAdminContent')}'" />
</td>
</tr>
</table>
</form>

View file

@ -0,0 +1,38 @@
<table border="1" width="100%">
<col width="120" />
<col width="*" />
<tr>
<th>{$lang->category}</th>
<td>
<!--@if(!$module_info->module_category_srl)-->
{$lang->not_exists}
<!--@else-->
{$module_category[$module_info->module_category_srl]->title}
<!--@end-->
</td>
</tr>
<tr>
<th>{$lang->layout}</th>
<td>
<!--@if($module_info->layout_srl)-->
{$module_info->layout_title} ({$module_info->layout})
<!--@else-->
{$lang->not_exists}
<!--@end-->
</td>
</tr>
<tr>
<th>{$lang->browser_title}</th>
<td>{$module_info->browser_title}</td>
</tr>
<tr>
<th>{$lang->content}</th>
<td>{$module_info->content}</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="{$lang->cmd_list}" onclick="location.href='{getUrl('act','dispAdminContent')}'" />
<input type="button" value="{$lang->cmd_modify}" onclick="location.href='{getUrl('act','dispAdminInsertPage')}'" />
</td>
</tr>
</table>

View file

@ -0,0 +1,94 @@
<!--%import("filter/insert_page.xml")-->
<!--%import("js/admin.js")-->
<div>
<!--@if(!$module_srl)-->
{$lang->msg_new_module}
<!--@else-->
{$lang->msg_update_module}
<!--@end-->
</div>
<form action="./" method="post" onsubmit="return procFilter(this, insert_page)" enctype="multipart/form-data">
<input type="hidden" name="module" value="pagemaker" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_srl}" />
<input type="hidden" name="content" value="{htmlspecialchars($module_info->content)}" />
<!--@if($module_info->is_default=='Y')-->
<input type="hidden" name="is_default" value="Y" />
<!--@end-->
<table width="100%" border="1">
<tr>
<th rowspan="2">{$lang->mid}</th>
<td><input type="text" name="mid" value="{$module_info->mid}" /></td>
</tr>
<tr>
<td>{$lang->about_mid}</td>
</tr>
<tr>
<th rowspan="2">{$lang->category}</th>
<td>
<select name="module_category_srl">
<option value="0">{$lang->notuse}</option>
<!--@foreach($module_category as $key => $val)-->
<option value="{$key}" <!--@if($module_info->module_category_srl==$key)-->selected="true"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
</td>
</tr>
<tr>
<td>{$lang->about_category}</td>
</tr>
<tr>
<th rowspan="2">{$lang->browser_title}</th>
<td><input type="text" name="browser_title" value="{$module_info->browser_title}" /></td>
</tr>
<tr>
<td>{$lang->about_browser_title}</td>
</tr>
<tr>
<th rowspan="2">{$lang->layout}</th>
<td>
<select name="layout_srl">
<option value="0">{$lang->notuse}</option>
<!--@foreach($layout_list as $key => $val)-->
<option value="{$val->layout_srl}" <!--@if($module_info->layout_srl==$val->layout_srl)-->selected="true"<!--@end-->>{$val->title} ({$val->layout})</option>
<!--@end-->
</select>
</td>
</tr>
<tr>
<td>{$lang->about_layout}</td>
</tr>
<!--@if($module_info->is_default!='Y')-->
<tr>
<th rowspan="2">{$lang->is_default}</th>
<td><input type="checkbox" name="is_default" value="Y" <!--@if($module_info->is_default=='Y')-->checked="true"<!--@end-->/></td>
</tr>
<tr>
<td>{$lang->about_default}</td>
</tr>
<!--@end-->
<tr>
<th>{$lang->plugin}</th>
<td>
<!--@foreach($plugin_list as $plugin)-->
<a href="#" onclick="winopen('./?module=plugin&amp;act=dispGenerateCodeInPage&amp;selected_plugin={$plugin->plugin}&amp;module_srl={$module_srl}','GenerateCodeInPage','left=10,top10,width=10,height=10,resizable=no,scrollbars=no,toolbars=no');return false;">{$plugin->title}</a>
<!--@end-->
</td>
</tr>
<tr>
<th>{$lang->content}</th>
<td>
{$editor}
</td>
</tr>
<tr>
<td colspan="2">
<input type="button" value="{$lang->cmd_cancel}" onclick="location.href='{getUrl('act','dispAdminPageInfo','module_srl',$module_srl)}'" />
<input type="submit" value="{$lang->cmd_registration}" accesskey="s" />
</td>
</tr>
</table>
</form>