위젯 검출 정규 표현식을 수정

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@2892 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-11-01 10:28:42 +00:00
parent f9896fe51a
commit 90aa62a6ac
993 changed files with 9190 additions and 10457 deletions

View file

@ -12,9 +12,17 @@
* 파일내에서 이루어집니다.
**/
// called_position가 before_module_init 이고 module이 admin이 아닐 경우
if($called_position == 'before_module_init' && !$GLOBALS['__counter_addon_called__']) {
if($this->module != 'admin') Context::addJsFile('./modules/counter/tpl/js/counter.js');
$GLOBALS['__counter_addon_called__'] = true;
}
// module이 admin이면 패스~ called_position가 before_display_content 이고 module이 admin이 아닐 경우
if(
Context::get('act')=='procFileDelete' ||
Context::get('module')=='admin' ||
$called_position != 'before_display_content' ||
Context::getRequestMethod()=='XMLRPC' ||
$GLOBALS['__counter_addon_called__']
) return;
$GLOBALS['__counter_addon_called__'] = true;
$oCounterController = &getController('counter');
$oCounterController->procCounterExecute();
?>

View file

@ -65,7 +65,7 @@
// 로그인된 사용자 정보를 구함
$logged_info = Context::get('logged_info');
$member_srl = Context::get('member_srl');
$member_srl = Context::get('target_srl');
// 템플릿에서 사용되기 전의 menu_list를 가져옴
$menu_list = $this->get('menu_list');

View file

@ -2,237 +2,7 @@
if(!defined("__ZBXE__")) exit();
/**
* @file point.addon.php
* @author zero (zero@nzeo.com)
* @brief 포인트 애드온
*
* 포인트 시스템 모듈에 설정된 내용을 토대로 하여 포인트를 부여/차감하고,
* 다운로드를 금지시키고,
* 회원 이름 앞에 레벨 아이콘을 표시한다.
* @brief 포인트 애드온은 포인트 모듈의 trigger 기능으로 인하여 이상 사용하지 않음
**/
// 관리자 모듈이면 패스~
if(Context::get('module')=='admin') return;
// 로그인 상태일때만 실행
$logged_info = Context::get('logged_info');
if(!$logged_info->member_srl) return;
// point action cache file을 가져와서 현재 속한 캐시파일인지 확인
$act_cache_file = "./files/cache/point.act.cache";
$buff = FileHandler::readFile($act_cache_file);
if(strpos($buff,$this->act)===false) return;
// point 모듈 정보 가져옴
$oModuleModel = &getModel('module');
$config = $oModuleModel->getModuleConfig('point');
// 현재 로그인 사용자의 포인트를 가져옴
$member_srl = $logged_info->member_srl;
$oPointModel = &getModel('point');
$cur_point = $oPointModel->getPoint($member_srl, true);
// 파일다운로드를 제외한 action은 called_position가 before_module_proc일때 실행
if($called_position == 'after_module_proc') {
// 게시글 작성
if(strpos($config->insert_document_act,$this->act)!==false) {
if(!$this->toBool()) return;
$document_srl = $this->get('document_srl');
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
// 신규 글인지 체크
if($oDocument->get('regdate')!=$oDocument->get('last_update')) return;
$module_srl = $oDocument->get('module_srl');
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['insert_document'];
if($point == null) $point = $config->insert_document;
// 포인트 증감
$cur_point += $point;
$oPointController = &getController('point');
$oPointController->setPoint($member_srl,$cur_point);
// 게시글 삭제
} elseif(strpos($config->delete_document_act,$this->act)!==false) {
if(!$this->toBool()) return;
$target_member_srl = Context::get('_point_target_member_srl');
if(!$target_member_srl) return;
$module_srl = $this->module_srl;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['insert_document'];
if($point == null) $point = $config->insert_document;
// 포인트 차감
$cur_point = $oPointModel->getPoint($target_member_srl, true);
$cur_point -= $point;
$oPointController = &getController('point');
$oPointController->setPoint($target_member_srl,$cur_point);
// 댓글 작성
} elseif(strpos($config->insert_comment_act,$this->act)!==false) {
$comment_srl = $this->get('comment_srl');
$oCommentModel = &getModel('comment');
$comment = $oCommentModel->getComment($comment_srl);
// 이미 존재하는 댓글인지 체크
if($comment->last_update) return;
// 포인트를 구해옴
$module_srl = $comment->module_srl;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['insert_comment'];
if($point == null) $point = $config->insert_comment;
// 포인트 증감
$cur_point += $point;
$oPointController = &getController('point');
$oPointController->setPoint($member_srl,$cur_point);
// 댓글 삭제
} elseif(strpos($config->delete_comment_act,$this->act)!==false) {
if(!$this->toBool()) return;
$target_member_srl = Context::get('_point_target_member_srl');
if(!$target_member_srl) return;
// 포인트를 구해옴
$module_srl = $this->module_srl;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['insert_comment'];
if($point == null) $point = $config->insert_comment;
// 포인트 증감
$cur_point = $oPointModel->getPoint($target_member_srl, true);
$cur_point -= $point;
$oPointController = &getController('point');
$oPointController->setPoint($target_member_srl,$cur_point);
// 파일업로드
} elseif(strpos($config->upload_file_act,$this->act)!==false) {
if(!$output->toBool()||!$output->get('file_srl')) return;
$file_srl = $output->get('file_srl');
$oFileModel = &getModel('file');
$file_info = $oFileModel->getFile($file_srl);
$module_srl = $this->module_srl;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['upload_file'];
if($point == null) $point = $config->upload_file;
// 포인트 증감
$cur_point += $point;
$oPointController = &getController('point');
$oPointController->setPoint($member_srl,$cur_point);
// 파일삭제
} elseif(strpos($config->delete_file_act,$this->act)!==false) {
// 파일 정보를 구해옴
$file_srl = Context::get('file_srl');
if(!$file_srl) return;
$target_member_srl = Context::get('_point_target_member_srl');
if(!$target_member_srl) return;
$module_srl = $this->module_srl;
$target_member_srl = Context::get('_point_target_member_srl');
if(!$target_member_srl) return;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['upload_file'];
if($point == null) $point = $config->upload_file;
// 포인트 차감
$cur_point = $oPointModel->getPoint($target_member_srl, true);
$cur_point -= $point;
$oPointController = &getController('point');
$oPointController->setPoint($target_member_srl,$cur_point);
// 회원 가입일 경우
} elseif(strpos($config->signup_act,$this->act)!==false) {
// 가입이 제대로 되었는지 체크
if(!$this->toBool()||!$this->get('member_srl')) return;
$member_srl = $this->get('member_srl');
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['signup'];
if($point == null) $point = $config->signup;
// 포인트 증감
$cur_point += $point;
$oPointController = &getController('point');
$oPointController->setPoint($member_srl,$cur_point);
}
// 파일다운로드는 before_module_proc 일때 체크
} else if($called_position == "before_module_proc") {
// 파일다운로드
if(strpos($config->download_file_act,$this->act)!==false) {
// 파일 정보를 구해옴
$file_srl = Context::get('file_srl');
if(!$file_srl) return;
$oFileModel = &getModel('file');
$file_info = $oFileModel->getFile($file_srl);
if($file_info->file_srl != $file_srl) return;
$module_srl = $file_info->module_srl;
// 포인트를 구해옴
$point = $config->module_point[$module_srl]['download_file'];
if($point == null) $point = $config->download_file;
// 포인트가 0보다 작고 포인트가 없으면 파일 다운로드가 안되도록 했다면 오류
if($cur_point + $point < 0 && $config->disable_download == 'Y') {
$this->stop('msg_cannot_download');
} else {
// 포인트 차감
$cur_point += $point;
$oPointController = &getController('point');
$oPointController->setPoint($member_srl,$cur_point);
}
// 글 삭제일 경우 대상 글의 사용자 번호 저장
} elseif(strpos($config->delete_document_act,$this->act)!==false) {
$document_srl = Context::get('document_srl');
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
$target_member_srl = $oDocument->get('member_srl');
if($target_member_srl) Context::set('_point_target_member_srl', $target_member_srl);
// 댓글 삭제일 경우 대상 댓글의 사용자 번호 저장
} elseif(strpos($config->delete_comment_act,$this->act)!==false) {
$comment_srl = Context::get('comment_srl');
$oCommentModel = &getModel('comment');
$comment = $oCommentModel->getComment($comment_srl);
$target_member_srl = $comment->member_srl;
if($target_member_srl) Context::set('_point_target_member_srl', $target_member_srl);
// 파일삭제일 경우 대상 파일의 정보에서 사용자 번호 저장
} elseif(strpos($config->delete_file_act,$this->act)!==false) {
// 파일 정보를 구해옴
$file_srl = Context::get('file_srl');
if(!$file_srl) return;
$oFileModel = &getModel('file');
$file_info = $oFileModel->getFile($file_srl);
if($file_info->file_srl != $file_srl) return;
$target_member_srl = $file_info->member_srl;
if($target_member_srl) Context::set('_point_target_member_srl', $target_member_srl);
}
}
return;
?>

View file

@ -74,18 +74,18 @@
else $this->lang_type = $this->db_info->lang_type;
// 등록된 기본 언어파일 찾기
$lang_files = FileHandler::readDir('./common/lang');
$langs = file('./common/lang/lang.info');
$accept_lang = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach($lang_files as $key => $val) {
list($lang_prefix) = explode('.',$val);
$lang_supported[] = $lang_prefix;
foreach($langs as $val) {
list($lang_prefix, $lang_text) = explode(',',$val);
$lang_supported[$lang_prefix] = $lang_text;
if(!$this->lang_type && ereg($lang_prefix, strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']))) {
$this->lang_type = $lang_prefix;
setcookie('lang_type', $this->lang_type, time()+60*60*24*365, '/');
}
}
if(!in_array($this->lang_type, $lang_supported)) $this->lang_type = $this->db_info->lang_type;
if(!in_array($this->lang_type, array_keys($lang_supported))) $this->lang_type = $this->db_info->lang_type;
if(!$this->lang_type) $this->lang_type = "en";
Context::set('lang_supported', $lang_supported);
@ -282,6 +282,7 @@
function setLangType($lang_type = 'ko') {
$oContext = &Context::getInstance();
$oContext->_setLangType($lang_type);
$_SESSION['lang_type'] = $lang_type;
}
/**

View file

@ -534,8 +534,8 @@
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($name == '*') {
$column_list[] = '*';
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('"%s" as "%s"', $name, $alias);
else $column_list[] = sprintf('"%s"',$name);

View file

@ -484,8 +484,8 @@
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($name == '*') {
$column_list[] = '*';
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('`%s` as `%s`', $name, $alias);
else $column_list[] = sprintf('`%s`',$name);

View file

@ -493,8 +493,8 @@
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($name == '*') {
$column_list[] = '*';
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('`%s` as `%s`', $name, $alias);
else $column_list[] = sprintf('`%s`',$name);

View file

@ -505,8 +505,8 @@
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($name == '*') {
$column_list[] = '*';
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('%s as %s', $name, $alias);
else $column_list[] = sprintf('%s',$name);

View file

@ -546,8 +546,8 @@
foreach($output->columns as $key => $val) {
$name = $val['name'];
$alias = $val['alias'];
if($name == '*') {
$column_list[] = '*';
if(substr($name,-1) == '*') {
$column_list[] = $name;
} elseif(strpos($name,'.')===false && strpos($name,'(')===false) {
if($alias) $column_list[] = sprintf('%s as %s', $name, $alias);
else $column_list[] = sprintf('%s',$name);

View file

@ -32,7 +32,7 @@
// 요청방식에 따라 출력을 별도로
if(Context::getResponseMethod()!="XMLRPC") {
Context::set('content', $content);
// 레이아웃을 컴파일
@ -92,6 +92,10 @@
$content = preg_replace('!(href|src)=("|\'){0,1}(commons|modules|widgets|layouts|addons|files)!is', '\\1=\\2'.$path.'\\3', $content);
$content = preg_replace('!(href|src)=("|\'){0,1}\.\/([a-zA-Z0-9\_^\/]+)\/!is', '\\1=\\2'.$path.'\\3/', $content);
// 출력하기 전에 trigger 호출 (after)
ModuleHandler::triggerCall('display', 'after', $content);
if($this->gz_enabled) print ob_gzhandler($content, 5);
else print $content;
}

View file

@ -209,6 +209,23 @@
break;
}
// 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 (%를 구해서 처리)
if($resize_width > 0 && $width >= $resize_width) $width_per = $resize_width / $width;
else $width_per = $width / $resize_width;
if($resize_height>0 && $height >= $resize_height) $height_per = $resize_height / $height;
else $height_per = $height / $resize_height;
if($thumbnail_type == 'ratio') {
$per = $width_per;
$resize_height = $height * $per;
} else {
if($width_per < $height_per) $per = $height_per;
else $per = $width_per;
}
if(!$per) $per = 1;
// 타겟 파일의 type을 구함
if(!$target_type) $target_type = $type;
$target_type = strtolower($target_type);
@ -220,24 +237,6 @@
$white = @imagecolorallocate($thumb, 255,255,255);
@imagefilledrectangle($thumb,0,0,$resize_width-1,$resize_height-1,$white);
// 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 (%를 구해서 처리)
if($resize_width > 0 && $width >= $resize_width) $width_per = $resize_width / $width;
else $width_per = $width / $resize_width;
if($resize_height>0 && $height >= $resize_height) $height_per = $resize_height / $height;
else $height_per = $height / $resize_height;
if($thumbnail_type == 'ratio') {
if($width_per > $height_per) $per = $height_per;
else $per = $width_per;
} else {
if($width_per < $height_per) $per = $height_per;
else $per = $width_per;
}
if(!$per) $per = 1;
// 원본 이미지의 타입으로 임시 이미지 생성
switch($type) {
case 'gif' :
@ -269,8 +268,13 @@
$new_width = (int)($width * $per);
$new_height = (int)($height * $per);
$x = (int)($resize_width/2 - $new_width/2);
$y = (int)($resize_height/2 - $new_height/2);
if($thumbnail_type == 'crop') {
$x = (int)($resize_width/2 - $new_width/2);
$y = (int)($resize_height/2 - $new_height/2);
} else {
$x = 0;
$y = 0;
}
if($source) {
if(function_exists('imagecopyresampled')) @imagecopyresampled($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height);

View file

@ -107,6 +107,13 @@
// mid값이 있을 경우 mid값을 세팅
if($this->mid) Context::set('mid', $this->mid, true);
// 현재 모듈의 정보를 세팅
Context::set('current_module_info', $module_info);
// 실제 동작을 하기 전에 trigger 호출
$output = ModuleHandler::triggerCall('display', 'before', $content);
if(!$output->toBool()) die($output->getMessage());
}
/**
@ -336,5 +343,45 @@
// 객체 리턴
return $GLOBALS['_loaded_module'][$module][$type][$kind];
}
/**
* @brief trigger_name, called_position을 주고 trigger 호출
**/
function triggerCall($trigger_name, $called_position, &$obj) {
// 설치가 안되어 있다면 trigger call을 하지 않고 바로 return
if(!Context::isInstalled()) return new Object();
$oModuleModel = &getModel('module');
$cache_dir = sprintf("./files/cache/triggers/");
if(!is_dir($cache_dir)) FileHandler::makeDir($cache_dir);
$cache_file = sprintf("%s%s.%s", $cache_dir, $trigger_name, $called_position);
if(!@file_exists($cache_file)) {
$triggers = $oModuleModel->getTriggers($trigger_name, $called_position);
FileHandler::writeFile($cache_file, serialize($triggers));
} else {
$buff = FileHandler::readFile($cache_file);
$triggers = unserialize($buff);
}
if(!$triggers || !count($triggers)) return new Object();
foreach($triggers as $item) {
$module = $item->module;
$type = $item->type;
$called_method = $item->called_method;
$oModule = null;
$oModule = &getModule($module, $type);
if(!$oModule || !method_exists($oModule, $called_method)) continue;
$output = $oModule->{$called_method}($obj);
if(!$output->toBool()) return $output;
}
return new Object();
}
}
?>

View file

@ -96,10 +96,13 @@
// css 일경우 background:url() 변경
if($type == "css") $str = $this->replaceCssPath($file, $str);
$content_buff .= $str."\r\n";
$content_buff .= $str."\n";
}
if($type == "css") $content_buff = '@charset "utf-8";'."\n".$content_buff;
if($type!="css" && Context::isGzEnabled()) $content_buff = ob_gzhandler($content_buff, 5);
$content_file = eregi_replace("\.php$","",$filename);
$content_filename = str_replace($this->cache_path, '', $content_file);
@ -142,6 +145,8 @@ EndOfBuff;
$str = preg_replace('!\/([^\/]*)\/\.\.\/!is','/', $str);
$str = preg_replace('!@charset([^;]*?);!is','',$str);
return $str;
}

View file

@ -41,6 +41,9 @@
if(!is_dir(sprintf('./widgets/%s/',$widget))) return;
$cache_path = './files/cache/widget_cache/';
if(!is_dir($cache_path)) FileHandler::makeDir($cache_path);
// $widget의 객체를 받음
$oWidget = WidgetHandler::getObject($widget);

View file

@ -1,167 +1,211 @@
/*
http://www.hedgerwow.com/360/dhtml/css-round-button/demo.php
*/
a.button, span.button, del.button {
display:-moz-inline-box;
display:inline-block;
cursor:pointer;
border:none;
a.button, span.button, del.button{
display:-moz-inline-box;
display:inline-block;
cursor:pointer;
border:none;
font-size:0;
line-height:0;
/*
for Safari, read this first
http://creativebits.org/webdev/safari_background_repeat_bug_fix
*/
background-position:0 -3px;
background-repeat:no-repeat;
height:24px;
text-decoration:none;
color:#2e523b;
font-style:normal;
margin:0 6px 0px 0;
padding:0 10px 0 0;
vertical-align:middle;
/*
for Safari, read this first
http://creativebits.org/webdev/safari_background_repeat_bug_fix
*/
background-position:0 0;
background-repeat:no-repeat;
height:30px;
text-decoration:none;
color:#2e523b;
font-style:normal;
margin:0 6px 0px 0;
padding:0 10px 0 0;
vertical-align:middle;
padding-top:-2px;
position:relative;
_width:10px;
_overflow-y:hidden;
_position:relative;
_top:-4px;
_width:10px;
_overflow-y:hidden;
}
*:first-child+html a.button, *:first-child+html span.button,*:first-child+html del.button {
position:relative;
top:-4px;
}
a.button, span.button, del.button, a.button span, span.button button, span.button input, del.button span {
a.button, span.button, del.button,
a.button span, span.button button, span.button input, del.button span{
background-image:url(../tpl/images/form_buttons.png);
_background-image:url(../tpl/images/form_buttons.gif);
}
a.button span, span.button button, span.button input, del.button span {
white-space:nowrap;
cursor:pointer;
a.button span, span.button button, span.button input, del.button span{
white-space:nowrap;
cursor:pointer;
color:#222;
display:-moz-inline-box;
display:inline-block;
line-height:1;
display:-moz-inline-box;
display:inline-block;
line-height:1;
letter-spacing:0 !important;
font-family:"Arial" !important;
font-size:12px !important;
font-style:normal;
background-color:transparent;
background-position:100% -3px;
background-repeat:no-repeat;
height:24px;
padding:4px 11px 0 7px;
margin:0 -18px 0 6px;
border:none;
vertical-align:text-top;
zoom:1;
_position:relative;
_padding:3px 13px 0 4px;
_margin:0 -10px 0 4px;
_display:block;
_top:0;
_right:-5px;
background-position:100% 0;
background-repeat:no-repeat;
height:30px;
padding:8px 20px 0 10px;
margin:0 -16px 0 10px;
border:none;
zoom:1;
_position:relative;
_padding-left:0px;
_padding-right:12px;
_margin-right:-10px;
_display:block;
_right:-5px;
}
*:first-child+html a.button span, span.button button, span.button input, del.button span { padding-top:6px; }
span.button button {
line-height:2.5;/*Opera need this*/
span.button button{
line-height:2.5;/*Opera need this*/
}
html.safari a.button span, html.safari del.button span {
line-height:1.3;
html.safari a.button span,
html.safari del.button span{
line-height:1.3;
}
html.safari span.button button {
line-height:2.6;
html.safari span.button button{
line-height:2.6;
}
html.safari a.button:focus, html.safari span.button button:focus {
html.safari a.button:focus,
html.safari span.button button:focus{
outline:none;
}
del.button{
/* cursor:not-allowed; */
background-position:0 -123px;
/* cursor:not-allowed; */
background-position:0 -120px;
}
del.button span {
cursor:default;
del.button span{
cursor:default;
color:#aaa !important;
background-position:100% -123px;
background-position:100% -120px;
}
a.button span {
_padding-top:7px;
}
*:first-child+html a.button span { padding-top:7px; }
span.button button, span.button input {
padding:0 6px 0 0;
line-height:2.5;/*Opera need this*/
span.button button, span.button input{
padding-top:0px;
line-height:2.5;/*Opera need this*/
}
/** optional **/
/*
a.button:visited{
color:#aaa;
color:#aaa;
}
*/
/*Hover Style*/
a.button:hover, span.button:hover, a.button:focus, a.dom-button-focus, span.button-behavior-hover {
background-position:0 -63px;
color:#222;
text-decoration:none;
}
a.button:hover span, span.button:hover input, span.button:hover button, a.button:focus span, span.button-behavior-hover button, span.button-behavior-hover input {
background-position:100% -63px;
a.button:hover,
span.button:hover,
a.button:focus,
a.dom-button-focus,
span.button-behavior-hover{
background-position:0 -60px;
color:#222;
text-decoration:none;
}
a.button:active, a.button:focus span {
color:#444;
a.button:hover span,
span.button:hover button,
a.button:focus span,
span.button-behavior-hover button,
span.button-behavior-hover input{
background-position:100% -60px;
}
del.button-behavior-hover, del.button:hover {
background-position:0 -183px;
/* cursor:not-allowed; */
a.button:active, a.button:focus span{
color:#444;
}
del.button-behavior-hover span, del.button:hover span {
background-position:100% -183px;
/* cursor:not-allowed; */
del.button-behavior-hover, del.button:hover{
background-position:0 -180px;
/* cursor:not-allowed; */
}
del.button-behavior-hover span, del.button:hover span{
background-position:100% -180px;
/* cursor:not-allowed; */
}
/*Optional hack for IE6 to simulate :hover selector*/
span.button button, del.button span, span.button input {
_behavior:expression(
(function(el){
if( typeof( behavior_onMouseEnter) == 'undefined'){
behavior_onMouseEnter = function(el) {
var dEl = this.parentNode;
var sClass = dEl.className ;
dEl.__defaultClassName = sClass ;
dEl.className = sClass + ' button-behavior-hover';
this.setCapture();
};
span.button button, del.button span, span.button input{
_behavior:expression(
(function(el){
if( typeof( behavior_onMouseEnter) == 'undefined'){
behavior_onMouseEnter = function(el){
var dEl = this.parentNode;
var sClass = dEl.className ;
dEl.__defaultClassName = sClass ;
dEl.className = sClass + ' button-behavior-hover';
this.setCapture();
};
behavior_onMouseLeave = function(el) {
var dEl = this.parentNode;
dEl.className = dEl.__defaultClassName ;
dEl.__defaultClassName = undefined;
this.releaseCapture();
};
};
el.runtimeStyle.behavior = 'none';
el.onmouseenter = behavior_onMouseEnter;
el.onmouseleave = behavior_onMouseLeave;
})(this));
behavior_onMouseLeave = function(el) {
var dEl = this.parentNode;
dEl.className = dEl.__defaultClassName ;
dEl.__defaultClassName = undefined;
this.releaseCapture();
};
};
el.runtimeStyle.behavior = 'none';
el.onmouseenter = behavior_onMouseEnter;
el.onmouseleave = behavior_onMouseLeave;
}
)(this));
}

View file

@ -27,7 +27,7 @@ IE7 & IE6 & Below
html { width:100%; }
body { margin:0; font-size:.75em; font-family:sans-serif;}
img { border:none; }
label { cursor:pointer; position:relative; left:5px; }
label { cursor:pointer; }
form { margin:0; padding:0; }
.iePngFix { behavior:url(./common/js/iePngFix.htc); }
@ -66,15 +66,16 @@ a.bold { font-weight:bold; }
.folder_closer { display: none; }
.folder_area { display: none; }
.zbxe_widget_output { background-image:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;}
.member_signature { margin-top:10px; border:1px solid #DDDDDD; padding:10px; }
.zbxe_widget_output { background:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;}
.member_signature { margin-top:10px; border:1px solid #DDDDDD; padding:10px; overflow:hidden;}
.member_profile_image { float:left; margin-right:10px; }
#waitingforserverresponse { display:inline; border:2px solid #444444; background-color:#FFFFFF; padding:15px 20px 13px 20px; font-weight:bold; color:#444444; top:40px; left:40px; position:absolute; z-index:100; visibility:hidden; }
#fororiginalimageareabg { z-index:1001; background-color:#FFFFFF; width:100%; height:100%; top:0px; left:0px; position:relative; padding:20px 10px 10px 10px; border:8px solid #DDDDDD; }
#fororiginalimagearea { visibility:hidden; padding:0px; margin:0px; width:100%; height:100%; top:0px; left:0px; position:absolute; z-index:1000; text-align:left; overflow:hidden; }
#fororiginalimage { z-index:1002; }
#closeOriginalImageBtn { position:absolute; right:8px; top:5px; cursor:pointer; width:50px; height:12px; z-index:1003; }
#membermenuarea { position:absolute; left:0px; top:0px; z-index:1003; visibility:hidden; border:2px solid #D9D9D9; background-color:#FFFFFF; padding:0; }
#membermenuarea .box { border:1px solid #CACACA; background-color:#FFFFFF; padding:7px; line-height:22px;}
#membermenuarea .item { color:#333333; cursor:pointer; margin:0; padding:3px 0 3px 18px; white-space:nowrap; height:22px;}
#membermenuarea .item_on { color:#333333; font-weight:bold; margin:0; cursor:pointer; padding:3px 0 3px 18px; height:22px; letter-spacing:-1px; white-space:nowrap;}
#popup_menu_area { position:absolute; left:0px; top:0px; z-index:1003; visibility:hidden; border:2px solid #D9D9D9; background-color:#FFFFFF; padding:0; }
#popup_menu_area .box { border:1px solid #CACACA; background-color:#FFFFFF; padding:7px; line-height:22px;}
#popup_menu_area .item { color:#333333; cursor:pointer; margin:0; padding:3px 0 3px 0; white-space:nowrap; height:22px;}
#popup_menu_area .item_on { color:#333333; font-weight:bold; margin:0; cursor:pointer; padding:3px 0 3px 0; height:22px; letter-spacing:-1px; white-space:nowrap;}

View file

@ -456,68 +456,91 @@ function origImageDragMouseMove(evt) {
}
/**
* @brief 이름을 클릭하였을 경우 메뉴를 보여주는 함수
* 이름 클릭시 MemberModel::getMemberMenu 호출하여 결과를 보여줌 (사용자의 속성에 따라 메뉴가 달라지고 애드온의 연결을 하기 위해서임)
* @brief 이름, 게시글등을 클릭하였을 경우 팝업 메뉴를 보여주는 함수
**/
xAddEventListener(document, 'click', chkMemberMenu);
xAddEventListener(window, 'load', function() { setMemberMenuObjCursor(xGetElementsByTagName("div")); xGetElementsByTagName("span"); } );
var loaded_member_menu_list = new Array();
xAddEventListener(document, 'click', chkPopupMenu);
var loaded_popup_menu_list = new Array();
// className = "member_*" 일 경우의 object가 클릭되면 해당 회원의 메뉴를 출력함
function chkMemberMenu(evt) {
var area = xGetElementById("membermenuarea");
// 클릭 이벤트 발생시 이벤트가 일어난 대상을 검사하여 적절한 규칙에 맞으면 처리
function chkPopupMenu(evt) {
// 이전에 호출되었을지 모르는 팝업메뉴 숨김
var area = xGetElementById("popup_menu_area");
if(!area) return;
if(area.style.visibility!="hidden") area.style.visibility="hidden";
// 이벤트 대상이 없으면 무시
var e = new xEvent(evt);
if(!e) return;
// 대상의 객체 구함
var obj = e.target;
while(obj) {
if(obj && obj.className && obj.className.search("member_")!=-1) break;
if(!obj) return;
// obj의 nodeName이 div나 span이 아니면 나올대까지 상위를 찾음
if(obj && obj.nodeName != 'DIV' && obj.nodeName != 'SPAN') {
obj = obj.parentNode;
}
if(!obj || !obj.className || obj.className.search("member_")==-1) {
return;
if(!obj || (obj.nodeName != 'DIV' && obj.nodeName != 'SPAN')) return;
// 객체의 className값을 구함
var class_name = obj.className;
if(!class_name) return;
// className을 분리
var class_name_list = class_name.split(' ');
var menu_id = '';
var menu_id_regx = /^([a-zA-Z]+)_([0-9]+)$/ig;
for(var i in class_name_list) {
if(menu_id_regx.test(class_name_list[i])) {
menu_id = class_name_list[i];
break;
}
}
if(!menu_id) return;
if(obj.className.indexOf('member_-1')>=0) return;
// module명과 대상 번호가 없으면 return
var tmp_arr = menu_id.split('_');
var module_name = tmp_arr[0];
var target_srl = tmp_arr[1];
if(!module_name || !target_srl || target_srl < 1) return;
var member_srl = parseInt(obj.className.replace(/member_([0-9]+)/ig,'$1').replace(/([^0-9]*)/ig,''),10);
if(!member_srl) return;
// 현재 글의 mid, module를 구함
var mid = current_mid;
// action이름을 규칙에 맞게 작성
var action_name = "get" + module_name.substr(0,1).toUpperCase() + module_name.substr(1,module_name.length-1) + "Menu";
// 서버에 메뉴를 요청
var params = new Array();
params["member_srl"] = member_srl;
params["cur_mid"] = mid;
params["target_srl"] = target_srl;
params["cur_mid"] = current_mid;
params["cur_act"] = current_url.getQuery('act');
params["menu_id"] = menu_id;
params["page_x"] = e.pageX;
params["page_y"] = e.pageY;
var response_tags = new Array("error","message","menu_list");
if(loaded_member_menu_list[member_srl]) {
params["menu_list"] = loaded_member_menu_list[member_srl];
displayMemberMenu(params, response_tags, params);
if(loaded_popup_menu_list[menu_id]) {
params["menu_list"] = loaded_popup_menu_list[menu_id];
displayPopupMenu(params, response_tags, params);
return;
}
show_waiting_message = false;
exec_xml("member", "getMemberMenu", params, displayMemberMenu, response_tags, params);
exec_xml(module_name, action_name, params, displayPopupMenu, response_tags, params);
show_waiting_message = true;
}
function displayMemberMenu(ret_obj, response_tags, params) {
var area = xGetElementById("membermenuarea");
function displayPopupMenu(ret_obj, response_tags, params) {
var area = xGetElementById("popup_menu_area");
var menu_list = ret_obj['menu_list'];
var member_srl = params["member_srl"];
var target_srl = params["target_srl"];
var menu_id = params["menu_id"];
var html = "";
if(loaded_member_menu_list[member_srl]) {
html = loaded_member_menu_list[member_srl];
if(loaded_popup_menu_list[menu_id]) {
html = loaded_popup_menu_list[menu_id];
} else {
var infos = menu_list.split("\n");
if(infos.length) {
@ -532,19 +555,19 @@ function displayMemberMenu(ret_obj, response_tags, params) {
var func = info_str.substr(pos+1, info_str.length).trim();
var className = "item";
//if(i==infos.length-1) className = "item";
if(!str || !func) continue;
html += "<span class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" style=\"background:url("+icon+") no-repeat left center;\" onclick=\""+func+"\">"+str+"</span><br />";
if(icon) html += "<span class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" style=\"background:url("+icon+") no-repeat left center; padding-left:18px;\" onclick=\""+func+"\">"+str+"</span><br />";
else html += "<span class=\""+className+"\" onmouseover=\"this.className='"+className+"_on'\" onmouseout=\"this.className='"+className+"'\" onclick=\""+func+"\">"+str+"</span><br />";
}
}
loaded_member_menu_list[member_srl] = html;
loaded_popup_menu_list[menu_id] = html;
}
if(html) {
// 레이어 출력
xInnerHtml('membermenuarea', "<div class=\"box\">"+html+"</div>");
xInnerHtml('popup_menu_area', "<div class=\"box\">"+html+"</div>");
xWidth(area, xWidth(area));
xLeft(area, params["page_x"]);
xTop(area, params["page_y"]);
@ -554,19 +577,24 @@ function displayMemberMenu(ret_obj, response_tags, params) {
}
}
// className = "member_*" 의 object의 cursor를 pointer로 본경
function setMemberMenuObjCursor(obj) {
for (var i = 0; i < obj.length; ++i) {
var node = obj[i];
if(node.className && node.className.search(/member_([0-9]+)/ig)!=-1) {
var member_srl = parseInt(node.className.replace(/member_([0-9]+)/ig,'$1').replace(/([^0-9]*)/ig,''),10);
if(member_srl<1) continue;
node.style.cursor = "pointer";
}
}
/**
* @brief 추천/비추천,스크랩,신고기능등 특정 srl에 대한 특정 module/action을 호출하는 함수
**/
function doCallModuleAction(module, action, target_srl) {
var params = new Array();
params['target_srl'] = target_srl;
params['cur_mid'] = current_mid;
exec_xml(module, action, params, completeCallModuleAction);
}
// 날짜 선택 (달력 열기)
function completeCallModuleAction(ret_obj, response_tags) {
if(ret_obj['message']!='success') alert(ret_obj['message']);
location.reload();
}
/**
* @brief 날짜 선택 (달력 열기)
**/
function open_calendar(fo_id, day_str, callback_func) {
if(typeof(day_str)=="undefined") day_str = "";
@ -601,8 +629,9 @@ function doDocumentPreview(obj) {
fo_obj = fo_obj.parentNode;
}
if(fo_obj.nodeName != "FORM") return;
var editor_sequence = fo_obj.getAttribute('editor_sequence');
var content = fo_obj.content.value;
var content = editorGetContent(editor_sequence);
var win = window.open("","previewDocument","toolbars=no,width=700px;height=800px,scrollbars=yes,resizable=yes");
@ -626,6 +655,49 @@ function doDocumentPreview(obj) {
}
}
/* 게시글 저장 */
function doDocumentSave(obj) {
var editor_sequence = obj.form.getAttribute('editor_sequence');
var prev_content = editorRelKeys[editor_sequence]['content'].value;
if(typeof(editor_sequence)!='undefined' && editor_sequence && typeof(editorRelKeys)!='undefined' && typeof(editorGetContent)=='function') {
var content = editorGetContent(editor_sequence);
editorRelKeys[editor_sequence]['content'].value = content;
}
var oFilter = new XmlJsFilter(obj.form, "member", "procMemberSaveDocument", completeDocumentSave);
oFilter.addResponseItem("error");
oFilter.addResponseItem("message");
oFilter.proc();
editorRelKeys[editor_sequence]['content'].value = prev_content;
return false;
}
function completeDocumentSave(ret_obj) {
alert(ret_obj['message']);
}
/* 저장된 게시글 불러오기 */
var objForSavedDoc = null;
function doDocumentLoad(obj) {
// 저장된 게시글 목록 불러오기
objForSavedDoc = obj.form;
popopen(request_uri.setQuery('module','member').setQuery('act','dispSavedDocumentList'));
}
/* 저장된 게시글의 선택 */
function doDocumentSelect(document_srl) {
if(!opener || !opener.objForSavedDoc) {
window.close();
return;
}
// 게시글을 가져와서 등록하기
opener.location.href = opener.current_url.setQuery('document_srl', document_srl);
window.close();
}
/* 스킨 정보 */
function viewSkinInfo(module, skin) {
popopen("./?module=module&act=dispModuleSkinInfo&selected_module="+module+"&skin="+skin, 'SkinInfo');

View file

@ -239,7 +239,7 @@ function drawNode(parent_node, menu_id) {
// html 작성
html += '<div id="'+zone_id+'" style="margin:0px;font-size:9pt;">';
html += '<div id="'+zone_id+'" style="margin:0px;font-size:9pt;white-space:nowrap;overflow:hidden;">';
if(hasChild) html+= '<span style="cursor:pointer;" onclick="toggleFolder(\''+zone_id+'\');return false;">';
else html+= '<span>';

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = 'Add Comment';
$lang->cmd_insert = 'Insert';
$lang->cmd_save = 'Save';
$lang->cmd_load = '불러오기';
$lang->cmd_input = 'Input';
$lang->cmd_search = 'Search';
$lang->cmd_cancel = 'Cancel';
$lang->cmd_back = 'Go Back';
$lang->cmd_vote = 'Vote';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = 'Copy';
$lang->cmd_move = 'Move';
$lang->cmd_move_up = 'Up';
@ -37,12 +41,14 @@
$lang->cmd_select = 'Select';
$lang->cmd_select_all = 'Select All';
$lang->cmd_unselect_all = 'Deselect All';
$lang->cmd_reverse_all = 'Reverse';
$lang->cmd_close_all = 'Close All';
$lang->cmd_open_all = 'Open All';
$lang->cmd_reload = 'Reload';
$lang->cmd_close = 'Close';
$lang->cmd_open = 'Open';
$lang->cmd_setup = 'Configure';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Apply';
$lang->cmd_open_calendar = 'Select a Date';
@ -52,6 +58,7 @@
$lang->cmd_preview = 'Preview';
$lang->cmd_reset = 'Reset';
$lang->cmd_remake_cache = "Re-create cache file";
$lang->cmd_publish = "발행";
$lang->enable = 'Enable';
$lang->disable = 'Disable';
@ -78,6 +85,8 @@
$lang->browser_title = 'Browser Title';
$lang->title = 'Subject';
$lang->title_content = 'Subject+Content';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = 'Content';
$lang->document = 'Article';
$lang->comment = 'Comment';
@ -120,6 +129,7 @@
$lang->date = 'Date';
$lang->regdate = 'Registered Date';
$lang->last_update = 'Latest Update';
$lang->last_post = '최근 등록';
$lang->signup_date = 'Join Date';
$lang->last_login = 'Latest Login';
$lang->first_page = 'First Page';
@ -168,6 +178,7 @@
$lang->msg_module_is_not_standalone = 'Requested module cannot be executed independently';
$lang->success_registed = 'Registered successfully';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = 'Updated successfully';
$lang->success_deleted = 'Deleted successfully';
$lang->success_voted = 'Voted successfully';
@ -175,11 +186,13 @@
$lang->success_sended = 'Sent successfully';
$lang->success_reset = 'Reset successfully';
$lang->success_leaved = 'All member data have been deleted completely.';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = 'Could not be deleted';
$lang->fail_to_move = 'Could not be moved';
$lang->failed_voted = 'Could not vote';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = 'Please try again after removing replies first';
$lang->confirm_submit = 'Are you sure to submit?';

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = 'Agregar commentarios';
$lang->cmd_insert = 'Insertar';
$lang->cmd_save = 'Guardar';
$lang->cmd_load = '불러오기';
$lang->cmd_input = 'Ingresar';
$lang->cmd_search = 'Buscar';
$lang->cmd_cancel = 'Cancelar';
$lang->cmd_back = 'Atrás';
$lang->cmd_vote = 'Recomendar';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = 'Copia';
$lang->cmd_move = 'Mover';
$lang->cmd_move_up = 'Arriba';
@ -43,6 +47,7 @@
$lang->cmd_close = 'Cerrar';
$lang->cmd_open = 'Abrir';
$lang->cmd_setup = 'Configuración';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = 'Opción';
$lang->cmd_apply = 'Aplicar';
$lang->cmd_open_calendar = 'Abrir el calendario';
@ -51,6 +56,8 @@
$lang->cmd_scrap = 'Scrap';
$lang->cmd_preview = 'Previo';
$lang->cmd_reset = 'Rehacer';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->cmd_publish = "발행";
$lang->enable = 'Activar';
$lang->disable = 'Desactivar';
@ -77,6 +84,8 @@
$lang->browser_title = 'Título del navegador';
$lang->title = 'Título';
$lang->title_content = 'Título+Contenido';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = 'Contenidos';
$lang->document = 'Documentos';
$lang->comment = 'Commentarios';
@ -119,6 +128,7 @@
$lang->date = 'Fecha';
$lang->regdate = 'Fecha publicada';
$lang->last_update = 'Ultima actualización';
$lang->last_post = '최근 등록';
$lang->signup_date = 'Fecha del registro';
$lang->last_login = 'Ultima conección';
$lang->first_page = 'Primera página';
@ -167,6 +177,7 @@
$lang->msg_module_is_not_standalone = 'Módulo solicitado no puede ser ejecutado independientemente';
$lang->success_registed = 'Agregado con éxito';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = 'Actualizado con éxito';
$lang->success_deleted = 'Boarrado con éxito';
$lang->success_voted = 'Recomendado con éxito';
@ -174,11 +185,13 @@
$lang->success_sended = 'Enviado con éxito';
$lang->success_reset = 'Reajustado con éxito';
$lang->success_leaved = 'Abandonado con éxito';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = 'No puede ser borrado';
$lang->fail_to_move = 'No puede ser movido';
$lang->failed_voted = 'No puede ser recomendado';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = 'No puede ser borrado, ya que el mensaje posee respuestas ';
$lang->confirm_submit = '¿Está seguro que desea enviar?';

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = 'Ajouter le Commentaire';
$lang->cmd_insert = 'Insérer';
$lang->cmd_save = 'Economiser';
$lang->cmd_load = '불러오기';
$lang->cmd_input = 'Entrer';
$lang->cmd_search = 'Rechercher';
$lang->cmd_cancel = 'Decommander';
$lang->cmd_back = 'Retour';
$lang->cmd_vote = 'Voter';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = 'Copie';
$lang->cmd_move = 'Deplacer';
$lang->cmd_move_up = 'Relever';
@ -43,11 +47,17 @@
$lang->cmd_close = 'Fermer';
$lang->cmd_open = 'Cloturer';
$lang->cmd_setup = 'Configurer';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = 'Option';
$lang->cmd_apply = 'Appliquer';
$lang->cmd_open_calendar = 'Choisir la Date';
$lang->cmd_send = 'Envoyer';
$lang->cmd_print = 'Imprimer';
$lang->cmd_scrap = '스크랩';
$lang->cmd_preview = '미리 보기';
$lang->cmd_reset = '초기화';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->cmd_publish = "발행";
$lang->enable = 'Permettre';
$lang->disable = 'Neutraliser';
@ -74,6 +84,8 @@
$lang->browser_title = 'Titre de Navigateur';
$lang->title = 'Titre';
$lang->title_content = 'Titre + Contenu';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = 'Contenu';
$lang->document = 'Article';
$lang->comment = 'Commentaire';
@ -115,6 +127,7 @@
$lang->date = 'Date';
$lang->regdate = 'Date d\'Enregistrement';
$lang->last_update = 'La Dernière Mise a Jour';
$lang->last_post = '최근 등록';
$lang->signup_date = 'Date d\'Enregistrement';
$lang->last_login = 'La Dernière Ouverture';
$lang->first_page = 'Première Page';
@ -163,6 +176,7 @@
$lang->msg_module_is_not_standalone = 'Le module demandé ne peut pas être exécuté indépendamment.';
$lang->success_registed = 'L\'enregistrement a été avec succès exécuté.';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = 'Avec succès mis a jour.';
$lang->success_deleted = 'Avec succès supprime';
$lang->success_voted = 'Avec succès voté';
@ -170,11 +184,13 @@
$lang->success_sended = 'Avec succès envoyé';
$lang->success_reset = 'Avec succès remisé';
$lang->success_leaved = 'Avec succès fait cécession';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = 'N\'a pas pu être supprimé.';
$lang->fail_to_move = 'N\'a pas pu être déplacé';
$lang->failed_voted = 'La demande de voter a échoué';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = 'Une ou plusieurs reponses existent et ne pourraient pas être supprimees ainsi';
$lang->confirm_submit = 'Etes-vous sur vous voulez-vous soumettre?';

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = 'コメント登録';
$lang->cmd_insert = '挿入';
$lang->cmd_save = '保存';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '入力';
$lang->cmd_search = '検索';
$lang->cmd_cancel = 'キャンセル';
$lang->cmd_back = '戻る';
$lang->cmd_vote = '推薦';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = 'コピー';
$lang->cmd_move = '移動';
$lang->cmd_move_up = '上へ';
@ -43,6 +47,7 @@
$lang->cmd_close = '閉じる';
$lang->cmd_open = '開く';
$lang->cmd_setup = '設定';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_apply = '適用';
$lang->cmd_option = 'オプション';
$lang->cmd_open_calendar = 'カレンダーを開く';
@ -52,6 +57,7 @@
$lang->cmd_preview = 'プレビュー';
$lang->cmd_reset = '初期化';
$lang->cmd_remake_cache = "キャッシュファイル再生成";
$lang->cmd_publish = "발행";
$lang->enable = '可能';
$lang->disable = '不可';
@ -78,6 +84,8 @@
$lang->browser_title = 'ブラウザタイトル';
$lang->title = 'タイトル';
$lang->title_content = 'タイトル+内容';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = '内容';
$lang->document = '書き込み';
$lang->comment = 'コメント';
@ -120,6 +128,7 @@
$lang->date = '年月日';
$lang->regdate = '登録日';
$lang->last_update = '最近修正日';
$lang->last_post = '최근 등록';
$lang->signup_date = '加入日';
$lang->last_login = '最近ログイン';
$lang->first_page = '最初のページ';
@ -168,6 +177,7 @@
$lang->msg_module_is_not_standalone = 'このモジュールはスタンドアローンでは作動しません。';
$lang->success_registed = '登録しました。';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = '修正しました。';
$lang->success_deleted = '削除しました。';
$lang->success_voted = '推薦しました。';
@ -175,11 +185,13 @@
$lang->success_sended = '送信しました。';
$lang->success_reset = '初期化しました。';
$lang->success_leaved = '脱会しました。';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = '削除に失敗しました。';
$lang->fail_to_move = '移動に失敗しました。';
$lang->failed_voted = '推薦できません。';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = '返信の書き込みがあり、削除できません。';
$lang->confirm_submit = '登録しますか?';

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = '댓글 등록';
$lang->cmd_insert = '추가';
$lang->cmd_save = '저장';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '입력';
$lang->cmd_search = '검색';
$lang->cmd_cancel = '취소';
$lang->cmd_back = '돌아가기';
$lang->cmd_vote = '추천';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = '복사';
$lang->cmd_move = '이동';
$lang->cmd_move_up = '위로';
@ -44,6 +48,7 @@
$lang->cmd_close = '닫기';
$lang->cmd_open = '열기';
$lang->cmd_setup = '설정';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = '옵션';
$lang->cmd_apply = '적용';
$lang->cmd_open_calendar = '날짜 선택';
@ -53,6 +58,7 @@
$lang->cmd_preview = '미리 보기';
$lang->cmd_reset = '초기화';
$lang->cmd_remake_cache = "캐시파일 재생성";
$lang->cmd_publish = "발행";
$lang->enable = '가능';
$lang->disable = '불가능';
@ -79,6 +85,8 @@
$lang->browser_title = '브라우저 제목';
$lang->title = '제목';
$lang->title_content = '제목+내용';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = '내용';
$lang->document = '게시물';
$lang->comment = '댓글';
@ -120,7 +128,8 @@
$lang->member_count = '회원수';
$lang->date = '날짜';
$lang->regdate = '등록일';
$lang->last_update = '최근수정일';
$lang->last_update = '최근 수정일';
$lang->last_post = '최근 등록';
$lang->signup_date = '가입일';
$lang->last_login = '최근로그인';
$lang->first_page = '첫페이지';
@ -169,6 +178,7 @@
$lang->msg_module_is_not_standalone = '요청하신 모듈은 독립적으로 동작할 수가 없습니다';
$lang->success_registed = '등록되었습니다';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = '수정되었습니다';
$lang->success_deleted = '삭제되었습니다';
$lang->success_voted = '추천되었습니다';
@ -176,11 +186,13 @@
$lang->success_sended = '발송되었습니다';
$lang->success_reset = '초기화되었습니다';
$lang->success_leaved = '탈퇴되었습니다';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = '삭제 실패하였습니다';
$lang->fail_to_move = '이동 실패하였습니다';
$lang->failed_voted = '추천하실 수 없습니다';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = '답글이 있어서 삭제할 수 없습니다';
$lang->confirm_submit = '등록하시겠습니까?';

5
common/lang/lang.info Normal file
View file

@ -0,0 +1,5 @@
ko,한국어
en,English
zh-CN,中文
jp,日本語
es,Español

View file

@ -21,11 +21,15 @@
$lang->cmd_comment_registration = '提交评论';
$lang->cmd_insert = '添加';
$lang->cmd_save = '保存';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '输入';
$lang->cmd_search = '搜索';
$lang->cmd_cancel = '取消';
$lang->cmd_back = '返回';
$lang->cmd_vote = '推荐';
$lang->cmd_vote_down = '비추천';
$lang->cmd_declare = '신고';
$lang->cmd_declared_list = '신고 목록';
$lang->cmd_copy = '复制';
$lang->cmd_move = '查看';
$lang->cmd_move_up = '向上';
@ -44,6 +48,7 @@
$lang->cmd_close = '关闭';
$lang->cmd_open = '打开';
$lang->cmd_setup = '设置';
$lang->cmd_addition_setup = '추가 설정';
$lang->cmd_option = '选项';
$lang->cmd_apply = '应用';
$lang->cmd_open_calendar = '选择日期';
@ -53,6 +58,7 @@
$lang->cmd_preview = '预览';
$lang->cmd_reset = '初始化';
$lang->cmd_remake_cache = "重新生成缓冲文件";
$lang->cmd_publish = "발행";
$lang->enable = '可用';
$lang->disable = '禁用';
@ -79,6 +85,8 @@
$lang->browser_title = '浏览器标题';
$lang->title = '标题';
$lang->title_content = '标题+内容';
$lang->topic = '주제';
$lang->replies = '응답';
$lang->content = '内容';
$lang->document = '文章';
$lang->comment = '评论';
@ -121,6 +129,7 @@
$lang->date = '日期';
$lang->regdate = '登录日期';
$lang->last_update = '最后更新';
$lang->last_post = '최근 등록';
$lang->signup_date = '注册日期';
$lang->last_login = '最近登录';
$lang->first_page = '第一页';
@ -169,6 +178,7 @@
$lang->msg_module_is_not_standalone = '您请求的模块不能单独执行';
$lang->success_registed = '提交成功!';
$lang->success_declared = '신고되었습니다';
$lang->success_updated = '修改成功!';
$lang->success_deleted = '删除成功!';
$lang->success_voted = '推荐成功!';
@ -176,11 +186,13 @@
$lang->success_sended = '发送成功!';
$lang->success_reset = '初始化成功';
$lang->success_leaved = '注销成功!';
$lang->success_saved = '저장되었습니다';
$lang->fail_to_delete = '删除成功!';
$lang->fail_to_move = '移动成功!';
$lang->failed_voted = '您不能推荐!';
$lang->failed_declared = '신고를 하실 수 없습니다';
$lang->fail_to_delete_have_children = '不能删除有回复的评论!';
$lang->confirm_submit = '确定要提交吗?';

View file

@ -7,14 +7,14 @@
$min_year = 1900;//년 (0년 부터)
####################
$year = $_REQUEST['year'];
$month = $_REQUEST['month'];
$year = htmlspecialchars($_REQUEST['year']);
$month = htmlspecialchars($_REQUEST['month']);
$method = $_REQUEST['method'];
$fo_id = $_REQUEST['fo_id'];
$callback_func = $_REQUEST['callback_func'];
$method = htmlspecialchars($_REQUEST['method']);
$fo_id = htmlspecialchars($_REQUEST['fo_id']);
$callback_func = htmlspecialchars($_REQUEST['callback_func']);
$day_str = $_REQUEST['day_str']; // 날짜 (ex. 20080101)
$day_str = htmlspecialchars($_REQUEST['day_str']); // 날짜 (ex. 20080101)
if($day_str && strlen($day_str)) {
$year = substr($day_str, 0, 4);
$month = substr($day_str, 4, 2);
@ -151,7 +151,7 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
<body>
<div id="popup_content" >
<div id="popHeadder">
<h1>Calendar</h1>
<h3>Calendar</h3>
</div>
<form action="./calendar.php" method="get">
@ -163,12 +163,11 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
<div class="calendar">
<div class="yymm">
<div class="yy">
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&amp;year=<?php echo $year?>&amp;month=<?php echo $month?>&amp;method=prev_year&amp;callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="<?php echo $year - 1?>" width="11" height="11" /></a><?php echo $year?><a href="./calendar.php?fo_id=<?php echo $fo_id?>&amp;year=<?php echo $year?>&amp;month=<?php echo $month?>&amp;method=next_year&amp;callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="<?php echo $year + 1?>" width="11" height="11" /></a>
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=prev_year&callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="<?php echo $year - 1?>" width="11" height="11" /></a><?php echo $year?><a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=next_year&callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="<?php echo $year + 1?>" width="11" height="11" /></a>
</div>
<div class="mm">
<p><?php echo $monthLongName[$month]?></p>
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&amp;year=<?php echo $year?>&amp;month=<?php echo $month?>&amp;method=prev_month&amp;callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><span><?php echo $month?></span><a href="./calendar.php?fo_id=<?php echo $fo_id?>&amp;year=<?php echo $year?>&amp;month=<?php echo $month?>&amp;method=next_month&amp;callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
<a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=prev_month&callback_func=<?php echo $callback_func?>" class="left"><img src="./images/buttonLeft2.gif" alt="prev" width="11" height="11" /></a><span><?php echo $month?></span><a href="./calendar.php?fo_id=<?php echo $fo_id?>&year=<?php echo $year?>&month=<?php echo $month?>&method=next_month&callback_func=<?php echo $callback_func?>" class="right"><img src="./images/buttonRight2.gif" alt="next" width="11" height="11" /></a>
</div>
<div class="go">
@ -184,7 +183,7 @@ $before_month_month_day = convertDatetoDay( $month == 1 ? $year - 1 : $year, $mo
</select>
</div>
<br /><br />
<center><a href="./calendar.php" class="button"><span>Go Today</span></a></center>
<center><a href="./calendar.php?fo_id=<?php echo $fo_id?>&callback_func=<?php echo $callback_func?>" class="button"><span>Go Today</span></a></center>
</div>
<table cellspacing="0" class="dd">

View file

@ -32,7 +32,7 @@
<img src="./images/original_image_box_close.gif" alt="close original image" border="0" onclick="closeOriginalImage()" id="closeOriginalImageBtn"/>
</div>
</div>
<div id="membermenuarea"></div>
<div id="popup_menu_area"></div>
{Context::getHtmlFooter()}

View file

@ -198,13 +198,17 @@
* 손쉽고 확실한 변환을 위해 2byte unicode로 변형한후 처리를 한다
**/
function cut_str($string, $cut_size, $tail='...') {
if(!function_exists('iconv')) return $string;
if(!$string || !$cut_size) return $string;
$unicode_str = iconv("UTF-8","UCS-2",$string);
if(strlen($unicode_str) < $cut_size*2) return $string;
$output_str = substr($unicode_str, 0, $cut_size*2);
return iconv("UCS-2","UTF-8",$output_str).$tail;
if(function_exists('iconv')) {
$unicode_str = iconv("UTF-8","UCS-2",$string);
if(strlen($unicode_str) < $cut_size*2) return $string;
$output_str = substr($unicode_str, 0, $cut_size*2);
return iconv("UCS-2","UTF-8",$output_str).$tail;
}
$arr = array();
return preg_match('/.{'.$cut_size.'}/su', $string, $arr) ? $arr[0].$tail : $string;
}
/**
@ -220,27 +224,24 @@
$year = (int)substr($str,0,4);
$month = (int)substr($str,4,2);
$day = (int)substr($str,6,2);
if(strlen($str) <= 8)
{
$gap = 0;
}
else
{
$time_zone = $GLOBALS['_time_zone'];
if($time_zone<0) $to = -1; else $to = 1;
$t_hour = substr($time_zone,1,2)*$to;
$t_min = substr($time_zone,3,2)*$to;
if(strlen($str) <= 8) {
$gap = 0;
} else {
$time_zone = $GLOBALS['_time_zone'];
if($time_zone<0) $to = -1; else $to = 1;
$t_hour = substr($time_zone,1,2)*$to;
$t_min = substr($time_zone,3,2)*$to;
$server_time_zone = date("O");
if($server_time_zone<0) $so = -1; else $so = 1;
$c_hour = substr($server_time_zone,1,2)*$so;
$c_min = substr($server_time_zone,3,2)*$so;
$server_time_zone = date("O");
if($server_time_zone<0) $so = -1; else $so = 1;
$c_hour = substr($server_time_zone,1,2)*$so;
$c_min = substr($server_time_zone,3,2)*$so;
$g_min = $t_min - $c_min;
$g_hour = $t_hour - $c_hour;
$g_min = $t_min - $c_min;
$g_hour = $t_hour - $c_hour;
$gap = $g_min*60 + $g_hour*60*60;
}
$gap = $g_min*60 + $g_hour*60*60;
}
return mktime($hour, $min, $sec, $month?$month:1, $day?$day:1, $year)+$gap;
}
@ -379,9 +380,6 @@
// script code 제거
$content = preg_replace("!<script(.*?)<\/script>!is","",$content);
// 제로보드XE전용 주석 태그를 본문에서 제거
$content = preg_replace('!<\!--(Before|After)Document\(([0-9]+),([0-9]+)\)-->!is', '', $content);
return $content;
}

View file

@ -25,10 +25,10 @@
<h1><a href="{$layout_info->index_url}"><!--@if(!$layout_info->logo_image)--><img src="./images/{$layout_info->colorset}/zeroBoardXE.png" alt="ZeroBoard™ XE" class="iePngFix" /><!--@else--><img src="{$layout_info->logo_image}" alt="logo" border="0" class="iePngFix" /><!--@end--></a></h1>
<div id="language">
<strong title="{$lang_type}">{$lang_type}</strong> <a href="#selectLang" onclick="showHide('selectLang');return false;"><img src="./images/{$layout_info->colorset}/buttonLang.gif" alt="Select Language" width="87" height="15" /></a>
<strong title="{$lang_type}">{$lang_supported[$lang_type]}</strong> <a href="#selectLang" onclick="showHide('selectLang');return false;"><img src="./images/{$layout_info->colorset}/buttonLang.gif" alt="Select Language" width="87" height="15" /></a>
<ul id="selectLang">
<!--@foreach($lang_supported as $val)--><!--@if($val != $lang_type)-->
<li><a href="#" onclick="doChangeLangType('{$val}');return false;">{$val}</a></li>
<!--@foreach($lang_supported as $key => $val)--><!--@if($key!= $lang_type)-->
<li><a href="#" onclick="doChangeLangType('{$key}');return false;">{$val}</a></li>
<!--@end--><!--@end-->
</ul>
</div>
@ -67,12 +67,10 @@
<input type="radio" name="search_target" value="title_content" id="search_target3" />
<label for="search_target3" onclick="chkIsKind(3, '{$lang->title}+{$lang->content}'); return false;" onmouseover="this.className='on'" onmouseout="this.style.background='none'">{$lang->title}+{$lang->content}</label>
</li>
<!--
<li>
<input type="radio" name="search_target" value="comment" id="search_target4" />
<label for="search_target4" onclick="chkIsKind(4, '{$lang->comment}'); return false;" onmouseover="this.className='on'" onmouseout="this.style.background='none'">{$lang->comment}</label>
</li>
-->
</ul>
<input name="is_keyword" type="text" class="inputText" title="keyword" />

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<module version="0.1" category="manager">
<title xml:lang="ko">애드온</title>
<title xml:lang="en">Addon</title>
<title xml:lang="es">Addon</title>

View file

@ -3,30 +3,32 @@
</div>
<div id="popBody">
<table cellspacing="0" class="tableType5">
<table cellspacing="0" class="adminTable">
<col width="100" />
<col />
<tr>
<th scope="row"><label for="textfield1">{$lang->title}</label></th>
<th scope="row">{$lang->title}</th>
<td>{$addon_info->title} ver. {$addon_info->version}</td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->author}</label></th>
<th scope="row">{$lang->author}</th>
<td class="blue"><a href="mailto:{$addon_info->author->email_address}">{$addon_info->author->name}</a></td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->homepage}</label></th>
<th scope="row">{$lang->homepage}</th>
<td class="blue"><a href="{$addon_info->author->homepage}" onclick="window.open(this.href);return false;">{$addon_info->author->homepage}</a></td>
</tr>
<tr>
<th scope="row"><label for="textfield2">{$lang->regdate}</label></th>
<td>{$addon_info->author->date}<td>
<th scope="row">{$lang->regdate}</th>
<td>{$addon_info->author->date}</td>
</tr>
<tr>
<th scope="row" class="borderBottomNone">{$lang->description}</th>
<td class="borderBottomNone">{nl2br($addon_info->author->description)}</td>
<th scope="row">{$lang->description}</th>
<td>{nl2br(trim($addon_info->author->description))}</td>
</tr>
</table>
</div>
<div id="popFooter" class="tCenter">

View file

@ -10,11 +10,18 @@
</form>
<!-- 애드온의 목록 -->
<table cellspacing="0" class="tableType3">
<table cellspacing="0" class="adminTable">
<col />
<col width="50" />
<col width="100" />
<col width="70" />
<col width="150" />
<col width="50" />
<col width="60" />
<thead>
<tr>
<th scope="col">{$lang->addon_name}</th>
<th scope="col">{$lang->version}</th>
<th scope="col">{$lang->version}</TH>
<th scope="col">{$lang->author}</th>
<th scope="col">{$lang->date}</th>
<th scope="col">{$lang->installed_path}</th>
@ -50,7 +57,7 @@
</td>
</tr>
<tr>
<td colspan="7" class="colSpan">
<td colspan="6">
{nl2br($val->author->description)}
</td>
</tr>

View file

@ -8,7 +8,7 @@
<input type="hidden" name="addon_name" value="{$addon_info->addon_name}" />
<div id="popBody">
<table cellspacing="0" class="tableType5">
<table cellspacing="0" class="adminTable">
<col width="100" />
<col />
<tr>
@ -29,7 +29,7 @@
<th scope="row">{$val->title}</th>
<td>
<input type="text" name="{$val->name}" value="{$val->value}" class="inputTypeText w100" />
<p>{$val->description}</p>
<!--@if($val->description)--><p>{$val->description}</p><!--@end-->
</td>
</tr>
<!--@end-->

View file

@ -24,10 +24,11 @@
$this->setLayoutPath($this->getTemplatePath());
$this->setLayoutFile('layout.html');
// shortcut 가져오기
$oAdminModel = &getAdminModel('admin');
$shortcut_list = $oAdminModel->getShortCuts();
Context::set('shortcut_list', $shortcut_list);
// 설치된 모듈 목록 가져오기
$oModuleModel = &getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
Context::set('installed_module_list', $installed_module_list);
// 현재 실행중인 모듈을 구해 놓음
$running_module = strtolower(preg_replace('/([a-z]+)([A-Z]+)([a-z]+)(.*)/', '\\2\\3', $this->act));

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<module version="0.1">
<module version="0.1" category="base">
<title xml:lang="ko">관리자 모듈</title>
<title xml:lang="en">Administrator Module</title>
<title xml:lang="es">Módulo del administrador</title>

View file

@ -5,6 +5,17 @@
* @brief English Language Pack (Only basic words are included here)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->module_category_title = array(
'service' => '서비스형 모듈',
'manager' => '관리형 모듈',
'utility' => '기능성 모듈',
'accessory' => '부가 모듈',
'base' => '기본 모듈',
);
$lang->newest_news = "Latest News";
$lang->env_setup = "Setting";

View file

@ -5,6 +5,17 @@
* @sumario Paquete del idioma español (sólo los básicos)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->module_category_title = array(
'service' => '서비스형 모듈',
'manager' => '관리형 모듈',
'utility' => '기능성 모듈',
'accessory' => '부가 모듈',
'base' => '기본 모듈',
);
$lang->newest_news = "Noticias recientes";
$lang->env_setup = "Configuración";

View file

@ -5,6 +5,17 @@
* @brief 日本語言語パッケージ(基本的な内容のみ)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->module_category_title = array(
'service' => '서비스형 모듈',
'manager' => '관리형 모듈',
'utility' => '기능성 모듈',
'accessory' => '부가 모듈',
'base' => '기본 모듈',
);
$lang->newest_news = "最新ニュース";
$lang->env_setup = "環境設定";

View file

@ -5,6 +5,17 @@
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->module_category_title = array(
'service' => '서비스형 모듈',
'manager' => '관리형 모듈',
'utility' => '기능성 모듈',
'accessory' => '부가 모듈',
'base' => '기본 모듈',
);
$lang->newest_news = "최신 소식";
$lang->env_setup = "환경 설정";

View file

@ -5,6 +5,17 @@
* @brief 简体中文语言包 (只收录基本内容)
**/
$lang->admin_info = '관리자 정보';
$lang->admin_index = '관리자 초기 페이지';
$lang->module_category_title = array(
'service' => '서비스형 모듈',
'manager' => '관리형 모듈',
'utility' => '기능성 모듈',
'accessory' => '부가 모듈',
'base' => '기본 모듈',
);
$lang->newest_news = "最新消息";
$lang->env_setup = "环境设置";

View file

@ -15,29 +15,76 @@ IE7 Only
*/
body { margin:0; }
li { list-style:none; }
a { text-decoration:none;}
a:hover { text-decoration:underline;}
address { font-style:normal;}
/* Special Class Selector */
.fr { float:right;}
.fl { float:left;}
.fwB { font-weight:bold;}
.gl3 { padding-left:2em; }
/* ----- cBody | Start ----- */
h3 { padding:22px 0 7px 0; border-bottom:2px solid #f2250d; background:url(../images/h3.gif) no-repeat 1px 24px; font-size:1.4em; margin-bottom:10px; text-indent:24px; z-index:99;}
h3 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:11px 9px 7px 25px; color:#555555; }
h3 .gray { color:#9d9d9d;}
.pass { background:url(../images/h4.gif) no-repeat .5em center; padding-left:1em; color:#606060; font-size:1em;}
.adminTable { width:100%; border-left:1px solid #E3E3E2; border-top:1px solid #E3E3E2; margin-bottom:10px; table-layout:fixed;}
.adminTable caption { background:url("../images/s_application.gif") no-repeat 3px 5px; padding:6px 5px 4px 22px; text-align:left; border:1px solid #E3E3E2; border-bottom:none; font-weight:bold; background-color:#F9F8F5; color:#5E6266; }
.adminTable th { background-color:#FAF8F4; padding:5px; font-weight:normal; text-align:left; padding-left:10px; color:#606060; border-right:1px solid #E3E3E2; border-bottom:1px solid #E3E3E2; white-space:nowrap; }
.adminTable th.button { text-align:right; }
.adminTable th.centerButton { text-align:center; }
.adminTable th a { color:#555555; text-decoration:none; }
.adminTable th a:hover { text-decoration:underline; }
.adminTable th.tahoma { font-family:tahoma; font-size:7pt; }
.adminTable th.tahoma a { font-family:tahoma; font-size:7pt; }
.adminTable th.blue { color:#1473C3; }
.adminTable th.red { color:#C31414; }
.adminTable th.green { color:#218E08; }
.adminTable th.blue a { color:#1473C3; }
.adminTable th.red a { color:#C31414; }
.adminTable th.green a { color:#218E08; }
.adminTable th a.blue { color:#1473C3; }
.adminTable th a.red { color:#C31414; }
.adminTable th a.green { color:#218E08; }
.adminTable th select { height:20px; }
.adminTable td { background-color:#FFFFFF; padding:5px; font-weight:normal; text-align:left; padding-left:10px; color:#5A5A5A; border-right:1px solid #E3E3E2; border-bottom:1px solid #E3E3E2;}
.adminTable td.tahoma { font-family:tahoma; font-size:7pt; }
.adminTable td.tahoma a { font-family:tahoma; font-size:7pt; }
.adminTable td.blue { color:#1473C3; }
.adminTable td.red { color:#C31414; }
.adminTable td.green { color:#218E08; }
.adminTable td.blue a { color:#1473C3; }
.adminTable td.red a { color:#C31414; }
.adminTable td.green a { color:#218E08; }
.adminTable td a.blue { color:#1473C3; }
.adminTable td a.red { color:#C31414; }
.adminTable td a.green { color:#218E08; }
.adminTable td.tCenter { text-align:center; }
.adminTable td select { height:20px; }
.adminTable td textarea { width:98%; height:50px; }
.adminTable td a { color:#555555; text-decoration:none; }
.adminTable td a:hover { text-decoration:underline; }
.adminTable td p, .adminTable td label { color:#AAAAAA; font-size:.9em; margin-top:5px; }
.adminTable td p a, .adminTable td label a { text-decoration:underline; color:#999999; }
.adminTable.counter th { font-size:.9em; text-align:center; padding:0;}
.adminTable.counter th em { font:normal 1em Tahoma;}
.adminTable td .graph { width:90%; position:relative;}
.adminTable td .graph .bar { width:100%; position:absolute; margin-top:4px;}
.adminTable td .graph .num { position:relative; background:#ffffff; color:#636363; font:.9em Tahoma; padding-left:10px; white-space:nowrap;}
.admin_news { width:540px; float:left; margin-right:10px; }
.admin_link { width:250px; float:right; }
select.time_zone { width:70%; position:relative; top:4px; }
.gap1 { margin-top:.8em; }
.infoText { clear:both; border:1px solid #f2f2f0; margin-bottom:12px; background:#f9f9f6; padding:1.2em; color:#7b7972; font-size:1em; line-height:1.4em; border-top:none; }
.header4 { overflow:hidden;}
h4 { font-size:1em; color:#f2250d; float:left; padding:.5em 0 1.2em 2em;}
h4 .bracket { font-weight:normal; color:#9d9d9d;}
h4 .vr { font-weight:normal; color:#d1d1d1;}
h4 .view { color:#158692; padding-right:.6em; font:bold .9em Tahoma; background:url(../images/iconView.gif) no-repeat right center;}
.header4 div.summary { font:.9em Tahoma; color:#636363; float:left; padding:.5em 0 1.2em 2em;}
.header4 div.summary { font:.9em Tahoma; color:#636363; float:left; padding:.5em 0 1.2em 2em;}4v
.header4 div.summary .vr { font-weight:normal; color:#d1d1d1; margin:0 .5em;}
.header4 div.summary em { color:#ff1d00; font-style:normal;}
.header4 table.summary { border-right:1px solid #f2f2f2; width:100%; height:35px; margin-bottom:15px;}
@ -46,22 +93,22 @@ h4 .view { color:#158692; padding-right:.6em; font:bold .9em Tahoma; background:
.header4 table.summary th .vr { color:#a3a39f; margin:0 4px; font-weight:normal;}
.header4 table.summary td { border-top:1px solid #f2f2f2; border-bottom:1px solid #f2f2f2; font:.9em Tahoma; padding-left:17px;}
select.time_zone { width:70%; position:relative; top:4px; }
h4 { font-size:1em; color:#f2250d; padding-left:10px; }
h4 .bracket { font-weight:normal; color:#9d9d9d;}
h4 .vr { font-weight:normal; color:#d1d1d1;}
h4 .view { color:#158692; padding-right:.6em; font:bold .9em Tahoma; background:url(../images/iconView.gif) no-repeat right center; text-decoration:none; }
/* ----- cBody | End ----- */
/* ----- Content | Start ----- */
/* localNavigation */
.localNavigation { float:right;margin-bottom:10px;}
.localNavigation li { float:left; margin-right:.3em;}
.localNavigation { float:right; margin-bottom:10px;}
.localNavigation li { float:left; margin-right:.3em; list-style:none;}
.localNavigation li.on { margin-right:.3em;}
.localNavigation li a { padding:.4em 1em .2em 1em; display:block; float:left; font-size:.9em; color:#606060; border:2px solid #e0dfde;}
.localNavigation li a { padding:.4em 1em .2em 1em; display:block; float:left; font-size:.9em; color:#606060; border:2px solid #e0dfde; text-decoration:none; }
.localNavigation li a:hover { border:2px solid #ff1a00; color:#f2250d; text-decoration:none;}
.localNavigation li.on a { color:#f2250d; border:2px solid #ff1a00; text-decoration:none;}
/* pageNavigation */
.pageNavigation { display:block; padding:1.5em 0 2em 0; text-align:center; font:bold .8em Tahoma; }
.tableSummaryType1 { font:bold .9em Tahoma; color:#a0a0a0; margin-bottom:10px;}
.tableSummaryType1 strong { font:bold 1em Tahoma; color:#ff1a00;}
.pageNavigation { display:block; padding:1.5em 0 2em 0; text-align:center; font:bold .9em Tahoma; }
.pageNavigation a { margin-left:-4px; font:bold 1em Tahoma; color:#666666; display:inline-block; padding:1px 7px 2px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
.pageNavigation a:hover { background:#F7F7F7; text-decoration:none; }
.pageNavigation a:visited { color:#999999;}
@ -71,142 +118,18 @@ select.time_zone { width:70%; position:relative; top:4px; }
.pageNavigation a.goToLast img { display:inline-block; padding:2px 0; top:2px; _top:1px;}
.pageNavigation .current { margin-left:-4px; font:bold 1em Tahoma; color:#ff6600; display:inline-block; padding:1px 7px 1px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
/* tableStyle */
.infoText { clear:both; border:1px solid #f2f2f0; margin-bottom:12px; background:#f9f9f6; padding:1.2em; color:#7b7972; font-size:.9em; line-height:1.4em;}
.gap1 { margin-top:.8em; }
.tableSummaryType1 { font:bold .8em Tahoma; color:#a0a0a0; margin-bottom:10px;}
.tableSummaryType1 strong { font:bold 1em Tahoma; color:#ff1a00;}
.tableType1 { width:100%; border-bottom:2px solid #c1c0bd;}
.tableType1 caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/iconH3.gif) no-repeat .5em 2em;}
.tableType1 th { font-weight:normal; color:#ffffff; background:url(../images/tableType1Header.gif) repeat-x; height:28px;}
.tableType1 th select { vertical-align:middle; }
.tableType1 td { text-align:center; color:#636363; height:30px; border-top:1px solid #ededed;}
.tableType1 td.left { text-align:left }
.tableType1 td a { color:#1d1d1d;}
.tableType1 .tahoma { font-size:.9em; font-family:Tahoma;}
.tableType1 .tahoma a { font-size:1em;}
.tableType1 td.subject { padding:3px 0 3px 0; line-height:140%;}
.tableType1 td.blue a { color:#158692;}
.tableType1 td.red a { color:#c95b53;}
.tableType1 td.red { color:#c95b53;}
.tableType1 td .blue { color:#158692;}
.tableType1 td .red { color:#c95b53;}
.tableType2 { border:2px solid #c1c0bd; border-left:none; border-right:none; width:100%;}
.tableType2 caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/iconH3.gif) no-repeat .5em 2em;}
.tableType2 th { border-top:1px solid #fbfbfb; border-bottom:1px solid #e4e4e4; background:#f5f5f5; padding:10px 10px 10px 2em; font-weight:normal; text-align:left; color:#606060;}
.tableType2 td { border-bottom:1px solid #ededed; padding:10px 10px 7px 10px; font-size:.9em; color:#7b7972;}
.tableType2 td input,
.tableType2 td textarea,
.tableType2 td select { margin-bottom:.5em; vertical-align:middle; font-size:1em; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6;}
.tableType2 td .w100 { width:100%; display:block;}
.tableType2 td .checkbox { margin:-3px;}
.tableType2 td p { line-height:1.4em;}
.tableType2 td a { color:#1d1d1d;}
.tableType2 td a.blue { color:#158692;}
.tableType2 td a.red { color:#c95b53;}
.tableType3 { width:100%; border-bottom:2px solid #c1c0bd;}
.tableType3 caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/iconH3.gif) no-repeat .5em 2em;}
.tableType3 th.bold { font-weight:bold; }
.tableType3 th,
.tableType3 td { border-top:1px solid #bfbfbf;}
.tableType3 thead th { font-weight:normal; color:#ffffff; background:url(../images/tableType1Header.gif) repeat-x; height:28px;}
.tableType3 tbody th { font-weight:normal; color:#606060; text-align:left; background:#f5f5f5; padding:10px 10px 10px 2em;}
.tableType3 tbody th img { vertical-align:middle; margin-top:-2px;}
.tableType3 td { text-align:center; color:#636363; border-left:1px solid #ededed; padding:10px 10px 7px 10px;}
.tableType3 td.colSpan { text-align:left; border-top:1px solid #ededed;}
.tableType3 td a { color:#1d1d1d;}
.tableType3 th a.blue { color:#158692;}
.tableType3 th a.red { color:#c95b53;}
.tableType3 .tahoma { font-size:.9em; font-family:Tahoma;}
.tableType3 .tahoma a { font-size:1em;}
.tableType3 td.left { text-align:left; }
.tableType3 td label { margin-right:1em; }
.tableType3 td.blue a { color:#158692;}
.tableType3 td.red a { color:#c95b53;}
.tableType3 td a.blue { color:#158692;}
.tableType3 td a.red { color:#c95b53;}
/*.tableType3 td input,*/
.tableType3 td textarea,
.tableType3 td select { margin-bottom:.5em; vertical-align:middle; font-size:1em; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6;}
.tableType3 td .w100 { width:100%; display:block;}
.tableType4 { border:2px solid #c1c0bd; border-left:none; border-right:none; width:100%;}
.tableType4 th { border-top:1px solid #fbfbfb; border-bottom:1px solid #e4e4e4; background:#f5f5f5; padding:10px 10px 10px 2em; font-weight:normal; text-align:left; color:#606060;}
.tableType4 caption { padding:2em 0 .5em 1.5em; font-weight:bold; text-align:left; background:url(../images/iconH3.gif) no-repeat .5em 2em;}
.tableType4.counter th { font-size:.9em; text-align:center; padding:0;}
.tableType4.counter th em { font:normal 1em Tahoma;}
.tableType4 td { border-bottom:1px solid #ededed; padding:10px 10px 7px 10px; color:#7b7972;}
.tableType4 td a { color:#1d1d1d;}
.tableType4 .tahoma { font-size:.9em; font-family:Tahoma;}
.tableType4 .tahoma a { font-size:1em;}
.tableType4 td.blue a { color:#158692;}
.tableType4 td.red a { color:#c95b53;}
/*.tableType4 td input,*/
.tableType4 td textarea,
.tableType4 td select { margin-bottom:.5em; vertical-align:middle;font-size:1em; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6;}
.tableType4 td label { margin-right:1em; }
.tableType4 td .w100 { width:100%; display:block;}
.tableType4 td .checkbox { margin:-3px;}
.tableType4 td p { line-height:1.4em;}
.tableType4 td .graph { width:90%; position:relative;}
.tableType4 td .graph .bar { width:100%; position:absolute; margin-top:4px;}
.tableType4 td .graph .num { position:relative; background:#ffffff; color:#636363; font:.9em Tahoma; padding-left:10px;}
.widgetBox { border:1px solid #c1c0bd; width:100%;}
.widgetBox th { text-align:center; font-weight:normal; background-color:#EFEFEF; }
.widgetBox td { text-align:left; padding:.5em; }
/* ----- Content | End ----- */
/* ----- Popup | Start ----- */
/* popup */
#popHeadder { width:620px; height:40px; background:url(../images/popupTopBg.png) repeat-x left top; }
#popHeadder h1 { padding:13px 0 0 19px; height:27px; background:url(../images/popupTopBgEnd.png) no-repeat right top; font-size:1.2em; color:#d8d8d8;}
#popBody { width:600px; padding:10px; background:#ffffff;}
#popFooter { width:620px; background:#f7f7f6; border-top:1px solid #e8e8e7; padding:.5em 0 .5em 0; overflow:hidden; }
#popFooter .close { position:relative; left:50%; margin-left:-1em; float:left;}
#popBody .tableType5 { border:1px solid #c1c0bd; border-left:none; border-right:none; width:100%;}
#popBody .tableType5 th { border-top:1px solid #fbfbfb; border-bottom:1px solid #e4e4e4; background:#f5f5f5; padding:8px 10px 7px 2em; font-weight:normal; text-align:left; color:#606060;}
#popBody .tableType5 td { border-bottom:1px solid #ededed; padding:8px 10px 7px 10px; color:#7b7972;}
/*#popBody .tableType5 td input,*/
#popBody .tableType5 td textarea,
#popBody .tableType5 td select { margin-bottom:.5em; vertical-align:middle;}
#popBody .tableType5 td .w100 { width:100%; display:block;}
#popBody .tableType5 td .checkbox { margin:-3px; margin-bottom:1em; }
#popBody .tableType5 td p { line-height:1.4em;}
#popBody .tableType5 td.blue a { color:#158692;}
#popBody .tableType5 .borderBottomNone { border-bottom:none;}
/* ----- Popup | End ----- */
.widget_item { margin-bottom:.5em; }
.layout_editor { width:100%; height:500px; border:0px; font-size:1em; }
.layout_editor_box { padding:10px; border:1px solid #DDDDDD; }
/* adminSearch */
.adminSearch { text-align:right; clear:both; width:100%;}
.adminSearch fieldset { border:none; display:inline; overflow:visible; }
.adminSearch * { vertical-align:middle;}
.title { font-size:1.5em; font-weight:bold; margin-top:2em; margin-bottom:.5em; color:#666666; }
.desc { font-size:1em; margin-bottom:.5em; color:#ADADAD;}
.buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; position:relative; top:-1px; font:.75em Tahoma; text-align:center; background:url(../images/buttonTypeInput24.gif) no-repeat; }
.w700 { width:700px; }
.w5 { width:5em; }
#popHeadder { height:40px; background:url(../images/popupTopBg.png) repeat-x left top; padding:10px;}
#popHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; }
#popBody { width:600px; padding:10px; background:#ffffff;}
#popFooter { width:620px; background:#f7f7f6; border-top:1px solid #e8e8e7; padding:.5em 0 .5em 0; overflow:hidden; }
#popFooter .close { position:relative; left:50%; margin-left:-1em; float:left;}
.nowrap { white-space:nowrap; }
.mid_list { width:7em; }
.layout_editor { width:100%; height:500px; border:0px; font-size:1em; }
.layout_editor_box { padding:10px; border:1px solid #DDDDDD; }
ul.extra_vars li { margin-bottom:.5em;}
li.type_key { float:left; width:10em; }
li.type_value { clear:right; }
.admin_news { width:49%; float:left; margin-right:10px; }
.admin_link { width:49%; float:right; }

View file

@ -1,65 +1,40 @@
@charset "utf-8";
/*
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
Jeong, Chan Myeong 070601~070630
*/
/*
Used Hack
body { background:url("../images/admin_background.gif") repeat-x left top; background-color:#DBD8D3; }
IE6 & Below
{ property:value; _property:value;}
#adminLayout { background:url("../images/admin_logo.gif") no-repeat left top; background-color:#F8F6F2; overflow:hidden; width:1000px; border-right:1px solid #B2B2B2; margin:5px 0 0 5px; }
IE7 Only
*:first-child+html #selector
#adminContentBody { width:800px; float:left; background-color:#FFFFFF; padding:25px 10px 20px 10px; vertical-align:top; background:url(../images/admin_top_bg.gif) repeat-x left top; background-color:#FFFFFF; }
*/
#adminLayoutBottom { background:url("../images/admin_bottom_bg.gif") repeat-x left top; height:3px; clear:both; overflow:hidden; width:1001px; margin:0 0 0 5px; }
/* default.css - Type Selector Definition */
li { list-style:none;}
a { text-decoration:none;}
a:hover { text-decoration:underline;}
address { font-style:normal;}
#adminMenuContent { width:179px; float:left; margin-top:70px; padding-bottom:20px; vertical-align:top; background:none; overflow:hidden; border-right:1px solid #B2B2B2; }
/* Special Class Selector */
.fr { float:right;}
.fl { float:left;}
.fwB { font-weight:bold;}
#adminMenuContent .adminInfoBox { border:1px solid #E3E3E2; padding:3px; margin:0 0 0 8px; width:130px; background-color:#FFFFFF; overflow:hidden; width:154px; margin-bottom:10px;}
#adminMenuContent .adminInfoBox .adminInfo { border:1px solid #E3E3E2; padding:5px 3px 3px 23px; background:url("../images/icon_key.gif") no-repeat 3px 3px; color:#555555; font-weight:bold; overflow:hidden; background-color:#F8F6F2; }
#adminMenuContent .adminInfoBox .adminInfo div.expandButton { float:right; height:16px; overflow:hidden; }
#adminMenuContent .adminInfoBox div.logoutButton { margin-top:5px; text-align:center; clear:both; }
#adminMemberInfo { padding:10px 5px 10px 24px; background:url("../images/icon_user.gif") no-repeat 5px 8px; color:#336699; font-weight:bold; letter-spacing:-1px;}
/* ----- Header | Start ----- */
#adminMenuContent h3 { border:1px solid #E3E3E2; border-top:none; color:#555555; font-size:1em; text-indent:none; padding:6px 5px 3px 25px; white-space:nowrap; margin:0 0 0 8px; width:130px; overflow:hidden;}
#adminMenuContent h3 a { color:#555555; text-decoration:none; }
#adminMenuContent h3 span.expandButton { float:right; height:16px; overflow:hidden; }
#adminMenuContent h3.summary { background:url("../images/icon_summary.gif") no-repeat 3px 3px; background-color:#FFFFFF; margin-top:0px; border-top:1px solid #E3E3E2; }
#adminMenuContent h3.service { background:url("../images/icon_service_module.gif") no-repeat 3px 5px; background-color:#FFFFFF; }
#adminMenuContent h3.manager { background:url("../images/icon_manager_module.gif") no-repeat 3px 5px; background-color:#FFFFFF;}
#adminMenuContent h3.utility { background:url("../images/icon_utility_module.gif") no-repeat 3px 5px; background-color:#FFFFFF;}
#adminMenuContent h3.accessory { background:url("../images/icon_accessory_module.gif") no-repeat 3px 5px; background-color:#FFFFFF;}
#adminMenuContent h3.base { background:url("../images/icon_base_module.gif") no-repeat 3px 5px; background-color:#FFFFFF;}
#header { position:relative; height:71px; background:url(../images/headerBg.gif) repeat-x; overflow:hidden; clear:both; z-index:99;}
#header h1 { float:left; width:180px; height:71px; position:relative; background:url(../images/h1_bg.gif) no-repeat;}
#header h1 img { position:absolute; top:29px; left:29px;}
#header #logout { width:470px; height:71px; float:right; background:url(../images/headerBgEnd.png) no-repeat right top;}
#header #logout a { float:right; position:relative; top:29px; right:24px;}
#adminMenuContent ul { width:170px; overflow:hidden; }
#adminMenuContent ul li { background-color:#F8F6F3; list-style:none; padding:5px 10px 3px 10px; margin-left:8px; white-space:nowrap; overflow:hidden; color:#888785; border-bottom:1px solid #E3E3E2; cursor:pointer; }
#adminMenuContent ul li:hover { background-color:#EFE6D3; border-left:1px solid #E3E3E2; border-right:1px solid #E3E3E2;}
#adminMenuContent li.on { background-color:#EFE6D3; border-left:1px solid #E3E3E2; border-right:1px solid #E3E3E2;}
#adminMenuContent ul li a { text-decoration:none; color:#888785; }
#adminMenuContent ul li:hover a { color:#000000; }
#adminMenuContent li.on a { color:#000000; }
/* ----- Header | End ----- */
#cBody { clear:both; padding:0px 18px 0px 198px; margin:-71px 0 -38px 0; overflow:hidden; background:#ffffff url(../images/menuBg.gif) repeat-y;}
#gNavigation { float:left; width:180px; padding:71px 0 200px 0; margin-right:18px; margin-left:-198px; _margin-left:-99px; background:#ffffff url(../images/menuBg.gif) repeat-y;}
#gNavigation h2 { }
#gNavigation ul { width:180px;}
#gNavigation ul li { width:180px; height:30px; background:url(../images/menuBg.png) no-repeat left top; } /* behavior:url(./common/js/iePngFix.htc);}*/
#gNavigation ul li.on { background-position:left -30px; margin-top:-2px; _background:url(../images/menuBgIeFix.png) no-repeat left top;}
#gNavigation ul li.on a { color:#ffffff; font-weight:bold;}
#gNavigation ul li a { display:block; padding:9px 0 0 28px; height:21px; color:#606060;}
#gNavigation ul li a:hover { background:url(../images/menuBgIeFix.png) no-repeat; margin-top:-2px; font-weight:bold; color:#ffffff; text-decoration:none;}
#gNavigation ul li.on a:hover { background:url(../images/menuBgIeFix.png) no-repeat; margin-top:0; font-weight:bold; color:#ffffff; text-decoration:none;}
#gNavigation .menuEdit { width:180px; height:30px; text-align:center; margin-top:1em;}
#content { float:left; width:100%; padding:71px 0 100px 0;}
/* ----- Footer | Start ----- */
#footer { width:100%; clear:both; height:38px; margin-bottom:-38px; overflow:hidden; background:url(../images/footerBg.gif) repeat-x left 3px;}
#footer .footerLine { height:3px; width:100%; float:left; clear:both;}
#footer .footerLeft { float:left;}
#footer address { float:right; width:350px; height:35px; background:url(../images/addressBg.gif) no-repeat right top;}
#footer address img { margin:15px 10px 0 0}
#footer address .version { font:.8em Tahoma; color:#ffffff;}
#footer address .version strong { font:bold 1em Tahoma; color:#ff0000; }
/* ----- Footer | End ----- */
#adminLayoutCopyright { width:1000px; text-align:right; margin-top:10px; font-size:.8em; font-family:tahoma; color:#888888; padding-bottom:50px; }
#adminLayoutCopyright a { color:#666666; text-decoration:none; }
#adminLayoutCopyright a span.red { color:#9A1827; }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 908 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 617 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 160 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 343 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 354 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 362 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 179 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 580 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View file

@ -3,8 +3,10 @@
<h3>{$lang->welcome_to_zeroboard_xe}</h3>
<table cellspacing="0" class="tableType4">
<col width="200" />
<div class="gap1"></div>
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<caption>{$lang->env_information}</caption>
<!--@if($current_version < $released_version)-->
@ -30,8 +32,8 @@
</table>
<form action="./" method="get" onsubmit="return procFilter(this, update_env_config);">
<table cellspacing="0" class="tableType4">
<col width="200" />
<table cellspacing="0" class="adminTable">
<col width="150" />
<col />
<caption>{$lang->env_setup}</caption>
<tr>
@ -52,10 +54,10 @@
<th scope="row">Lang</th>
<td>
<select name="lang_type" onchange="doChangeLangType(this)">
<option value="{$lang_type}">{$lang_type}</option>
<!--@foreach($lang_supported as $val)-->
<!--@if($val != $lang_type)-->
<option value="{$val}">{$val}</option>
<option value="{$lang_type}">{$lang_supported[$lang_type]}</option>
<!--@foreach($lang_supported as $key => $val)-->
<!--@if($key != $lang_type)-->
<option value="{$key}">{$val}</option>
<!--@end-->
<!--@end-->
</select>
@ -73,30 +75,27 @@
<p>{$lang->about_time_zone}</p>
</td>
</tr>
<tr>
<th colspan="2" class="button">
<span class="button"><input type="button" value="{$lang->cmd_remake_cache}" onclick="doRecompileCacheFile(); return false;"/></span>
<span class="button"><input type="submit" value="{$lang->cmd_save}" /></span>
</th>
</tr>
</table>
<div class="fl tLeft gap1">
<span class="button"><input type="button" value="{$lang->cmd_remake_cache}" onclick="doRecompileCacheFile(); return false;"/></span>
</div>
<div class="fr tRight gap1">
<span class="button"><input type="submit" value="{$lang->cmd_save}" /></span>
</div>
</form>
<div class="admin_news clear">
<!--@if($news)-->
<table cellspacing="0" class="tableType1">
<table cellspacing="0" class="adminTable">
<col width="120" />
<col />
<caption>{$lang->newest_news}</caption>
<thead>
<tr>
<th scope="col">{$lang->title}</th>
<th scope="col">{$lang->regdate}</th>
</tr>
</thead>
<tbody>
<!--@foreach($news as $key => $val)-->
<tr>
<td class="left">&nbsp;<a href="{$val->url}" onclick="window.open(this.href);return false;">{$val->title}</a></td>
<td class="tahoma">{zdate($val->date,"Y-m-d H:i")}</td>
<th class="tahoma">{zdate($val->date,"Y-m-d H:i")}</th>
<td><a href="{$val->url}" onclick="window.open(this.href);return false;">{$val->title}</a></td>
</tr>
<!--@end-->
</tbody>
@ -106,27 +105,16 @@
<div class="admin_link">
<!-- 사용자 링크 -->
<table cellspacing="0" class="tableType3">
<col width="250" />
<col />
<table cellspacing="0" class="adminTable">
<caption>{$lang->zeroboard_xe_user_links}</caption>
<!--@foreach($lang->xe_user_links as $key => $val)-->
<tr>
<th scope="col">{$key}</th>
<td class="left blue"><a href="{$val}" onclick="winopen(this.href); return false;">{$val}</a></td>
<td><a href="{$val}" onclick="winopen(this.href); return false;">{$key}</a></td>
</tr>
<!--@end-->
</table>
<!-- 개발자 링크 -->
<table cellspacing="0" class="tableType3">
<col width="250" />
<col />
<caption>{$lang->zeroboard_xe_developer_links}</caption>
<!--@foreach($lang->xe_developer_links as $key => $val)-->
<tr>
<th scope="col">{$key}</th>
<td class="left blue"><a href="{$val}" onclick="winopen(this.href); return false;">{$val}</a></td>
<td><a href="{$val}" onclick="winopen(this.href); return false;">{$key}</a></td>
</tr>
<!--@end-->
</table>

View file

@ -11,6 +11,11 @@ function doDeleteShortCut(selected_module) {
procFilter(fo_obj, delete_shortcut);
}
// 캐시파일 모두 재 생성
function doRecompileCacheFile() {
exec_xml("admin","procAdminRecompileCacheFile");
}
// footer를 화면 크기에 맞춰 설정 (폐기)
//xAddEventListener(window, 'load', fixAdminLayoutFooter);
//xAddEventListener(window, 'resize', fixAdminLayoutFooter);
@ -18,19 +23,30 @@ function fixAdminLayoutFooter(height) {
return;
}
if(xIE6) {
xAddEventListener(window,'load',fixAdminNaviHeight);
function setMenuContentScale() {
var menuHeight = xHeight("adminMenuContent")+70;
var bodyHeight = xHeight("adminContentBody");
if(bodyHeight>menuHeight) xHeight("adminMenuContent", bodyHeight-70);
else if(bodyHeight<menuHeight) xHeight("adminContentBody", menuHeight);
}
function fixAdminNaviHeight() {
var naviHeight = xHeight('gNavigation');
var bodyHeight = xHeight('content');
if(naviHeight<bodyHeight) xHeight('gNavigation',bodyHeight);
else xHeight('content',naviHeight);
setTimeout(fixAdminNaviHeight, 500);
}
// 메뉴 여닫기
function toggleAdminMenu(id) {
var obj = xGetElementById(id);
var rh = 0;
if(obj.style.display == 'none') {
obj.style.display = 'block';
rh = xHeight(obj);
xHeight("adminMenuContent", xHeight('adminMenuContent')+rh);
} else {
rh = xHeight(obj);
obj.style.display = 'none';
xHeight("adminMenuContent", xHeight('adminMenuContent')-rh);
}
// 캐시파일 모두 재 생성
function doRecompileCacheFile() {
exec_xml("admin","procAdminRecompileCacheFile");
var expire = new Date();
expire.setTime(expire.getTime()+ (7000 * 24 * 3600000));
xSetCookie(id, obj.style.display, expire);
setMenuContentScale();
}

View file

@ -1,34 +1,58 @@
<!--%import("css/admin_layout.css")-->
<!--%import("js/admin.js")-->
<div id="header">
<h1><a href="{getUrl('','module','admin')}"><img src="./images/h1.png" alt="Zeroboard XE" width="128" height="20" class="iePngFix" /></a></h1>
<div id="logout" class="iePngFix">
<a href="{getUrl('','module','admin','act','dispMemberLogout')}"><img src="./images/buttonLogout.png" alt="{$lang->cmd_logout}" width="53" height="10" class="iePngFix" /></a>
</div>
</div>
<div id="adminLayout">
<div id="adminMenuContent">
<div id="cBody">
<div class="adminInfoBox">
<div class="adminInfo">
<div class="fl">{$lang->admin_info}</div>
<div class="expandButton"><a href="#" onclick="toggleDisplay('adminMemberInfo','block'); return false;"><img src="./images/expand.gif" alt="toggle" /></a></div>
</div>
<div id="adminMemberInfo" style="display:none;">
{$logged_info->nick_name} ({$logged_info->user_id})
</div>
<div class="logoutButton">
<a href="{getUrl('','module','admin','act','dispMemberLogout')}" class="button"><span>{$lang->cmd_logout}</span></a>
</div>
</div>
<div id="gNavigation">
<h2><img src="./images/h2.gif" alt="Administration" width="180" height="45" /></h2>
<ul>
<!--@foreach($shortcut_list as $key => $val)-->
<li <!--@if($running_module==$val->module)-->class="on"<!--@end-->><a href="{getUrl('','module','admin','act',$val->default_act)}">{cut_str($val->title,14,'..')}</a></li>
<h3 class="summary">
<span class="fl"><a href="{getUrl('','module','admin')}">{$lang->admin_index}</a></span>
</h3>
<!--@foreach($lang->module_category_title as $key => $val)-->
<h3 class="{$key}">
<span class="fl"><a href="#" onclick="toggleAdminMenu('amm_{$key}'); return false;">{$val}</a></span>
<span class="expandButton"><a href="#" onclick="toggleAdminMenu('amm_{$key}'); return false;"><img src="./images/expand.gif" alt="toggle" /></a></span>
</h3>
<ul id="amm_{$key}" style="display:{$_COOKIE['amm_'.$key]}">
<!--@foreach($installed_module_list as $k => $v)-->
<!--@if($v->category == $key)-->
<!--@if($v->admin_index_act)-->
<li <!--@if($running_module==$v->module)-->class="on"<!--@end--> onclick="location.href='{getUrl('','module','admin','act',$v->admin_index_act)}'; return false;">
<a href="{getUrl('','module','admin','act',$v->admin_index_act)}">{$v->title}</a>
</li>
<!--@end-->
<!--@end-->
<!--@end-->
</ul>
<div class="menuEdit">
<a href="{getUrl('','module','admin','act','dispAdminShortCut')}" class="button"><span>{$lang->cmd_shortcut_management}</span></a>
</div>
</ul>
<!--@end-->
</div>
<div id="content">{$content}</div>
<div id="adminContentBody">{$content}</div>
<div class="clear"></div>
</div>
<div id="footer">
<img src="./images/footerLine.gif" alt="" class="footerLine" /><img src="./images/footerLeft.gif" alt="" width="350" height="35" class="footerLeft" />
<address>
<a href="http://www.zeroboard.com"><img src="./images/address.gif" alt="Copyright 2000, Zeroboard All Rights Reserved. Version" width="255" height="7" /><span class="version"><strong>XE</strong> Beta</span></a>
</address>
<div id="adminLayoutBottom"></div>
<div id="adminLayoutCopyright">
© 2007 <a href="http://www.zeroboard.com"><strong>zeroboard <span class="red">XE</span></strong></a>
</div>
<script type="text/javascript">
xAddEventListener(window,"load",setMenuContentScale);
</script>

View file

@ -136,13 +136,15 @@
}
// serialize하여 저장
$obj->category_xml_file = sprintf("./files/cache/blog_category/%s.xml.php", $module_srl);
$oDocumentModel = &getModel('document');
$obj->category_xml_file = $oDocumentModel->getCategoryXmlFile($module_srl);
$obj->mid = $module_info->mid;
$skin_vars = serialize($obj);
$oModuleController->updateModuleSkinVars($module_srl, $skin_vars);
// 레이아웃 확장변수 수정
$layout_args->mid = $obj->mid;
$layout_args->extra_vars = $skin_vars;
$layout_args->layout_srl = $module_srl;
$oLayoutAdminController = &getAdminController('layout');
@ -163,7 +165,7 @@
**/
function procBlogAdminInsertBlog() {
// 일단 입력된 값들을 모두 받아서 db 입력항목과 그외 것으로 분리
$args = Context::gets('module_srl','module_category_srl','blog_name','skin','browser_title','description','is_default','header_text','footer_text','admin_id','open_rss');
$args = Context::gets('module_srl','module_category_srl','blog_name','skin','browser_title','description','is_default','header_text','footer_text','admin_id');
$args->module = 'blog';
$args->mid = $args->blog_name;
unset($args->blog_name);
@ -175,6 +177,19 @@
unset($extra_var->page);
unset($extra_var->blog_name);
// 확장변수(20개로 제한된 고정 변수) 체크
$user_defined_extra_vars = array();
foreach($extra_var as $key => $val) {
if(substr($key,0,11)!='extra_vars_') continue;
preg_match('/^extra_vars_([0-9]+)_(.*)$/i', $key, $matches);
if(!$matches[1] || !$matches[2]) continue;
$user_defined_extra_vars[$matches[1]]->{$matches[2]} = $val;
unset($extra_var->{$key});
}
for($i=1;$i<=20;$i++) if(!$user_defined_extra_vars[$i]->name) unset($user_defined_extra_vars[$i]);
$extra_var->extra_vars = $user_defined_extra_vars;
$oDB = &DB::getInstance();
$oDB->begin();
@ -235,9 +250,9 @@
}
// 기본 카테고리 등록
$category_args->module_srl = $module_srl;
$category_args->module_srl = $args->module_srl;
$category_args->category_srl = getNextSequence();
$category_args->name = 'Story';
$category_args->title = 'Story';
$category_args->expand = 'N';
$this->procBlogAdminInsertCategory($category_args);
@ -251,6 +266,7 @@
}
// 레이아웃 수정
$layout_args->mid = $args->mid;
$layout_args->layout_srl = $layout_args->module_srl = $module_srl = $output->get('module_srl');
$layout_args->title = $args->browser_title;
$layout_args->layout_path = sprintf('./modules/blog/skins/%s/layout.html', $args->skin);
@ -272,6 +288,58 @@
$this->setMessage($msg_code);
}
/**
* @brief 카테고리 추가
**/
function procBlogAdminInsertCategory($args = null) {
// 입력할 변수 정리
if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','title','expand','group_srls');
if($args->expand !="Y") $args->expand = "N";
$args->group_srls = str_replace('|@|',',',$args->group_srls);
$args->parent_srl = (int)$args->parent_srl;
$oDocumentController = &getController('document');
$oDocumentModel = &getModel('document');
$oDB = &DB::getInstance();
$oDB->begin();
// 이미 존재하는지를 확인
if($args->category_srl) {
$category_info = $oDocumentModel->getCategory($args->category_srl);
if($category_info->category_srl != $args->category_srl) $args->category_srl = null;
}
// 존재하게 되면 update를 해준다
if($args->category_srl) {
$output = $oDocumentController->updateCategory($args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 존재하지 않으면 insert를 해준다
} else {
$output = $oDocumentController->insertCategory($args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
}
// XML 파일을 갱신하고 위치을 넘겨 받음
$xml_file = $oDocumentController->makeCategoryXmlFile($args->module_srl);
$oDB->commit();
$this->add('xml_file', $xml_file);
$this->add('module_srl', $args->module_srl);
$this->add('category_srl', $args->category_srl);
$this->add('parent_srl', $args->parent_srl);
}
/**
* @brief 블로그 삭제
**/
@ -291,7 +359,6 @@
// 레이아웃 삭제
$layout_args->layout_srl = $layout_args->module_srl = $module_srl;
$oLayoutAdminController = &getAdminController('layout');
$output = $oLayoutAdminController->deleteLayout($layout_args);
if(!$output->toBool()) {
@ -299,15 +366,6 @@
return $output;
}
// 블로그 카테고리 삭제
$category_args->module_srl = $module_srl;
$output = executeQuery('blog.deleteCategories', $category_args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
@unlink( sprintf('./files/cache/blog_category/%d.xml.php', $module_srl) );
$oDB->commit();
$this->add('module','blog');
@ -315,69 +373,6 @@
$this->setMessage('success_deleted');
}
/**
* @brief 카테고리 추가
**/
function procBlogAdminInsertCategory($args = null) {
// 입력할 변수 정리
if(!$args) $args = Context::gets('module_srl','category_srl','parent_srl','name','expand','group_srls');
if($args->expand !="Y") $args->expand = "N";
$args->group_srls = str_replace('|@|',',',$args->group_srls);
$args->parent_srl = (int)$args->parent_srl;
$oDB = &DB::getInstance();
$oDB->begin();
// 이미 존재하는지를 확인
$oBlogModel = &getModel('blog');
$category_info = $oBlogModel->getCategoryInfo($args->category_srl);
// 존재하게 되면 update를 해준다
if($category_info->category_srl == $args->category_srl) {
$output = executeQuery('blog.updateCategory', $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
$oDocumentController = &getAdminController('document');
$document_args->category_srl = $args->category_srl;
$document_args->title = $args->name ;
$output = $oDocumentController->updateCategory($document_args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
// 존재하지 않으면 insert를 해준다
} else {
$args->listorder = -1*$args->category_srl;
$output = executeQuery('blog.insertCategory', $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
$oDocumentController = &getAdminController('document');
$output = $oDocumentController->insertCategory($args->module_srl, $args->name, $args->category_srl);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
}
// XML 파일을 갱신하고 위치을 넘겨 받음
$xml_file = $this->makeXmlFile($args->module_srl);
$oDB->commit();
$this->add('xml_file', $xml_file);
$this->add('module_srl', $args->module_srl);
$this->add('category_srl', $args->category_srl);
$this->add('parent_srl', $args->parent_srl);
}
/**
* @brief 카테고리 삭제
**/
@ -388,32 +383,17 @@
$oDB = &DB::getInstance();
$oDB->begin();
$oBlogModel = &getModel('blog');
$oDocumentModel = &getModel('document');
// 원정보를 가져옴
$category_info = $oBlogModel->getCategoryInfo($args->category_srl);
$category_info = $oDocumentModel->getCategory($args->category_srl);
if($category_info->parent_srl) $parent_srl = $category_info->parent_srl;
// 자식 노드가 있는지 체크하여 있으면 삭제 못한다는 에러 출력
$output = executeQuery('blog.getChildCategoryCount', $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
if($output->data->count>0) {
$oDB->rollback();
return new Object(-1, 'msg_cannot_delete_for_child');
}
if($oDocumentModel->getCategoryChlidCount($args->category_srl)) return new Object(-1, 'msg_cannot_delete_for_child');
// DB에서 삭제
$output = executeQuery("blog.deleteCategory", $args);
if(!$output->toBool()) {
$oDB->rollback();
return $output;
}
$oDocumentController = &getAdminController('document');
$oDocumentController = &getController('document');
$output = $oDocumentController->deleteCategory($args->category_srl);
if(!$output->toBool()) {
$oDB->rollback();
@ -421,7 +401,7 @@
}
// XML 파일을 갱신하고 위치을 넘겨 받음
$xml_file = $this->makeXmlFile($args->module_srl);
$xml_file = $oDocumentController->makeCategoryXmlFile($args->module_srl);
$oDB->commit();
@ -437,26 +417,28 @@
$source_category_srl = Context::get('source_category_srl');
$target_category_srl = Context::get('target_category_srl');
$oBlogModel = &getModel('blog');
$target_category = $oBlogModel->getCategoryInfo($target_category_srl);
$source_category = $oBlogModel->getCategoryInfo($source_category_srl);
$oDocumentModel = &getModel('document');
$oDocumentController = &getController('document');
$target_category = $oDocumentModel->getCategory($target_category_srl);
$source_category = $oDocumentModel->getCategory($source_category_srl);
// source_category에 target_category_srl의 parent_srl, listorder 값을 입력
$source_args->category_srl = $source_category_srl;
$source_args->parent_srl = $target_category->parent_srl;
$source_args->listorder = $target_category->listorder;
$output = executeQuery('blog.updateCategoryParent', $source_args);
$output = $oDocumentController->updateCategory($source_args);
if(!$output->toBool()) return $output;
// target_category의 listorder값을 +1해 준다
$target_args->category_srl = $target_category_srl;
$target_args->parent_srl = $target_category->parent_srl;
$target_args->listorder = $target_category->listorder -1;
$output = executeQuery('blog.updateCategoryParent', $target_args);
$output = $oDocumentController->updateCategory($target_args);
if(!$output->toBool()) return $output;
// xml파일 재생성
$xml_file = $this->makeXmlFile($target_category->module_srl);
$xml_file = $oDocumentController->makeCategoryXmlFile($source_category->module_srl);
// return 변수 설정
$this->add('xml_file', $xml_file);
@ -474,104 +456,11 @@
$module_srl = Context::get('module_srl');
// xml파일 재생성
$xml_file = $this->makeXmlFile($module_srl);
$oDocumentController = &getController('document');
$xml_file = $oDocumentController->makeCategoryXmlFile($module_srl);
// return 값 설정
$this->add('xml_file',$xml_file);
}
/**
* @brief 블로그 카테고리를 xml파일로 저장
**/
function makeXmlFile($module_srl) {
// xml파일 생성시 필요한 정보가 없으면 그냥 return
if(!$module_srl) return;
// 캐시 파일의 이름을 지정
$xml_file = sprintf("./files/cache/blog_category/%s.xml.php", $module_srl);
// 모듈정보를 구해옴
$oModuleModel = &getModel('module');
$this->module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
// DB에서 module_srl 에 해당하는 메뉴 아이템 목록을 listorder순으로 구해옴
$oBlogModel = &getModel('blog');
$list = $oBlogModel->getCategoryList($module_srl);
// 구해온 데이터가 없다면 노드데이터가 없는 xml 파일만 생성
if(!$list) {
$xml_buff = "<root />";
FileHandler::writeFile($xml_file, $xml_buff);
return $xml_file;
}
// 구해온 데이터가 하나라면 array로 바꾸어줌
if(!is_array($list)) $list = array($list);
// 루프를 돌면서 tree 구성
$list_count = count($list);
for($i=0;$i<$list_count;$i++) {
$node = $list[$i];
$category_srl = $node->category_srl;
$parent_srl = $node->parent_srl;
$tree[$parent_srl][$category_srl] = $node;
}
// 세션 디렉토리 변경 구문
$php_script = "";
if(!ini_get('session.auto_start')) {
if(!is_dir("./files/sessions")) {
FileHandler::makeDir("./files/sessions");
@chmod("./files/sessions", 0777);
}
$php_script = 'session_cache_limiter("no-cache, must-revalidate"); ini_set("session.gc_maxlifetime", "18000"); if(is_dir("../../sessions")) session_save_path("../../sessions/"); session_start();';
}
// xml 캐시 파일 생성
$xml_buff = sprintf('<?php %s header("Content-Type: text/xml; charset=UTF-8"); header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); @session_start(); ?><root>%s</root>', $php_script, $this->getXmlTree($tree[0], $tree));
// 파일 저장
FileHandler::writeFile($xml_file, $xml_buff);
return $xml_file;
}
/**
* @brief array로 정렬된 노드들을 parent_srl을 참조하면서 recursive하게 돌면서 xml 데이터 생성
* 메뉴 xml파일은 node라는 tag가 중첩으로 사용되며 xml doc으로 관리자 페이지에서 메뉴를 구성해줌\n
* (tree_menu.js 에서 xml파일을 바로 읽고 tree menu를 구현)
**/
function getXmlTree($source_node, $tree) {
if(!$source_node) return;
foreach($source_node as $category_srl => $node) {
$child_buff = "";
// 자식 노드의 데이터 가져옴
if($category_srl && $tree[$category_srl]) $child_buff = $this->getXmlTree($tree[$category_srl], $tree);
// 변수 정리
$name = str_replace(array('&','"','<','>'),array('&amp;','&quot;','&lt;','&gt;'),$node->name);
$expand = $node->expand;
$group_srls = $node->group_srls;
// node->group_srls값이 있으면
if($group_srls) $group_check_code = sprintf('($_SESSION["is_admin"]==true||(is_array($_SESSION["group_srls"])&&count(array_intersect($_SESSION["group_srls"], array(%s)))))',$group_srls);
else $group_check_code = "true";
$attribute = sprintf(
'node_srl="%s" text="<?=(%s?"%s":"")?>" url="%s" expand="%s" ',
$category_srl,
$group_check_code,
$name,
getUrl('','mid',$this->module_info->mid,'category',$category_srl),
$expand
);
if($child_buff) $buff .= sprintf('<node %s>%s</node>', $attribute, $child_buff);
else $buff .= sprintf('<node %s />', $attribute);
}
return $buff;
}
}
?>

View file

@ -28,22 +28,22 @@
$group_list = $oMemberModel->getGroups();
Context::set('group_list', $group_list);
$oBlogModel = &getModel('blog');
$oDocumentModel = &getModel('document');
// parent_srl이 있고 category_srl 이 없으면 하부 메뉴 추가임
if(!$category_srl && $parent_srl) {
// 상위 메뉴의 정보를 가져옴
$parent_info = $oBlogModel->getCategoryInfo($parent_srl);
$parent_info = $oDocumentModel->getCategory($parent_srl);
// 추가하려는 메뉴의 기본 변수 설정
$category_info->category_srl = getNextSequence();
$category_info->parent_srl = $parent_srl;
$category_info->parent_category_name = $parent_info->name;
$category_info->parent_category_title = $parent_info->title;
// root에 메뉴 추가하거나 기존 메뉴의 수정일 경우
} else {
// category_srl 이 있으면 해당 메뉴의 정보를 가져온다
if($category_srl) $category_info = $oBlogModel->getCategoryInfo($category_srl);
if($category_srl) $category_info = $oDocumentModel->getCategory($category_srl);
// 찾아진 값이 없다면 신규 메뉴 추가로 보고 category_srl값만 구해줌
if(!$category_info->category_srl) {

Some files were not shown because too many files have changed in this diff Show more