mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-14 08:49:56 +09:00
샘플용 모듈인 방명록 등록
git-svn-id: http://xe-core.googlecode.com/svn/trunk@1956 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
fe4be0f212
commit
b2f4265e1f
43 changed files with 2481 additions and 0 deletions
8
modules/guestbook/conf/info.xml
Normal file
8
modules/guestbook/conf/info.xml
Normal 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. 7. 19">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<description xml:lang="ko">모듈 제작을 위해 sample로 제작된 모듈입니다.</description>
|
||||
</author>
|
||||
</module>
|
||||
41
modules/guestbook/conf/module.xml
Normal file
41
modules/guestbook/conf/module.xml
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<module>
|
||||
<grants>
|
||||
<grant name="write_document" default="guest">
|
||||
<title xml:lang="ko">글 작성</title>
|
||||
</grant>
|
||||
<grant name="write_comment" default="guest">
|
||||
<title xml:lang="ko">댓글 작성</title>
|
||||
</grant>
|
||||
<grant name="manager" default="root">
|
||||
<title xml:lang="ko">관리</title>
|
||||
</grant>
|
||||
</grants>
|
||||
<actions>
|
||||
<action name="dispGuestbookContent" type="view" index="true" />
|
||||
<action name="dispGuestbookModify" type="view" />
|
||||
<action name="dispGuestbookDelete" type="view" />
|
||||
<action name="dispGuestbookReplyComment" type="view" />
|
||||
<action name="dispGuestbookModifyComment" type="view" />
|
||||
<action name="dispGuestbookDeleteComment" type="view" />
|
||||
<action name="dispGuestbookMessage" type="view" />
|
||||
|
||||
<action name="procGuestbookInsertDocument" type="controller" />
|
||||
<action name="procGuestbookDeleteDocument" type="controller" />
|
||||
<action name="procGuestbookInsertComment" type="controller" />
|
||||
<action name="procGuestbookDeleteComment" type="controller" />
|
||||
<action name="procGuestbookVerificationPassword" type="controller" />
|
||||
|
||||
<action name="dispGuestbookAdminContent" type="view" standalone="true" admin_index="true" />
|
||||
<action name="dispGuestbookAdminGuestbookInfo" type="view" standalone="true" />
|
||||
<action name="dispGuestbookAdminInsertGuestbook" type="view" standalone="true" />
|
||||
<action name="dispGuestbookAdminDeleteGuestbook" type="view" standalone="true" />
|
||||
<action name="dispGuestbookAdminSkinInfo" type="view" standalone="true" />
|
||||
<action name="dispGuestbookAdminGrantInfo" type="view" standalone="true" />
|
||||
|
||||
<action name="procGuestbookAdminInsertGuestbook" type="controller" standalone="true" />
|
||||
<action name="procGuestbookAdminDeleteGuestbook" type="controller" standalone="true" />
|
||||
<action name="procGuestbookAdminInsertGrant" type="controller" standalone="true" />
|
||||
<action name="procGuestbookAdminUpdateSkinInfo" type="controller" standalone="true" />
|
||||
</actions>
|
||||
</module>
|
||||
247
modules/guestbook/guestbook.admin.controller.php
Normal file
247
modules/guestbook/guestbook.admin.controller.php
Normal file
|
|
@ -0,0 +1,247 @@
|
|||
<?php
|
||||
/**
|
||||
* @class guestbookAdminController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 admin controller class
|
||||
* 관리자 기능을 담당하게 된다.
|
||||
* 보통 모듈의 관리자 기능은 해당 모듈의 생성이나 정보/권한/스킨정보의 수정등을 담당하게 된다.
|
||||
**/
|
||||
|
||||
class guestbookAdminController extends guestbook {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() { }
|
||||
|
||||
/**
|
||||
* @brief 방명록 추가
|
||||
* guestbook_name은 mid의 값이 되고 나머지 모듈 공통 값을 받아서 저장을 하게 된다.
|
||||
**/
|
||||
function procGuestbookAdminInsertGuestbook($args = null) {
|
||||
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
|
||||
if(!$args) {
|
||||
$args = Context::gets('module_srl','module_category_srl','guestbook_name','layout_srl','skin','browser_title','description','is_default','header_text','footer_text','admin_id','open_rss');
|
||||
}
|
||||
|
||||
// guestbook모듈임을 명시적으로 지정한다.
|
||||
$args->module = 'guestbook';
|
||||
|
||||
// mid값을 직접 받지 않고 guestbook_name으로 받는 이유는 mid는 특별히 약속된 변수명이라 오동작이 발생할 수 있어서 다른 이름으로 전달을 받은후 다시 바꾸어준다.
|
||||
$args->mid = $args->guestbook_name;
|
||||
unset($args->guestbook_name);
|
||||
|
||||
// is_default일 경우 별다른 요청이 없는 index페이지의 경우 바로 호출이 되는데 이 값을 설정을 하게 된다.
|
||||
if($args->is_default!='Y') $args->is_default = 'N';
|
||||
|
||||
// 기본 값외의 것들을 정리
|
||||
$extra_var = delObjectVars(Context::getRequestVars(), $args);
|
||||
unset($extra_var->act);
|
||||
unset($extra_var->page);
|
||||
unset($extra_var->guestbook_name);
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
// $extra_var를 serialize
|
||||
$args->extra_vars = serialize($extra_var);
|
||||
|
||||
// module 모듈의 controller 객체 생성
|
||||
$oModuleController = &getController('module');
|
||||
|
||||
// is_default=='Y' 이면
|
||||
if($args->is_default=='Y') $oModuleController->clearDefaultModule();
|
||||
|
||||
/**
|
||||
* module_srl값이 없다면 신규 등록으로 처리를 한다.
|
||||
**/
|
||||
if(!$args->module_srl) {
|
||||
// module controller를 이용하여 모듈을 생성한다.
|
||||
$output = $oModuleController->insertModule($args);
|
||||
$msg_code = 'success_registed';
|
||||
|
||||
// 권한의 경우 기본으로 설정을 해주는 것이 좋으며 방명록 모듈의 경우 manager권한을 관리 그룹으로 설정을 한다.
|
||||
if($output->toBool()) {
|
||||
// 관리그룹을 member model객체에서 구할 수 있다.
|
||||
$oMemberModel = &getModel('member');
|
||||
$admin_group = $oMemberModel->getAdminGroup();
|
||||
$admin_group_srl = $admin_group->group_srl;
|
||||
|
||||
$module_srl = $output->get('module_srl');
|
||||
$grants = serialize(array('manager'=>array($admin_group_srl)));
|
||||
|
||||
// module controller의 module 권한 설정 method를 이용하여 기본 권한을 적용한다.
|
||||
$oModuleController->updateModuleGrant($module_srl, $grants);
|
||||
}
|
||||
/**
|
||||
* module_srl이 있다면 모듈의 정보를 수정한다
|
||||
**/
|
||||
} else {
|
||||
$output = $oModuleController->updateModule($args);
|
||||
$msg_code = 'success_updated';
|
||||
}
|
||||
|
||||
// 결과값에 오류가 있을 경우 그대로 객체 리턴.
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 등록후 페이지 이동을 위해 변수 설정 및 메세지를 설정한다.
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->add('module_srl',$output->get('module_srl'));
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 방명록 삭제
|
||||
**/
|
||||
function procGuestbookAdminDeleteGuestbook() {
|
||||
// 삭제할 대상 방명록의 module_srl을 구한다.
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 원본을 구해온다
|
||||
$oModuleController = &getController('module');
|
||||
$output = $oModuleController->deleteModule($module_srl);
|
||||
|
||||
// 삭제 처리시 오류가 발생하면 결과 객체를 바로 리턴한다.
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 등록후 페이지 이동을 위해 변수 설정 및 메세지를 설정한다.
|
||||
$this->add('module','guestbook');
|
||||
$this->add('page',Context::get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 권한 설정
|
||||
* 생성된 방명록에 ./conf/module.xml에 정의된 권한과 관리자가 선택한 그룹의 값을 연동하여 권한을 설정하게 된다.
|
||||
**/
|
||||
function procGuestbookAdminInsertGrant() {
|
||||
// 대상 방명록(모듈)의 고유값인 module_srl을 체크한다.
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
/**
|
||||
* 현 모듈의 권한 목록을 가져옴
|
||||
* xml_info 는 guestbook모듈이 요청되었다고 판단될때 ModuleObject에서 이미 세팅해 놓은 상태이다.
|
||||
**/
|
||||
$grant_list = $this->xml_info->grant;
|
||||
|
||||
/**
|
||||
* 권한의 목록을 loop로 돌면서 권한 설정을 한다.
|
||||
* zbxe의 경우 가능한 간단한 xmlrpc사용을 위해서 배열의 경우 |@|를 pipe로 하여 하나의 string으로 전달한다.
|
||||
* 요청받은 권한의 대상 그룹과 권한을 배열로 한 후 serialize하여 modules테이블에 module_srl을 키로 한 rows에 데이터를 적용한다.
|
||||
**/
|
||||
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);
|
||||
}
|
||||
|
||||
// 권한 설정은 모듈 공통이라 module 모듈의 controller을 생성하여 저장하도록 한다.
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleGrant($module_srl, $grants);
|
||||
|
||||
// 권한 설정후 돌아갈 페이지를 위하여 module_srl값을 세팅하고 성공 메세지 역시 세팅한다.
|
||||
$this->add('module_srl',Context::get('module_srl'));
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 정보 업데이트
|
||||
* 스킨 정보는 skin.xml파일의 extra_vars와 입력된 변수값을 조합하여 serialize하여 modules 테이블에 module_srl을 키로 하여 저장을 하게 된다.
|
||||
**/
|
||||
function procGuestbookAdminUpdateSkinInfo() {
|
||||
// module_srl에 해당하는 정보들을 가져오기
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 어떤 스킨이 사용중인지 확인하기 위해서 module_srl을 이용하여 모듈의 정보를 구하고 스킨을 구한다.
|
||||
$oModuleModel = &getModel('module');
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
$skin = $module_info->skin;
|
||||
|
||||
// 스킨의 정보르 구해옴 (extra_vars를 체크하기 위해서)
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
|
||||
// 입력받은 변수들을 체크 (mo, act, module_srl, page등 기본적인 변수들 없앰)
|
||||
$obj = Context::getRequestVars();
|
||||
unset($obj->act);
|
||||
unset($obj->module_srl);
|
||||
unset($obj->page);
|
||||
|
||||
// 원 skin_info에서 extra_vars의 type이 image일 경우 별도 처리를 해줌
|
||||
if($skin_info->extra_vars) {
|
||||
foreach($skin_info->extra_vars as $vars) {
|
||||
if($vars->type!='image') continue;
|
||||
|
||||
$image_obj = $obj->{$vars->name};
|
||||
|
||||
// 삭제 요청에 대한 변수를 구함
|
||||
$del_var = $obj->{"del_".$vars->name};
|
||||
unset($obj->{"del_".$vars->name});
|
||||
if($del_var == 'Y') {
|
||||
@unlink($module_info->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 업로드 되지 않았다면 이전 데이터를 그대로 사용
|
||||
if(!$image_obj['tmp_name']) {
|
||||
$obj->{$vars->name} = $module_info->{$vars->name};
|
||||
continue;
|
||||
}
|
||||
|
||||
// 정상적으로 업로드된 파일이 아니면 무시
|
||||
if(!is_uploaded_file($image_obj['tmp_name'])) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 이미지 파일이 아니어도 무시
|
||||
if(!eregi("\.(jpg|jpeg|gif|png)$", $image_obj['name'])) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 경로를 정해서 업로드
|
||||
$path = sprintf("./files/attach/images/%s/", $module_srl);
|
||||
|
||||
// 디렉토리 생성
|
||||
if(!FileHandler::makeDir($path)) return false;
|
||||
|
||||
$filename = $path.$image_obj['name'];
|
||||
|
||||
// 파일 이동
|
||||
if(!move_uploaded_file($image_obj['tmp_name'], $filename)) {
|
||||
unset($obj->{$vars->name});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 변수를 바꿈
|
||||
unset($obj->{$vars->name});
|
||||
$obj->{$vars->name} = $filename;
|
||||
}
|
||||
}
|
||||
|
||||
// serialize하여 저장
|
||||
$skin_vars = serialize($obj);
|
||||
|
||||
// module controller객체를 생성하여 module_srl을 키로 한 rows에 serialize한 스킨 정보를 적용한다.
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->updateModuleSkinVars($module_srl, $skin_vars);
|
||||
|
||||
/**
|
||||
* 스킨 정보는 첨부파일때문에 xml로 전달이 되지 않고 POST로 전송이 되어 왔으므로 템플릿을 이용하여 프레임을 refresh시키도록 한다.
|
||||
* 스킨 정보를 수정할때 숨어 있는 iframe을 target으로 삼기에 기본 레이아웃을 이용하면 되므로 직접 레이아웃 경로와 파일을 기본으로 지정한다.
|
||||
**/
|
||||
$this->setLayoutPath('./common/tpl');
|
||||
$this->setLayoutFile('default_layout.html');
|
||||
$this->setTemplatePath($this->module_path.'tpl');
|
||||
$this->setTemplateFile("top_refresh.html");
|
||||
}
|
||||
}
|
||||
?>
|
||||
185
modules/guestbook/guestbook.admin.view.php
Normal file
185
modules/guestbook/guestbook.admin.view.php
Normal file
|
|
@ -0,0 +1,185 @@
|
|||
<?php
|
||||
/**
|
||||
* @class guestbookAdminView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 admin view class
|
||||
* 방명록 관리자 기능은 생성된 방명록의 목록, 신규 등록 및 수정, 권한과 스킨의 설정으로 이루어진다.
|
||||
**/
|
||||
|
||||
class guestbookAdminView extends guestbook {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
* 손쉬운 사용을 위해서 module_srl이 넘어올 경우 해당 방명록의 모듈 정보를 미리 구해서 세팅해 놓도록 한다.
|
||||
* 각 method에서 하거나 별도의 method를 만들어서 호출하면 되지만 코드의 양을 줄이고 직관성을 높이기 위해서 설정한 코드이다.
|
||||
**/
|
||||
function init() {
|
||||
// module_srl값을 구해온다.
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// 요청된 module_srl값이 없는데 현재 모듈의 module_srl값이 있다는 것은 방명록의 서비스 부분에서 설정링크를 통해서 바로 설정을 하는 경우이다.
|
||||
if(!$module_srl && $this->module_srl) {
|
||||
$module_srl = $this->module_srl;
|
||||
Context::set('module_srl', $module_srl);
|
||||
}
|
||||
|
||||
// module info를 구하기 위해 module model 객체 생성
|
||||
$oModuleModel = &getModel('module');
|
||||
|
||||
// module_srl이 있다면 요청된 모듈의 정보를 미리 구해 놓음
|
||||
if($module_srl) {
|
||||
$module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
|
||||
if(!$module_info) {
|
||||
Context::set('module_srl','');
|
||||
$this->act = 'list';
|
||||
} else {
|
||||
$this->module_info = $module_info;
|
||||
Context::set('module_info',$module_info);
|
||||
}
|
||||
}
|
||||
|
||||
// 템플릿 경로 지정, 관리자 페이지를 위한 템플릿은 별도의 스킨 기능이 없이 ./modules/모듈/tpl/ 에 위치해 놓기에 바로 지정을 해 놓는다.
|
||||
$template_path = sprintf("%stpl/",$this->module_path);
|
||||
$this->setTemplatePath($template_path);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 생성된 방명록들의 목록을 보여줌
|
||||
* guestbook이라는 module명으로 등록된 모듈을 구하기 위해서 몇가지 설정을 한 후에 쿼리를 수행한다.
|
||||
* 쿼리수행은 executeQuery(모듈명.쿼리아이디, 인자변수) 로 하게 되며 이 쿼리아이디에 해당하는 xml파일은 모듈의 queries디렉토리에 지정이 되어 있다.
|
||||
*
|
||||
* 이 특정 module의 목록은 module model객체에서 구할 수 있지만 검색등의 각 모듈마다 다른 조건 때문에 각 모듈별로 쿼리를 생성해 놓는다.
|
||||
* 모든 모듈의 결과물(mid)는 modules 테이블에 저장이 된다.
|
||||
**/
|
||||
function dispGuestbookAdminContent() {
|
||||
$args->sort_index = "module_srl"; ///< 정렬 순서는 모듈의 sequence값으로 하고 정렬은 역순. 즉 생성된 순으로 한다.
|
||||
$args->page = Context::get('page'); ///< 현재 페이지를 설정
|
||||
$args->list_count = 40; ///< 한페이지에 40개씩 보여주기로 고정.
|
||||
$args->page_count = 10; ///< 페이지의 수는 10개로 제한.
|
||||
$args->s_module_category_srl = Context::get('module_category_srl'); ///< 모듈분류값을 인자로 추가
|
||||
$output = executeQuery('guestbook.getGuestbookList', $args); ///< guestbook.getGuesbookList 쿼리 실행 (./modules/guestbook/query/getGuestbookList.xml)
|
||||
|
||||
/**
|
||||
* 템플릿에 쓰기 위해서 context::set
|
||||
* xml query에 navigation이 있고 list_count가 정의되어 있으면 결과 변수에 아래 5가지의 값이 세팅이 된다.
|
||||
**/
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('guestbook_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
// 템플릿 파일 지정 (./modules/guestbook/tpl/index.html파일이 지정이 됨)
|
||||
$this->setTemplateFile('index');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 선택된 방명록의 정보 출력
|
||||
**/
|
||||
function dispGuestbookAdminGuestbookInfo() {
|
||||
// module_srl 값이 없다면 그냥 index 페이지를 보여줌
|
||||
if(!Context::get('module_srl')) return $this->dispGuestbookAdminContent();
|
||||
|
||||
// 레이아웃이 정해져 있다면 레이아웃 정보를 추가해줌(layout_title, layout)
|
||||
if($this->module_info->layout_srl) {
|
||||
$oLayoutModel = &getModel('layout');
|
||||
$layout_info = $oLayoutModel->getLayout($this->module_info->layout_srl);
|
||||
$this->module_info->layout = $layout_info->layout;
|
||||
$this->module_info->layout_title = $layout_info->layout_title;
|
||||
}
|
||||
|
||||
// 정해진 스킨이 있으면 해당 스킨의 정보를 구함
|
||||
if($this->module_info->skin) {
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $this->module_info->skin);
|
||||
$this->module_info->skin_title = $skin_info->title;
|
||||
}
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('guestbook_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 방명록 설정 폼 출력
|
||||
**/
|
||||
function dispGuestbookAdminInsertGuestbook() {
|
||||
// 스킨 목록을 구해옴
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_list = $oModuleModel->getSkins($this->module_path);
|
||||
Context::set('skin_list',$skin_list);
|
||||
|
||||
// 레이아웃 목록을 구해옴
|
||||
$oLayoutMode = &getModel('layout');
|
||||
$layout_list = $oLayoutMode->getLayoutList();
|
||||
Context::set('layout_list', $layout_list);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('guestbook_insert');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 방명록 삭제 화면 출력
|
||||
**/
|
||||
function dispGuestbookAdminDeleteGuestbook() {
|
||||
if(!Context::get('module_srl')) return $this->dispGuestbookAdminContent();
|
||||
|
||||
$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);
|
||||
|
||||
// 템플릿 파일 지정
|
||||
$this->setTemplateFile('guestbook_delete');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 스킨 정보 보여줌
|
||||
**/
|
||||
function dispGuestbookAdminSkinInfo() {
|
||||
|
||||
// 현재 선택된 모듈의 스킨의 정보 xml 파일을 읽음
|
||||
$module_info = Context::get('module_info');
|
||||
$skin = $module_info->skin;
|
||||
|
||||
$oModuleModel = &getModel('module');
|
||||
$skin_info = $oModuleModel->loadSkinInfo($this->module_path, $skin);
|
||||
|
||||
// skin_info에 extra_vars 값을 지정
|
||||
if(count($skin_info->extra_vars)) {
|
||||
foreach($skin_info->extra_vars as $key => $val) {
|
||||
$name = $val->name;
|
||||
$type = $val->type;
|
||||
$value = $module_info->{$name};
|
||||
if($type=="checkbox"&&!$value) $value = array();
|
||||
$skin_info->extra_vars[$key]->value= $value;
|
||||
}
|
||||
}
|
||||
|
||||
Context::set('skin_info', $skin_info);
|
||||
$this->setTemplateFile('skin_info');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 권한 목록 출력
|
||||
**/
|
||||
function dispGuestbookAdminGrantInfo() {
|
||||
// module_srl을 구함
|
||||
$module_srl = Context::get('module_srl');
|
||||
|
||||
// module.xml에서 권한 관련 목록을 구해옴
|
||||
$grant_list = $this->xml_info->grant;
|
||||
Context::set('grant_list', $grant_list);
|
||||
|
||||
// 권한 그룹의 목록을 가져온다
|
||||
$oMemberModel = &getModel('member');
|
||||
$group_list = $oMemberModel->getGroups();
|
||||
Context::set('group_list', $group_list);
|
||||
|
||||
$this->setTemplateFile('grant_list');
|
||||
}
|
||||
}
|
||||
?>
|
||||
59
modules/guestbook/guestbook.class.php
Normal file
59
modules/guestbook/guestbook.class.php
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
<?php
|
||||
/**
|
||||
* @class guestbook
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 high class
|
||||
*
|
||||
* 모든 guestbook은 이 클래스의 상속을 받게 된다.
|
||||
* 이 클래스는 방명록 모듈의 설치 및 업그레이드를 담당하게 되고 공통 변수등을 선언하여 사용할 수 있다.
|
||||
**/
|
||||
|
||||
class guestbook extends ModuleObject {
|
||||
|
||||
var $skin = "default"; ///< 기본 스킨 이름
|
||||
var $list_count = 20; ///< 한 페이지에 나타날 글의 수
|
||||
var $page_count = 10; ///< 페이지의 수
|
||||
|
||||
var $editor = 'default'; ///< 에디터 종류
|
||||
|
||||
/**
|
||||
* @brief 설치시 추가 작업이 필요할시 구현
|
||||
**/
|
||||
function moduleInstall() {
|
||||
/**
|
||||
* action forward에 등록.
|
||||
* 이렇게 등록을 한 것들만이 admin module에서 호출되어 사용될 수 있다.
|
||||
* action forward를 통하여 관리자 페이지의 구축이 가능하고 방명록 서비스 부분에서 바로 방명록 설정을 할 수 있게 된다.
|
||||
**/
|
||||
$oModuleController = &getController('module');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminContent');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminGuestbookInfo');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminInsertGuestbook');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminDeleteGuestbook');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminSkinInfo');
|
||||
$oModuleController->insertActionForward('guestbook', 'view', 'dispGuestbookAdminGrantInfo');
|
||||
$oModuleController->insertActionForward('guestbook', 'controller', 'procGuestbookAdminUpdateSkinInfo');
|
||||
|
||||
|
||||
// Object 클래스의 객체는 기본적으로 성공(error=0)으로 되어 있고 이 값을 return함으로써 ModuleHandler등에서 오류 유무를 파악할 수 있다.
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 설치가 이상이 없는지 체크하는 method
|
||||
* 설치시 필수 체크 부분이 있다면 검토하는 코드를 추가할 수 있다.
|
||||
**/
|
||||
function moduleIsInstalled() {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 업데이트 실행
|
||||
* 설치시 이상이 있으면 이 moduleUpdate() 메쏘드를 이용하여 업데이트 구문을 실행할수 있다.
|
||||
**/
|
||||
function moduleUpdate() {
|
||||
return new Object();
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
246
modules/guestbook/guestbook.controller.php
Normal file
246
modules/guestbook/guestbook.controller.php
Normal file
|
|
@ -0,0 +1,246 @@
|
|||
<?php
|
||||
/**
|
||||
* @class guestbookController
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 Controller class
|
||||
* guestbook의 controller 클래스는 사용자가 방명록에 글을 쓰거나 댓글을 쓰는등의 동작을 제어한다.
|
||||
**/
|
||||
|
||||
class guestbookController extends guestbook {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
**/
|
||||
function init() {
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 입력
|
||||
**/
|
||||
function procGuestbookInsertDocument() {
|
||||
// 권한 체크 (글쓰기 권한이 없으면 오류 출력)
|
||||
if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted');
|
||||
|
||||
/**
|
||||
* 글작성시 필요한 변수를 세팅한다.
|
||||
* 일단 Context::getReuqestVars()를 통해 모든 입력된 변수값을 가져온다.
|
||||
* 글 작성은 document controller를 이용하여 정리된 변수를 넘겨줌으로서 동작이 된다.
|
||||
**/
|
||||
$obj = Context::getRequestVars();
|
||||
|
||||
// 현재 방명록의 module_srl값을 구해와서 세팅한다.
|
||||
$obj->module_srl = $this->module_srl;
|
||||
|
||||
// 공지사항 지정 변수값인 is_notice가 Y가 아니거나 관리자가 아니라면 공지사항은 무조건 N로 세팅한다.
|
||||
if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N';
|
||||
|
||||
/**
|
||||
* 문서의 신규 입력인지 수정인지에 대한 체크를 하기 위해서 document model을 통해 원본 문서가 있는지 확인하는 절차를 거쳐야 한다.
|
||||
**/
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
// document module의 controller 객체 생성
|
||||
$oDocumentController = &getController('document');
|
||||
|
||||
// 문서객체를 구해온다.
|
||||
$oDocument = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager);
|
||||
|
||||
/**
|
||||
* 제목은 document모델에서는 필수 요건이다.
|
||||
* 방명록에서는 제목이 필요 없어서 본문의 내용중 앞 10자리의 글자를 잘라서 제목으로 강제 적용한다.
|
||||
**/
|
||||
$obj->title = cut_str($obj->content,10,'...');
|
||||
|
||||
/**
|
||||
* 이미 존재하는 글일 경우 수정을 한다.
|
||||
* 글 수정은 document controller의 updateDocument() method를 이용한다.
|
||||
* 결과메세지를 일단 강제로 정의 해 놓는다.
|
||||
**/
|
||||
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl) {
|
||||
$output = $oDocumentController->updateDocument($oDocument, $obj);
|
||||
$msg_code = 'success_updated';
|
||||
|
||||
/**
|
||||
* 존재하지 않는다고 판단이 되면 신규글 입력을 한다.
|
||||
* 신규글 입력은 document controller의 inesrtDocument() method를 이용한다.
|
||||
* 결과메세지를 일단 강제로 정의 해 놓는다.
|
||||
**/
|
||||
} else {
|
||||
$obj->document_srl = getNextSequence();
|
||||
$output = $oDocumentController->insertDocument($obj);
|
||||
$msg_code = 'success_registed';
|
||||
}
|
||||
|
||||
/**
|
||||
* updateDocument(), insertDocument()에서 오류가 발생하였으면 리턴받은 객체 자체를 바로 돌려준다.
|
||||
* 이 object객체는 error, message등의 내부 변수를 이용하여 에러 발생 유무와 에러 메세지를 가지고 있다.
|
||||
**/
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
/**
|
||||
* 결과를 리턴하기 위해서 mid, document_srl값을 세팅을 한다.
|
||||
* controller의 경우 대부분 xml로 요청을 받고 xml로 return을 하게 된다.
|
||||
* $this->add(key, value)로 세팅된 값들은 결과 xml에서 사용이 된다.
|
||||
* 이 값들은 javascript에서 xml handler를 통해서 사용이 가능하게 되고 보통 url조합을 할때 사용이 된다.
|
||||
**/
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
|
||||
/**
|
||||
* 성공 메세지 등록
|
||||
* setMessage($message)는 xml에 지정이 되고 이 message는 javascript에서 alert()를 시키게 된다.
|
||||
**/
|
||||
$this->setMessage($msg_code);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서 삭제
|
||||
**/
|
||||
function procGuestbookDeleteDocument() {
|
||||
// 문서 번호 확인
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// 문서 번호가 없다면 오류 발생
|
||||
if(!$document_srl) return $this->doError('msg_invalid_document');
|
||||
|
||||
// document module model 객체 생성
|
||||
$oDocumentController = &getController('document');
|
||||
|
||||
// 삭제 시도
|
||||
$output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager);
|
||||
|
||||
// 삭제시 실패하였을 경우 리턴받은 객체를 그대로 리턴.
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 성공 메세지 등록
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', $output->get('page'));
|
||||
$this->setMessage('success_deleted');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 추가
|
||||
**/
|
||||
function procGuestbookInsertComment() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_comment) return new Object(-1, 'msg_not_permitted');
|
||||
|
||||
// 댓글 입력에 필요한 데이터 추출
|
||||
$obj = Context::gets('document_srl','comment_srl','parent_srl','content','password','nick_name','nick_name','member_srl','email_address','homepage');
|
||||
$obj->module_srl = $this->module_srl;
|
||||
|
||||
// comment 모듈의 model 객체 생성
|
||||
$oCommentModel = &getModel('comment');
|
||||
|
||||
// comment 모듈의 controller 객체 생성
|
||||
$oCommentController = &getController('comment');
|
||||
|
||||
/**
|
||||
* 게시판이나 블로그와 달리 방명록의 댓글은 textarea를 그대로 사용한다.
|
||||
* 따라서 줄바꾸임나 태그제거등의 작업을 해주어야 함
|
||||
**/
|
||||
$obj->content = nl2br(strip_tags($obj->content));
|
||||
|
||||
/**
|
||||
* 존재하는 댓글인지를 확인하여 존재 하지 않는 댓글이라면 신규로 등록하기 위해서 comment_srl의 sequence값을 받는다
|
||||
**/
|
||||
if(!$obj->comment_srl) {
|
||||
$obj->comment_srl = getNextSequence();
|
||||
} else {
|
||||
$comment = $oCommentModel->getComment($obj->comment_srl, $this->grant->manager);
|
||||
}
|
||||
|
||||
// comment_srl이 없을 경우 신규 입력
|
||||
if($comment->comment_srl != $obj->comment_srl) {
|
||||
|
||||
// parent_srl이 있으면 답변으로
|
||||
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);
|
||||
|
||||
// 없으면 신규
|
||||
} else {
|
||||
$output = $oCommentController->insertComment($obj);
|
||||
}
|
||||
|
||||
// comment_srl이 있으면 수정으로
|
||||
} else {
|
||||
$obj->parent_srl = $comment->parent_srl;
|
||||
$output = $oCommentController->updateComment($obj, $this->grant->manager);
|
||||
$comment_srl = $obj->comment_srl;
|
||||
}
|
||||
|
||||
// 오류 발생시 객체 그대로 리턴.
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 댓글 입력후 페이지 이동을 위한 변수 및 메세지를 설정한다.
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('document_srl', $obj->document_srl);
|
||||
$this->add('comment_srl', $obj->comment_srl);
|
||||
|
||||
$this->setMessage('success_registed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 삭제
|
||||
**/
|
||||
function procGuestbookDeleteComment() {
|
||||
// 댓글 번호 확인
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
if(!$comment_srl) return $this->doError('msg_invalid_request');
|
||||
|
||||
// comment 모듈의 controller 객체 생성
|
||||
$oCommentController = &getController('comment');
|
||||
$output = $oCommentController->deleteComment($comment_srl, $this->grant->manager);
|
||||
|
||||
// 오류 발생시 객체 그대로 리턴.
|
||||
if(!$output->toBool()) return $output;
|
||||
|
||||
// 댓글 입력후 페이지 이동을 위한 변수 및 메세지를 설정한다.
|
||||
$this->setMessage('success_deleted');
|
||||
$this->add('mid', Context::get('mid'));
|
||||
$this->add('page', Context::get('page'));
|
||||
$this->add('document_srl', $output->get('document_srl'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 문서와 댓글의 비밀번호를 확인
|
||||
* 비밀번호와 문서 혹은 댓글의 비밀번호를 비교하여 이상이 없다면 해당 문서 또는 댓글에 권한을 부여한다.
|
||||
* 이 권한은 세션에 저장이 되어 차후 다시 수정등을 할 경우 비밀번호 검사를 하지 않게 된다.
|
||||
**/
|
||||
function procGuestbookVerificationPassword() {
|
||||
// 비밀번호와 문서 번호를 받음
|
||||
$password = md5(Context::get('password'));
|
||||
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// comment_srl이 있을 경우 댓글이 대상
|
||||
if($comment_srl) {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oCommentModel = &getModel('comment');
|
||||
$data = $oCommentModel->getComment($comment_srl);
|
||||
if(!$data) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($data->password != $password) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oCommentController = &getController('comment');
|
||||
$oCommentController->addGrant($comment_srl);
|
||||
} else {
|
||||
// 문서번호에 해당하는 글이 있는지 확인
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 문서의 비밀번호와 입력한 비밀번호의 비교
|
||||
if($oDocument->get('password') != $password) return new Object(-1, 'msg_invalid_password');
|
||||
|
||||
$oDocument->setGrant();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
328
modules/guestbook/guestbook.view.php
Normal file
328
modules/guestbook/guestbook.view.php
Normal file
|
|
@ -0,0 +1,328 @@
|
|||
<?php
|
||||
/**
|
||||
* @class guestbookView
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 View class
|
||||
* guestbook의 view 클래스는 사용자가 방명록의 목록을 보고 글을 쓰거나 댓글을 쓸수 있게 하는 사용자 부분의 display를 관장한다.
|
||||
**/
|
||||
|
||||
class guestbookView extends guestbook {
|
||||
|
||||
/**
|
||||
* @brief 초기화
|
||||
*
|
||||
* 사용자부분의 목록 및 기타 페이지 출력을 위해 스킨 정보라든지 스킨의 템플릿 파일 위치 등을 선언해 놓는다.
|
||||
**/
|
||||
function init() {
|
||||
/**
|
||||
* 템플릿에서 사용할 변수를 Context::set()
|
||||
* 혹시 사용할 수 있는 module_srl 변수를 설정한다.
|
||||
**/
|
||||
if($this->module_srl) Context::set('module_srl',$this->module_srl);
|
||||
|
||||
/**
|
||||
* 현재 방명록 모듈의 정보를 module_info라는 이름으로 템플릿에서 사용할 수 있게 하기 위해 세팅한다
|
||||
**/
|
||||
Context::set('module_info',$this->module_info);
|
||||
|
||||
/**
|
||||
* 스킨 정보에서 받는 목록수나 페이지수를 미리 선언해 놓는다
|
||||
**/
|
||||
$this->list_count = $this->module_info->list_count?$this->module_info->list_count:20;
|
||||
$this->page_count = $this->module_info->page_count?$this->module_info->page_count:10;
|
||||
|
||||
/**
|
||||
* 모듈정보에서 넘어오는 skin값을 이용하여 최종 출력할 템플릿의 위치를 출력한다.
|
||||
* $this->module_path는 ./modules/guestbook/의 값을 가지고 있다
|
||||
**/
|
||||
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
|
||||
$this->setTemplatePath($template_path);
|
||||
|
||||
/**
|
||||
* 방명록 모듈 생성 또는 정보 수정시 open_rss값의 세팅에 따라서 rss_url을 선언해 놓는다.
|
||||
* 이 rss_url은 ./common/tpl/common_layout.html에서 application/rss+xml의 href로 지정된다
|
||||
**/
|
||||
if($this->module_info->open_rss != 'N') Context::set('rss_url', getUrl('','mid',$this->mid,'act','rss'));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 목록 및 입력항목 출력
|
||||
**/
|
||||
function dispGuestbookContent() {
|
||||
/**
|
||||
* 목록 구현에 필요한 변수들을 가져온다
|
||||
* 방명록은 기본적으로 page변수만 있으면 된다
|
||||
**/
|
||||
$page = Context::get('page');
|
||||
|
||||
$oDocumentModel = &getModel('document'); ///< getModel, getController, getView 함수를 통해서 간단히 원하는 객체를 생성할 수 있다.
|
||||
|
||||
/**
|
||||
* write_form.html을 목록에서도 include를 하게 되는데 write_form.html의 경우 $oDocument라는 선택된 문서의 객체가 필요하다.
|
||||
* 목록에서는 수정이 아닌 입력만 있어서 이 $oDocument라는 object를 생성을 해 준다
|
||||
**/
|
||||
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
/**
|
||||
* 글 작성 권한이 있다면 글쓰기 에디터를 세팅한다
|
||||
* write_document는 ./conf/module.xml에 정의되어 있고 관리페이지에서 권한 그룹을 설정한 값이다.
|
||||
**/
|
||||
if($this->grant->write_document) {
|
||||
/**
|
||||
* 에디터에서 사용할 고유 문서 번호를 구해 온다.
|
||||
* ZBXE에서는 모든 고유값을 getNextSequence() 로 구해 올 수 있고 글쓰기(editor) 모듈은 이 고유번호를 바탕으로 동작을 한다.
|
||||
**/
|
||||
$document_srl = getNextSequence();
|
||||
|
||||
/**
|
||||
* editor model객체의 getEditor method를 호출하여 세팅한다.
|
||||
* 이 때 여러가지 옵션을 지정하여 다른 에디터 코드를 받을 수 있다.
|
||||
**/
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->allow_fileupload = false; ///< 파일 업로드 기능을 제한
|
||||
$option->enable_autosave = true; ///< 자동 저장 기능을 활성화
|
||||
$option->enable_default_component = true; ///< 기본 에디터 컴포넌트의 활성화
|
||||
$option->enable_component = true; ///< 추가 에디터 컴포넌트의 활성화
|
||||
$option->resizable = false; ///< 글쓰기 폼의 상하 조절 가능하도록 설정
|
||||
$option->height = 200; ///< 에디터의 높이 지정
|
||||
$editor = $oEditorModel->getEditor($document_srl, $option); ///< 에디터코드를 받음
|
||||
Context::set('editor', $editor); ///< 에디터코드를 editor라는 이름으로 세팅.
|
||||
}
|
||||
|
||||
/**
|
||||
* document 모듈을 이용해서 현재 방명록의 module_srl로 목록을 구한다.
|
||||
* 목록을 구할때 필요한 변수를 $args에 세팅후 document.model객체를 생성하고 getDocumentList() method를 호출한다.
|
||||
**/
|
||||
// 목록을 구하기 위한 옵션
|
||||
$args->module_srl = $this->module_srl; ///< 현재 모듈의 module_srl
|
||||
$args->page = $page; ///< 페이지
|
||||
$args->list_count = $this->list_count; ///< 한페이지에 보여줄 글 수
|
||||
$args->page_count = $this->page_count; ///< 페이지 네비게이션에 나타날 페이지의 수
|
||||
$args->sort_index = 'list_order'; ///< 목록의 정렬 대상 (list_order, 즉 날짜의 역순을 정렬 대상으로 한다)
|
||||
$args->order_type = 'asc'; ///< 정렬 순서 (list_order는 -1부터 -1되어서 저장되는 값이라 asc로 정렬 순서를 정하면 된다)
|
||||
|
||||
/**
|
||||
* document model객체를 생성하여 목록을 구한다.
|
||||
**/
|
||||
$output = $oDocumentModel->getDocumentList($args);
|
||||
|
||||
/**
|
||||
* 템플릿에 쓰기 위해서 document_model::getDocumentList() 의 return object에 있는 값들을 세팅
|
||||
* ZBXE에서 목록의 경우 5가지의 값으로 결과를 받는다.
|
||||
* total_count : 대상의 전체 글 수
|
||||
* total_page : 대상의 전체 페이지 수 (list_count, page_count로 계산되어진 값)
|
||||
* page : 현재 페이지
|
||||
* data : 목록 배열
|
||||
* page_navigation : 페이지 네비게이션을 출력하기 위한 object
|
||||
**/
|
||||
Context::set('total_count', $output->total_count);
|
||||
Context::set('total_page', $output->total_page);
|
||||
Context::set('page', $output->page);
|
||||
Context::set('document_list', $output->data);
|
||||
Context::set('page_navigation', $output->page_navigation);
|
||||
|
||||
/**
|
||||
* 템플릿 파일을 지정한다.
|
||||
* 이미 template path는 init()에서 정의를 하였다.
|
||||
**/
|
||||
$this->setTemplateFile('list');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 글 수정 화면 출력
|
||||
**/
|
||||
function dispGuestbookModify() {
|
||||
// 권한 체크
|
||||
if(!$this->grant->write_document) return $this->dispGuestbookMessage('msg_not_permitted');
|
||||
|
||||
// GET parameter에서 document_srl을 가져옴
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
// document 모듈 객체 생성
|
||||
$oDocumentModel = &getModel('document');
|
||||
|
||||
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
|
||||
$oDocument->setDocument($document_srl);
|
||||
|
||||
if(!$oDocument->isExists()) Context::set('document_srl','');
|
||||
|
||||
if(!$document_srl) $document_srl = getNextSequence();
|
||||
|
||||
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if($oDocument->isExists()&&!$oDocument->isGranted()) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
Context::set('document_srl',$document_srl);
|
||||
Context::set('oDocument', $oDocument);
|
||||
|
||||
// 에디터 모듈의 getEditor를 호출하여 세팅
|
||||
$oEditorModel = &getModel('editor');
|
||||
$option->allow_fileupload = $this->grant->fileupload;
|
||||
$option->enable_autosave = true;
|
||||
$option->enable_default_component = true;
|
||||
$option->enable_component = true;
|
||||
$option->resizable = true;
|
||||
$option->height = 600;
|
||||
$editor = $oEditorModel->getEditor($document_srl, $option);
|
||||
Context::set('editor', $editor);
|
||||
|
||||
$this->setTemplateFile('write_form');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 문서 삭제 화면 출력
|
||||
**/
|
||||
function dispGuestbookDelete() {
|
||||
/**
|
||||
* 권한 체크
|
||||
* 글쓰기 권한이 없다면 아예 접근이 불가능하도록 해 버린다.
|
||||
**/
|
||||
if(!$this->grant->write_document) return $this->dispGuestbookMessage('msg_not_permitted');
|
||||
|
||||
/**
|
||||
* 삭제할 문서번호를 가져온다
|
||||
* 이 문서 번호는 get parmameter에 저장되어 있고 Context 클래스에서 미리 세팅을 해 놓은 상태이다.
|
||||
**/
|
||||
$document_srl = Context::get('document_srl');
|
||||
|
||||
/**
|
||||
* 문서 번호가 없으면 잘못된 접근으로 에러 메세지를 출력한다.
|
||||
**/
|
||||
if(!$document_srl) return $this->dispGuestbookMessage('msg_invalid_request');
|
||||
|
||||
/**
|
||||
* 문서 번호로 문서객체를 구해온다
|
||||
**/
|
||||
$oDocumentModel = &getModel('document');
|
||||
$oDocument = $oDocumentModel->getDocument($document_srl);
|
||||
|
||||
// 대상 문서가 없으면 에러
|
||||
if(!$oDocument->isExists()) return $this->dispGuestbookContent();
|
||||
|
||||
/**
|
||||
* 권한을 체크한다.
|
||||
* 권한 체크는 글쓴 사용자와 현재 로그인한 사용자의 정보가 같거나 최고관리자 일 경우 권한이 있다고 판단하고,
|
||||
* 그렇지 않은 경우는 비밀번호 입력 폼을 출력한다.
|
||||
**/
|
||||
if(!$oDocument->isGranted()) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
// 구해진 문서를 context setting하고 delete_form.html 파일을 템플릿 파일로 지정하여 삭제 폼을 출력한다.
|
||||
Context::set('oDocument',$oDocument);
|
||||
|
||||
// delete_from.html 템플릿 파일의 지정
|
||||
$this->setTemplateFile('delete_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글의 답글 화면 출력
|
||||
**/
|
||||
function dispGuestbookReplyComment() {
|
||||
// 댓글 작성 권한을 체크한다.
|
||||
if(!$this->grant->write_comment) return $this->dispGuestbookMessage('msg_not_permitted');
|
||||
|
||||
// 댓글의 답글을 출력하기 위해서 문서와 원 댓글의 유효성을 검사하기 위해 변수를 가져온다.
|
||||
$document_srl = Context::get('document_srl');
|
||||
$parent_srl = Context::get('comment_srl');
|
||||
|
||||
// 지정된 원 댓글이 없다면 오류
|
||||
if(!$parent_srl) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 해당 댓글를 찾아본다
|
||||
$oCommentModel = &getModel('comment');
|
||||
$source_comment = $oCommentModel->getComment($parent_srl, $this->grant->manager);
|
||||
|
||||
// 댓글이 없다면 오류
|
||||
if(!$source_comment) return $this->dispGuestbookMessage('msg_invalid_request');
|
||||
|
||||
// 필요한 정보들 세팅
|
||||
Context::set('document_srl',$document_srl);
|
||||
Context::set('parent_srl',$parent_srl);
|
||||
Context::set('comment_srl',NULL);
|
||||
Context::set('source_comment',$source_comment);
|
||||
|
||||
/**
|
||||
* comment_form.html 템플릿 파일을 출력할 파일로 지정
|
||||
**/
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 수정 폼 출력
|
||||
**/
|
||||
function dispGuestbookModifyComment() {
|
||||
// 댓글 작성 권한을 체크한다.
|
||||
if(!$this->grant->write_comment) return $this->dispGuestbookMessage('msg_not_permitted');
|
||||
|
||||
// 댓글을 수정하기 위하여 문서와 원 댓글의 유효성을 검사하기 위해 변수를 가져온다.
|
||||
$document_srl = Context::get('document_srl');
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// 지정된 댓글이 없다면 오류
|
||||
if(!$comment_srl) return new Object(-1, 'msg_invalid_request');
|
||||
|
||||
// 해당 댓글를 찾아본다
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
|
||||
// 댓글이 없다면 오류
|
||||
if(!$comment) return $this->dispGuestbookMessage('msg_invalid_request');
|
||||
|
||||
// 문서번호를 context setting한다
|
||||
Context::set('document_srl',$comment->document_srl);
|
||||
|
||||
// 글을 수정하려고 할 경우 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if(!$comment->is_granted) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
// 필요한 정보들 세팅
|
||||
Context::set('comment_srl',$comment_srl);
|
||||
Context::set('comment', $comment);
|
||||
|
||||
// comment_form 파일을 템플릿 출력 파일로 지정
|
||||
$this->setTemplateFile('comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 댓글 삭제 화면 출력
|
||||
**/
|
||||
function dispGuestbookDeleteComment() {
|
||||
// 댓글 작성 권한을 체크한다.
|
||||
if(!$this->grant->write_comment) return $this->dispGuestbookMessage('msg_not_permitted');
|
||||
|
||||
// 삭제할 댓글번호를 가져온다
|
||||
$comment_srl = Context::get('comment_srl');
|
||||
|
||||
// 삭제하려는 댓글이 있는지 확인
|
||||
if(!$comment_srl) return $this->dispGuestbookMessage('msg_invalid_request');
|
||||
|
||||
// 해당 댓글을 가져온다.
|
||||
$oCommentModel = &getModel('comment');
|
||||
$comment = $oCommentModel->getComment($comment_srl, $this->grant->manager);
|
||||
|
||||
// 삭제하려는 댓글이 없으면 에러
|
||||
if(!$comment) return $this->dispGuestbookContent('msg_invalid_request');
|
||||
|
||||
// 문서 번호를 context setting한다.
|
||||
Context::set('document_srl',$comment->document_srl);
|
||||
|
||||
// 권한이 없는 경우 비밀번호 입력화면으로
|
||||
if(!$comment->is_granted) return $this->setTemplateFile('input_password_form');
|
||||
|
||||
Context::set('comment',$comment);
|
||||
|
||||
// delete_comemnt_form.html파일을 출력 파일로 지정한다.
|
||||
$this->setTemplateFile('delete_comment_form');
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 메세지 출력
|
||||
**/
|
||||
function dispGuestbookMessage($msg_code) {
|
||||
$msg = Context::getLang($msg_code);
|
||||
if(!$msg) $msg = $msg_code;
|
||||
Context::set('message', $msg);
|
||||
$this->setTemplateFile('message');
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
17
modules/guestbook/lang/en.lang.php
Normal file
17
modules/guestbook/lang/en.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file en.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief board modules's basic language pack
|
||||
**/
|
||||
|
||||
$lang->board = "board";
|
||||
|
||||
// words used in button
|
||||
$lang->cmd_board_list = 'Boards list';
|
||||
$lang->cmd_module_config = 'Common board setting';
|
||||
$lang->cmd_view_info = 'Board info';
|
||||
$lang->move_target_module = "Target module for changing position";
|
||||
|
||||
$lang->about_board = "This module is used for creating and managing boards.\nSelect the module's name from the list after creating one to configurate specifically.\nBe careful with board's module name, since it will be the url. (ex : http://domain/zb/?mid=modulename)";
|
||||
?>
|
||||
17
modules/guestbook/lang/es.lang.php
Normal file
17
modules/guestbook/lang/es.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file es.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief Paquete lingual para Módulo de boletín
|
||||
**/
|
||||
|
||||
$lang->board = "Boletín";
|
||||
|
||||
// Palabras utiliza en botónes
|
||||
$lang->cmd_board_list = 'Lista de boletín';
|
||||
$lang->cmd_module_config = 'configuración comun de boletínes';
|
||||
$lang->cmd_view_info = 'ver información de boletín';
|
||||
$lang->move_target_module = "Módulo para mover";
|
||||
|
||||
$lang->about_board = "Es el módulo para crear y manejar boletínes.\nDespues de crear un boletín, haga clic en nombre de módulos para configuración mas detallado.\nEl nombre de módulo es nombre de URL, sea cuidoso deseando el nombre. (ej : http://dominio/zb/?mid=nombre de módulo)";
|
||||
?>
|
||||
17
modules/guestbook/lang/jp.lang.php
Normal file
17
modules/guestbook/lang/jp.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author zero (zero@nzeo.com) 翻訳:RisaPapa
|
||||
* @brief 掲示板(board)モジュルの基本言語パッケージ
|
||||
**/
|
||||
|
||||
$lang->board = "掲示板";
|
||||
|
||||
// ボタンに使用する用語
|
||||
$lang->cmd_board_list = '掲示板リスト';
|
||||
$lang->cmd_module_config = '掲示板共通設定';
|
||||
$lang->cmd_view_info = '掲示板情報';
|
||||
$lang->move_target_module = "移動対象モジュル";
|
||||
|
||||
$lang->about_board = "掲示板を生成、管理できる掲示板モジュルです。\n生成後、リストからモジュル名を選択すると詳細な設定ができます。\n掲示板のモジュル名はURLになりますので注意してください。 (ex : http://ドメイン/zb/?mid=モジュル名)";
|
||||
?>
|
||||
16
modules/guestbook/lang/ko.lang.php
Normal file
16
modules/guestbook/lang/ko.lang.php
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<?php
|
||||
/**
|
||||
* @file ko.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 방명록(guestbook) 모듈의 기본 언어팩
|
||||
**/
|
||||
|
||||
$lang->guestbook = "방명록";
|
||||
|
||||
// 버튼에 사용되는 언어
|
||||
$lang->cmd_guestbook_list = '방명록 목록';
|
||||
$lang->cmd_module_config = '방명록 공통 설정';
|
||||
$lang->cmd_view_info = '방명록 정보';
|
||||
|
||||
$lang->about_guestbook = "방명록을 생성하고 관리할 수 있는 방명록 모듈입니다.\n생성하신 후 목록에서 모듈이름을 선택하시면 자세한 설정이 가능합니다.\n방명록의 모듈이름은 접속 url이 되므로 신중하게 입력해주세요. (ex : http://도메인/zb/?mid=모듈이름)";
|
||||
?>
|
||||
17
modules/guestbook/lang/zh-CN.lang.php
Normal file
17
modules/guestbook/lang/zh-CN.lang.php
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<?php
|
||||
/**
|
||||
* @file zh-CN.lang.php
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief 论坛(board) 模块的基本语言包
|
||||
**/
|
||||
|
||||
$lang->board = "board";
|
||||
|
||||
// 在按钮使用的语言
|
||||
$lang->cmd_board_list = 'board 目录';
|
||||
$lang->cmd_module_config = 'board 共同设定';
|
||||
$lang->cmd_view_info = 'Board 信息';
|
||||
$lang->move_target_module = "移动目标模块";
|
||||
|
||||
$lang->about_board = "可以生成Board和管理的Board模块\n生成后在目录里选择模块名称可以详细设定。";
|
||||
?>
|
||||
24
modules/guestbook/queries/getGuestbookList.xml
Normal file
24
modules/guestbook/queries/getGuestbookList.xml
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<query id="getGuestbookList" action="select">
|
||||
<tables>
|
||||
<table name="modules" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="module" default="guestbook" />
|
||||
<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" 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>
|
||||
42
modules/guestbook/skins/default/comment.html
Normal file
42
modules/guestbook/skins/default/comment.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<!-- 댓글 정보 출력 -->
|
||||
<a name="comment_top_{$document->document_srl}"></a>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="clear">
|
||||
<!-- 댓글 목록 -->
|
||||
|
||||
<!--@if($document->getCommentCount())-->
|
||||
|
||||
<!--@foreach($document->getComments() as $key => $val)-->
|
||||
<a name="comment_{$key}"></a>
|
||||
<div class="comment_box" style="margin-left:{$val->depth*15}px" >
|
||||
<div class="fl member_{$val->member_srl}">{htmlspecialchars($val->nick_name)}</div>
|
||||
<div class="fr">{zdate($val->regdate, "Y-m-d H:i:s")}</div>
|
||||
<div class="comment_content">
|
||||
<div class="content">{$val->content}</div>
|
||||
|
||||
<div class="comment_sub_info">
|
||||
{$val->ipaddress}
|
||||
</div>
|
||||
<div class="button_area">
|
||||
<a href="{getUrl('act','dispGuestbookReplyComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_reply}</span></a>
|
||||
|
||||
<!--@if($val->is_granted || !$val->member_srl || $grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispGuestbookModifyComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_modify}</span></a>
|
||||
<a href="{getUrl('act','dispGuestbookDeleteComment','comment_srl',$val->comment_srl)}" class="button"><span>{$lang->cmd_delete}</span></a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!--@end-->
|
||||
|
||||
<!-- 댓글 입력 폼 -->
|
||||
|
||||
<!--@if($grant->write_comment && !$document->isLocked())-->
|
||||
<!--#include("./comment_form.html")-->
|
||||
<!--@end-->
|
||||
|
||||
</div>
|
||||
79
modules/guestbook/skins/default/comment_form.html
Normal file
79
modules/guestbook/skins/default/comment_form.html
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
<!--%import("filter/insert_comment.xml")-->
|
||||
<!--%import("js/guestbook.js")-->
|
||||
|
||||
<!--@if($source_comment || $comment)-->
|
||||
<!--#include("header.html")-->
|
||||
<!--@end-->
|
||||
|
||||
<!-- 만약 댓글의 답을 다는 것이라면 원문 보여줌 -->
|
||||
<!--@if($source_comment)-->
|
||||
<div>
|
||||
<table cellspacing="0" width="100%">
|
||||
<col width="120" />
|
||||
<col width="*" />
|
||||
<tr>
|
||||
<th>{$lang->date}</th>
|
||||
<td>{$source_comment->regdate}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->writer}</th>
|
||||
<td><div class="member_{$source_comment->member_srl}">{htmlspecialchars($source_comment->nick_name)}</div></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->content}</th>
|
||||
<td height="100" valign="top">{$source_comment->content}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 글쓰기 폼 -->
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_comment)" <!--@if($grant->fileupload)-->enctype="multipart/form-data"<!--@end-->>
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="document_srl" value="{$document_srl?$document_srl:$document->document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
<input type="hidden" name="parent_srl" value="{$parent_srl}" />
|
||||
|
||||
<table width="100%">
|
||||
<col width="120" />
|
||||
<col width="*" />
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<tr>
|
||||
<th>{$lang->writer}</th>
|
||||
<td><input type="text" name="nick_name" value="{htmlspecialchars($comment->nick_name)}" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->password}</th>
|
||||
<td><input type="password" name="password" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->email_address}</th>
|
||||
<td><input type="text" name="email_address" value="{htmlspecialchars($comment->email_address)}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->homepage}</th>
|
||||
<td><input type="text" name="homepage" value="{htmlspecialchars($comment->homepage)}" /></td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
|
||||
<tr>
|
||||
<td colspan="2" class="tRight">
|
||||
<textarea class="comment_form" name="content">{strip_tags($comment->content)}</textarea>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2" class="tRight">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
|
||||
<!--@if($act&&$act!='dispGuestbookContent')-->
|
||||
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" /></span>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--@if($source_comment)-->
|
||||
<!--#include("footer.html")-->
|
||||
<!--@end-->
|
||||
28
modules/guestbook/skins/default/css/guestbook.css
Normal file
28
modules/guestbook/skins/default/css/guestbook.css
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
@charset "utf-8";
|
||||
|
||||
a { color:#555555; text-decoration:none; }
|
||||
|
||||
.titleBox { border:4px solid #EEEEEE; padding:.5em; margin-bottom:1em; }
|
||||
.titleBox .title { font-weight:bold; }
|
||||
.titleBox .memo { color:#888888; }
|
||||
|
||||
.info .status { float:left; overflow:hidden; }
|
||||
.info .link { float:right; overflow:hidden; }
|
||||
|
||||
.write_form { padding:10px; margin:0px; border:3px solid #CCCCCC; margin-top:.5em; }
|
||||
.write_form table { border:0; padding:0; }
|
||||
.write_form td.option { text-align:right; padding:.3em; }
|
||||
|
||||
.document { padding:0; margin-top:1em; border:3px solid #EEEEEE; }
|
||||
.document .info { background-color:#EFEFEF; padding:.5em; }
|
||||
.document .subinfo { text-align:right; color:#CCCCCC;}
|
||||
.document .content { padding:1em; }
|
||||
.document .comment { padding:1em; }
|
||||
|
||||
.comment_box { border:0; padding:.5em; border-top:1px solid #EEEEEE; margin:1em 0 1em 0;}
|
||||
.comment_box .comment_content { }
|
||||
.comment_box .comment_content .content { margin:1em 0 2em 0;}
|
||||
.comment_box .comment_content .comment_sub_info { float:left; }
|
||||
.comment_box .comment_content .button_area { float:right; }
|
||||
|
||||
textarea.comment_form { border:1px solid #EEEEEE; width:90%;}
|
||||
23
modules/guestbook/skins/default/delete_comment_form.html
Normal file
23
modules/guestbook/skins/default/delete_comment_form.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--%import("filter/delete_comment.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<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="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">{$lang->confirm_delete}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" value="{$lang->cmd_delete}" />
|
||||
<input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
27
modules/guestbook/skins/default/delete_form.html
Normal file
27
modules/guestbook/skins/default/delete_form.html
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<!--%import("filter/delete_document.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<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}" />
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">{$lang->confirm_delete}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->title}</th>
|
||||
<td>{$oDocument->getTitleText()}</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','')}'" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
18
modules/guestbook/skins/default/filter/delete_comment.xml
Normal file
18
modules/guestbook/skins/default/filter/delete_comment.xml
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
<filter name="delete_comment" module="guestbook" act="procGuestbookDeleteComment">
|
||||
<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/guestbook/skins/default/filter/delete_document.xml
Normal file
16
modules/guestbook/skins/default/filter/delete_document.xml
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
<filter name="delete_document" module="guestbook" act="procGuestbookDeleteDocument">
|
||||
<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>
|
||||
15
modules/guestbook/skins/default/filter/input_password.xml
Normal file
15
modules/guestbook/skins/default/filter/input_password.xml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
<filter name="input_password" module="guestbook" act="procGuestbookVerificationPassword" >
|
||||
<form>
|
||||
<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>
|
||||
17
modules/guestbook/skins/default/filter/insert.xml
Normal file
17
modules/guestbook/skins/default/filter/insert.xml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<filter name="insert" module="guestbook" act="procGuestbookInsertDocument" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="nick_name" required="true" />
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" />
|
||||
<node target="homepage" maxlength="250"/>
|
||||
<node target="content" required="true" />
|
||||
</form>
|
||||
<parameter />
|
||||
<response callback_func="completeDocumentInserted">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="category_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
27
modules/guestbook/skins/default/filter/insert_comment.xml
Normal file
27
modules/guestbook/skins/default/filter/insert_comment.xml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<filter name="insert_comment" module="guestbook" act="procGuestbookInsertComment" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="document_srl" required="true" />
|
||||
<node target="nick_name" required="true" />
|
||||
<node target="password" required="true" />
|
||||
<node target="email_address" maxlength="250" />
|
||||
<node target="homepage" maxlength="250"/>
|
||||
<node target="content" required="true" minlength="1" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="mid" target="mid" />
|
||||
<param name="document_srl" target="document_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" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertComment">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="mid" />
|
||||
<tag name="document_srl" />
|
||||
<tag name="comment_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
1
modules/guestbook/skins/default/footer.html
Normal file
1
modules/guestbook/skins/default/footer.html
Normal file
|
|
@ -0,0 +1 @@
|
|||
{$module_info->footer_text}
|
||||
53
modules/guestbook/skins/default/header.html
Normal file
53
modules/guestbook/skins/default/header.html
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
<!--%import("js/guestbook.js")-->
|
||||
<!--%import("css/guestbook.css")-->
|
||||
{$module_info->header_text}
|
||||
|
||||
<!-- 스킨의 제목/내용으로 내용 구성 -->
|
||||
<!--@if($module_info->title || $module_info->memo)-->
|
||||
<div class="titleBox">
|
||||
<!--@if($module_info->title)-->
|
||||
<div class="title">{$module_info->title}</div>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($module_info->memo)-->
|
||||
<div class="memo">{nl2br($module_info->memo)}</div>
|
||||
<!--@end-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 정보 -->
|
||||
<div class="info">
|
||||
<div class="status">
|
||||
<!--@if($total_count)-->
|
||||
{$lang->document_count} : {number_format($total_count)},
|
||||
{$lang->page_count} : {number_format($page)} / {number_format($total_page)}
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="link">
|
||||
<!--@if($rss_url)-->
|
||||
<a href="{$rss_url}">rss</a>
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($is_logged)-->
|
||||
[
|
||||
<a href="{getUrl('act','dispMemberInfo')}">{$lang->cmd_view_member_info}</a> |
|
||||
<a href="{getUrl('act','dispMemberLogout')}">{$lang->cmd_logout}</a>
|
||||
]
|
||||
|
||||
<!--@else-->
|
||||
[
|
||||
<a href="{getUrl('act','dispMemberSignUpForm')}">{$lang->cmd_signup}</a> |
|
||||
<a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
|
||||
]
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($grant->is_admin)-->
|
||||
<a href="{getUrl('act','dispGuestbookAdminGuestbookInfo')}">[{$lang->cmd_setup}]</a>
|
||||
<a href="{getUrl('module','admin','act','dispGuestbookAdminGuestbookInfo')}" onclick="winopen(this.href);return false;">[{$lang->cmd_management}]</a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
27
modules/guestbook/skins/default/input_password_form.html
Normal file
27
modules/guestbook/skins/default/input_password_form.html
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
<!--%import("filter/input_password.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<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="{$document_srl}" />
|
||||
<input type="hidden" name="comment_srl" value="{$comment_srl}" />
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">{$lang->msg_input_password}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->password}</th>
|
||||
<td><input type="password" name="password" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<input type="submit" value="{$lang->cmd_input}" />
|
||||
<input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','','document_srl','','comment_srl','')}'" />
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
74
modules/guestbook/skins/default/js/guestbook.js
Normal file
74
modules/guestbook/skins/default/js/guestbook.js
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
/**
|
||||
* @file modules/guestbook/js/guestbook.js
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 javascript
|
||||
**/
|
||||
|
||||
/* 글쓰기 작성후 */
|
||||
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'];
|
||||
|
||||
alert(message);
|
||||
|
||||
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
|
||||
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 = "./?mid="+mid;
|
||||
if(page) url += "&page="+page;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
// 현재 페이지 reload
|
||||
function completeReload(ret_obj) {
|
||||
var error = ret_obj['error'];
|
||||
var message = ret_obj['message'];
|
||||
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
/* 댓글 글쓰기 작성후 */
|
||||
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 = "./?mid="+mid+"&document_srl="+document_srl;
|
||||
//if(comment_srl) url += "#comment_"+comment_srl;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 댓글 삭제 */
|
||||
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 = "./?mid="+mid+'&document_srl='+document_srl;
|
||||
if(page) url += "&page="+page;
|
||||
|
||||
alert(message);
|
||||
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
65
modules/guestbook/skins/default/list.html
Normal file
65
modules/guestbook/skins/default/list.html
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<!--%import("filter/search.xml")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<!-- 글쓰기 폼 -->
|
||||
<!--@if($grant->write_document && $editor)-->
|
||||
<div>
|
||||
<!--#include("./write_form.html")-->
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<!-- 목록 -->
|
||||
<div>
|
||||
<!--@foreach($document_list as $no => $document)-->
|
||||
<!-- 글 내용 보여주기 -->
|
||||
<div class="document">
|
||||
<div class="info">
|
||||
<div class="fl member_{$document->get('member_srl')}">{$document->getNickName()}</div>
|
||||
|
||||
<!--@if($document->isEditable())-->
|
||||
<div class="fr">
|
||||
<a href="{getUrl('act','dispGuestbookModify')}" class="button"><span>{$lang->cmd_modify}</span></a>
|
||||
<a href="{getUrl('act','dispGuestbookDelete')}" class="button"><span>{$lang->cmd_delete}</span></a>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<div class="clear"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="clear content">
|
||||
{$document->getContent()}
|
||||
</div>
|
||||
|
||||
<div class="subinfo">
|
||||
{$document->getRegdate('Y-m-d H:i:s')} |
|
||||
{$document->get('ipaddress')}
|
||||
</div>
|
||||
|
||||
<div class="comment">
|
||||
<!-- 댓글 파일 include -->
|
||||
<!--@if($grant->write_comment && $document->allowComment())-->
|
||||
<!--#include("./comment.html")-->
|
||||
<!--@end-->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--@end-->
|
||||
</div>
|
||||
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div>
|
||||
<a href="{getUrl('page','','document_srl','')}">[{$lang->first_page}]</a>
|
||||
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
{$page_no}
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'document_srl','')}">[{$page_no}]</a>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}">[{$lang->last_page}]</a>
|
||||
</div>
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
11
modules/guestbook/skins/default/message.html
Normal file
11
modules/guestbook/skins/default/message.html
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<!--#include("header.html")-->
|
||||
|
||||
<div>
|
||||
{$message}
|
||||
</div>
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
|
||||
<!--@end-->
|
||||
|
||||
<!--#include("footer.html")-->
|
||||
23
modules/guestbook/skins/default/skin.xml
Normal file
23
modules/guestbook/skins/default/skin.xml
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<skin>
|
||||
<title xml:lang="ko">방명록 기본 스킨</title>
|
||||
<maker email_address="zero@zeroboard.com" link="http://www.zeroboard.com" date="2007. 2. 28">
|
||||
<name xml:lang="ko">제로</name>
|
||||
<description xml:lang="ko">board모듈의 default스킨</description>
|
||||
</maker>
|
||||
<colorset>
|
||||
<color name="normal" src="screenshot/normal.gif">
|
||||
<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="memo" type="textarea">
|
||||
<title xml:lang="ko">방명록 설명</title>
|
||||
<description lang="ko">내용의 기본값</description>
|
||||
</var>
|
||||
</extra_vars>
|
||||
</skin>
|
||||
69
modules/guestbook/skins/default/write_form.html
Normal file
69
modules/guestbook/skins/default/write_form.html
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
<!--%import("filter/insert.xml")-->
|
||||
|
||||
<!--@if($act == 'dispGuestbookModify')-->
|
||||
<!--#include("header.html")-->
|
||||
<!--@end-->
|
||||
|
||||
<div class="write_form">
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert)">
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="content" value="{$oDocument->getContentText()}" />
|
||||
<input type="hidden" name="document_srl" value="{$oDocument->get('document_srl')}" />
|
||||
<input type="hidden" name="allow_trackback" value="N" />
|
||||
|
||||
<table cellspacing="0" width="100%">
|
||||
<col width="120" />
|
||||
<col width="*" />
|
||||
|
||||
<!--@if(!$is_logged)-->
|
||||
<tr>
|
||||
<th>{$lang->writer}</th>
|
||||
<td><input type="text" name="nick_name" value="{$oDocument->getNickName()}" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->password}</th>
|
||||
<td><input type="password" name="password" value="" /></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->email_address}</th>
|
||||
<td><input type="text" name="email_address" value="{htmlspecialchars($oDocument->get('email_address'))}"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>{$lang->homepage}</th>
|
||||
<td><input type="text" name="homepage" value="{htmlspecialchars($oDocument->get('homepage'))}" /></td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
<tr>
|
||||
<td colspan="2" class="option">
|
||||
<!--@if($grant->manager)-->
|
||||
<input type="checkbox" name="is_notice" value="Y" <!--@if($oDocument->isNotice())-->checked="checked"<!--@end--> id="is_notice" />
|
||||
<label for="is_notice">{$lang->notice}</label>
|
||||
<!--@end-->
|
||||
|
||||
<input type="checkbox" name="is_secret" value="Y" <!--@if($oDocument->isSecret())-->checked="checked"<!--@end--> id="is_secret" />
|
||||
<label for="is_secret">{$lang->secret}</label>
|
||||
|
||||
<input type="checkbox" name="allow_comment" value="Y" <!--@if($oDocument->allowComment())-->checked="checked"<!--@end--> id="allow_comment" />
|
||||
<label for="allow_comment">{$lang->allow_comment}</label>
|
||||
|
||||
<input type="checkbox" name="lock_comment" value="Y" <!--@if($oDocument->isLocked())-->checked="checked"<!--@end--> id="lock_comment" />
|
||||
<label for="lock_comment">{$lang->lock_comment}</label>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">{$editor}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="tRight">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
<span class="button"><input type="button" value="{$lang->cmd_cancel}" onclick="location.href='{getUrl('act','')}'" /></span>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</form>
|
||||
|
||||
<!--@if($act == 'dispGuestbookModify')-->
|
||||
<!--#include("footer.html")-->
|
||||
<!--@end-->
|
||||
10
modules/guestbook/tpl/filter/delete_guestbook.xml
Normal file
10
modules/guestbook/tpl/filter/delete_guestbook.xml
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<filter name="delete_guestbook" module="guestbook" act="procGuestbookAdminDeleteGuestbook">
|
||||
<form>
|
||||
<node target="module_srl" required="true" />
|
||||
</form>
|
||||
<response callback_func="completeDeleteGuestbook">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="page" />
|
||||
</response>
|
||||
</filter>
|
||||
11
modules/guestbook/tpl/filter/insert_grant.xml
Normal file
11
modules/guestbook/tpl/filter/insert_grant.xml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
<filter name="insert_grant" module="guestbook" act="procGuestbookAdminInsertGrant" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="module_srl" required="true" filter="number" />
|
||||
</form>
|
||||
<response callback_func="completeInsertGrant">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="page" />
|
||||
<tag name="module_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
33
modules/guestbook/tpl/filter/insert_guestbook.xml
Normal file
33
modules/guestbook/tpl/filter/insert_guestbook.xml
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<filter name="insert_guestbook" module="guestbook" act="procGuestbookAdminInsertGuestbook" confirm_msg_code="confirm_submit">
|
||||
<form>
|
||||
<node target="mid" required="true" filter="alpha_number" />
|
||||
<node target="browser_title" required="true" maxlength="250" />
|
||||
<node target="list_count" required="true" filter="number" />
|
||||
<node target="page_count" required="true" filter="number" />
|
||||
</form>
|
||||
<parameter>
|
||||
<param name="guestbook_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="list_count" target="list_count" />
|
||||
<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" />
|
||||
<param name="open_rss" target="open_rss" />
|
||||
</parameter>
|
||||
<response callback_func="completeInsertGuestbook">
|
||||
<tag name="error" />
|
||||
<tag name="message" />
|
||||
<tag name="module" />
|
||||
<tag name="act" />
|
||||
<tag name="page" />
|
||||
<tag name="module_srl" />
|
||||
</response>
|
||||
</filter>
|
||||
42
modules/guestbook/tpl/grant_list.html
Normal file
42
modules/guestbook/tpl/grant_list.html
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
<!--#include("./header.html")-->
|
||||
<!--%import("filter/insert_grant.xml")-->
|
||||
|
||||
<div class="infoText">{nl2br($lang->about_grant)}</div>
|
||||
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_grant)">
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_srl}" />
|
||||
|
||||
<table cellspacing="0" class="tableType3">
|
||||
<col width="130" />
|
||||
<col width="*" />
|
||||
<col width="80" />
|
||||
<col width="80" />
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{$lang->grant}</th>
|
||||
<th scope="col" colspan="3">{$lang->target}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<!--@foreach($grant_list as $key => $val)-->
|
||||
<tr>
|
||||
<th scope="row">{$val->title}</th>
|
||||
<td class="left">
|
||||
<!--@foreach($group_list as $k => $v)-->
|
||||
<input type="checkbox" class="checkbox" name="{$key}" value="{$v->group_srl}" id="grant_{$key}_{$v->group_srl}" <!--@if(is_array($module_info->grants[$key])&&in_array($v->group_srl,$module_info->grants[$key]))-->checked="checked"<!--@end-->/>
|
||||
<label for="grant_{$key}_{$v->group_srl}">{$v->title}</label>
|
||||
<!--@end-->
|
||||
</td>
|
||||
<td><a href="#" onclick="doSelectAll(this, '{$key}')" class="blue">{$lang->cmd_select_all}</a></td>
|
||||
<td><a href="#" onclick="doUnSelectAll(this, '{$key}')" class="red">{$lang->cmd_unselect_all}</a></td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_save}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
34
modules/guestbook/tpl/guestbook_delete.html
Normal file
34
modules/guestbook/tpl/guestbook_delete.html
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
<!--%import("filter/delete_guestbook.xml")-->
|
||||
<!--%import("js/guestbook_admin.js")-->
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<form action="./" method="get" onsubmit="return procFilter(this, delete_guestbook)">
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
|
||||
|
||||
<table cellspacing="0" class="tableType4">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row" colspan="2">{$lang->confirm_delete}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->module_name}</th>
|
||||
<td>{$module_info->mid}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->module}</th>
|
||||
<td>{$module_info->module}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->document_count}</th>
|
||||
<td>{$module_info->document_count}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<a href="{getUrl('act','dispGuestbookAdminContent')}" class="button"><span>{$lang->cmd_back}</span></a>
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_delete}" /></span>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
73
modules/guestbook/tpl/guestbook_info.html
Normal file
73
modules/guestbook/tpl/guestbook_info.html
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
<!--#include("header.html")-->
|
||||
|
||||
<table cellspacing="0" class="tableType4">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row">{$lang->module_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 scope="row">{$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 scope="row">{$lang->skin}</th>
|
||||
<td>{$module_info->skin_title} ({$module_info->skin})</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->browser_title}</th>
|
||||
<td>{htmlspecialchars($module_info->browser_title)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->use_category}</th>
|
||||
<td><!--@if($module_info->use_category=='Y')-->{$lang->use}<!--@else-->{$lang->notuse}<!--@end--></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->open_rss}</th>
|
||||
<td>{$lang->open_rss_types[$module_info->open_rss]}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->list_count}</th>
|
||||
<td>{$module_info->list_count?$module_info->list_count:20}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->page_count}</th>
|
||||
<td>{$module_info->page_count?$module_info->page_count:10}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->description}</th>
|
||||
<td>{nl2br(htmlspecialchars($module_info->description))}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->header_text}</th>
|
||||
<td>{htmlspecialchars($module_info->header_text)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->footer_text}</th>
|
||||
<td>{htmlspecialchars($module_info->footer_text)}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->admin_id}</th>
|
||||
<td>{implode(",",$module_info->admin_id)}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<a href="{getUrl('act','dispGuestbookAdminInsertGuestbook')}" class="button"><span>{$lang->cmd_modify}</span></a>
|
||||
<!--@if($module=="admin")-->
|
||||
<a href="{getUrl('act','dispGuestbookAdminContent','module_srl','')}" class="button"><span>{$lang->cmd_guestbook_list}</span></a>
|
||||
<!--@end-->
|
||||
</div>
|
||||
137
modules/guestbook/tpl/guestbook_insert.html
Normal file
137
modules/guestbook/tpl/guestbook_insert.html
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
<!--%import("filter/insert_guestbook.xml")-->
|
||||
<!--%import("js/guestbook_admin.js")-->
|
||||
|
||||
<!--#include("header.html")-->
|
||||
|
||||
<form action="./" method="post" onsubmit="return procFilter(this, insert_guestbook)" enctype="multipart/form-data">
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
<input type="hidden" name="module_srl" value="{$module_srl}" />
|
||||
<!--@if($module_info->is_default=='Y')-->
|
||||
<input type="hidden" name="is_default" value="Y" />
|
||||
<!--@end-->
|
||||
<input type="hidden" name="use_category" value="N" />
|
||||
|
||||
<table cellspacing="0" class="tableType2">
|
||||
<col width="150" />
|
||||
<col />
|
||||
|
||||
<tr>
|
||||
<th scope="row">{$lang->mid}</th>
|
||||
<td>
|
||||
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText" />
|
||||
<p>{$lang->about_mid}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<!--@if($module_info->is_default!='Y')-->
|
||||
<tr>
|
||||
<th scope="row">{$lang->is_default}</th>
|
||||
<td>
|
||||
<input type="checkbox" name="is_default" value="Y" <!--@if($module_info->is_default=='Y')-->checked="checked"<!--@end--> id="fld_for_default" class="checkbox" />
|
||||
<label for="fld_for_default">{$lang->about_default}</label>
|
||||
</td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
<tr>
|
||||
<th scope="row">{$lang->module_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="selected"<!--@end-->>{$val->title}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<p>{$lang->about_module_category}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">{$lang->browser_title}</th>
|
||||
<td>
|
||||
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText" />
|
||||
<p>{$lang->about_browser_title}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$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="selected"<!--@end-->>{$val->title} ({$val->layout})</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<p>{$lang->about_layout}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin}</th>
|
||||
<td>
|
||||
<select name="skin">
|
||||
<!--@foreach($skin_list as $key=>$val)-->
|
||||
<option value="{$key}" <!--@if($module_info->skin==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<p>{$lang->about_skin}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->open_rss}</th>
|
||||
<td>
|
||||
<select name="open_rss">
|
||||
<!--@foreach($lang->open_rss_types as $key=>$val)-->
|
||||
<option value="{$key}" <!--@if($module_info->open_rss==$key)-->selected="selected"<!--@end-->>{$val}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
<p>{$lang->about_open_rss}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->list_count}</th>
|
||||
<td>
|
||||
<input type="text" name="list_count" value="{$module_info->list_count?$module_info->list_count:20}" class="inputTypeText" />
|
||||
<p>{$lang->about_list_count}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->page_count}</th>
|
||||
<td>
|
||||
<input type="text" name="page_count" value="{$module_info->page_count?$module_info->page_count:10}" class="inputTypeText" />
|
||||
<p>{$lang->about_page_count}</p>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<th scope="row">{$lang->description}</th>
|
||||
<td>
|
||||
<textarea name="description" class="inputTypeTextArea w100">{htmlspecialchars($module_info->description)}</textarea>
|
||||
<p>{$lang->about_description}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->header_text}</th>
|
||||
<td>
|
||||
<textarea name="header_text" class="inputTypeTextArea w100">{htmlspecialchars($module_info->header_text)}</textarea>
|
||||
<p>{$lang->about_header_text}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->footer_text}</th>
|
||||
<td>
|
||||
<textarea name="footer_text" class="inputTypeTextArea w100">{htmlspecialchars($module_info->footer_text)}</textarea>
|
||||
<p>{$lang->about_footer_text}</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->admin_id}</th>
|
||||
<td>
|
||||
<textarea name="admin_id" class="inputTypeTextArea w100"><!--@if($module_info->admin_id)-->{implode(",",$module_info->admin_id)}<!--@end--></textarea>
|
||||
<p>{$lang->about_admin_id}</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
23
modules/guestbook/tpl/header.html
Normal file
23
modules/guestbook/tpl/header.html
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
<!--%import("js/guestbook_admin.js")-->
|
||||
|
||||
<h3>{$lang->guestbook} <span class="gray">{$lang->cmd_management}</span></h3>
|
||||
|
||||
<!--@if($module_info)-->
|
||||
<div class="header4">
|
||||
<!--@if($module_info->mid)-->
|
||||
<h4>{$module_info->mid} <!--@if($module_info->is_default=='N')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="#" onclick="winopen('{getUrl('','mid',$module_info->mid)}'); return false;" class="view">View</a></h4>
|
||||
<!--@end-->
|
||||
|
||||
<ul class="localNavigation">
|
||||
<!--@if($module=='admin')-->
|
||||
<li <!--@if($act=='dispGuestbookAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispGuestbookAdminContent','module_srl','')}">{$lang->cmd_guestbook_list}</a></li>
|
||||
<!--@else-->
|
||||
<li><a href="#" onclick="location.href=current_url.setQuery('act',''); return false;">{$lang->cmd_back}</a></li>
|
||||
<!--@end-->
|
||||
<li <!--@if($act=='dispGuestbookAdminGuestbookInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispGuestbookAdminGuestbookInfo')}">{$lang->cmd_view_info}</a></li>
|
||||
<li <!--@if($act=='dispGuestbookAdminGrantInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispGuestbookAdminGrantInfo')}">{$lang->cmd_manage_grant}</a></li>
|
||||
<li <!--@if($act=='dispGuestbookAdminSkinInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispGuestbookAdminSkinInfo')}">{$lang->cmd_manage_skin}</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
80
modules/guestbook/tpl/index.html
Normal file
80
modules/guestbook/tpl/index.html
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
<!--#include("header.html")-->
|
||||
|
||||
<div class="infoText">{nl2br($lang->about_guestbook)}</div>
|
||||
|
||||
<!-- 정보 -->
|
||||
<div class="tableSummaryType1">
|
||||
Total <strong>{number_format($total_count)}</strong>, Page <strong>{number_format($page)}</strong>/{number_format($total_page)}
|
||||
</div>
|
||||
|
||||
<!-- 목록 -->
|
||||
<table cellspacing="0" class="tableType1">
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">{$lang->no}</th>
|
||||
<th scope="col">
|
||||
<form action="./" method="get" onsubmit="return doChangeCategory(this);">
|
||||
<input type="hidden" name="module" value="{$module}" />
|
||||
<input type="hidden" name="act" value="{$act}" />
|
||||
<select name="module_category_srl">
|
||||
<option value="">{$lang->module_category}</option>
|
||||
<!--@foreach($module_category as $key => $val)-->
|
||||
<option value="{$key}" <!--@if($module_category_srl==$key)-->selected="selected"<!--@end-->>{$val->title}</option>
|
||||
<!--@end-->
|
||||
<option value="">---------</option>
|
||||
<option value="-1">{$lang->cmd_management}</option>
|
||||
</select>
|
||||
<span class="button"><input type="submit" name="go_button" id="go_button" value="GO" /></span>
|
||||
</form>
|
||||
</th>
|
||||
<th scope="col">{$lang->mid}</th>
|
||||
<th scope="col">{$lang->browser_title}</th>
|
||||
<th scope="col">{$lang->is_default}</th>
|
||||
<th scope="col">{$lang->skin}</th>
|
||||
<th scope="col">{$lang->admin_id}</th>
|
||||
<th scope="col">{$lang->regdate}</th>
|
||||
<th scope="col">{$lang->cmd_view}</th>
|
||||
<th scope="col">{$lang->cmd_delete}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!--@foreach($guestbook_list as $no => $val)-->
|
||||
<tr>
|
||||
<td class="tahoma">{$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','dispGuestbookAdminGuestbookInfo','module_srl',$val->module_srl)}" class="blue">{$val->mid}</a></td>
|
||||
<td>{htmlspecialchars($val->browser_title)}</td>
|
||||
<td class="tahoma">{$val->is_default}</td>
|
||||
<td class="tahoma">{$val->skin}</td>
|
||||
<td class="tahoma">{$val->admin_id}</td>
|
||||
<td class="tahoma">{zdate($val->regdate,"Y-m-d")}</td>
|
||||
<td class="blue"><a href="#" onclick="winopen('{getUrl('','mid',$val->mid)}'); return false;">{$lang->cmd_view}</a></td>
|
||||
<td class="red"><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispGuestbookAdminDeleteGuestbook','module_srl', $val->module_srl)}">{$lang->cmd_delete}</a><!--@end--></td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<!-- 버튼 -->
|
||||
<div class="fr gap1">
|
||||
<a href="{getUrl('act','dispGuestbookAdminInsertGuestbook','module_srl','')}" class="button"><span>{$lang->cmd_make}</span></a>
|
||||
</div>
|
||||
|
||||
<!-- 페이지 네비게이션 -->
|
||||
<div class="pageNavigation">
|
||||
<a href="{getUrl('page','','module_srl','')}" class="goToFirst"><img src="../../admin/tpl/images/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
|
||||
<!--@while($page_no = $page_navigation->getNextPage())-->
|
||||
<!--@if($page == $page_no)-->
|
||||
<span class="current">{$page_no}</span>
|
||||
<!--@else-->
|
||||
<a href="{getUrl('page',$page_no,'module_srl','')}">{$page_no}</a>
|
||||
<!--@end-->
|
||||
<!--@end-->
|
||||
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="goToLast"><img src="../../admin/tpl/images/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
|
||||
</div>
|
||||
79
modules/guestbook/tpl/js/guestbook_admin.js
Normal file
79
modules/guestbook/tpl/js/guestbook_admin.js
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
/**
|
||||
* @file modules/guestbook/js/guestbook_admin.js
|
||||
* @author zero (zero@nzeo.com)
|
||||
* @brief guestbook 모듈의 관리자용 javascript
|
||||
**/
|
||||
|
||||
/* 모듈 생성 후 */
|
||||
function completeInsertGuestbook(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','dispGuestbookAdminGuestbookInfo');
|
||||
if(module_srl) url = url.setQuery('module_srl',module_srl);
|
||||
if(page) url.setQuery('page',page);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 모듈 삭제 후 */
|
||||
function completeDeleteGuestbook(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','dispGuestbookAdminContent').setQuery('module_srl','');
|
||||
if(page) url = url.setQuery('page',page);
|
||||
location.href = url;
|
||||
}
|
||||
|
||||
/* 권한 관련 */
|
||||
function doSelectAll(obj, key) {
|
||||
var fo_obj = obj.parentNode;
|
||||
while(fo_obj.nodeName != 'FORM') {
|
||||
fo_obj = fo_obj.parentNode;
|
||||
}
|
||||
|
||||
for(var i=0;i<fo_obj.length;i++) {
|
||||
var tobj = fo_obj[i];
|
||||
if(tobj.name == key) tobj.checked=true;
|
||||
}
|
||||
}
|
||||
|
||||
function doUnSelectAll(obj, key) {
|
||||
var fo_obj = obj.parentNode;
|
||||
while(fo_obj.nodeName != 'FORM') {
|
||||
fo_obj = fo_obj.parentNode;
|
||||
}
|
||||
|
||||
for(var i=0;i<fo_obj.length;i++) {
|
||||
var tobj = fo_obj[i];
|
||||
if(tobj.name == key) tobj.checked = false;
|
||||
}
|
||||
}
|
||||
|
||||
function completeInsertGrant(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);
|
||||
|
||||
location.href = location.href;
|
||||
}
|
||||
|
||||
/* 카테고리 이동 */
|
||||
function doChangeCategory(fo_obj) {
|
||||
var module_category_srl = fo_obj.module_category_srl.options[fo_obj.module_category_srl.selectedIndex].value;
|
||||
if(module_category_srl==-1) {
|
||||
location.href = current_url.setQuery('act','dispModuleAdminCategory');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
119
modules/guestbook/tpl/skin_info.html
Normal file
119
modules/guestbook/tpl/skin_info.html
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
<!--#include("./header.html")-->
|
||||
|
||||
<form action="./" method="post" enctype="multipart/form-data" target="hidden_iframe">
|
||||
<input type="hidden" name="module" value="{$module_info->module}" />
|
||||
<input type="hidden" name="mid" value="{$mid}" />
|
||||
<input type="hidden" name="act" value="procGuestbookAdminUpdateSkinInfo" />
|
||||
<input type="hidden" name="module_srl" value="{$module_srl}" />
|
||||
<input type="hidden" name="page" value="{$page}" />
|
||||
|
||||
<table cellspacing="0" class="tableType3">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row" colspan="2">{$lang->skin_default_info}</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin}</th>
|
||||
<td class="left" >{$skin_info->title}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin_maker}</th>
|
||||
<td class="left" >{$skin_info->maker->name} <!--@if($skin_info->maker->email_address)-->(<a href="mailto:{$skin_info->maker->email_address}">{$skin_info->maker->email_address}</a>)<!--@end--></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->skin_maker_homepage}</th>
|
||||
<td class="left" ><a href="{$skin_info->maker->homepage}" target="_blank">{$skin_info->maker->homepage}</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->date}</th>
|
||||
<td class="left" >{$skin_info->maker->date}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">{$lang->description}</th>
|
||||
<td class="left" >{nl2br($skin_info->maker->description)}</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table cellspacing="0" class="tableType3">
|
||||
<col width="150" />
|
||||
<col />
|
||||
<tr>
|
||||
<th scope="row" colspan="2">{$lang->extra_vars}</th>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<th scope="row">{$lang->colorset}</th>
|
||||
<td class="left" >
|
||||
<!--@foreach($skin_info->colorset as $key => $val)-->
|
||||
<div>
|
||||
<!--@if($val->screenshot)-->
|
||||
<img src="{$val->screenshot}" align="left" alt="{$val->title}" />
|
||||
<!--@end-->
|
||||
|
||||
<input type="radio" name="colorset" value="{$val->name}" id="colorset_{$key}" <!--@if($module_info->colorset==$val->name)-->checked="checked"<!--@end-->/>
|
||||
<label for="colorset_{$key}">{$val->title}</label>
|
||||
</div>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!--@foreach($skin_info->extra_vars as $key => $val)-->
|
||||
<tr>
|
||||
<th scope="row">{$val->title}</th>
|
||||
<td class="left">
|
||||
<!--@if($val->type=="text")-->
|
||||
<input type="text" name="{$val->name}" value="{htmlspecialchars($val->value)}" class="inputTypeText w100" />
|
||||
|
||||
<!--@elseif($val->type=="textarea")-->
|
||||
<textarea name="{$val->name}" class="inputTypeTextArea w100">{htmlspecialchars($val->value)}</textarea>
|
||||
|
||||
<!--@elseif($val->type=="select")-->
|
||||
<select name="{$val->name}">
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<option value="{$v}" <!--@if($v==$val->value)-->selected="selected"<!--@end-->>{$v}</option>
|
||||
<!--@end-->
|
||||
</select>
|
||||
|
||||
<!--@elseif($val->type=="checkbox")-->
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<span>
|
||||
<input type="checkbox" name="{$val->name}[]" value="{$v}" id="ch_{$key}_{$k}" <!--@if(in_array($v, $val->value))-->checked="checked"<!--@end--> class="checkbox" />
|
||||
<label for="ch_{$key}_{$k}">{$v}</label>
|
||||
</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@elseif($val->type=="radio")-->
|
||||
<!--@foreach($val->default as $k=>$v)-->
|
||||
<span>
|
||||
<input type="radio" name="{$val->name}" value="{$v}" id="ch_{$key}_{$k}" <!--@if($v==$val->value)-->checked="checked"<!--@end-->/>
|
||||
<label for="ch_{$key}_{$k}">{$v}</label>
|
||||
</span>
|
||||
<!--@end-->
|
||||
|
||||
<!--@elseif($val->type=="image")-->
|
||||
|
||||
<!--@if($val->value)-->
|
||||
<div>
|
||||
<img src="{$val->value}" /><br />
|
||||
<input type="checkbox" name="del_{$val->name}" value="Y" id="del_{$val->name}" class="checkbox" />
|
||||
<label for="del_{$val->name}">{$lang->cmd_delete}</label>
|
||||
</div>
|
||||
<!--@end-->
|
||||
|
||||
<input type="file" name="{$val->name}" value="" />
|
||||
<!--@end-->
|
||||
|
||||
<!--@if($val->description)-->
|
||||
<p>{nl2br($val->description)}</p>
|
||||
<!--@end-->
|
||||
</td>
|
||||
</tr>
|
||||
<!--@end-->
|
||||
</table>
|
||||
|
||||
<div class="tRight gap1">
|
||||
<span class="button"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<iframe name="hidden_iframe" frameborder="0" style="display:none"></iframe>
|
||||
3
modules/guestbook/tpl/top_refresh.html
Normal file
3
modules/guestbook/tpl/top_refresh.html
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<script type="text/javascript">
|
||||
top.location.href = top.location.href;
|
||||
</script>
|
||||
Loading…
Add table
Add a link
Reference in a new issue