css 및 js 호출순서 조정기능 추가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@5785 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2009-03-06 05:33:56 +00:00
parent 4f380d9c48
commit 61851f1dfe
2149 changed files with 109090 additions and 18689 deletions

View file

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<module version="0.2">
<title xml:lang="ko">위키</title>
<title xml:lang="en">wiki</title>
<title xml:lang="zh-CN">维基系统</title>
<title xml:lang="zh-TW">維基</title>
<title xml:lang="jp">wiki</title>
<description xml:lang="ko">위키모듈.</description>
<description xml:lang="en">wiki module.</description>
<description xml:lang="zh-CN">维基模块。</description>
<description xml:lang="zh-TW">維基百科模組。</description>
<description xml:lang="jp">wikiモジュール</description>
<version>0.1</version>
<date>2009-01-31</date>
<category>service</category>
<author email_address="haneul0318@gmail.com" link="http://seungyeop.kr">
<name xml:lang="ko">haneul</name>
<name xml:lang="en">haneul</name>
<name xml:lang="zh-CN">haneul</name>
<name xml:lang="zh-TW">haneul</name>
<name xml:lang="jp">haneul</name>
</author>
</module>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<module>
<grants>
<grant name="write_document" default="guest">
<title xml:lang="ko">글 작성</title>
<title xml:lang="zh-CN">发表新主题</title>
<title xml:lang="jp">書き込み作成</title>
<title xml:lang="en">write document</title>
<title xml:lang="es">Escribir el documento</title>
<title xml:lang="zh-TW">發表主題</title>
</grant>
<grant name="write_comment" default="guest">
<title xml:lang="ko">댓글 작성</title>
<title xml:lang="zh-CN">发表评论</title>
<title xml:lang="jp">コメント作成</title>
<title xml:lang="en">write comment</title>
<title xml:lang="es">Escribir comentario</title>
<title xml:lang="zh-TW">發表評論</title>
</grant>
</grants>
<permissions>
</permissions>
<actions>
<action name="dispWikiContent" type="view" index="true" />
<action name="dispWikiEditPage" type="view" />
<action name="dispWikiTitleIndex" type="view" />
<action name="dispWikiAdminContent" type="view" standalone="true" admin_index="true" />
<action name="dispWikiAdminInsertWiki" type="view" standalone="true" />
<action name="dispWikiAdminGrantInfo" type="view" standalone="true" />
<action name="dispWikiAdminSkinInfo" type="view" standalone="true" />
<action name="dispWikiAdminWikiAdditionSetup" type="view" standalone="true" />
<action name="procWikiAdminInsertWiki" type="controller" standalone="true" />
<action name="dispWikiAdminDeleteWiki" type="view" standalone="true" />
<action name="procWikiAdminDeleteWiki" type="controller" standalone="true" />
<action name="procWikiInsertDocument" type="controller" standalone="true" />
</actions>
</module>

View file

@ -0,0 +1,13 @@
<?php
/**
* @file modules/wiki/lang/jp.lang.php
* @author haneul (haneul0318@gmail.com) 翻訳:ミニミ
* @brief wikiモジュール基本言語パッケージ
**/
$lang->wiki = 'wiki';
$lang->not_exist = '存在しないドキュメントです。作成権限により、ドキュメント作成が出来ます。サイト管理者にお問い合わせ下さい。';
$lang->cmd_create = '新規作成';
$lang->cmd_wiki_list = 'リスト';
$lang->cmd_view_info = 'wiki情報';
?>

View file

@ -0,0 +1,13 @@
<?php
/**
* @file ko.lang.php
* @author haneul (haneul0318@gmail.com)
* @brief 위키(wiki) 모듈의 기본 언어팩
**/
$lang->wiki = '위키';
$lang->not_exist = '존재하지 않는 문서입니다. 권한이 있으시면, 문서를 만들 수 있습니다.';
$lang->cmd_create = '문서 생성';
$lang->cmd_wiki_list = '목록';
$lang->cmd_view_info = '위키 정보';
?>

View file

@ -0,0 +1,13 @@
<?php
/**
* @file zh-TW.lang.php
* @author haneul (haneul0318@gmail.com) 翻譯royallin
* @brief 維基(wiki)模組基本語言
**/
$lang->wiki = '維基';
$lang->not_exist = '不存在的檔案。如果你擁有權限,可以建立新檔案。';
$lang->cmd_create = '檔案建立';
$lang->cmd_wiki_list = '列表';
$lang->cmd_view_info = '維基資訊';
?>

View file

@ -0,0 +1,24 @@
<query id="getWikiList" action="select">
<tables>
<table name="modules" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module" default="wiki" />
<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>

View file

@ -0,0 +1,11 @@
<!--#include("header.html")-->
<div class="boardRead">
<div class="readBody">
{$lang->not_exist}
</div>
</div>
<div class="clear" ></div>
<div class="createButtons">
<a href="{getUrl('act','dispWikiEditPage','entry',$entry)}" class="button {$btn_class}"><span>{$lang->cmd_create}</span></a>
</div>
<!--#include("footer.html")-->

View file

@ -0,0 +1,347 @@
@charset "utf-8";
/*
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
Jeong, Chan Myeong 070601~070630
*/
/**
* Header
**/
/* board Title */
.boardHeader { border:1px solid #e1e1dd; border-bottom:0; background:#ffffff url(../images/common/bgH3.gif) repeat-x left bottom; overflow:hidden;}
.boardHeader .boardHeaderBorder { width:100%;}
.boardHeader h3 { margin:0; float:left; padding:15px 15px 12px 15px; font-size:1.2em; background:#ffffff url(../images/common/lineH3.gif) no-repeat right bottom;}
/* board Description */
.boardDescription { color:#AEAEAE; border:1px solid #DDDDDD; overflow:hidden; padding:10px; margin: 5px 0; background-color:#FFFFFF;}
/* board Information */
.boardInformation { width:100%; clear:both; margin:5px 0 2px 0; overflow:hidden; color:#666666;}
.articleNum { float:left; padding:0 0 0 15px; }
/* account Navigation */
.accountNavigation { margin:0; padding:0; float:right; }
.accountNavigation li { float:left; margin-left:7px; list-style:none; }
.accountNavigation li a { white-space:nowrap; color:#666666; text-decoration:none;}
.accountNavigation li.setup a { background:url(../images/common/iconSetup.gif) no-repeat left top; padding-left:14px; }
.accountNavigation li.admin a { background:url(../images/common/iconAdmin.gif) no-repeat left top; padding-left:12px; }
.accountNavigation li.listType { margin-left:5px; }
.accountNavigation li.loginAndLogout a { background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left 2px; padding-left:8px; }
/* secret Content */
.secretContent { margin:20px auto; text-align:center; border:1px solid #EFEFEF; width:240px; }
.secretContent .title { padding:10px 0 10px 0; background-color:#EFEFEF; display:block; font-weight:bold; }
.secretContent .content { padding:10px 0 10px 0; background-color:#FFFFFF; display:block; }
/* blog Style Notice */
.blogNotice { margin-bottom:10px; padding:5px; border:1px solid #e0e1db;}
.blogNotice .item { background:url("../images/common/notice.gif") no-repeat -2px 3px; padding:3px 0 3px 18px; }
.blogNotice .item .date { font-family:verdana; font-size:.9em;color:#AAAAAA; }
.blogNotice .item a { text-decoration:none; color:#444444; }
.blogNotice .item a:hover { text-decoration:underline}
.blogNotice .item .replyAndTrackback { color:#AAAAAA; font-size:.9em; }
/* boardRead */
.viewDocument { border-bottom:2px solid #AAAAAA; margin-bottom:20px; }
.boardRead { }
.boardRead .titleAndUser { overflow:hidden; border-bottom:1px solid #e0e1db; }
.boardRead .dateAndCount { clear:both; white-space:nowrap; color:#444444; margin:5px 0 0 0; font-size:.9em; font-family:tahoma; line-height:17px; padding-bottom:10px; }
.boardRead .dateAndCount .uri { float:left; }
.boardRead .dateAndCount .uri a { text-decoration:none; margin-left:4px; color:#BBBBBB; }
.boardRead .dateAndCount .date { float:right; background:url("../images/common/calendar.gif") no-repeat left top; padding-left:18px; margin-left:10px; }
.boardRead .dateAndCount .readedCount { float:right; color:#AAAAAA; margin-left:10px; background:url("../images/common/read.gif") no-repeat left top; padding-left:18px; color:#4A3FD7;}
.boardRead .dateAndCount .votedCount { float:right; color:#AAAAAA; margin-left:10px; background:url("../images/common/vote.gif") no-repeat left top; padding-left:18px; color:#D76A3F;}
.boardRead .dateAndCount .replyAndTrackback { float:right; }
.boardRead .dateAndCount .replyAndTrackback .replyCount { margin-left:10px; float:left; background:#FFFFFF url(../images/common/iconReply.gif) no-repeat left 1px; padding-left:15px; }
.boardRead .dateAndCount .replyAndTrackback .trackbackCount { margin-left:10px; float:left; background:#FFFFFF url(../images/common/iconTrackback.gif) no-repeat left 1px; padding-left:15px; }
.boardRead .dateAndCount .replyAndTrackback a { color:#333333; white-space:nowrap; text-decoration:none; }
.boardRead .dateAndCount .replyAndTrackback a:hover { text-decoration:underline; }
.boardRead .dateAndCount .category { float:left; margin-right:10px; }
.boardRead .dateAndCount .category a { color:#555555; text-decoration:none; background:url("../images/common/category.gif") no-repeat left -1px; padding-left:18px; font-weight:bold;}
.boardRead .dateAndCount .category a:hover { text-decoration:underline; }
/* extraVars list */
.boardRead .extraVarsList { width:100%; border:1px solid #e0e1db; border-bottom:none; margin:0 0 30px 0; table-layout:fixed;}
.boardRead .extraVarsList th { font-weight:normal; color:#555555; text-align:left; padding:4px 0 4px 10px; border-bottom:1px solid #e0e1db; border-right:1px solid #e0e1db;}
.boardRead .extraVarsList td { color:#555555; border-bottom:1px solid #e0e1db; padding:4px 0 4px 10px; }
.boardRead .extraVarsList td a { color:#555555; }
.boardRead .readBody { color:#555555; margin-top:20px; }
.boardRead .tag { background:#FFFFFF url(../images/common/iconTag.gif) no-repeat 3px 2px; padding-left:25px; margin:10px 0 0 0; }
.boardRead .tag ul { margin:0; padding:0; }
.boardRead .tag li { display:inline; list-style:none; }
.boardRead .tag li a { color:#444444;}
.boardRead .fileAttached { border:1px solid #EFEFEF; background-color:#F4F4F4; padding:5px; margin-top:10px; overflow:hidden;}
.boardRead .fileAttached h5 { font-weight:normal; color:#999999; font-size:1em; line-height:22px; }
.boardRead .fileAttached ul { padding:0; margin:0; }
.boardRead .fileAttached li { padding-left:15px; display:block; float:left; white-space:nowrap; list-style:none; margin:0 10px 5px 0; }
.boardRead .fileAttached li a { text-decoration:none; font-size:.9em; white-space:nowrap; color:#444444; }
.boardRead .fileAttached li a:visited { color:#777777;}
.boardRead .contentButton { text-align:right;margin:10px 0 5px 0; border-top:1px solid #DDDDDD; padding-top:10px;}
.trackbackBox { padding:.6em .6em; color:#666666; border:1px solid #e0e1db;;margin-top:.5em; }
.trackbackBox .trackbackUrl { color:#1F3DAE; font-size:.9em; background:url("../images/common/iconTrackback.gif") no-repeat left top; padding-left:18px; margin:0; }
.trackbackBox .trackbackItem { background-color:#F3F3F3; padding:.6em .8em .6em .6em; line-height:1.25em; border-top:1px dotted #EEEEEE; list-style:none;}
.trackbackBox p { display:inline; margin-bottom:1em;}
.trackbackBox a { color:#666666; text-decoration:none;}
.trackbackBox div { clear:both; }
.trackbackBox address { display:block; padding:0 .3em 0 0; }
.trackbackBox address a { font-size:.9em; color:#3074a5; margin-right:.3em; float:left;}
.trackbackBox address .date { font:.8em Tahoma; color:#cccccc; float:right;}
.replyBox { padding:10px; color:#666666; border:1px solid #e0e1db; margin-top:.5em;}
.replyBox .replyItem { background-color:#FFFFFF; padding:.6em .8em .6em .6em; line-height:1.25em; clear:both; border-bottom:1px dotted #EEEEEE; list-style:none;}
.replyBox p { display:inline; margin-bottom:1em;}
.replyBox .author { float:left; padding:0 .3em 0 0; font-size:.9em; color:#3074a5; margin:0 .3em .5em 0;}
.replyBox .author a { color:#3074a5; margin-right:.3em; text-decoration:none; }
.replyBox .voted { float:left; font-size:.9em; color:#AAAAAA; margin:0 .3em .5em 1em;}
.replyBox .date { float:right; font:.8em Tahoma; color:#cccccc; margin:.3em 0 .5em 0;}
.replyBox .replyOption { height:20px; float:right; white-space:nowrap; margin-left:.2em;}
.replyBox .replyOption img { vertical-align:middle;}
.replyBox .replyContent { clear:left; }
.replyBox .replyContent p { display:block; }
.replyBox .reply { background-color:#F4F4F4; border-bottom:1px dotted #DDDDDD;}
.replyBox .replyIndent { background:url(../images/common/iconReplyArrow.gif) no-repeat .0em .3em; padding-left:1.3em;}
.replyBox .fileAttached { border:1px solid #EFEFEF; background-color:#F4F4F4; padding:5px; margin-top:10px; overflow:hidden;}
.replyBox .fileAttached ul { border:0; margin:0; padding:0;}
.replyBox .fileAttached h5 { font-weight:normal; color:#999999; float:left; font-size:1em; }
.replyBox .fileAttached li { padding-left:15px; display:block; float:left; white-space:nowrap; list-style:none; margin:0px 10px 5px 0; }
.replyBox .fileAttached li a { text-decoration:none; font-size:.9em; white-space:nowrap; color:#444444; }
.replyBox .fileAttached li a:visited { color:#777777;}
.commentButton { margin-top:.5em; }
/* gallery sub menu */
.boardSubMenu { margin:0 0 .5em 0; padding:1em 0 .5em .5em; border-bottom:1px solid #e0e1db;}
.boardSubMenu a { text-decoration:none; color:#666666; vertical-align:bottom; background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat right 5px; padding-left:10px; padding-right:10px; _padding-top:5px; position:relative; top:5px; }
.boardSubMenu img.sort { vertical-align:middle; }
/* list */
.boardList { width:100%; border:1px solid #e0e1db; border-top:none; overflow:hidden; }
.boardList thead tr th div { white-space:nowrap; margin:0 5px; }
.boardList thead tr th.title , .boardList thead tr th.category, .boardList thead tr th.topic { width:100%; }
.boardList tbody td { white-space:nowrap; }
.boardList tbody td.title { white-space:normal; }
.boardList tbody td.webzineTitle { white-space:normal; }
.boardList tbody td.wrap { white-space:normal; }
.boardListNoTopBorder { border:none; }
.boardList th { color:#3e3f3e; font-weight:normal; border-top:1px solid #e0e1db; border-bottom:1px solid #ffffff; white-space:nowrap; padding-top:5px; height:28px; overflow:hidden;}
html:not([lang*=""]) .boardList th { height:33px; }
.boardList th.no_line { background-position:-3px bottom; }
.boardList th a { color:#3e3f3e; text-decoration:none; }
.boardList th.num { border-left:1px solid #ffffff; }
.boardList th.checkbox { text-align:center; }
.boardList th.title { text-align:center; padding-left:1em; }
.boardList th.topic { text-align:left; padding-left:1em; }
.boardList th.category { text-align:left; padding-left:1em; }
.boardList th.category select { vertical-align:middle; width:200px; height:20px;}
.boardList th.reading, th.recommend , th.date { white-space:nowrap;}
.boardList th .sort { padding:0 .2em; vertical-align:middle;}
.boardList tr.notice { background:#f8f8f8; }
.boardList tr.notice .num { font-weight:bold;}
.boardList tr.bg1 { background:#ffffff}
.boardList tr.bg2 { background:#fbfbfb;}
.boardList td { border-top:1px solid #eff0ed; padding:.5em;}
.boardList td.num { font:.8em tahoma; color:#999999; padding:.5em 1em; text-align:center;}
.boardList td.checkbox { font:.8em tahoma; color:#999999; text-align:center;}
.boardList tr.notice td.num { padding:.5em; white-space:nowrap;}
.boardList tr.notice td.notice { font-size:.9em; color:#999999; font-weight:bold; text-align:center;}
.boardList td.thumb { }
.boardList td.thumb img { border:1px solid #E0E1DB; padding:3px; margin:none; }
.boardList td.title {padding-left:1em; }
.boardList td.title strong.category { font-size:1em; background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat right 3px; padding-right:.5em; margin-right:.5em;}
.boardList td.title.bold { font-size:1.2em; font-weight:bold;}
.boardList td.title.bold a { position:relative; top:.3em;}
.boardList td.title * { vertical-align:middle;}
.boardList td.title,
.boardList td.title a { color:#444444; text-decoration:none;}
.boardList td.title a:visited { color:#777777;}
.boardList td.topic { padding-left:1em; color:#888888; }
.boardList td.topic strong a { font-size:1em; font-weight:normal; text-decoration:none; color:#222222; }
.boardList td.topic strong a:visited { color:#777777; }
.boardList td.topic .category { background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left 3px; padding-left:.5em; margin-left:.5em; color:#AAAAAA; }
.boardList td.topic div.author { margin-top:.5em; color:#BBBBBB; font-size:0.8em; }
.boardList td.topic div.author strong { font-size:1.2em; font-weight:normal; color:#666666; }
.boardList td.commentCount { font:bold .8em Tahoma; color:#888888; text-align:center; }
.boardList td.latestPost { color:#888888; }
.boardList td.latestPost div.author { margin-top:.5em; color:#BBBBBB; font-size:0.8em; }
.boardList td.latestPost div.author strong { font-size:1.2em; font-weight:normal; color:#666666; }
.boardList td.latestPost div.date { font-size:0.8em; margin-top:.5em; }
.boardList td.latestPost div.date strong { font-family:Tahoma; font-weight:normal; color:#666666; }
.boardListNoTopBorder td { border-top:none; border-bottom:1px solid #eff0ed; padding:.5em;}
.boardList td.webzineTitle { padding-left:1em; color:#777777; height:1.2em; width:100%;}
.boardList td.webzineTitle strong.category { font-size:1em; background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat right 3px; padding-right:.5em; margin-right:.5em;}
.boardList td.webzineTitle.bold { font-size:1.2em; font-weight:bold;}
.boardList td.webzineTitle * { vertical-align:middle;}
.boardList td.webzineTitle,
.boardList td.webzineTitle a { color:#444444; text-decoration:none;}
.boardList td.webzineTitle a:visited { color:#777777;}
.boardList td.summary { border-top:none; vertical-align:top; color:#666666; line-height:1.25em; padding-left:1em; white-space:normal; }
.boardList td.summary a { color:#666666; text-decoration:none; line-height:inherit;}
.boardList td.summary a:visited { color:#999999;}
.boardList td .replyAndTrackback img.trackback { margin-bottom:-.1em;}
.boardList td .replyAndTrackback strong { font:bold 1em Tahoma;}
.boardList td .replyAndTrackback { font:.8em Tahoma; }
.boardList td.author { color:#333333; font-size:.95em; padding-left:1em;}
.boardList td.author a { font-size:1em; color:#333333;}
.boardList td.reading { font:.8em Tahoma; color:#999999; text-align:center;}
.boardList td.recommend { font:bold .8em Tahoma; text-align:center;}
.boardList td.date { font:.8em Tahoma; color:#999999; text-align:center; white-space:nowrap;}
.boardList td input { _margin:-3px;}
.buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; _position:relative; _top:3px; font:.75em Tahoma; text-align:center;}
*:first-child+html .buttonTypeGo { position:relative; top:3px; }
.thumbnailBox { margin-top:1em; clear:both; overflow:hidden; border-bottom:1px solid #e0e1db; }
.thumbnailBox div.cell { display:block; float:left; overflow:hidden; margin-bottom:1em; margin-right:1em;}
.thumbnailBox div.cell img.thumb { padding:2px; border:1px solid #e0e1db; display:block; margin-bottom:1em; margin-left:auto;margin-right:auto;}
.thumbnailBox div.title { color:#3B96C0; margin-bottom:.2em; overflow:hidden; white-space:nowrap; text-align:center;}
.thumbnailBox div.title a { color:#3B96C0; text-decoration:none;}
.thumbnailBox div.nameAndDate { font-size:.9em; color:#999999; margin-bottom:.2em; text-align:center;}
.thumbnailBox div.nameAndDate a { color:#999999;}
.thumbnailBox div.nameAndDate .author { margin-left:auto; margin-right:right; }
.thumbnailBox div.nameAndDate .author div { display:inline; vertical-align:middle;}
.thumbnailBox div.nameAndDate .date { font:.8em Tahoma; color:#999999;}
.thumbnailBox div.readAndRecommend { font-size:.9em; color:#666666; text-align:center;}
.thumbnailBox div.readAndRecommend .num { font:.8em Tahoma;}
.thumbnailBox div.readAndRecommend .vr { color:#dddddd;}
.thumbnailBox div.readAndRecommend strong.num { font:bold .8em Tahoma; color:#ff6600;}
/* board Bottom */
.boardBottom { margin-top:10px; }
/* list button */
.leftButtonBox { float: left; }
.rightButtonBox { float: right; }
/* Search Form */
.boardSearch { margin-top:30px; margin-left:auto; margin-right:auto; clear:both; text-align:center;}
.boardSearch select { height:20px; }
.boardSearch input { height:18px; }
/* boardWrite */
.boardEditor { margin-bottom:10px; }
.commentEditor { margin-top:10px; }
.boardWrite { border:1px solid #e0e1db; padding-bottom:10px;}
.boardWrite fieldset { border:none; }
.boardWrite .userNameAndPw { margin:10px 10px 0 10px; }
.boardWrite .userNameAndPw .userName {width:60px; margin-right:10px; }
.boardWrite .userNameAndPw .userPw {width:60px; margin-right:10px; }
.boardWrite .userNameAndPw .emailAddress {width:60px; margin-right:10px; }
.boardWrite .userNameAndPw .homePage {width:60px; margin-right:10px; }
.boardWrite .title { margin-top:5px; }
.boardWrite .title .category { margin-left:10px; }
.boardWrite .title label.title { margin:0 10px 0 10px; }
.boardWrite .title input.title { width:60%;}
.boardWrite dl { padding:0; margin:0; }
.boardWrite dl dd { padding:0; margin:0; }
.boardWrite dl.option { margin:10px 0 3px 10px; padding:0;}
.boardWrite dl.option dd { display:inline; margin-right:5px; }
.boardWrite dl.option dd * { vertical-align:middle;}
.boardWrite dl.option dd select { width:8em; font-size:.95em; }
.boardWrite .tag { margin-top:10px; margin-left:10px; }
.boardWrite .tag .inputTypeText { width:90%; background:#FFFFFF url(../images/common/iconTag.gif) no-repeat 5px 5px; padding-left:30px;}
.boardWrite .tag .help { vertical-align:middle;}
.boardWrite .tag .info { font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat 0% 40%; margin-top:5px; padding-left:5px;}
.boardWrite .extraVarsList { width:100%; border-top:1px solid #e0e1db; border-bottom:none; margin:10px 0 10px 0; table-layout:fixed;}
.boardWrite .extraVarsList th { font-weight:normal; color:#555555; text-align:left; padding:4px 0 4px 10px; border-bottom:1px solid #e0e1db; border-right:1px solid #e0e1db;}
.boardWrite .extraVarsList td { color:#555555; border-bottom:1px solid #e0e1db; padding:4px 0 4px 10px; }
.boardWrite .extraVarsList td a { color:#555555; }
.boardWrite .extraVarsList p { margin:5px 0 0 0; padding:0; }
.boardWrite .extraVarsList ul { margin:0; padding:0; }
/* 게시물의 팝업 메뉴 */
.comment_popup_menu, .document_popup_menu { text-align:right; background:none; background:url(../images/common/document_menu.gif) no-repeat right top; padding:0 15px 0 0; height:18px; clear:both;}
.comment_popup_menu a, .document_popup_menu a { cursor:pointer; display:inline; color:#555555; text-decoration:none; }
/* tag list */
.tagsBox { border:1px solid #EEEEEE; padding:10px; overflow:hidden;}
.tagsBox h5 { margin:0; padding:2px; }
.tags { width:100%; }
.tags div { float:left; padding:2px; margin-right:10px; overflow:hidden; white-space:nowrap; height:15px;}
.tags div a { text-decoration:none; color:#555555; line-height:150%;}
.tags div a:hover { background-color:#888888; color:#FFFFFF;}
.tags .tagTypeA a { color:#fe3614; font-weight:bold; font-size:12pt; background-color:#EFEFEF; margin:0;}
.tags .tagTypeB a { color:#fe3614; font-size:11pt; margin:0;}
.tags .tagTypeC a { font-weight:bold; font-size:11pt; margin:0; background-color:#EFEFEF;}
.tags .tagTypeD a { font-weight:bold; margin:0; background-color:#EFEFEF;}
.tags .tagTypeE a { font-weight:normal; margin:0;}
/* 회원 서명 및 프로필 이미지 출력 */
.memberSignature { border:1px solid #e0e1db; padding:10px; margin-top:20px; clear:both;}
.memberSignature .profile { float:left; margin-right:20px; }
.commentProfileImage { margin:0 10px 10px 0; float:left; }
.replyBox .xe_content { display:inline; }
.display_date { cursor:pointer; width:80px; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; height:1em; padding:3px; margin-right:10px;}
.wikimain { width:80%; margin:20px;}
.wikimain .header .title { float:left; }
.wikimain .header .title h1.pageTitle { overflow:hidden; color:#32576B; font-size:24px; font-weight:bold; line-height: 1em; padding:0; margin:0; }
.wikimain .header .edit { float:left; margin-left: 10px; }
.wikimain .header .go { float:right; }
.wikimain .pageHistory {
border-bottom:1px solid #DDEEDD;
border-top:1px solid #DDEEDD;
color:#666666; font-size:11px; font-weight:normal; margin-top:5px; padding-top:5px; padding-bottom:5px; }
.wikimain .pageHistory .userInfo { white-space:nowrap; }
.wikimain .pageHistory .userInfo .author { float:left; color:#3074a5; }
.wikimain .pageHistory .userInfo .author a { color:#3074a5; text-decoration:none; }
.wikimain .pageHistory .userInfo .date { float:left; margin-left:5px; }
.wikimain .pageHistory .links { float:right; }
.wikimain .pageHistory .history { float:right; margin-left:3px; }
/* Pagination Reset */
.pagination{ padding:15px 0; margin:0; text-align:center;}
.pagination *{ margin:0; padding:0;}
.pagination img{ border:0;}
.pagination a,
.pagination strong{ position:relative; display:inline-block; text-decoration:none; line-height:normal; color:#333; font-family:Tahoma, Sans-serif; vertical-align:middle;}
.pagination a:hover,
.pagination a:active,
.pagination a:focus{ background-color:#f4f4f4 !important; }
.pagination strong{ color:#ff6600 !important;}
.pagination a.prev,
.pagination a.prevEnd,
.pagination a.next,
.pagination a.nextEnd{ font-weight:normal !important; border:none !important; margin:0 !important; white-space:nowrap; }
/* Pagination A1 */
.pagination.a1 a,
.pagination.a1 strong{ margin:0 -4px; padding:1px 10px 1px 8px; border:none; border-left:1px solid #ccc; border-right:1px solid #ddd; font-weight:bold; font-size:12px; background:#fff;}
.pagination.a1 a.prev{ padding-left:10px; background:#fff url(../images/common/arrowPrevA1.gif) no-repeat left center; }
.pagination.a1 a.prevEnd{ padding-left:15px; background:#fff url(../images/common/arrowPrevEndA1.gif) no-repeat left center; }
.pagination.a1 a.next{ padding-right:10px; background:#fff url(../images/common/arrowNextA1.gif) no-repeat right center; }
.pagination.a1 a.nextEnd{ padding-right:15px; background:#fff url(../images/common/arrowNextEndA1.gif) no-repeat right center; }

View file

@ -0,0 +1 @@
</div>

View file

@ -0,0 +1,57 @@
<!--%import("css/wiki.css")-->
<div class="wikimain">
<div class="header">
<!--@if($oDocument)-->
<div class="title"><H1 class="pageTitle">{$entry}</H1></div>
<div class="edit"><!--@if($oDocument->isExists())--><a href="{getUrl('act','dispWikiEditPage','entry',$entry)}">Edit</a><!--@end--></div>
<!--@end-->
<div class="go">
<form action="{getUrl()}" method="get">
<input type="hidden" name="mid" value="{$module_info->mid}" />
<input type="text" class="inputTypeText w100" name="entry" />
<span class="button"><input type="submit" value="Go" /></span>
</form>
</div>
</div>
<div class="clear"></div>
<div class="readHeader">
<div class="pageHistory">
<!--@if($oDocument)-->
<div class="userInfo">
<!--@if(!$oDocument->getMemberSrl())-->
<div class="author">
last edited by
<!--@if($oDocument->isExistsHomepage())-->
<a href="{$oDocument->getHomepageUrl()}" onclick="window.open(this.href);return false;">{$oDocument->getNickName()}</a>
<!--@else-->
{$oDocument->getNickName()}
<!--@end-->
</div>
<!--@else-->
<div class="author">
last edited by
<span class="member_{$oDocument->get('member_srl')}">{$oDocument->getNickName()}</span></div>
<!--@end-->
<div class="date" title="{$lang->regdate}">
<strong>{$oDocument->getUpdate('Y.m.d')}</strong> {$oDocument->getUpdate('H:i:s')}
</div>
</div>
<!--@if($use_history != 'N')-->
<div class="history">
<a href="{getUrl('act','dispWikiHistory','document_srl',$oDocument->document_srl)}">View History</a>
</div>
<!--@end-->
<!--@end-->
<div class="links">
<a href="{getUrl('act','dispWikiContent','entry','')}">Front Page</a>
<a href="{getUrl('act','dispWikiTitleIndex','entry','','document_srl','')}">Title Index</a>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>

View file

@ -0,0 +1,29 @@
<!--#include("header.html")-->
<div class="readBody">
<table>
<tr>
<td>
{$oDocument->getUpdate()}
</td>
<td>
by {$oDocument->getNickName()}
</td>
<td>
(current revision)
</td>
</tr>
<!--@foreach($histories as $val)-->
<tr>
<td>
{zdate($val->regdate, 'Y.m.d H:i:s')}
</td>
<td>
by {$val->nick_name}
</td>
<td>
</td>
</tr>
<!--@end-->
</table>
</div>
<!--#include("footer.html")-->

Binary file not shown.

After

Width:  |  Height:  |  Size: 205 B

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<skin version="0.2">
<title xml:lang="ko">XE Default Skin</title>
<title xml:lang="zh-CN">XE维基默认皮肤</title>
<title xml:lang="zh-TW">XE維基預設面板</title>
<title xml:lang="jp">XE Default Skin</title>
<description xml:lang="ko">
XE Default Skin
</description>
<description xml:lang="zh-CN">
XE维基默认皮肤。
</description>
<description xml:lang="zh-TW">
XE維基預設面板
</description>
<description xml:lang="jp">
XE基本スキン
</description>
<version>0.1</version>
<date>2009-01-31</date>
<author email_address="haneul0318@gmail.com" link="http://seungyeop.kr">
<name xml:lang="ko">haneul</name>
<name xml:lang="zh-CN">haneul</name>
<name xml:lang="zh-TW">haneul</name>
<name xml:lang="jp">haneul</name>
</author>
<license>GPL</license>
<extra_vars>
</extra_vars>
</skin>

View file

@ -0,0 +1,31 @@
<!--#include("header.html")-->
<div class="readBody">
<!--@if(!$document_list)-->
<div>
{$lang->no_documents}
</div>
<!--@else-->
<table>
<!--@foreach($document_list as $val)-->
<tr>
<td>
<a href="{getUrl('','mid',$module_info->mid,'entry',$val->get('title'))}">{$val->get('title')}</a>
</td>
</tr>
<!--@end-->
</table>
<!--@end-->
</div>
<div class="pagination a1">
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division,'entry','')}" class="prevEnd">{$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division,'entry','')}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','division',$division,'last_division',$last_division,'entry','')}" class="nextEnd">{$lang->last_page}</a>
</div>
<!--#include("footer.html")-->

View file

@ -0,0 +1,56 @@
<!--#include("header.html")-->
<!-- 글 내용 보여주기 -->
<div class="boardRead">
<div class="originalContent">
<div class="readBody">
<div class="contentBody">
<!--@if($oDocument->isSecret() && !$oDocument->isGranted())-->
<div class="secretContent">
<form action="./" method="get" onsubmit="return procFilter(this, input_password)">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="document_srl" value="{$oDocument->document_srl}" />
<div class="title">{$lang->msg_is_secret}</div>
<div class="content"><input type="password" name="password" id="cpw" class="inputTypeText" /><span class="button {$btn_class}"><input type="submit" value="{$lang->cmd_input}" accesskey="s" /></span></div>
</form>
</div>
<!--@else-->
{$oDocument->getContent(false)}
<!--@end-->
</div>
</div>
{@ $tag_list = $oDocument->get('tag_list') }
<!--@if(count($tag_list))-->
<div class="tag">
<ul>
<!--@for($i=0;$i<count($tag_list);$i++)-->
{@ $tag = $tag_list[$i]; }
<li><a href="{getUrl('search_target','tag','search_keyword',$tag,'document_srl','')}" rel="tag">{htmlspecialchars($tag)}</a><!--@if($i<count($tag_list)-1)-->,&nbsp;<!--@end--></li>
<!--@end-->
</ul>
</div>
<!--@end-->
<!--@if($oDocument->hasUploadedFiles())-->
<div class="fileAttached">
{@ $uploaded_list = $oDocument->getUploadedFiles() }
<ul>
<!--@foreach($uploaded_list as $key => $file)-->
<li><a href="{getUrl('')}{$file->download_url}">{$file->source_filename} ({FileHandler::filesize($file->file_size)})({number_format($file->download_count)})</a></li>
<!--@end-->
</ul>
<div class="clear"></div>
</div>
<!--@end-->
</div>
<!-- 목록, 수정/삭제 버튼 -->
<div class="contentButton">
</div>
</div>
<!--#include("footer.html")-->

View file

@ -0,0 +1,34 @@
<!--#include("header.html")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert)" id="fo_write">
<input type="hidden" name="mid" value="{$mid}" />
<input type="hidden" name="content" value="{$oDocument->getContentText()}" />
<input type="hidden" name="document_srl" value="{$document_srl}" />
<input type="hidden" name="title" value="{$entry}" />
<div class="boardWrite">
<div class="editor">{$oDocument->getEditor()}</div>
<div class="tag">
<input type="text" name="tags" value="{htmlspecialchars($oDocument->get('tags'))}" class="inputTypeText" />
<p class="info">{$lang->about_tag}</p>
</div>
</div>
<div class="fl gap1">
<!--@if($is_logged)-->
<span class="button {$btn_class}"><input type="button" value="{$lang->cmd_temp_save}" onclick="doDocumentSave(this); return false;" /></span>
<span class="button {$btn_class}"><input type="button" value="{$lang->cmd_load}" onclick="doDocumentLoad(this); return false;" /></span>
<span class="button {$btn_class}"><input type="button" value="{$lang->cmd_back}" onclick="location.href='{getUrl('act','')}'" /></span>
<!--@end-->
</div>
<div class="fr gap1">
<span class="button {$btn_class}"><input type="button" value="{$lang->cmd_preview}" onclick="doDocumentPreview(this); return false;" /></span>
<span class="button {$btn_class}"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
</div>
<div class="clear"></div>
</form>
<!--#include("footer.html")-->

View file

@ -0,0 +1,3 @@
<!--#include("header.html")-->
{$setup_content}

View file

@ -0,0 +1,10 @@
<filter name="delete_wiki" module="wiki" act="procWikiAdminDeleteWiki">
<form>
<node target="module_srl" required="true" />
</form>
<response callback_func="completeDeleteWiki">
<tag name="error" />
<tag name="message" />
<tag name="page" />
</response>
</filter>

View file

@ -0,0 +1,12 @@
<filter name="insert" module="wiki" act="procWikiInsertDocument" confirm_msg_code="confirm_submit">
<form>
<node target="title" required="true" minlength="1" maxlength="250" />
<node target="content" required="true" />
</form>
<response callback_func="completeDocumentInserted">
<tag name="error" />
<tag name="message" />
<tag name="mid" />
<tag name="document_srl" />
</response>
</filter>

View file

@ -0,0 +1,27 @@
<filter name="insert_wiki" module="wiki" act="procWikiAdminInsertWiki" confirm_msg_code="confirm_submit">
<form>
<node target="mid" required="true" filter="alpha_number" />
<node target="browser_title" required="true" maxlength="250" />
</form>
<parameter>
<param name="wiki_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="admin_mail" target="admin_mail" />
<param name="is_default" target="is_default" />
<param name="description" target="description" />
<param name="header_text" target="header_text" />
<param name="footer_text" target="footer_text" />
</parameter>
<response callback_func="completeInsertWiki">
<tag name="error" />
<tag name="message" />
<tag name="module" />
<tag name="act" />
<tag name="page" />
<tag name="module_srl" />
</response>
</filter>

View file

@ -0,0 +1,3 @@
<!--#include("./header.html")-->
{$grant_content}

View file

@ -0,0 +1,27 @@
<!--%import("js/wiki_admin.js")-->
<h3 class="xeAdmin">{$lang->wiki} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_wiki)}</div>
<!--@if($module_info)-->
<div class="header4">
<!--@if($module_info->mid)-->
<h4 class="xeAdmin">{$module_info->mid} <!--@if($module_info->is_default=='Y')--><span class="bracket">({$lang->is_default})</span><!--@end--> <span class="vr">|</span> <a href="{getSiteUrl($module_info->domain,'','mid',$module_info->mid)}" onclick="window.open(this.href); return false;" class="view">View</a></h4>
<!--@end-->
<ul class="localNavigation">
<!--@if($module=='admin')-->
<li <!--@if($act=='dispWikiAdminContent')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminContent','module_srl','')}">{$lang->cmd_wiki_list}</a></li>
<!--@else-->
<li><a href="{getUrl('act','')}">{$lang->cmd_back}</a></li>
<!--@end-->
<li <!--@if($act=='dispWikiAdminWikiInfo'||$act=='dispWikiAdminInsertWiki')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminWikiInfo')}">{$lang->cmd_view_info}</a></li>
<li <!--@if($act=='dispWikiAdminCategoryInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminCategoryInfo')}">{$lang->cmd_manage_category}</a></li>
<li <!--@if($act=='dispWikiAdminGrantInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminGrantInfo')}">{$lang->cmd_manage_grant}</a></li>
<li <!--@if($act=='dispWikiAdminWikiAdditionSetup')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminWikiAdditionSetup')}">{$lang->cmd_addition_setup}</a></li>
<li <!--@if($act=='dispWikiAdminSkinInfo')-->class="on"<!--@end-->><a href="{getUrl('act','dispWikiAdminSkinInfo')}">{$lang->cmd_manage_skin}</a></li>
</ul>
</div>
<!--@end-->

View file

@ -0,0 +1,84 @@
<!--#include("./header.html")-->
<!-- 목록 -->
<form action="./" method="get" onsubmit="return doChangeCategory(this);" id="fo_list">
<table cellspacing="0" class="rowTable">
<caption>Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)}</caption>
<thead>
<tr>
<th scope="col"><div>{$lang->no}</div></th>
<th scope="col"><div><input type="checkbox" onclick="XE.checkboxToggleAll(); return false;" /></div></th>
<th scope="col">
<div>
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />
<select name="module_category_srl" class="fullWidth">
<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>
<input type="submit" name="go_button" id="go_button" value="GO" class="buttonTypeGo" />
</div>
</th>
<th scope="col" class="half_wide"><div>{$lang->mid}</div></th>
<th scope="col" class="half_wide"><div>{$lang->browser_title}</div></th>
<th scope="col"><div>{$lang->regdate}</div></th>
<th scope="col" colspan="3"><div>&nbsp;</div></th>
</tr>
</thead>
<tbody>
<!--@foreach($wiki_list as $no => $val)-->
<tr>
<td class="center number">{$no}</td>
<td class="center"><input type="checkbox" name="cart" value="{$val->module_srl}" /></td>
<td>
<!--@if(!$val->module_category_srl)-->
<!--@if($val->site_srl)-->
{$lang->virtual_site}
<!--@else-->
{$lang->not_exists}
<!--@end-->
<!--@else-->
{$module_category[$val->module_category_srl]->title}
<!--@end-->
</td>
<td>{htmlspecialchars($val->mid)}</td>
<td><a href="{getSiteUrl($val->domain,'','mid',$val->mid)}" onclick="window.open(this.href); return false;">{htmlspecialchars($val->browser_title)}</a></td>
<td>{zdate($val->regdate,"Y-m-d")}</td>
<td><a href="{getUrl('act','dispWikiAdminInsertWiki','module_srl',$val->module_srl)}" class="buttonSet buttonSetting"><span>{$lang->cmd_setup}</span></a></td>
<td><a href="./?module=module&amp;act=dispModuleAdminCopyModule&amp;module_srl={$val->module_srl}" onclick="popopen(this.href);return false;" class="buttonSet buttonCopy"><span>{$lang->cmd_copy}</span></a></td>
<td><!--@if($val->is_default!='Y')--><a href="{getUrl('act','dispWikiAdminDeleteWiki','module_srl', $val->module_srl)}" class="buttonSet buttonDelete"><span>{$lang->cmd_delete}</span></a><!--@else-->&nbsp;<!--@end--></td>
</tr>
<!--@end-->
</tbody>
</table>
</form>
<!-- 버튼 -->
<div class="clear">
<div class="fl">
<a href="{getUrl('','module','module','act','dispModuleAdminModuleSetup')}" onclick="doCartSetup(this.href); return false;" class="button green"><span>{$lang->cmd_setup}</span></a>
<a href="{getUrl('','module','module','act','dispModuleAdminModuleAdditionSetup')}" onclick="doCartSetup(this.href); return false;" class="button red"><span>{$lang->cmd_addition_setup}</span></a>
<a href="{getUrl('','module','module','act','dispModuleAdminModuleGrantSetup')}" onclick="doCartSetup(this.href); return false;" class="button blue"><span>{$lang->cmd_manage_grant}</span></a>
</div>
<div class="fr">
<a href="{getUrl('act','dispWikiAdminInsertWiki','module_srl','')}" class="button black strong"><span>{$lang->cmd_make}</span></a>
</div>
</div>
<!-- 페이지 네비게이션 -->
<div class="pagination a1">
<a href="{getUrl('page','','module_srl','')}" class="prevEnd">{$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@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="nextEnd">{$lang->last_page}</a>
</div>

117
modules/wiki/tpl/js/wiki.js Normal file
View file

@ -0,0 +1,117 @@
/**
* @file modules/wiki/js/wiki.js
* @author zero (zero@nzeo.com)
* @brief wiki 모듈의 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;
if(!document_srl)
{
url = current_url.setQuery('mid',mid).setQuery('act','');
}
else
{
url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
}
location.href = url;
}
/* 글 삭제 */
function completeDeleteDocument(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var mid = ret_obj['mid'];
var page = ret_obj['page'];
var url = current_url.setQuery('mid',mid).setQuery('act','').setQuery('document_srl','');
if(page) url = url.setQuery('page',page);
//alert(message);
location.href = url;
}
/* 검색 실행 */
function completeSearch(fo_obj, params) {
fo_obj.submit();
}
function completeVote(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
alert(message);
location.href = location.href;
}
// 현재 페이지 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 = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
if(comment_srl) url = url.setQuery('rnd',comment_srl)+"#comment_"+comment_srl;
//alert(message);
location.href = url;
}
/* 댓글 삭제 */
function completeDeleteComment(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var mid = ret_obj['mid'];
var document_srl = ret_obj['document_srl'];
var page = ret_obj['page'];
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
if(page) url = url.setQuery('page',page);
//alert(message);
location.href = url;
}
/* 트랙백 삭제 */
function completeDeleteTrackback(ret_obj) {
var error = ret_obj['error'];
var message = ret_obj['message'];
var mid = ret_obj['mid'];
var document_srl = ret_obj['document_srl'];
var page = ret_obj['page'];
var url = current_url.setQuery('mid',mid).setQuery('document_srl',document_srl).setQuery('act','');
if(page) url = url.setQuery('page',page);
//alert(message);
location.href = url;
}
/* 스크랩 */
function doScrap(document_srl) {
var params = new Array();
params["document_srl"] = document_srl;
exec_xml("member","procMemberScrapDocument", params, null);
}

View file

@ -0,0 +1,49 @@
/**
* @file modules/wiki/js/wiki_admin.js
* @author zero (zero@nzeo.com)
* @brief wiki 모듈의 관리자용 javascript
**/
/* 모듈 생성 후 */
function completeInsertWiki(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','dispWikiAdminInsertWiki');
if(module_srl) url = url.setQuery('module_srl',module_srl);
if(page) url.setQuery('page',page);
location.href = url;
}
/* 모듈 삭제 후 */
function completeDeleteWiki(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','dispWikiAdminContent').setQuery('module_srl','');
if(page) url = url.setQuery('page',page);
location.href = url;
}
/* 일괄 설정 */
function doCartSetup(url) {
var module_srl = new Array();
jQuery('#fo_list input[name=cart]:checked').each(function() {
module_srl[module_srl.length] = jQuery(this).val();
});
if(module_srl.length<1) return;
url += "&module_srls="+module_srl.join(',');
popopen(url,'modulesSetup');
}

View file

@ -0,0 +1,3 @@
<!--#include("./header.html")-->
{$skin_content}

View file

@ -0,0 +1,32 @@
<!--%import("filter/delete_wiki.xml")-->
<!--%import("js/wiki_admin.js")-->
<!--#include("header.html")-->
<form action="./" method="get" onsubmit="return procFilter(this, delete_wiki)">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<h4 class="xeAdmin">{$lang->confirm_delete}</h4>
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->module_name}</div></th>
<td class="wide">{$module_info->mid}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->module}</div></th>
<td>{$module_info->module}</td>
</tr>
<tr>
<th scope="row"><div>{$lang->document_count}</div></th>
<td>{$module_info->document_count}</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_delete}" /></span>
<a href="{getUrl('act','dispWikiAdminContent')}" class="button"><span>{$lang->cmd_back}</span></a>
</th>
</tr>
</table>
</form>

View file

@ -0,0 +1,103 @@
<!--%import("filter/insert_wiki.xml")-->
<!--%import("js/wiki_admin.js")-->
<!--#include("header.html")-->
<form action="./" method="post" onsubmit="return procFilter(this, insert_wiki)" enctype="multipart/form-data">
<input type="hidden" name="page" value="{$page}" />
<input type="hidden" name="module_srl" value="{$module_info->module_srl}" />
<!--@if($module_info->is_default=='Y')-->
<input type="hidden" name="is_default" value="Y" />
<!--@end-->
<table cellspacing="0" class="rowTable">
<tr>
<th scope="row"><div>{$lang->mid}</div></th>
<td>
<input type="text" name="mid" value="{$module_info->mid}" class="inputTypeText w200" />
<p>{$lang->about_mid}</p>
</td>
</tr>
<!--@if($module_info->is_default!='Y')-->
<tr>
<th scope="row"><div>{$lang->is_default}</div></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"><div>{$lang->module_category}</div></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"><div>{$lang->browser_title}</div></th>
<td>
<input type="text" name="browser_title" value="{htmlspecialchars($module_info->browser_title)}" class="inputTypeText w400" id="browser_title"/>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','browser_title')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_browser_title}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->layout}</div></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"><div>{$lang->skin}</div></th>
<td>
<select name="skin">
<!--@foreach($skin_list as $key=>$val)-->
<option value="{$key}" <!--@if($module_info->skin==$key ||(!$module_info->skin && $key=='xe_wiki'))-->selected="selected"<!--@end-->>{$val->title}</option>
<!--@end-->
</select>
<p>{$lang->about_skin}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->description}</div></th>
<td>
<textarea name="description" class="inputTypeTextArea fullWidth">{htmlspecialchars($module_info->description)}</textarea>
<p>{$lang->about_description}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->header_text}</div></th>
<td>
<textarea name="header_text" class="inputTypeTextArea fullWidth" id="header_text">{htmlspecialchars($module_info->header_text)}</textarea>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','header_text')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_header_text}</p>
</td>
</tr>
<tr>
<th scope="row"><div>{$lang->footer_text}</div></th>
<td>
<textarea name="footer_text" class="inputTypeTextArea fullWidth" id="footer_text">{htmlspecialchars($module_info->footer_text)}</textarea>
<a href="{getUrl('','module','module','act','dispModuleAdminLangcode','target','footer_text')}" onclick="popopen(this.href);return false;" class="buttonSet buttonSetting"><span>{$lang->cmd_find_langcode}</span></a>
<p>{$lang->about_footer_text}</p>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button black strong"><input type="submit" value="{$lang->cmd_registration}" accesskey="s" /></span>
<span class="button"><input type="button" value="{$lang->cmd_back}" onclick="history.back(); return false;" /></span>
</th>
</table>
</form>

View file

@ -0,0 +1,58 @@
<?php
/**
* @class wikiAdminController
* @author zero (zero@nzeo.com)
* @brief wiki 모듈의 admin controller class
**/
class wikiAdminController extends wiki {
/**
* @brief 초기화
**/
function init() {
}
function procWikiAdminInsertWiki($args = null) {
// module 모듈의 model/controller 객체 생성
$oModuleController = &getController('module');
$oModuleModel = &getModel('module');
$args = Context::getRequestVars();
$args->module = 'wiki';
$args->mid = $args->wiki_name;
unset($args->wiki_name);
if($args->module_srl) {
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
if($module_info->module_srl != $args->module_srl) unset($args->module_srl);
}
if(!$args->module_srl) {
$output = $oModuleController->insertModule($args);
$msg_code = 'success_registed';
} else {
$output = $oModuleController->updateModule($args);
$msg_code = 'success_updated';
}
if(!$output->toBool()) return $output;
$this->add('page',Context::get('page'));
$this->add('module_srl',$output->get('module_srl'));
$this->setMessage($msg_code);
}
function procWikiAdminDeleteWiki() {
$module_srl = Context::get('module_srl');
// 원본을 구해온다
$oModuleController = &getController('module');
$output = $oModuleController->deleteModule($module_srl);
if(!$output->toBool()) return $output;
$this->add('module','wiki');
$this->add('page',Context::get('page'));
$this->setMessage('success_deleted');
}
}
?>

View file

@ -0,0 +1,126 @@
<?php
/**
* @class wikiAdminView
* @brief wiki 모듈의 admin view class
**/
class wikiAdminView extends wiki {
function init() {
// module_srl이 있으면 미리 체크하여 존재하는 모듈이면 module_info 세팅
$module_srl = Context::get('module_srl');
if(!$module_srl && $this->module_srl) {
$module_srl = $this->module_srl;
Context::set('module_srl', $module_srl);
}
// 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 {
ModuleModel::syncModuleToSite($module_info);
$this->module_info = $module_info;
Context::set('module_info',$module_info);
}
}
$module_category = $oModuleModel->getModuleCategories();
Context::set('module_category', $module_category);
// 템플릿 경로 지정 (board의 경우 tpl에 관리자용 템플릿 모아놓음)
$template_path = sprintf("%stpl/",$this->module_path);
$this->setTemplatePath($template_path);
}
function dispWikiAdminContent() {
$args->sort_index = "module_srl";
$args->page = Context::get('page');
$args->list_count = 20;
$args->page_count = 10;
$args->s_module_category_srl = Context::get('module_category_srl');
$output = executeQueryArray('wiki.getWikiList', $args);
ModuleModel::syncModuleToSite($output->data);
// 템플릿에 쓰기 위해서 context::set
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('wiki_list', $output->data);
Context::set('page_navigation', $output->page_navigation);
// 템플릿 파일 지정
$this->setTemplateFile('index');
}
function dispWikiAdminInsertWiki() {
if(!in_array($this->module_info->module, array('admin', 'wiki'))) {
return $this->alertMessage('msg_invalid_request');
}
// 스킨 목록을 구해옴
$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('wiki_insert');
}
function dispWikiAdminDeleteWiki() {
if(!Context::get('module_srl')) return $this->dispWikiAdminContent();
if(!in_array($this->module_info->module, array('admin', 'wiki'))) {
return $this->alertMessage('msg_invalid_request');
}
$module_info = Context::get('module_info');
$oDocumentModel = &getModel('document');
$document_count = $oDocumentModel->getDocumentCount($module_info->module_srl);
$module_info->document_count = $document_count;
Context::set('module_info',$module_info);
$this->setTemplateFile('wiki_delete');
}
function dispWikiAdminWikiAdditionSetup() {
// content는 다른 모듈에서 call by reference로 받아오기에 미리 변수 선언만 해 놓음
$content = '';
// 추가 설정을 위한 트리거 호출
// 게시판 모듈이지만 차후 다른 모듈에서의 사용도 고려하여 trigger 이름을 공용으로 사용할 수 있도록 하였음
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'before', $content);
$output = ModuleHandler::triggerCall('module.dispAdditionSetup', 'after', $content);
Context::set('setup_content', $content);
// 템플릿 파일 지정
$this->setTemplateFile('addition_setup');
}
function dispWikiAdminGrantInfo() {
// 공통 모듈 권한 설정 페이지 호출
$oModuleAdminModel = &getAdminModel('module');
$grant_content = $oModuleAdminModel->getModuleGrantHTML($this->module_info->module_srl, $this->xml_info->grant);
Context::set('grant_content', $grant_content);
$this->setTemplateFile('grant_list');
}
function dispWikiAdminSkinInfo() {
// Call the common page for managing skin information
$oModuleAdminModel = &getAdminModel('module');
$skin_content = $oModuleAdminModel->getModuleSkinHTML($this->module_info->module_srl);
Context::set('skin_content', $skin_content);
$this->setTemplateFile('skin_info');
}
}
?>

View file

@ -0,0 +1,30 @@
<?php
/**
* @class wiki
* @author haneul (haneul0318@gmail.com)
* @brief wiki 모듈의 high class
**/
class wiki extends ModuleObject {
function moduleInstall() {
return new Object();
}
/**
* @brief 설치가 이상이 없는지 체크하는 method
**/
function checkUpdate() {
return false;
}
function moduleUpdate() {
return new Object(0, 'success_updated');
}
/**
* @brief 캐시 파일 재생성
**/
function recompileCache() {
}
}
?>

View file

@ -0,0 +1,59 @@
<?php
class wikiController extends wiki {
function init() {
}
function procWikiInsertDocument() {
// 권한 체크
if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted');
$entry = Context::get('entry');
// 글작성시 필요한 변수를 세팅
$obj = Context::getRequestVars();
$obj->module_srl = $this->module_srl;
if(!$obj->nick_name) $obj->nick_name = "anonymous";
if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N';
settype($obj->title, "string");
if($obj->title == '') $obj->title = cut_str(strip_tags($obj->content),20,'...');
//그래도 없으면 Untitled
if($obj->title == '') $obj->title = 'Untitled';
debugPrint($obj);
// document module의 model 객체 생성
$oDocumentModel = &getModel('document');
// document module의 controller 객체 생성
$oDocumentController = &getController('document');
// 이미 존재하는 글인지 체크
$oDocument = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager);
// 이미 존재하는 경우 수정
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl) {
$output = $oDocumentController->updateDocument($oDocument, $obj);
$msg_code = 'success_updated';
// 그렇지 않으면 신규 등록
} else {
$output = $oDocumentController->insertDocument($obj);
$msg_code = 'success_registed';
$obj->document_srl = $output->get('document_srl');
$oDocumentController->insertAlias($obj->module_srl, $obj->document_srl, $obj->title);
}
// 오류 발생시 멈춤
if(!$output->toBool()) return $output;
// 결과를 리턴
$this->add('mid', Context::get('mid'));
$this->add('document_srl', $output->get('document_srl'));
// 성공 메세지 등록
$this->setMessage($msg_code);
}
}
?>

177
modules/wiki/wiki.view.php Normal file
View file

@ -0,0 +1,177 @@
<?php
/**
* @class wikiView
* @author haneul (haneul0318@gmail.com)
* @brief wiki 모듈의 View class
**/
class wikiView extends wiki {
/**
* @brief 초기화
* wiki 모듈은 일반 사용과 관리자용으로 나누어진다.\n
**/
function init() {
/**
* 스킨 경로를 미리 template_path 라는 변수로 설정함
* 스킨이 존재하지 않는다면 xe_wiki로 변경
**/
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
if(!is_dir($template_path)) {
$this->module_info->skin = 'xe_wiki';
$template_path = sprintf("%sskins/%s/",$this->module_path, $this->module_info->skin);
}
$this->setTemplatePath($template_path);
$oModuleModel = &getModel('module');
$document_config = $oModuleModel->getModulePartConfig('document', $this->module_info->module_srl);
if(!isset($document_config->use_history)) $document_config->use_history = 'N';
Context::set('use_history', $document_config->use_history);
Context::addJsFile($this->module_path.'tpl/js/wiki.js');
}
/**
* @brief 선택된 출력
**/
function dispWikiContent() {
$output = $this->dispWikiContentView();
if(!$output->toBool()) return;
}
function dispWikiHistory() {
$oDocumentModel = &getModel('document');
$document_srl = Context::get('document_srl');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return $this->stop('msg_invalid_request');
$entry = $oDocument->getTitleText();
Context::set('entry',$entry);
$histories = $oDocumentModel->getHistories($document_srl);
if(!$histories) $histories = array();
Context::set('histories',$histories);
Context::set('oDocument', $oDocument);
$this->setTemplateFile('histories');
}
function dispWikiEditPage() {
if(!$this->grant->write_document) return $this->dispWikiMessage('msg_not_permitted');
$oDocumentModel = &getModel('document');
$document_srl = Context::get('document_srl');
$oDocument = $oDocumentModel->getDocument(0, $this->grant->manager);
$oDocument->setDocument($document_srl);
$oDocument->add('module_srl', $this->module_srl);
Context::set('document_srl',$document_srl);
Context::set('oDocument', $oDocument);
Context::addJsFilter($this->module_path.'tpl/filter', 'insert.xml');
$this->setTemplateFile('write_form');
}
/**
* @brief Displaying Message
**/
function dispWikiMessage($msg_code) {
$msg = Context::getLang($msg_code);
if(!$msg) $msg = $msg_code;
Context::set('message', $msg);
$this->setTemplateFile('message');
}
function dispWikiTitleIndex() {
$page = Context::get('page');
$oDocumentModel = &getModel('document');
$obj->module_srl = $this->module_info->module_srl;
$obj->sort_index = "title";
$obj->page = $page;
$obj->list_count = 50;
$output = $oDocumentModel->getDocumentList($obj);
debugPrint($output);
Context::set('document_list', $output->data);
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('page_navigation', $output->page_navigation);
$this->setTemplateFile('title_index');
}
function dispWikiContentView() {
// 요청된 변수 값들을 정리
$document_srl = Context::get('document_srl');
$entry = Context::get('entry');
$oDocumentModel = &getModel('document');
if(!$document_srl && !$entry) {
$entry = "Front Page";
Context::set('entry', $entry);
$document_srl = $oDocumentModel->getDocumentSrlByAlias($this->module_info->mid, $entry);
}
// document model 객체 생성
/**
* 요청된 문서 번호가 있다면 문서를 구함
**/
if($document_srl) {
$oDocument = $oDocumentModel->getDocument($document_srl);
// 해당 문서가 존재할 경우 필요한 처리를 함
if($oDocument->isExists()) {
// 글과 요청된 모듈이 다르다면 오류 표시
if($oDocument->get('module_srl')!=$this->module_info->module_srl ) return $this->stop('msg_invalid_request');
// 관리 권한이 있다면 권한을 부여
if($this->grant->manager) $oDocument->setGrant();
if(!Context::get('entry')) Context::set('entry', $oDocument->getTitleText());
// 상담기능이 사용되고 공지사항이 아니고 사용자의 글도 아니면 무시
// 요청된 문서번호의 문서가 없으면 document_srl null 처리 및 경고 메세지 출력
} else {
Context::set('document_srl','',true);
$this->alertMessage('msg_not_founded');
}
/**
* 요청된 문서 번호가 아예 없다면 문서 객체 생성
**/
} else {
$oDocument = $oDocumentModel->getDocument(0);
}
/**
* 보기 권한을 체크해서 권한이 없으면 오류 메세지 출력하도록 처리
**/
if($oDocument->isExists()) {
// 브라우저 타이틀에 글의 제목을 추가
Context::addBrowserTitle($oDocument->getTitleText());
// 조회수 증가 (비밀글일 경우 권한 체크)
if(!$oDocument->isSecret() || $oDocument->isGranted()) $oDocument->updateReadedCount();
// 비밀글일때 컨텐츠를 보여주지 말자.
if($oDocument->isSecret() && !$oDocument->isGranted()) $oDocument->add('content',Context::getLang('thisissecret'));
$this->setTemplateFile('view_document');
}
else
{
$this->setTemplateFile('create_document');
}
// 스킨에서 사용할 oDocument 변수 세팅
Context::set('oDocument', $oDocument);
/**
* 사용되는 javascript 필터 추가
**/
Context::addJsFilter($this->module_path.'tpl/filter', 'insert_comment.xml');
return new Object();
}
}
?>