diff --git a/addons/counter/counter.addon.php b/addons/counter/counter.addon.php index fc2bed4ae..17cb19680 100644 --- a/addons/counter/counter.addon.php +++ b/addons/counter/counter.addon.php @@ -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(); ?> diff --git a/addons/member_extra_info/member_extra_info.addon.php b/addons/member_extra_info/member_extra_info.addon.php index 55c0ebe50..372476e3e 100644 --- a/addons/member_extra_info/member_extra_info.addon.php +++ b/addons/member_extra_info/member_extra_info.addon.php @@ -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'); diff --git a/addons/point/point.addon.php b/addons/point/point.addon.php index 1f5460140..fb42f882e 100644 --- a/addons/point/point.addon.php +++ b/addons/point/point.addon.php @@ -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; ?> diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 5b9577b42..cbc33bf73 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -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; } /** diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index 9624d0b70..13eec45ae 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -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); diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index f70048522..ed1b4624a 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -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); diff --git a/classes/db/DBMysql_innodb.class.php b/classes/db/DBMysql_innodb.class.php index a69773b7d..5521bca4c 100644 --- a/classes/db/DBMysql_innodb.class.php +++ b/classes/db/DBMysql_innodb.class.php @@ -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); diff --git a/classes/db/DBSqlite2.class.php b/classes/db/DBSqlite2.class.php index 8ea701a61..2449b708f 100644 --- a/classes/db/DBSqlite2.class.php +++ b/classes/db/DBSqlite2.class.php @@ -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); diff --git a/classes/db/DBSqlite3_pdo.class.php b/classes/db/DBSqlite3_pdo.class.php index dea4dff7b..b7aa27051 100644 --- a/classes/db/DBSqlite3_pdo.class.php +++ b/classes/db/DBSqlite3_pdo.class.php @@ -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); diff --git a/classes/display/DisplayHandler.class.php b/classes/display/DisplayHandler.class.php index db6019f28..8a0946267 100644 --- a/classes/display/DisplayHandler.class.php +++ b/classes/display/DisplayHandler.class.php @@ -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; } diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 47e49e2ef..79e083e3d 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -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); diff --git a/classes/module/ModuleHandler.class.php b/classes/module/ModuleHandler.class.php index 34a646126..1660ce888 100644 --- a/classes/module/ModuleHandler.class.php +++ b/classes/module/ModuleHandler.class.php @@ -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(); + } } ?> diff --git a/classes/optimizer/Optimizer.class.php b/classes/optimizer/Optimizer.class.php index 2ff8ab3ca..5c8ffe41d 100644 --- a/classes/optimizer/Optimizer.class.php +++ b/classes/optimizer/Optimizer.class.php @@ -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; } diff --git a/classes/widget/WidgetHandler.class.php b/classes/widget/WidgetHandler.class.php index 005ee2398..00cb73109 100644 --- a/classes/widget/WidgetHandler.class.php +++ b/classes/widget/WidgetHandler.class.php @@ -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); diff --git a/common/css/button.css b/common/css/button.css index a89a8fb93..fb4ae9dbb 100644 --- a/common/css/button.css +++ b/common/css/button.css @@ -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)); } diff --git a/common/css/default.css b/common/css/default.css index f526befd6..567e73539 100644 --- a/common/css/default.css +++ b/common/css/default.css @@ -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;} diff --git a/common/js/common.js b/common/js/common.js index b3a07e38b..770282b6e 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -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 += ""+str+"
"; + if(icon) html += ""+str+"
"; + else html += ""+str+"
"; } } - loaded_member_menu_list[member_srl] = html; + loaded_popup_menu_list[menu_id] = html; } if(html) { // 레이어 출력 - xInnerHtml('membermenuarea', "
"+html+"
"); + xInnerHtml('popup_menu_area', "
"+html+"
"); 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'); diff --git a/common/js/tree_menu.js b/common/js/tree_menu.js index ca2426694..7b2d6b39d 100644 --- a/common/js/tree_menu.js +++ b/common/js/tree_menu.js @@ -239,7 +239,7 @@ function drawNode(parent_node, menu_id) { // html 작성 - html += '
'; + html += '
'; if(hasChild) html+= ''; else html+= ''; diff --git a/common/lang/en.lang.php b/common/lang/en.lang.php index 2c3955ab6..7c1bb2823 100644 --- a/common/lang/en.lang.php +++ b/common/lang/en.lang.php @@ -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?'; diff --git a/common/lang/es.lang.php b/common/lang/es.lang.php index 0d1d5d132..da9ec15fc 100644 --- a/common/lang/es.lang.php +++ b/common/lang/es.lang.php @@ -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?'; diff --git a/common/lang/fr.lang.php b/common/lang/fr.lang.php index a19486c0d..2d6eed408 100644 --- a/common/lang/fr.lang.php +++ b/common/lang/fr.lang.php @@ -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?'; diff --git a/common/lang/jp.lang.php b/common/lang/jp.lang.php index 839f363cf..b2fb601b4 100644 --- a/common/lang/jp.lang.php +++ b/common/lang/jp.lang.php @@ -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 = '登録しますか?'; diff --git a/common/lang/ko.lang.php b/common/lang/ko.lang.php index 1bdffd515..3d603aa46 100644 --- a/common/lang/ko.lang.php +++ b/common/lang/ko.lang.php @@ -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 = '등록하시겠습니까?'; diff --git a/common/lang/lang.info b/common/lang/lang.info new file mode 100644 index 000000000..c91900c85 --- /dev/null +++ b/common/lang/lang.info @@ -0,0 +1,5 @@ +ko,한국어 +en,English +zh-CN,中文 +jp,日本語 +es,Español diff --git a/common/lang/zh-CN.lang.php b/common/lang/zh-CN.lang.php index a95f91c3f..970cdc4b3 100644 --- a/common/lang/zh-CN.lang.php +++ b/common/lang/zh-CN.lang.php @@ -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 = '确定要提交吗?'; diff --git a/common/tpl/calendar.php b/common/tpl/calendar.php index b2bcef5d4..9d9d1035a 100644 --- a/common/tpl/calendar.php +++ b/common/tpl/calendar.php @@ -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