diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index 416de9f5a..65f4a9d20 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -4,6 +4,7 @@ BlogAPI アドオン BlogAPI Addon for BlogAPI + Addon für BlogAPI Addon para BlogAPI Аддон для BlogAPI @@ -11,6 +12,7 @@ Zero zero zero + zero zero zero @@ -36,6 +38,12 @@ By using this option, it lets the RSD tag to be exposed to each module. URL to the api is http://setup_path/module_name/api. RSD tag and the api will work only if u use this addon. + + + Diese blogApi addon metaWeblog unterstützt. + Durch die Verwendung dieser Option, die es ermöglicht RSD Tag ausgesetzt werden jedes Modul. + URL der api ist http://setup_path/module_name/api. + RSD-Tag und dem API arbeiten und nur dann, wenn Sie über dieses Addon. Este blogApi addon soporta el metaWeblog. diff --git a/addons/counter/conf/info.xml b/addons/counter/conf/info.xml index cc710ba06..4c95a6a91 100644 --- a/addons/counter/conf/info.xml +++ b/addons/counter/conf/info.xml @@ -4,6 +4,7 @@ 接続カウンターアドオン 网站访问统计 Counter Addon + Counter Addon Addon contador básico Аддон для базового счетчика @@ -11,6 +12,7 @@ Zero zero zero + zero zero zero @@ -28,6 +30,10 @@ This addon logs access information based on the basic counter module within Zeroboard XE. The access information will be collected only if you turn on this addon. + + + Dieses Addon-Logs Zugriff auf Informationen basiert auf den grundlegenden Zähler-Modul innerhalb Zeroboard XE. + Der Zugang zu Informationen wird nur erhoben, wenn Sie über dieses Addon. Este addon contador básico de Zeroboard XE permite llevar la información de acceso a la página web de los visitantes. diff --git a/addons/lemonpen/conf/info.xml b/addons/lemonpen/conf/info.xml index a71fc7a33..2c68f7de2 100644 --- a/addons/lemonpen/conf/info.xml +++ b/addons/lemonpen/conf/info.xml @@ -1,17 +1,20 @@ LemonPen XE 애드온 + LemonPen XE插件 LemonPen XE Addon LemonPen XE addon LemonPen XE Addon LemonPen XE アドオン zero + zero zero zero zero zero 활성화 하시면 레몬펜을 사이트에 달 수 있습니다. + 要想在网站使用LemonPen插件,请将此插件激活。 You can insert LemonPen to the site when you enable this. Puede insertar LemonPen al sitio cuando este se activa. Вы можете вставить LemonPen к месту, когда вы позволили это. @@ -20,11 +23,13 @@ sid + sid sid sid sid sid 레몬펜에서 사이트 등록시 발급받은 sid값을 입력해주세요. + 请输入注册LemonPen网站时,发放的sid值。 Please input sid value that you got after registering at the LemonPen website. Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen. Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen. diff --git a/addons/member_extra_info/conf/info.xml b/addons/member_extra_info/conf/info.xml index 94dd2e70b..49621abde 100644 --- a/addons/member_extra_info/conf/info.xml +++ b/addons/member_extra_info/conf/info.xml @@ -3,7 +3,7 @@ 사용자 추가 정보 및 커뮤니케이션 기능 활성화 会員情報・コミュニティアドオン 用户扩展信息 - Extra Member Information and Communication. + Activation of Member's Additional Information and Communication Function. Addon para activar la función de la Información addcional del usuario y de la comunicación. Аддон для предоставления дополнительной информации о пользователях и коммуникации diff --git a/addons/rainbow_link/conf/info.xml b/addons/rainbow_link/conf/info.xml index 0e010ad3d..88e79ccfc 100644 --- a/addons/rainbow_link/conf/info.xml +++ b/addons/rainbow_link/conf/info.xml @@ -1,7 +1,7 @@ 레인보우 링크 애드온 - Rainbow 链接 + Rainbow链接 Rainbow Link Addon Adición Enlace Arco Iris レインボーリンクアドオン diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 26d458e5c..a536543dd 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -714,18 +714,33 @@ /** * @brief js file을 추가 **/ - function addJsFile($file) { + function addJsFile($file, $optimized = true) { $oContext = &Context::getInstance(); - return $oContext->_addJsFile($file); + return $oContext->_addJsFile($file, $optimized); } /** * @brief js file을 추가 **/ - function _addJsFile($file) { + function _addJsFile($file, $optimized) { if(in_array($file, $this->js_files)) return; //if(!preg_match('/^http:\/\//i',$file)) $file = str_replace(realpath("."), ".", realpath($file)); - $this->js_files[] = $file; + $this->js_files[] = array('file' => $file, 'optimized' => $optimized); + } + + /** + * @brief array_unique와 동작은 동일하나 file 첨자에 대해서만 동작함 + **/ + function _getUniqueFileList($files) { + $filenames = array(); + $size = count($files); + for($i = 0; $i < $size; ++ $i) + { + if(in_array($files[$i]['file'], $filenames)) + unset($files[$i]); + $filenames[] = $files[$i]['file']; + } + return $files; } /** @@ -742,25 +757,25 @@ function _getJsFile() { require_once("./classes/optimizer/Optimizer.class.php"); $oOptimizer = new Optimizer(); - return $oOptimizer->getOptimizedFiles(array_unique($this->js_files), "js"); + return $oOptimizer->getOptimizedFiles($this->_getUniqueFileList($this->js_files), "js"); } /** * @brief CSS file 추가 **/ - function addCSSFile($file) { + function addCSSFile($file, $optimized = true, $media = 'all') { $oContext = &Context::getInstance(); - return $oContext->_addCSSFile($file); + return $oContext->_addCSSFile($file, $optimized, $media); } /** * @brief CSS file 추가 **/ - function _addCSSFile($file) { + function _addCSSFile($file, $optimized, $media) { if(in_array($file, $this->css_files)) return; //if(preg_match('/^http:\/\//i',$file)) $file = str_replace(realpath("."), ".", realpath($file)); - $this->css_files[] = $file; + $this->css_files[] = array('file' => $file, 'optimized' => $optimized, 'media' => $media); } /** @@ -777,7 +792,7 @@ function _getCSSFile() { require_once("./classes/optimizer/Optimizer.class.php"); $oOptimizer = new Optimizer(); - return $oOptimizer->getOptimizedFiles(array_unique($this->css_files), "css"); + return $oOptimizer->getOptimizedFiles($this->_getUniqueFileList($this->css_files), "css"); } /** diff --git a/classes/db/DBPostgresql.class.php b/classes/db/DBPostgresql.class.php index 6b9f8e062..70c6d5f5e 100644 --- a/classes/db/DBPostgresql.class.php +++ b/classes/db/DBPostgresql.class.php @@ -84,7 +84,7 @@ // 접속시도 $this->fd = @pg_connect($conn_string); - if(pg_connection_status($this->fd) != PGSQL_CONNECTION_OK) { + if(!$this->fd || pg_connection_status($this->fd) != PGSQL_CONNECTION_OK) { $this->setError(-1, "CONNECTION FAILURE"); return; } diff --git a/classes/db/DBSqlite2.class.php b/classes/db/DBSqlite2.class.php index a54b0b250..ef3e6fb2f 100644 --- a/classes/db/DBSqlite2.class.php +++ b/classes/db/DBSqlite2.class.php @@ -66,7 +66,7 @@ if(!$this->database) return; // 데이터 베이스 파일 접속 시도 - $this->fd = sqlite_open($this->database, 0666, &$error); + $this->fd = sqlite_open($this->database, 0666, $error); if(!file_exists($this->database) || $error) { $this->setError(-1,$error); $this->is_connected = false; diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 6138ea0b4..2cd29f1d5 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -152,6 +152,7 @@ if(!$fp) return; // 한글 파일이 있으면 한글파일 부분만 urlencode하여 처리 (iconv 필수) + /* $path = $url_info['path']; if(preg_match('/[\xEA-\xED][\x80-\xFF]{2}/', $path)&&function_exists('iconv')) { $path_list = explode('/',$path); @@ -162,8 +163,9 @@ $path = implode('/',$path_list); $url_info['path'] = $path; } + */ - $header = sprintf("GET %s?%s HTTP/1.0\r\nHost: %s\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query'], $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri()); + $header = sprintf("GET %s%s HTTP/1.0\r\nHost: %s\r\nAccept-Charset: utf-8;q=0.7,*;q=0.7\r\nReferer: %s://%s\r\nRequestUrl: %s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query']?'?'.$url_info['query']:'', $url_info['host'], $url_info['scheme'], $url_info['host'], Context::getRequestUri()); @fwrite($fp, $header); diff --git a/classes/optimizer/Optimizer.class.php b/classes/optimizer/Optimizer.class.php index a856c841f..5f0c1fceb 100644 --- a/classes/optimizer/Optimizer.class.php +++ b/classes/optimizer/Optimizer.class.php @@ -22,31 +22,38 @@ } } + /** + * @brief 파일 목록 배열에서 optimized 첨자를 제거한 후 return + **/ + function _getOptimizedRemoved($files) { + foreach($files as $key => $val) unset($files[$key]['optimized']); + return $files; + } + /** * @brief optimize 대상 파일을 받아서 처리 후 optimize 된 파일이름을 return **/ function getOptimizedFiles($source_files, $type = "js") { - if(!is_array($source_files) || !count($source_files)) return; + if(!is_array($source_files) || !count($source_files)) return; - // $source_files의 역슬래쉬 경로를 슬래쉬로 변경 (윈도우즈 대비) - foreach($source_files as $key => $file) $source_files[$key] = str_replace("\\","/",$file); + // $source_files의 역슬래쉬 경로를 슬래쉬로 변경 (윈도우즈 대비) + foreach($source_files as $key => $file) $source_files[$key]['file'] = str_replace("\\","/",$file['file']); // 관리자 설정시 설정이 되어 있지 않으면 패스 $db_info = Context::getDBInfo(); - if($db_info->use_optimizer == 'N') return $source_files; + if($db_info->use_optimizer == 'N') return $this->_getOptimizedRemoved($source_files); // 캐시 디렉토리가 없으면 실행하지 않음 - if(!is_dir($this->cache_path)) return $source_files; + if(!is_dir($this->cache_path)) return $this->_getOptimizedRemoved($source_files); if(!count($source_files)) return; foreach($source_files as $file) { - if(!$file) continue; - $file = str_replace("\\","/",$file); - if(preg_match('/^http:\/\//i', $file) || $file == './common/css/button.css') $files[] = $file; + if(!$file || !$file['file']) continue; + if(empty($file['optimized']) || preg_match('/^https?:\/\//i', $file['file']) || $file['file'] == './common/css/button.css') $files[] = $file; else $targets[] = $file; } - if(!count($targets)) return $files; + if(!count($targets)) return $this->_getOptimizedRemoved($files); $optimized_info = $this->getOptimizedInfo($targets); @@ -55,10 +62,17 @@ $this->doOptimizedFile($path, $filename, $targets, $type); - $files[] = $path.'/'.$filename; + $files[] = array('file' => $path.'/'.$filename, 'media' => 'all'); + return $this->_getOptimizedRemoved($files); + } + + /** + * @brief 파일 목록 배열에서 file을 제외한 나머지 첨자를 제거하여 return + **/ + function _getOnlyFileList($files) { + foreach($files as $key => $val) $files[$key] = $val['file']; return $files; - } /** @@ -70,11 +84,11 @@ $count = count($files); $last_modified = 0; for($i=0;$i<$count;$i++) { - $mtime = filemtime($files[$i]); + $mtime = filemtime($files[$i]['file']); if($last_modified < $mtime) $last_modified = $mtime; } - $buff = implode("\n", $files); + $buff = implode("\n", $this->_getOnlyFileList($files)); return array(md5($buff), $last_modified); } @@ -102,16 +116,19 @@ **/ // 대상 파일의 내용을 구해오고 css 파일일 경우 url()내의 경로를 변경 foreach($targets as $file) { - $str = FileHandler::readFile($file); + $str = FileHandler::readFile($file['file']); $str = Context::convertEncodingStr($str); - // css 일경우 background:url() 변경 - if($type == "css") $str = $this->replaceCssPath($file, $str); + // css 일경우 background:url() 변경 / media 적용 + if($type == 'css') { + $str = $this->replaceCssPath($file['file'], $str); + if($file['media'] != 'all') $str = '@media '.$file['media'].' {'."\n".$str."\n".'}'; + } $content_buff .= $str."\n"; } - if($type == "css") $content_buff = '@charset "utf-8";'."\n".$content_buff; + if($type == 'css') $content_buff = '@charset "UTF-8";'."\n".$content_buff; $content_filename = substr($filename, 0, -4); FileHandler::writeFile($path.'/'.$content_filename, $content_buff); @@ -121,7 +138,7 @@ **/ // 확장자별 content-type 체크 if($type == 'css') $content_type = 'text/css'; - elseif($type == 'js') $content_type = 'application/x-javascript'; + elseif($type == 'js') $content_type = 'text/javascript'; // 캐시를 위한 처리 $unique = crc32($content_filename); @@ -154,7 +171,7 @@ if( preg_match("/MSIE 6.0/i",$_SERVER["HTTP_USER_AGENT"]) || strpos($_SERVER["HT header("Content-Encoding: gzip"); } -header("Content-Type: '.$content_type.'; charset=utf-8"); +header("Content-Type: '.$content_type.'; charset=UTF-8"); header("Date: '.substr(gmdate('r'), 0, -5).'GMT"); header("Expires: '.substr(gmdate('r', strtotime('+1 MONTH')), 0, -5).'GMT"); header("Cache-Control: private, max-age=2592000"); @@ -168,7 +185,6 @@ if(!$cached) { fpassthru($f); } else print $buff; } - ?>'; FileHandler::writeFile($path.'/'.$filename, $header_buff); } diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 46ce27ddb..c4c81f7cc 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -115,8 +115,8 @@ // 의 변경 $buff = preg_replace_callback('!<\!--@(.*?)-->!is', array($this, '_compileFuncToCode'), $buff); - // import xml filter/ css/ js/ 언어파일 - $buff = preg_replace_callback('!<\!--%import\(\"([^\"]*?)\"\)-->!is', array($this, '_compileImportCode'), $buff); + // import xml filter/ css/ js/ 언어파일 (media는 css에만 적용) + $buff = preg_replace_callback('!<\!--%import\(\"([^\"]*?)\"(,optimized\=(true|false)(,media\=\"([^\"]*)\")?)?\)-->!is', array($this, '_compileImportCode'), $buff); // 파일에 쓰기 전에 직접 호출되는 것을 방지 $buff = sprintf('%s%s%s','',"\n",$buff); @@ -259,6 +259,12 @@ $base_path = $this->tpl_path; $given_file = trim($matches[1]); if(!$given_file) return; + if(isset($matches[3])) + $optimized = strtolower(trim($matches[3])); + if(!$optimized) $optimized = 'true'; + if(isset($matches[5])) + $media = trim($matches[5]); + if(!$media) $media = 'all'; // given_file이 lang으로 끝나게 되면 언어팩을 읽도록 함 if(substr($given_file, -4)=='lang') { @@ -303,12 +309,12 @@ // css file case 'css' : $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized, $media); break; // js file case 'js' : $meta_file = sprintf('%s%s', $base_path, $filename); - $output = sprintf('', $base_path, $filename); + $output = sprintf('', $base_path, $filename, $optimized); break; } } diff --git a/common/css/default.css b/common/css/default.css index f8f46278f..6054016b2 100644 --- a/common/css/default.css +++ b/common/css/default.css @@ -88,7 +88,7 @@ a.bold { font-weight:bold; } .zbxe_widget_output { background:url(../tpl/images/widget_text.gif) no-repeat center bottom; display:block;} /* xe layer */ -#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; } +#waitingforserverresponse { border:2px solid #444444; font-weight:bold; color:#444444; padding: 7px 5px 5px 25px; background:#FFFFFF url("../tpl/images/loading.gif") no-repeat 5px 5px; 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; } diff --git a/common/js/common.js b/common/js/common.js index e102e40eb..8126e8c6e 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -355,6 +355,14 @@ function showOriginalImage(evt) { var obj = e.target; var src = obj.src; + if(!xGetElementById("fororiginalimagearea")) { + var dummy = xCreateElement("div"); + dummy.id = "fororiginalimagearea"; + dummy.style.visibility = "hidden"; + xInnerHtml(dummy, "
\"original\"close
"); + document.body.appendChild(dummy); + } + var orig_image = xGetElementById("fororiginalimage"); var tmp_image = new Image(); tmp_image.src = src; @@ -506,7 +514,11 @@ var loaded_popup_menu_list = new Array(); function chkPopupMenu(evt) { // 이전에 호출되었을지 모르는 팝업메뉴 숨김 var area = xGetElementById("popup_menu_area"); - if(!area) return; + if(!area) { + area = xCreateElement("div"); + area.id = "popup_menu_area"; + document.body.appendChild(area); + } if(area.style.visibility!="hidden") area.style.visibility="hidden"; // 이벤트 대상이 없으면 무시 @@ -784,18 +796,19 @@ function doAddDocumentCart(obj) { /* ff의 rgb(a,b,c)를 #... 로 변경 */ function transRGB2Hex(value) { if(!value) return value; - if(value.indexOf('#')>-1) return value.replace(/^#/,''); + if(value.indexOf('#') > -1) return value.replace(/^#/, ''); - if(value.toLowerCase().indexOf('rgb')<0) return value; - value = value.replace(/^rgb\(/i,'').replace(/\)$/,''); + if(value.toLowerCase().indexOf('rgb') < 0) return value; + value = value.replace(/^rgb\(/i, '').replace(/\)$/, ''); value_list = value.split(','); var hex = ''; - for(var i=0;icmd_move_down = 'En bas'; $lang->cmd_add_indent = 'Ajouter un Rentré'; $lang->cmd_remove_indent = 'Enlever un Rentré'; - $lang->cmd_management = 'Administration'; + $lang->cmd_management = 'Gérer'; $lang->cmd_make = 'Créer'; $lang->cmd_select = 'Choisir'; $lang->cmd_select_all = 'Choisir Tous'; @@ -58,7 +58,7 @@ $lang->cmd_scrap = 'Coupure'; $lang->cmd_preview = 'Avant-première'; $lang->cmd_reset = 'Restaurer'; - $lang->cmd_remake_cache = "Recréer le Fichier cache"; + $lang->cmd_remake_cache = "Recréer la Cachette du Fichier"; $lang->cmd_publish = "Publier"; $lang->cmd_layout_setup = 'Configurer la Mise en page'; $lang->cmd_layout_edit = 'Editer la Mise en page'; @@ -67,16 +67,16 @@ $lang->disable = 'Invalide'; // Mots essentiels - $lang->no = 'Numéro'; + $lang->no = 'No'; $lang->notice = 'Notice'; $lang->secret = 'Secret'; $lang->category = $lang->category_srl = 'Catégorie'; - $lang->document_srl = 'Numéro du Document'; - $lang->user_id = 'Compte d\'Utilisateur'; + $lang->document_srl = 'Numéro de série du Document'; + $lang->user_id = 'Compte'; $lang->author = 'Auteur'; $lang->password = 'Mot de Passe'; $lang->password1 = 'Mot de Passe'; - $lang->password2 = 'Confirmer le Mot de Passe'; + $lang->password2 = 'Confirmer du Mot de Passe'; $lang->admin_id = 'Compte d\'Administrateur'; $lang->writer = 'Auteur'; $lang->user_name = 'Nom d\'utilisateur'; @@ -110,29 +110,29 @@ $lang->friend = 'Les Amis'; $lang->notify = 'Annoncer'; - $lang->mid = 'Nom de Module'; + $lang->mid = 'Nom'; $lang->layout = 'Mise en Page'; $lang->widget = 'Widget'; $lang->module = 'Module'; $lang->skin = 'Thème'; $lang->colorset = 'Arrangement de couleur'; - $lang->extra_vars = 'Variables Supplementaires'; + $lang->extra_vars = 'Variables Supplémentaires'; $lang->document_url = 'Document URL'; $lang->trackback_url = 'Rétrolien URL'; $lang->blog_name = 'Nom du Blogue'; $lang->excerpt = 'Extrait'; - $lang->document_count = 'Somme des Documents'; - $lang->page_count = 'Somme de Pages'; - $lang->list_count = 'Somme de Listes'; - $lang->search_list_count = 'Somme de Liste des recherches'; + $lang->document_count = ' Documents'; + $lang->page_count = 'Pages'; + $lang->list_count = 'Items'; + $lang->search_list_count = 'Trouvés'; $lang->readed_count = ' Vues'; $lang->voted_count = 'Recommandés'; - $lang->member_count = 'Somme de Membres'; + $lang->member_count = 'Membres'; $lang->date = 'Jour'; - $lang->regdate = 'Jour d\'Enrégistrement'; - $lang->last_update = 'La Dernière Mise à Jour'; + $lang->regdate = 'Enrégistré'; + $lang->last_update = 'Dernière Mise à Jour'; $lang->last_post = 'Dernière Affichage'; $lang->signup_date = 'Jour de s\'inscrire'; $lang->last_login = 'Dernière connexion'; @@ -149,8 +149,8 @@ $lang->layout_manager = 'Arrangements de Mise en Page'; $lang->use = 'Utiliser'; - $lang->notuse = 'Ne Pas Utiliser'; - $lang->not_exists = 'n\'Existe Pas'; + $lang->notuse = 'Pas Utilisé'; + $lang->not_exists = 'Rien'; $lang->public = 'public'; $lang->private = 'privé'; diff --git a/common/lang/zh-CN.lang.php b/common/lang/zh-CN.lang.php index 22a950442..c94bb05bd 100644 --- a/common/lang/zh-CN.lang.php +++ b/common/lang/zh-CN.lang.php @@ -32,7 +32,7 @@ $lang->cmd_cancel_declare = '取消举报'; $lang->cmd_declared_list = '举报目录'; $lang->cmd_copy = '复制'; - $lang->cmd_move = '查看'; + $lang->cmd_move = '移动'; $lang->cmd_move_up = '向上'; $lang->cmd_move_down = '向下'; $lang->cmd_add_indent = '拉长'; @@ -126,7 +126,7 @@ $lang->document_count = '帖子数'; $lang->page_count = '页数'; $lang->list_count = '目录数'; - $lang->search_list_count = '搜索目录'; + $lang->search_list_count = '搜索目录数'; $lang->readed_count = '查看'; $lang->voted_count = '推荐'; $lang->member_count = '会员数'; @@ -152,8 +152,8 @@ $lang->notuse = '未使用'; $lang->not_exists = '无'; - $lang->public = 'public'; - $lang->private = 'private'; + $lang->public = '公开'; + $lang->private = '不公开'; $lang->unit_sec = '秒'; $lang->unit_min = '分'; diff --git a/common/tpl/common_layout.html b/common/tpl/common_layout.html index 332403262..e85616e68 100644 --- a/common/tpl/common_layout.html +++ b/common/tpl/common_layout.html @@ -1,22 +1,22 @@ {@ $js_files = Context::getJsFile() }{@ $css_files = Context::getCssFile() } - + - - + + - + {Context::getBrowserTitle()} - - + + {Context::getHtmlHeader()} @@ -24,17 +24,7 @@ {$zbxe_final_content} - - - - - {Context::getHtmlFooter()} - +
diff --git a/common/tpl/images/loading.gif b/common/tpl/images/loading.gif new file mode 100644 index 000000000..cecabda03 Binary files /dev/null and b/common/tpl/images/loading.gif differ diff --git a/config/config.inc.php b/config/config.inc.php index 69d0fe450..837a051a4 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -14,7 +14,7 @@ * 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며 * config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '1.0.0'); + define('__ZBXE_VERSION__', '1.0.1'); /** * @brief 디버깅 메세지 출력 diff --git a/config/func.inc.php b/config/func.inc.php index 3a455a101..d42b91f42 100644 --- a/config/func.inc.php +++ b/config/func.inc.php @@ -57,7 +57,7 @@ '+1200' => '[GMT +12:00] New Zealand Time, Fiji Time, Kamchatka Standard Time', '+1245' => '[GMT +12:45] Chatham Islands Time', '+1300' => '[GMT +13:00] Tonga Time, Phoenix Islands Time', - '+1400' => '[GMT +14:00] Line Island Time', + '+1400' => '[GMT +14:00] Line Island Time' ) ; /** @@ -155,8 +155,8 @@ $oDB = &DB::getInstance(); $output = $oDB->executeQuery($query_id, $args); if(!is_array($output->data) && count($output->data) > 0){ - $output->data = array($output->data); - } + $output->data = array($output->data); + } return $output; } @@ -211,23 +211,22 @@ return preg_match('/.{'.$cut_size.'}/su', $string, $arr) ? $arr[0].$tail : $string; } - function zgap() - { - $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; + function zgap() { + $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; - return $gap; + $gap = $g_min*60 + $g_hour*60*60; //TODO : 연산 우선순위에 따라 코드를 묶어줄 필요가 있음 + return $gap; } /** @@ -246,7 +245,7 @@ if(strlen($str) <= 8) { $gap = 0; } else { - $gap = zgap(); + $gap = zgap(); } return mktime($hour, $min, $sec, $month?$month:1, $day?$day:1, $year)+$gap; @@ -283,7 +282,7 @@ } // 년도가 1970년 이전이면 별도 처리 - if((int)substr($str,0,4)<1970) { + if((int)substr($str,0,4) < 1970) { $hour = (int)substr($str,8,2); $min = (int)substr($str,10,2); $sec = (int)substr($str,12,2); @@ -291,8 +290,8 @@ $month = (int)substr($str,4,2); $day = (int)substr($str,6,2); return str_replace( - array("Y","m","d","H","h","i","s","a","M", "F"), - array($year,$month,$day,$hour,$hour/12,$min,$sec,$hour<=12?"am":"pm",getMonthName($month), getMonthName($month,false)), + array('Y','m','d','H','h','i','s','a','M', 'F'), + array($year,$month,$day,$hour,$hour/12,$min,$sec,$hour<=12?'am':'pm',getMonthName($month), getMonthName($month,false)), $format ); } @@ -313,7 +312,7 @@ function debugPrint($buff = null, $display_line = true) { //if(!$buff) return; - if(__DEBUG_OUTPUT__==1) { + if(__DEBUG_OUTPUT__ == 1) { print sprintf("", print_r($buff,true)); } else { $debug_file = "./files/_debug_message.php"; @@ -333,7 +332,7 @@ **/ function getMicroTime() { list($time1, $time2) = explode(' ', microtime()); - return (float)$time1+(float)$time2; + return (float)$time1 + (float)$time2; } /** @@ -356,7 +355,7 @@ $return_obj = NULL; $target_count = count($target); - for($i=0;$i<$target_count;$i++) { + for($i = 0; $i < $target_count; $i++) { $target_key = $target[$i]; if(!in_array($target_key, $del)) $return_obj->{$target_key} = $target_obj->{$target_key}; } @@ -374,9 +373,9 @@ function handleError($errno, $errstr, $file, $line) { if(!__DEBUG__) return; $errors = array(E_USER_ERROR, E_ERROR, E_PARSE); - if(!in_array($errno,$errors)) return; + if(!in_array($errno, $errors)) return; - $output = sprintf("Fatal error : %s - %d", $file, $line); + $output = sprintf("Fatal error : %s - %d", $file, $line); $output .= sprintf("%d - %s", $errno, $errstr); debugPrint($output); @@ -391,7 +390,7 @@ * ex) 1234, 3 => 123/004/ **/ function getNumberingPath($no, $size=3) { - $mod = pow(10,$size); + $mod = pow(10, $size); $output = sprintf('%0'.$size.'d/', $no%$mod); if($no >= $mod) $output .= getNumberingPath((int)$no/$mod, $size); return $output; @@ -409,16 +408,16 @@ **/ function removeHackTag($content) { // iframe 제거 - $content = preg_replace("!!is","",$content); + $content = preg_replace("!!is", '', $content); // script code 제거 - $content = preg_replace("!!is","",$content); + $content = preg_replace("!!is", '', $content); // meta 태그 제거 - $content = preg_replace("!!is","",$content); + $content = preg_replace("!!is", '', $content); // style 태그 제거 - $content = preg_replace("!!is","",$content); + $content = preg_replace("!!is", '', $content); return $content; } @@ -428,9 +427,9 @@ function hexrgb($hexstr) { $int = hexdec($hexstr); - return array("red" => 0xFF & ($int >> 0x10), - "green" => 0xFF & ($int >> 0x8), - "blue" => 0xFF & $int); + return array('red' => 0xFF & ($int >> 0x10), + 'green' => 0xFF & ($int >> 0x8), + 'blue' => 0xFF & $int); } } @@ -467,8 +466,8 @@ * 현재 요청받은 스크립트 경로를 return **/ function getScriptPath() { - //if(function_exists('php_sapi_name') && php_sapi_name()=='cgi') return preg_replace('/index.php/i','',$_SERVER['PATH_INFO']); - return preg_replace('/index.php/i','',$_SERVER['SCRIPT_NAME']); + $url = $_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:($_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:$_SERVER['URL']); + return preg_replace('/index.php/i','',$url); } /** @@ -477,7 +476,7 @@ * Modified function from http://pure-essence.net/stuff/code/utf8RawUrlDecode.phps **/ function utf8RawUrlDecode ($source) { - $decodedStr = ""; + $decodedStr = ''; $pos = 0; $len = strlen ($source); while ($pos < $len) { diff --git a/index.php b/index.php index 2647f79aa..2d9b52842 100644 --- a/index.php +++ b/index.php @@ -1,7 +1,7 @@ * @brief 시작 페이지 * * zeroboard XE의 시작 페이지 @@ -20,9 +20,6 @@ * - document : http://doc.zeroboard.com * - pdf 문서 : http://doc.zeroboard.com/zeroboard_xe.pdf * \n - * \n - * Copyright (C) 2007년 고영수(skklove@gmail.com) \n - * \n * "Zeroboard™ XE"는 자유 소프트웨어입니다. \n * 소프트웨어의 피양도자는 자유 소프트웨어 재단이 공표한 GNU 일반 공중 사용 허가서 2판 또는 \n * 그 이후 판을 임의로 선택해서, 그 규정에 따라 프로그램을 개작하거나 재배포할 수 있습니다. \n @@ -44,14 +41,14 @@ /** * @brief 필요한 설정 파일들을 include **/ - require_once("./config/config.inc.php"); + require_once('./config/config.inc.php'); - /** + /** * @brief Context 객체를 생성하여 초기화 * 모든 Request Argument/ 환경변수등을 세팅 **/ - $oContext = &Context::getInstance(); - $oContext->init(); + $oContext = &Context::getInstance(); + $oContext->init(); /** * @brief ModuleHandler 객체를 생성/ 실행 diff --git a/layouts/xe_blog/css/layout_orange.css b/layouts/xe_blog/css/layout_orange.css index 19ee77667..0e0822297 100644 --- a/layouts/xe_blog/css/layout_orange.css +++ b/layouts/xe_blog/css/layout_orange.css @@ -7,10 +7,10 @@ Kim, Ji Min 070809-20070903 body {color:#999999; background:#181818 url(../images/orange/bg_blog.jpg) no-repeat center top;} /* Input Style Definition */ -.inputTypeText {border-color:#8b8b8b #d3d3d3 #d3d3d3 #8b8b8b; background:#ffffff;} +.inputTypeText {border-color:#333333 #666666 #666666 #333333; background:transparent; color:#aaaaaa;} .inputTypeText:hover, -.inputTypeText:focus { background:#ffffff;} -.inputTypeTextArea {border-color:#8b8b8b #d3d3d3 #d3d3d3 #8b8b8b !important; background:#ffffff;} +.inputTypeText:focus { background:#000000;} +.inputTypeTextArea {border-color:#333333 #666666 #666666 #333333!important; background:transparent;} /* Global Navigation */ ul.blogMenu li {background:url(../images/orange/division_66.gif) no-repeat left .2em;} diff --git a/layouts/xe_blog/layout.html b/layouts/xe_blog/layout.html index 207818e91..71659ea5d 100644 --- a/layouts/xe_blog/layout.html +++ b/layouts/xe_blog/layout.html @@ -98,11 +98,12 @@
-
+
{$lang->cmd_search} - + + {$lang->cmd_search}
diff --git a/layouts/xe_official/css/black.css b/layouts/xe_official/css/black.css index fed0ad983..7b8d23606 100644 --- a/layouts/xe_official/css/black.css +++ b/layouts/xe_official/css/black.css @@ -81,7 +81,7 @@ body { background:#3d3d3d url(../images/black/bgBody.gif) repeat-x;} #content { width:100%; overflow:hidden;} /* Site Layout - Footer */ -#footer { border-top:3px solid #424242; text-align:center; padding:2em 0 4em; clear:both;} +#footer { margin:0; padding:0; border-top:3px solid #424242; text-align:center; padding:2em 0 4em; clear:both;} #footer li { display:inline; padding:0 .6em 0 1em; background:url(../images/black/vrType1.gif) no-repeat left center;} #footer li.first-child { background:none;} #footer li a { color:#818181; font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;} diff --git a/layouts/xe_official/css/default.css b/layouts/xe_official/css/default.css index ef66fe0b8..6cd945c96 100644 --- a/layouts/xe_official/css/default.css +++ b/layouts/xe_official/css/default.css @@ -83,7 +83,7 @@ body { background:#FFFFFF url(../images/default/bgBody.gif) repeat-x left top; } #content { width:100%; overflow:hidden;} /* Site Layout - Footer */ -#footer { border-top:3px solid #f4f4f4; text-align:center; padding:2em 0 4em; clear:both;} +#footer { margin:0; padding:0; border-top:3px solid #f4f4f4; text-align:center; padding:2em 0 4em; clear:both;} #footer li { display:inline; padding:0 .6em 0 1em; background:url(../images/default/vrType1.gif) no-repeat left center;} #footer li.first-child { background:none;} #footer li a { color:#999999; font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;} diff --git a/layouts/xe_official/css/white.css b/layouts/xe_official/css/white.css index 357f962a9..95071a602 100644 --- a/layouts/xe_official/css/white.css +++ b/layouts/xe_official/css/white.css @@ -82,7 +82,7 @@ body { background:#ffffff;} #content { width:100%; overflow:hidden;} /* Site Layout - Footer */ -#footer { border-top:3px solid #f4f4f4; text-align:center; padding:2em 0 4em; clear:both;} +#footer { margin:0; padding:0; border-top:3px solid #f4f4f4; text-align:center; padding:2em 0 4em; clear:both;} #footer li { display:inline; padding:0 .6em 0 1em; background:url(../images/white/vrType1.gif) no-repeat left center;} #footer li.first-child { background:none;} #footer li a { color:#999999; font:.9em "돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif;} diff --git a/modules/addon/lang/fr.lang.php b/modules/addon/lang/fr.lang.php index e4cbc76ad..404c50c3f 100644 --- a/modules/addon/lang/fr.lang.php +++ b/modules/addon/lang/fr.lang.php @@ -7,11 +7,11 @@ $lang->addon = "Compagnon"; - $lang->addon_info = 'Le rsum de la Compagnon'; + $lang->addon_info = 'Le résumé de la Compagnon'; $lang->addon_maker = 'L\'Auteur de la Compagnon'; $lang->addon_history = 'L\'Histoire de la Compagnon'; - $lang->about_addon = 'La Compagnon contrle les actions plutt d\'imprimer des rsultats de HTML.
Seulement par touche bascule des compagnons que vous voulez faire marcher ou arrter, vous pouvez appliquer les fonctions trs utiles pour administrer votre site web.'; + $lang->about_addon = 'La Compagnon, c\'est pour contrôler les actions plutôt d\'imprimer des résultats de HTML.
Par la Touche à Bascule des compagnons que vous voulez faire marcher ou arrêter, vous pouvez appliquer les fonctions très utiles à administrer votre site web.'; ?> diff --git a/modules/admin/lang/en.lang.php b/modules/admin/lang/en.lang.php index 9338df7f8..0586bbab6 100644 --- a/modules/admin/lang/en.lang.php +++ b/modules/admin/lang/en.lang.php @@ -63,8 +63,8 @@ ); $lang->xe_developer_links = array( - //'Manual' => 'http://www.zeroboard.com/wiki/manual', - "Developer's forum" => 'http://spring.zeroboard.com', + 'Manual' => 'http://www.zeroboard.com/manual', + //"Developer's forum" => 'http://spring.zeroboard.com', 'Issue Tracking' => 'http://trac.zeroboard.com', 'SVN Repository' => 'http://svn.zeroboard.com', 'doxygen document' => 'http://doc.zeroboard.com', diff --git a/modules/admin/lang/es.lang.php b/modules/admin/lang/es.lang.php index e516ac296..b852ad4f2 100644 --- a/modules/admin/lang/es.lang.php +++ b/modules/admin/lang/es.lang.php @@ -63,8 +63,8 @@ ); $lang->xe_developer_links = array( - //'Manuales' => 'http://www.zeroboard.com/wiki/manual', - 'Foro Abierto para los desarrolladores' => 'http://spring.zeroboard.com', + 'Manuales' => 'http://www.zeroboard.com/manual', + //'Foro Abierto para los desarrolladores' => 'http://spring.zeroboard.com', 'Huellas de distribuciones' => 'http://trac.zeroboard.com', 'Repositorio de SVN' => 'http://svn.zeroboard.com', 'Documento doxygen' => 'http://doc.zeroboard.com', diff --git a/modules/admin/lang/fr.lang.php b/modules/admin/lang/fr.lang.php index 9fc85f6ad..1ec354f3e 100644 --- a/modules/admin/lang/fr.lang.php +++ b/modules/admin/lang/fr.lang.php @@ -2,29 +2,29 @@ /** * @file modules/admin/lang/fr.lang.php * @author zero (zero@nzeo.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com) - * @brief Paquet de la Langue franaise (Les Mots base seulement sont inclus ici) + * @brief Paquet de la Langue franaise (Les Mots base seulement sont inclus ici) **/ - $lang->admin_info = 'Information d\'Administrateur'; + $lang->admin_info = 'Informations d\'Administrateur'; $lang->admin_index = 'Page de l\'indice pour l\'Administrateur'; $lang->module_category_title = array( 'service' => 'Modules de Service', 'manager' => 'Modules Administratif', - 'utility' => 'Modules d\'Utilit ', + 'utility' => 'Modules d\'Utilité', 'accessory' => 'Modules Additionnels', - 'base' => 'Modules par Dfaut', + 'base' => 'Modules par Défaut', ); - $lang->newest_news = "Nouvelles Dernires"; + $lang->newest_news = "Dernières Nouvelles"; $lang->env_setup = "Configuration"; - $lang->env_information = "Informations de l\'Environnement"; + $lang->env_information = "Informations de l'Environnement"; $lang->current_version = "Version Courante"; - $lang->current_path = "Chemin Install"; - $lang->released_version = "Version Dernire"; - $lang->about_download_link = "Nouvelle version est disponible. Pour tlcharger la version dernire, cliquez le lien tlcharger."; + $lang->current_path = "Chemin Installé"; + $lang->released_version = "Version Dernière"; + $lang->about_download_link = "Nouvelle version est disponible. Pour télécharger la version dernière, cliquez le lien."; $lang->item_module = "Liste des Modules"; $lang->item_addon = "Liste des Compagnons"; @@ -35,38 +35,38 @@ $lang->addon_name = "Nom de Compagnon"; $lang->version = "Version"; $lang->author = "Auteur"; - $lang->table_count = "Somme de Tables"; - $lang->installed_path = "Chemin Install"; + $lang->table_count = "Tables"; + $lang->installed_path = "Chemin Installé"; - $lang->cmd_shortcut_management = "Editer Menu"; + $lang->cmd_shortcut_management = "Editer le Menu"; $lang->msg_is_not_administrator = 'Administrateur seulement'; - $lang->msg_manage_module_cannot_delete = 'Raccourci pour modules, compagnons, mises en page, widgets ne peuvent pas tre supprim'; - $lang->msg_default_act_is_null = 'Raccourci ne peut pas tre enrgistr parce que l\'Action par dfaut de l\'Administrateur n\'est pas configur'; + $lang->msg_manage_module_cannot_delete = 'On ne peut pas supprimer les raccourcis pour les modules, les compagnons, les mises en page ou les widgets'; + $lang->msg_default_act_is_null = 'on ne peut pas enrégistrer les raccourci parce que les Actions Par Défaut de l\'Administrateur n\'est pas configuré'; - $lang->welcome_to_zeroboard_xe = 'Bienvenue sur la Page d\'Administration du Zeroboard XE'; - $lang->about_admin_page = "La Page d\'Administration est encore en train de dvelopper,\nNous allons ajouter des contenus essentiels par accepter beauoup de bons suggestions pendant Beta Proche."; - $lang->about_lang_env = "Pour appliquer par dfaut le Rpertoire de la Langue choisie aux utilisateurs, cliquez le boutton [Conserver] aprs changer a."; + $lang->welcome_to_zeroboard_xe = 'Bienvenue sur la Page d\'Administration du Zeroboard XE'; + $lang->about_admin_page = "La Page d\'Administration est encore en train de développer,\nNous allons ajouter des contenus essentiels par accepter beauoup de bons suggestions pendant Béta Proche."; + $lang->about_lang_env = "Vous pouvez fixer la Langue Par Défaut par cliquer le boutton [Conserver] au-dessous. Les visiteurs vont voir toutes les menus et les messages en la langue que vous choisissez."; $lang->zeroboard_xe_user_links = 'Liens pour les Utilisateurs'; - $lang->zeroboard_xe_developer_links = 'Liens pour les Dveloppeur'; + $lang->zeroboard_xe_developer_links = 'Liens pour les Développeur'; $lang->xe_user_links = array( 'Site Web Officiel' => 'http://www.zeroboard.com', //'Site Web Beta Proche' => 'http://spring.zeroboard.com', - //'Rservoir des Modules' => 'http://www.zeroboard.com', - //'Rservoir des Compagnons' => 'http://www.zeroboard.com', - //'Rservoir des Widgets' => 'http://www.zeroboard.com', - //'Rservoir des Thme des Modules' => 'http://www.zeroboard.com', - //Rservoir des Thme des 'Widgets' => 'http://www.zeroboard.com', - //'Rservoir des Thme des Mises en Page' => 'http://www.zeroboard.com', + //'Rservoir des Modules' => 'http://www.zeroboard.com', + //'Rservoir des Compagnons' => 'http://www.zeroboard.com', + //'Rservoir des Widgets' => 'http://www.zeroboard.com', + //'Rservoir des Thme des Modules' => 'http://www.zeroboard.com', + //Rservoir des Thme des 'Widgets' => 'http://www.zeroboard.com', + //'Rservoir des Thme des Mises en Page' => 'http://www.zeroboard.com', ); $lang->xe_developer_links = array( - //'Manuel' => 'http://www.zeroboard.com/wiki/manual', - "Forum pour les Dveloppeurs" => 'http://spring.zeroboard.com', + 'Manuel' => 'http://www.zeroboard.com/manual', + //"Forum pour les Dveloppeurs" => 'http://spring.zeroboard.com', 'Traque des Issues' => 'http://trac.zeroboard.com', - 'Rservoir de SVN' => 'http://svn.zeroboard.com', + 'Réservoir de SVN' => 'http://svn.zeroboard.com', 'Document de Doxygen' => 'http://doc.zeroboard.com', 'Documentation de PDF' => 'http://doc.zeroboard.com/zeroboard_xe.pdf', ); @@ -83,6 +83,6 @@ ); - $lang->xe_license = 'Zeroboard XE se soumet la GPL'; - $lang->about_shortcut = 'Vous pouvez supprimer raccourci pour les modules qui sont enrgistrs sur le liste des modules utiliss frquemment'; + $lang->xe_license = 'Zeroboard XE s\'applique la GPL'; + $lang->about_shortcut = 'Vous pouvez supprimer raccourci pour les modules qui sont enrgistrés sur le liste des modules utilisés fréquemment'; ?> diff --git a/modules/admin/lang/jp.lang.php b/modules/admin/lang/jp.lang.php index d17b2ad74..25e7612ce 100644 --- a/modules/admin/lang/jp.lang.php +++ b/modules/admin/lang/jp.lang.php @@ -1,7 +1,7 @@ current_version = "インストールバージョン"; $lang->current_path = "インストールパス"; $lang->released_version = "最新バージョン"; - $lang->about_download_link = "インストールされたバージョンより新しいバージョンが配布されています。ダウンロードリンクをクリックするとダウンロードできます。"; + $lang->about_download_link = "インストールされたバージョンより新しいバージョンが配布されています。「ダウンロード」リンクをクリックするとダウンロードできます。"; $lang->item_module = "モジュールリスト"; $lang->item_addon = "アドオンリスト"; @@ -45,7 +45,7 @@ $lang->msg_default_act_is_null = 'デフォルトの管理者のアクションが指定されていないため、ショットカットを登録することができません。'; $lang->welcome_to_zeroboard_xe = 'ゼロボードXEの管理者ページです。'; - $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベタバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; + $lang->about_admin_page = "管理者ページはまだ未完成です。\nクローズベータバージョンの期間に、多くの方々からご意見をいただきながら、必ず必要なコンテンツを埋めていきたいと思います。"; $lang->about_lang_env = "上で設定された言語を、初めてサイトに訪問したユーザに同じく適用させるためには、希望する言語に変更してから「保存」ボタンをクリックしてください。"; $lang->zeroboard_xe_user_links = 'ユーザのためのリンク'; @@ -53,7 +53,7 @@ $lang->xe_user_links = array( '公式ホームページ' => 'http://www.zeroboard.com', - //'クローズベタサイト' => 'http://spring.zeroboard.com', + //'クローズベータサイト' => 'http://spring.zeroboard.com', //'モジュルダ情報' => 'http://www.zeroboard.com', //'アドオン情報' => 'http://www.zeroboard.com', //'ウィジェット情報' => 'http://www.zeroboard.com', @@ -63,7 +63,7 @@ ); $lang->xe_developer_links = array( - 'マニュアル' => 'http://www.zeroboard.com/wiki/manual', + 'マニュアル' => 'http://www.zeroboard.com/manual', //'デベロッパーフォーラム' => 'http://spring.zeroboard.com', 'イッシュートラッキング' => 'http://trac.zeroboard.com', 'SVN Repository' => 'http://svn.zeroboard.com', @@ -84,5 +84,5 @@ ); $lang->xe_license = 'ゼロボードXEのライセンスはGPLです。'; - $lang->about_shortcut = 'よく使用するモジュールに登録されたショットカットは削除できます。'; + $lang->about_shortcut = 'よく使用するモジュールに登録されたショートカットは削除できます。'; ?> diff --git a/modules/admin/lang/ru.lang.php b/modules/admin/lang/ru.lang.php index 11f27cbb9..64e3c750f 100644 --- a/modules/admin/lang/ru.lang.php +++ b/modules/admin/lang/ru.lang.php @@ -63,8 +63,8 @@ ); $lang->xe_developer_links = array( - //'Manual' => 'http://www.zeroboard.com/wiki/manual', - "Форум разработчиков" => 'http://spring.zeroboard.com', + 'Manual' => 'http://www.zeroboard.com/manual', + //"Форум разработчиков" => 'http://spring.zeroboard.com', 'Обсуждение вопсросов' => 'http://trac.zeroboard.com', 'SVN репозиторий' => 'http://svn.zeroboard.com', 'Документация' => 'http://doc.zeroboard.com', diff --git a/modules/admin/lang/zh-CN.lang.php b/modules/admin/lang/zh-CN.lang.php index 7fd20da41..99b520a8b 100644 --- a/modules/admin/lang/zh-CN.lang.php +++ b/modules/admin/lang/zh-CN.lang.php @@ -63,8 +63,8 @@ ); $lang->xe_developer_links = array( - //'使用手册' => 'http://www.zeroboard.com/wiki/manual', - 'Developer 论坛' => 'http://spring.zeroboard.com', + '使用手册' => 'http://www.zeroboard.com/manual', + //'Developer 论坛' => 'http://spring.zeroboard.com', '问题跟踪' => 'http://trac.zeroboard.com', 'SVN Repository' => 'http://svn.zeroboard.com', 'doxygen document' => 'http://doc.zeroboard.com', diff --git a/modules/board/board.view.php b/modules/board/board.view.php index 8aea4d2f4..4aaae7a11 100644 --- a/modules/board/board.view.php +++ b/modules/board/board.view.php @@ -107,8 +107,8 @@ // 글에 대한 정보를 구함 $oDocument->setDocument($document_srl); - // 상담 기능이 열려 있을 경우 현재 사용자의 글이 아니면 무시 - if($oDocument->isExists() && $this->consultation) { + // 상담기능이 사용되고 공지사항이 아니고 사용자의 글도 아니면 무시 + if($oDocument->isExists() && $this->consultation && !$oDocument->isNotice()) { $logged_info = Context::get('logged_info'); if($oDocument->get('member_srl')!=$logged_info->member_srl) $oDocument = new DocumentItem(); } diff --git a/modules/board/conf/info.xml b/modules/board/conf/info.xml index 9f0b60e18..36c7c5d92 100644 --- a/modules/board/conf/info.xml +++ b/modules/board/conf/info.xml @@ -15,7 +15,7 @@ zero 게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다. 给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。 - Module of the board''s function. Also includes administrator functions such as creating/managing boards. + Module in charge of function of the board. Also includes administrator functions such as creating/managing boards. Módulo para la función del tablero. Incluye funciones de administración como crear/ agregar o el manejo de los tableros. 掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。 Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами. diff --git a/modules/board/conf/module.xml b/modules/board/conf/module.xml index 6a1039956..214100979 100644 --- a/modules/board/conf/module.xml +++ b/modules/board/conf/module.xml @@ -6,30 +6,35 @@ 目录 リスト list + Lista 열람 查看 閲覧 view + Opinión 글 작성 发表新主题 書き込み作成 write document + Escribir el documento 댓글 작성 发表评论 コメント作成 write comment + Escribir comentario 관리 管理 管理 manager + Administrador diff --git a/modules/board/lang/en.lang.php b/modules/board/lang/en.lang.php index b47a5cd38..2710b3692 100644 --- a/modules/board/lang/en.lang.php +++ b/modules/board/lang/en.lang.php @@ -34,5 +34,5 @@ $lang->about_board_category = 'You can make board categories.
When board category is broken, try rebuilding the cache file manually.'; $lang->about_except_notice = "Notice articles will not be displayed on normal list."; $lang->about_board = "This module is for creating and managing boards.\nYou may select the module name from the list after creating one to configure specifically.\nPlease be careful with board's module name, since it will be the url. (ex : http://domain/zb/?mid=modulename)"; - $lang->about_consultation = "Non-administrator members would see their own artocles.\nNon-members would not be able to write articles when using consultation."; + $lang->about_consultation = "Non-administrator members would see their own articles.\nNon-members would not be able to write articles when using consultation."; ?> diff --git a/modules/board/lang/es.lang.php b/modules/board/lang/es.lang.php index 621e2b384..df7e6e59e 100644 --- a/modules/board/lang/es.lang.php +++ b/modules/board/lang/es.lang.php @@ -36,5 +36,5 @@ $lang->about_board_category = 'Puede crear las categorias de tableros.
Cuando no funciona la categoría de tableros, rehacer el archivo caché manualmente para solucionar.'; $lang->about_except_notice = "Aviso de los artículos no se mostrará en la lista normal."; $lang->about_board = "Este módulo es para crear y manejar los tableros.\nLuego de crear un Tablero, seleciona el nombre del módulo para la configuración más detallada.\nSea cuidadoso con el nombre del módulo, ya que ese nombre va a ser la dirección URL. (ej : http://dominio/zb/?mid=nombre del módulo)"; - $lang->about_consultation = "상담 기능은 관리권한이 없는 회원은 자신이 쓴 글만 보이도록 하는 기능입니다\n단 상담기능 사용시 비회원 글쓰기는 자동으로 금지됩니다."; + $lang->about_consultation = "No administrador de los miembros que consideran que su propia artocles. \ NNon miembros no serían capaces de escribir artículos al utilizar la consulta."; ?> diff --git a/modules/board/lang/fr.lang.php b/modules/board/lang/fr.lang.php index 499b39ab1..6ad216060 100644 --- a/modules/board/lang/fr.lang.php +++ b/modules/board/lang/fr.lang.php @@ -10,29 +10,29 @@ $lang->except_notice = "Exclure des Notices"; $lang->cmd_manage_menu = 'Arrangement de Menu'; - $lang->cmd_make_child = 'Ajouter une enfant catgorie'; - $lang->cmd_enable_move_category = "Bouger la position de la catgorie (Cochez la case et puis glisser le menu que vous voulez dplacer)"; + $lang->cmd_make_child = 'Ajouter une enfant catégorie'; + $lang->cmd_enable_move_category = "Bouger la position de la catégorie (Cochez la case et puis glisser le menu que vous voulez déplacer)"; // Item - $lang->parent_category_title = 'Parent catgorie'; - $lang->category_title = 'Catgorie'; + $lang->parent_category_title = 'catégorie mère'; + $lang->category_title = 'Catégorie'; $lang->expand = 'Etendre'; $lang->category_group_srls = 'Groupe Accessible'; - $lang->search_result = 'Rsultat de la Recherche'; + $lang->search_result = 'Résultat de la Recherche'; $lang->consultation = 'Consultation'; - // Mots utiliss en bouton + // Mots utiliss en bouton $lang->cmd_board_list = 'Liste des Panneaux'; - $lang->cmd_module_config = 'Configuration commun pour les Panneau'; - $lang->cmd_view_info = 'Information des Panneau'; + $lang->cmd_module_config = 'Configuration commun pour les Panneaux'; + $lang->cmd_view_info = 'Information des Panneaux'; // blah blah.. - $lang->about_category_title = 'Entrez le nom de la catgorie, SVP.'; - $lang->about_expand = 'Si vous cochez la case, ce sera toujours tendu'; - $lang->about_category_group_srls = 'Le groupe slectionn seulement pourra voir ces catgories. (Ouvrir manuellement le fiche de xml, c\'est l\'exposer)'; - $lang->about_layout_setup = 'Vous pouvez manuellement modifier le code de Mise en Page du Panneau. Insrez ou arrangez le code de Widget n\'importe o vous voulez.'; - $lang->about_board_category = 'Vous pouvez crer des catgories d\'affichage dans le tableau. Quand la catgorie d\'affichage est cass, essayez manuellement rtablir la fichier cache.'; - $lang->about_except_notice = "L\'Article de Notice ne sera expos sur la liste normale."; - $lang->about_board = "Ce module se sert crer et arranger des Panneau.\nAprs avoir cr un module, si vous cliquez le nom sur le leste, vous pouvez configurer specifiquement.\nFaites attention quand vous choisissez le nom du module du Panneau, car ce sera URL. (ex : http://domain/zb/?mid=nom_de_module)"; - $lang->about_consultation = "Les membres non-administratifs verront seulement les ariticles d\'eux-mme.\nNon-membres ne pourraient pas crire des articles quand la Consultation est appliqu."; + $lang->about_category_title = 'Entrez le nom de la catégorie, SVP.'; + $lang->about_expand = 'Si vous cochez la case, ce sera toujours tendu'; + $lang->about_category_group_srls = 'Le groupe sélectionné seulement pourra voir ces catégories. (Ouvrir manuellement le fiche de xml, c\'est l\'exposer)'; + $lang->about_layout_setup = 'Vous pouvez manuellement modifier le code de Mise en Page du Panneau. Insérez ou arrangez le code de Widget n\'importe où vous voulez.'; + $lang->about_board_category = 'Vous pouvez créer des catégories d\'affichage dans le tableau. Quand la catégorie d\'affichage est cassé, essayez manuellement rétablir la cachette du fichier.'; + $lang->about_except_notice = "L'Article de Notice ne sera exposé sur la liste normale."; + $lang->about_board = "Ce module se sert à créer et arranger des Panneaux.\nAprés avoir créé un module, si vous cliquez le nom sur le liste, vous pouvez configurer spécifiquement.\nFaites attention quand vous nomer un module du Panneau, car ce sera URL. (ex : http://domain/zb/?mid=nom_de_module)"; + $lang->about_consultation = "Les membres non-administratifs verront seulement les ariticles d\'eux-même.\nNon-membres ne pourraient pas écrire des articles quand la Consultation est appliqué."; ?> diff --git a/modules/board/lang/jp.lang.php b/modules/board/lang/jp.lang.php index 85dc3c536..e9f5a23fe 100644 --- a/modules/board/lang/jp.lang.php +++ b/modules/board/lang/jp.lang.php @@ -1,7 +1,7 @@ about_layout_setup = 'ブログのレイアウトのコードを直接修正します。ウィジェットコードを好きなところに入力、又は管理して下さい。'; $lang->about_board_category = 'ブログのカテゴリを作成します。
ブログのカテゴリが誤作動する場合、「キャッシュファイルの再生性」を手動で行うことで解決できます。'; $lang->about_except_notice = "リストの上段に常に表示されるお知らせの書き込みを一般リストからお知らせの書き込みが表示されないようにします。"; - $lang->about_board = "掲示板の生成、および管理する掲示板モジュールです。\n生成後、リストからモジュール名を選択すると詳細な設定ができます。\n掲示板のモジュール名はURLになりますので注意してください。 (ex : http://ドメイン/zb/?mid=モジュール名)"; - $lang->about_consultation = "相談機能は、管理権限がない会員は自分自身の書き込みのみ表示されるようにする機能です。\n但し、相談機能を使用する際は、非会員の書き込みは自動禁止されます。"; + $lang->about_board = "掲示板の生成、および管理する掲示板モジュールです。\n生成後、リストからモジュール名を選択すると詳細設定ができます。\n掲示板のモジュール名はURLの一部となりますので注意してください。 (ex : http://ドメイン/zb/?mid=モジュール名)"; + $lang->about_consultation = "相談機能とは、管理権限のない会員には本人の書き込みだけを表示する機能です。\n但し、相談機能を使用する際は、非会員の書き込みは自動的に禁止されます。"; ?> diff --git a/modules/board/lang/zh-CN.lang.php b/modules/board/lang/zh-CN.lang.php index 8f3d23dde..89d28e8f3 100644 --- a/modules/board/lang/zh-CN.lang.php +++ b/modules/board/lang/zh-CN.lang.php @@ -7,11 +7,11 @@ $lang->board = "版面"; - $lang->except_notice = "公告"; + $lang->except_notice = "公告选项"; $lang->cmd_manage_menu = '菜单管理'; $lang->cmd_make_child = '添加下级分类'; - $lang->cmd_enable_move_category = "更改分类顺序 (选择后拖动菜单)"; + $lang->cmd_enable_move_category = "分类顺序(勾选后用鼠标拖动分类项)"; $lang->cmd_remake_cache = '重新生成缓冲文件'; $lang->cmd_layout_setup = '布局设置'; $lang->cmd_layout_edit = '编辑布局'; @@ -22,7 +22,7 @@ $lang->expand = '展开'; $lang->category_group_srls = '用户组'; $lang->search_result = '搜索结果'; - $lang->consultation = '1:1论坛'; + $lang->consultation = '咨询功能'; // 按钮语言 $lang->cmd_board_list = '版面目录'; @@ -35,8 +35,8 @@ $lang->about_expand = '选择此项将维持展开状态。'; $lang->about_category_group_srls = '被选的用户组才可以查看此分类。'; $lang->about_layout_setup = '可直接编辑博客布局代码。可以把控件代码插入到您喜欢的位置。'; - $lang->about_board_category = '可以添加/删除博客分类
博客分类有异常情况时,可以尝试重新生成缓冲文件。'; - $lang->about_except_notice = "设置一般目录下不显示公告。"; + $lang->about_board_category = '可以添加/删除分类项
分类有异常情况时,可以尝试重新生成缓冲文件。'; + $lang->about_except_notice = "设置公告目录项不再重复显示到普通目录当中。"; $lang->about_board = "可生成,管理版面的模块。\n生成版面后,点击模块名即可对其详细设置。"; - $lang->about_consultation = "1:1论坛功能是除了管理权限的会员以外只能浏览自己发表的主题.\n使用1:1论坛时系统自动禁止非会员发表主题的功能."; + $lang->about_consultation = "咨询功能是指除有管理权限的会员以外,其他会员只能浏览自己发表的主题。\n使用咨询功能时系统将自动禁止非会员的发表主题权限。"; ?> diff --git a/modules/board/skins/xe_board/css/black.css b/modules/board/skins/xe_board/css/black.css new file mode 100644 index 000000000..9cc77ba71 --- /dev/null +++ b/modules/board/skins/xe_board/css/black.css @@ -0,0 +1,111 @@ +@charset "utf-8"; + +/* board Title */ +.boardHeader h3 { margin:0; border-bottom:3px solid #fe3614; } + +/* board Information */ +.articleNum { float:left; background:url(../images/black/iconArticle.gif) no-repeat left top; } +.articleNum strong { font:bold 11px Tahoma; color:#BBBBBB;} + +/* account Navigation */ +.accountNavigation li.join a { background:url(../images/black/iconMyInfo.gif) no-repeat left top; padding-left:14px; } +.accountNavigation li.myInfo a { background:url(../images/black/iconMyInfo.gif) no-repeat left top; padding-left:14px; } + +/* boardRead */ +.boardRead .fileAttached li { background:url(../images/black/iconFile.gif) no-repeat left top;} +.boardRead .titleAndUser { border-bottom:1px solid #555555; } +.boardRead .contentButton { border-top:1px solid #555555; } + +/* style.list */ +.boardList th { background:transparent url(../images/black/lineBoardListTh.gif) no-repeat left bottom; } +.boardList td.recommend { color:#ff6600; } +.boardList td .replyAndTrackback { color:#BBBBBB; } +.boardList td.title strong.category { color:#BBBBBB; } +.buttonTypeGo { background:url(../images/black/buttonTypeInput24.gif) no-repeat; } + +/* pageNavigation */ +.pageNavigation .current { color:#BBBBBB; } + +/* replyAndTrackback */ +.buttonBox .replyAndTrackback a strong { color:#BBBBBB;} + +.replyBox .fileAttached li { background:url(../images/black/iconFile.gif) no-repeat left top;} + +/* replace common images */ +.boardHeader { border:1px solid #ABA9B4; border-bottom:0; background:transparent url(../images/black/bgH3.gif) repeat-x left bottom; overflow:hidden;} +.boardHeader h3 { background:transparent url(../images/black/lineH3.gif) no-repeat right bottom; color:#AAAAAA; border-bottom:3px solid #ABA9B4;} +.boardDescription { color:#666666; border:1px solid #666666; overflow:hidden; padding:10px; margin-top:5px; background-color:transparent;} +.accountNavigation li.setup a { background:url(../images/black/iconSetup.gif) no-repeat left top; padding-left:14px; } +.accountNavigation li.admin a { background:url(../images/black/iconAdmin.gif) no-repeat left top; padding-left:12px; } +.accountNavigation li.loginAndLogout a { background:url(../images/black/line_1x10_e0e0e0.gif) no-repeat left 2px; padding-left:8px; } + +.boardSubMenu { border-bottom:1px solid #444444;} +.boardList { width:100%; border:1px solid #444444; border-top:none; table-layout:fixed;} +.boardList th { color:#999999; font-weight:normal; border-top:1px solid #444444; border-bottom:1px solid #888888; white-space:nowrap; padding-top:5px; height:28px; overflow:hidden;} +.boardList th a { color:#999999; } +.boardList td { border-top:1px solid #444444; padding:.5em;} +.boardList th.num { border-left:0px solid #444444; } +.boardList td.title, .boardList tr.notice { background-color:transparent; } + +#board_category { background-color:#444444; color:#AAAAAA; } +#go_button { color:#AAAAAA; } + +.boardList tr.bg1, .boardList tr.bg2 { background-color:transparent; } +.boardList td.topic strong a, .boardList td.title a { color:#AAAAAA; } +.boardList td.author div { color:#AAAAAA; } +.boardList td.topic div.author strong { font-size:9pt; } +.boardList td.webzineTitle, .boardList td.webzineTitle a { color:#AAAAAA; } + +.boardRead .readHeader .title h4 a { color:#BBBBBB; } +.boardRead .dateAndCount .replyAndTrackback .replyCount { background:transparent url(../images/black/iconReply.gif) no-repeat left 1px; color:#888888; } +.boardRead .dateAndCount .replyAndTrackback .trackbackCount { background:transparent url(../images/black/iconTrackback.gif) no-repeat left 1px; color:#888888; } +.boardRead .dateAndCount .replyAndTrackback .replyCount a,.boardRead .dateAndCount .replyAndTrackback .trackbackCount a { color:#888888; } +.boardRead .dateAndCount .readedCount { background:transparent url("../images/black/read.gif") no-repeat left top; color:#4A3FD7;} +.boardRead .dateAndCount .date { color:#888888; background:transparent url("../images/black/calendar.gif") no-repeat left top; } +.comment_popup_menu, .document_popup_menu { background:url(../images/black/document_menu.gif) no-repeat right top;} + +.tagsBox { border:1px solid #888888; padding:10px; overflow:hidden;} +.tags div a:hover { background-color:#444444; color:#FFFFFF;} +.tags .tagTypeA a { color:#555555; background-color:#444444; margin:0;} +.tags .tagTypeB a { color:#888888; } +.tags .tagTypeC a { background-color:#333333;} +.tags .tagTypeD a { background-color:#111111;} +.boardRead .tag { background:transparent url(../images/common/iconTag.gif) no-repeat 3px 2px; } +.boardRead .fileAttached { border:1px solid #888888; background-color:transparent; padding:5px; margin-top:10px; overflow:hidden;} +.boardRead .fileAttached ul li a { color:#AAAAAA; } +.replyBox .fileAttached { border:1px solid #888888; background-color:transparent; padding:5px; margin-top:10px; overflow:hidden;} +.replyBox .fileAttached ul li a { color:#AAAAAA; } +.boardWrite dl.option dd * { color:#888888; } +.replyBox .replyItem { background-color:transparent; border-bottom:1px dotted #888888; } +.replyBox .date { color:#888888; } +.trackbackBox .trackbackItem { background-color:transparent; } + +#fo_search select { background-color:#444444; color:#AAAAAA; } + +.inputTypeText { background-color:transparent; color:#AAAAAA; } +.inputTypeText:hover, .inputTypeText:focus { background-color:transparent; color:#AAAAAA; } +.boardWrite .tag .inputTypeText { background:transparent; } + +.secretContent { border:1px solid #888888; width:240px; } +.secretContent .title { background-color:#444444; color:#AAAAAA;} +.secretContent .content { background-color:#222222; color:#888888; } +.boardRead .readBody { color:#BBBBBB; } +.smallBox { border:1px solid #555555; } +.smallBox .messageBox { background-color:#444444; border-bottom:1px solid #888888; color:#AAAAAA;} +.smallBox .header { background:transparent !important; } + +/* button */ +a.button, span.button, del.button, +a.button span, span.button button, span.button input, del.button span{ + background-image:url(../images/black/form_buttons.png); + _background-image:url(../images/black/form_buttons.gif); +} + + +del.button span, +a.button, span.button, del.button, +a.button span, span.button button, span.button input, del.button span{ + color:#FFFFFF; +} + + diff --git a/modules/board/skins/xe_board/css/common.css b/modules/board/skins/xe_board/css/common.css index 64fd13480..d24e1e46c 100644 --- a/modules/board/skins/xe_board/css/common.css +++ b/modules/board/skins/xe_board/css/common.css @@ -288,8 +288,8 @@ html:not([lang*=""]) .boardList th { height:33px; } .smallBox { border:1px solid #e0e1db; margin-left:auto; margin-right:auto; } .smallBox.w268 { width:268px;} -.smallBox .header { position:relative; _width:100%; background:#ffffff url(../images/normal/bgH3.gif) no-repeat left bottom; overflow:hidden;} -.smallBox .header h3 { clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #fe3614; } +.smallBox .header { margin:0; padding:0; position:relative; _width:100%; background:#ffffff url(../images/common/bgH3.gif) no-repeat left bottom; overflow:hidden;} +.smallBox .header h3 { margin:0; padding:0; clear:both; font-size:1.2em; padding:.8em 2em .6em 1.2em; border-bottom:3px solid #fe3614; } .smallBox .complex { padding:1.5em 2em 2em 2em;} .smallBox .inputPassword { position:relative; border:none; padding:2em 2em 1.5em 2em;} .smallBox .inputPassword .inputTypeText { float:left; margin-right:.5em; width:8em;} diff --git a/modules/board/skins/xe_board/header.html b/modules/board/skins/xe_board/header.html index 7cd745c00..fec106778 100644 --- a/modules/board/skins/xe_board/header.html +++ b/modules/board/skins/xe_board/header.html @@ -12,6 +12,7 @@ + @@ -100,18 +101,18 @@ -
  • RSS
  • +
  • RSS
  • -
  • Skin Info
  • +
  • Skin Info
  • -
  • Tag list
  • +
  • Tag list
  • -
  • List
  • -
  • Webzine
  • -
  • Gallery
  • +
  • List
  • +
  • Webzine
  • +
  • Gallery
  • diff --git a/modules/board/skins/xe_board/images/black/bgBoardListTh.gif b/modules/board/skins/xe_board/images/black/bgBoardListTh.gif new file mode 100755 index 000000000..bdcd2cf24 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/bgBoardListTh.gif differ diff --git a/modules/board/skins/xe_board/images/black/bgH3.gif b/modules/board/skins/xe_board/images/black/bgH3.gif new file mode 100755 index 000000000..fa19e9238 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/bgH3.gif differ diff --git a/modules/board/skins/xe_board/images/black/buttonHelp.gif b/modules/board/skins/xe_board/images/black/buttonHelp.gif new file mode 100755 index 000000000..27b905783 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/black/buttonModifyE.gif b/modules/board/skins/xe_board/images/black/buttonModifyE.gif new file mode 100755 index 000000000..71d8d66b1 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/buttonModifyE.gif differ diff --git a/modules/board/skins/xe_board/images/black/buttonReply.gif b/modules/board/skins/xe_board/images/black/buttonReply.gif new file mode 100755 index 000000000..00ca5c56d Binary files /dev/null and b/modules/board/skins/xe_board/images/black/buttonReply.gif differ diff --git a/modules/board/skins/xe_board/images/black/buttonTypeInput24.gif b/modules/board/skins/xe_board/images/black/buttonTypeInput24.gif new file mode 100755 index 000000000..e02ce1f28 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/buttonTypeInput24.gif differ diff --git a/modules/board/skins/xe_board/images/black/calendar.gif b/modules/board/skins/xe_board/images/black/calendar.gif new file mode 100755 index 000000000..a27c7a807 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/calendar.gif differ diff --git a/modules/board/skins/xe_board/images/black/document_menu.gif b/modules/board/skins/xe_board/images/black/document_menu.gif new file mode 100755 index 000000000..19c3c3649 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/document_menu.gif differ diff --git a/modules/board/skins/xe_board/images/black/form_buttons.gif b/modules/board/skins/xe_board/images/black/form_buttons.gif new file mode 100755 index 000000000..965325573 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/form_buttons.gif differ diff --git a/modules/board/skins/xe_board/images/black/form_buttons.png b/modules/board/skins/xe_board/images/black/form_buttons.png new file mode 100755 index 000000000..ccc6d2f1f Binary files /dev/null and b/modules/board/skins/xe_board/images/black/form_buttons.png differ diff --git a/modules/board/skins/xe_board/images/black/iconAdmin.gif b/modules/board/skins/xe_board/images/black/iconAdmin.gif new file mode 100755 index 000000000..65cd25410 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconAdmin.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconAllTags.gif b/modules/board/skins/xe_board/images/black/iconAllTags.gif new file mode 100755 index 000000000..3de34876e Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconArticle.gif b/modules/board/skins/xe_board/images/black/iconArticle.gif new file mode 100755 index 000000000..95599d108 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconArticle.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconFile.gif b/modules/board/skins/xe_board/images/black/iconFile.gif new file mode 100755 index 000000000..30226d06c Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconFile.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconList.gif b/modules/board/skins/xe_board/images/black/iconList.gif new file mode 100755 index 000000000..2aa7174d4 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconList.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconMyInfo.gif b/modules/board/skins/xe_board/images/black/iconMyInfo.gif new file mode 100755 index 000000000..5413230e0 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconMyInfo.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconReply.gif b/modules/board/skins/xe_board/images/black/iconReply.gif new file mode 100755 index 000000000..7d3e5cb81 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconSetup.gif b/modules/board/skins/xe_board/images/black/iconSetup.gif new file mode 100755 index 000000000..7bdc7225e Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconSetup.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconTrackback.gif b/modules/board/skins/xe_board/images/black/iconTrackback.gif new file mode 100755 index 000000000..2aa7174d4 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/black/iconWrite.gif b/modules/board/skins/xe_board/images/black/iconWrite.gif new file mode 100755 index 000000000..818bb1784 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/iconWrite.gif differ diff --git a/modules/board/skins/xe_board/images/black/lineBoardListTh.gif b/modules/board/skins/xe_board/images/black/lineBoardListTh.gif new file mode 100755 index 000000000..0e78f40a2 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/lineBoardListTh.gif differ diff --git a/modules/board/skins/xe_board/images/black/lineH3.gif b/modules/board/skins/xe_board/images/black/lineH3.gif new file mode 100755 index 000000000..18d85c0b2 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/lineH3.gif differ diff --git a/modules/board/skins/xe_board/images/black/read.gif b/modules/board/skins/xe_board/images/black/read.gif new file mode 100755 index 000000000..3d658e05f Binary files /dev/null and b/modules/board/skins/xe_board/images/black/read.gif differ diff --git a/modules/board/skins/xe_board/images/black/typeBlog.gif b/modules/board/skins/xe_board/images/black/typeBlog.gif new file mode 100755 index 000000000..0501bb832 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/typeBlog.gif differ diff --git a/modules/board/skins/xe_board/images/black/typeGallery.gif b/modules/board/skins/xe_board/images/black/typeGallery.gif new file mode 100755 index 000000000..b61fe872e Binary files /dev/null and b/modules/board/skins/xe_board/images/black/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/black/typeList.gif b/modules/board/skins/xe_board/images/black/typeList.gif new file mode 100755 index 000000000..5fc6f3796 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/black/typeWebzine.gif b/modules/board/skins/xe_board/images/black/typeWebzine.gif new file mode 100755 index 000000000..061519409 Binary files /dev/null and b/modules/board/skins/xe_board/images/black/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/buttonHelp.gif b/modules/board/skins/xe_board/images/cyan/buttonHelp.gif new file mode 100755 index 000000000..d330e801f Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/iconAllTags.gif b/modules/board/skins/xe_board/images/cyan/iconAllTags.gif new file mode 100755 index 000000000..31602d819 Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/iconReply.gif b/modules/board/skins/xe_board/images/cyan/iconReply.gif new file mode 100755 index 000000000..a6d4ea112 Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/iconRss.gif b/modules/board/skins/xe_board/images/cyan/iconRss.gif new file mode 100755 index 000000000..eec2d5ead Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/iconRss.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/iconTrackback.gif b/modules/board/skins/xe_board/images/cyan/iconTrackback.gif new file mode 100755 index 000000000..1c83bcadd Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/typeGallery.gif b/modules/board/skins/xe_board/images/cyan/typeGallery.gif new file mode 100755 index 000000000..8479abbbd Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/typeList.gif b/modules/board/skins/xe_board/images/cyan/typeList.gif new file mode 100755 index 000000000..f031faa8c Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/cyan/typeWebzine.gif b/modules/board/skins/xe_board/images/cyan/typeWebzine.gif new file mode 100755 index 000000000..09fcaac9b Binary files /dev/null and b/modules/board/skins/xe_board/images/cyan/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/images/green/buttonHelp.gif b/modules/board/skins/xe_board/images/green/buttonHelp.gif new file mode 100755 index 000000000..d330e801f Binary files /dev/null and b/modules/board/skins/xe_board/images/green/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/green/iconAllTags.gif b/modules/board/skins/xe_board/images/green/iconAllTags.gif new file mode 100755 index 000000000..31602d819 Binary files /dev/null and b/modules/board/skins/xe_board/images/green/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/green/iconReply.gif b/modules/board/skins/xe_board/images/green/iconReply.gif new file mode 100755 index 000000000..a6d4ea112 Binary files /dev/null and b/modules/board/skins/xe_board/images/green/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/green/iconRss.gif b/modules/board/skins/xe_board/images/green/iconRss.gif new file mode 100755 index 000000000..eec2d5ead Binary files /dev/null and b/modules/board/skins/xe_board/images/green/iconRss.gif differ diff --git a/modules/board/skins/xe_board/images/green/iconTrackback.gif b/modules/board/skins/xe_board/images/green/iconTrackback.gif new file mode 100755 index 000000000..1c83bcadd Binary files /dev/null and b/modules/board/skins/xe_board/images/green/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/green/typeGallery.gif b/modules/board/skins/xe_board/images/green/typeGallery.gif new file mode 100755 index 000000000..8479abbbd Binary files /dev/null and b/modules/board/skins/xe_board/images/green/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/green/typeList.gif b/modules/board/skins/xe_board/images/green/typeList.gif new file mode 100755 index 000000000..f031faa8c Binary files /dev/null and b/modules/board/skins/xe_board/images/green/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/green/typeWebzine.gif b/modules/board/skins/xe_board/images/green/typeWebzine.gif new file mode 100755 index 000000000..09fcaac9b Binary files /dev/null and b/modules/board/skins/xe_board/images/green/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/images/purple/buttonHelp.gif b/modules/board/skins/xe_board/images/purple/buttonHelp.gif new file mode 100755 index 000000000..d330e801f Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/purple/iconAllTags.gif b/modules/board/skins/xe_board/images/purple/iconAllTags.gif new file mode 100755 index 000000000..31602d819 Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/purple/iconReply.gif b/modules/board/skins/xe_board/images/purple/iconReply.gif new file mode 100755 index 000000000..a6d4ea112 Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/purple/iconRss.gif b/modules/board/skins/xe_board/images/purple/iconRss.gif new file mode 100755 index 000000000..eec2d5ead Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/iconRss.gif differ diff --git a/modules/board/skins/xe_board/images/purple/iconTrackback.gif b/modules/board/skins/xe_board/images/purple/iconTrackback.gif new file mode 100755 index 000000000..1c83bcadd Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/purple/typeGallery.gif b/modules/board/skins/xe_board/images/purple/typeGallery.gif new file mode 100755 index 000000000..8479abbbd Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/purple/typeList.gif b/modules/board/skins/xe_board/images/purple/typeList.gif new file mode 100755 index 000000000..f031faa8c Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/purple/typeWebzine.gif b/modules/board/skins/xe_board/images/purple/typeWebzine.gif new file mode 100755 index 000000000..09fcaac9b Binary files /dev/null and b/modules/board/skins/xe_board/images/purple/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/images/red/buttonHelp.gif b/modules/board/skins/xe_board/images/red/buttonHelp.gif new file mode 100755 index 000000000..d330e801f Binary files /dev/null and b/modules/board/skins/xe_board/images/red/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/red/iconAllTags.gif b/modules/board/skins/xe_board/images/red/iconAllTags.gif new file mode 100755 index 000000000..31602d819 Binary files /dev/null and b/modules/board/skins/xe_board/images/red/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/red/iconReply.gif b/modules/board/skins/xe_board/images/red/iconReply.gif new file mode 100755 index 000000000..a6d4ea112 Binary files /dev/null and b/modules/board/skins/xe_board/images/red/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/red/iconRss.gif b/modules/board/skins/xe_board/images/red/iconRss.gif new file mode 100755 index 000000000..eec2d5ead Binary files /dev/null and b/modules/board/skins/xe_board/images/red/iconRss.gif differ diff --git a/modules/board/skins/xe_board/images/red/iconTrackback.gif b/modules/board/skins/xe_board/images/red/iconTrackback.gif new file mode 100755 index 000000000..1c83bcadd Binary files /dev/null and b/modules/board/skins/xe_board/images/red/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/red/typeGallery.gif b/modules/board/skins/xe_board/images/red/typeGallery.gif new file mode 100755 index 000000000..8479abbbd Binary files /dev/null and b/modules/board/skins/xe_board/images/red/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/red/typeList.gif b/modules/board/skins/xe_board/images/red/typeList.gif new file mode 100755 index 000000000..f031faa8c Binary files /dev/null and b/modules/board/skins/xe_board/images/red/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/red/typeWebzine.gif b/modules/board/skins/xe_board/images/red/typeWebzine.gif new file mode 100755 index 000000000..09fcaac9b Binary files /dev/null and b/modules/board/skins/xe_board/images/red/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/images/white/buttonHelp.gif b/modules/board/skins/xe_board/images/white/buttonHelp.gif new file mode 100755 index 000000000..d330e801f Binary files /dev/null and b/modules/board/skins/xe_board/images/white/buttonHelp.gif differ diff --git a/modules/board/skins/xe_board/images/white/iconAllTags.gif b/modules/board/skins/xe_board/images/white/iconAllTags.gif new file mode 100755 index 000000000..31602d819 Binary files /dev/null and b/modules/board/skins/xe_board/images/white/iconAllTags.gif differ diff --git a/modules/board/skins/xe_board/images/white/iconReply.gif b/modules/board/skins/xe_board/images/white/iconReply.gif new file mode 100755 index 000000000..a6d4ea112 Binary files /dev/null and b/modules/board/skins/xe_board/images/white/iconReply.gif differ diff --git a/modules/board/skins/xe_board/images/white/iconRss.gif b/modules/board/skins/xe_board/images/white/iconRss.gif new file mode 100755 index 000000000..eec2d5ead Binary files /dev/null and b/modules/board/skins/xe_board/images/white/iconRss.gif differ diff --git a/modules/board/skins/xe_board/images/white/iconTrackback.gif b/modules/board/skins/xe_board/images/white/iconTrackback.gif new file mode 100755 index 000000000..1c83bcadd Binary files /dev/null and b/modules/board/skins/xe_board/images/white/iconTrackback.gif differ diff --git a/modules/board/skins/xe_board/images/white/typeGallery.gif b/modules/board/skins/xe_board/images/white/typeGallery.gif new file mode 100755 index 000000000..8479abbbd Binary files /dev/null and b/modules/board/skins/xe_board/images/white/typeGallery.gif differ diff --git a/modules/board/skins/xe_board/images/white/typeList.gif b/modules/board/skins/xe_board/images/white/typeList.gif new file mode 100755 index 000000000..f031faa8c Binary files /dev/null and b/modules/board/skins/xe_board/images/white/typeList.gif differ diff --git a/modules/board/skins/xe_board/images/white/typeWebzine.gif b/modules/board/skins/xe_board/images/white/typeWebzine.gif new file mode 100755 index 000000000..09fcaac9b Binary files /dev/null and b/modules/board/skins/xe_board/images/white/typeWebzine.gif differ diff --git a/modules/board/skins/xe_board/screenshot/black.gif b/modules/board/skins/xe_board/screenshot/black.gif new file mode 100755 index 000000000..f0bbfdd49 Binary files /dev/null and b/modules/board/skins/xe_board/screenshot/black.gif differ diff --git a/modules/board/skins/xe_board/skin.xml b/modules/board/skins/xe_board/skin.xml index 90ccf753f..a41bf3338 100644 --- a/modules/board/skins/xe_board/skin.xml +++ b/modules/board/skins/xe_board/skin.xml @@ -32,9 +32,9 @@ HTML/CSS : Chan-Myung Jeong (http://naradesign.net) - This is the basic board skin of Zeroboard XE. - Design : Ki-Jeong Seo (http://blog.naver.com/addcozy) - HTML/CSS : Chan-Myung Jeong (http://naradesign.net) + Esta es la base bordo de la piel de Zeroboard XE. + Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML / CSS: Jeong Chan-Myung (http://naradesign.net) @@ -43,35 +43,43 @@ 白(デフォルト) 白色(基本) White (default) - White (default) + Blanco (por defecto) 청록색 青緑 青绿色 Cyan - Cyan + Cian 초록색 绿色 Green - Green + Verde 빨간색 红色 Red - Red + Roja 보라색 紫色 Purple - Purple + Púrpura + + + 검은색 + + Black + Черного + Negro + 黑色 @@ -80,7 +88,7 @@ デフォルトスタイル 默认样式 Default Form - Default Form + Formulario por defecto 목록형, 웹진형, 갤러리형, 포럼형의 기본 스타일을 지정할 수 있습니다. 포럼형 스타일은 정렬대상을 updated로 하셔야 합니다. @@ -97,9 +105,9 @@ You may select default styles such as list style, webzine style, gallery stylz or forum style. Align Target for forum style is required to be selected as 'updated'. - - You may select default styles such as list style, webzine style, gallery stylz or forum style. - Align Target for forum style is required to be selected as 'updated'. + + Usted puede seleccionar por defecto los estilos como el estilo de lista, estilo webzine, galería stylz o estilo foro. + Alinear Meta para el foro estilo es necesaria para ser seleccionado como 'actualización'. list webzine @@ -112,12 +120,12 @@ ソート対象 排序对象 Align Target - Align Target + Alinear Meta 등록된 순서 또는 변경된 순서로 정렬을 할 수 있습니다. 登録順、変更順にソートできます。 可对主题按发表顺或最后更新顺进行排序。 It can align articles as registered order or modified order. - It can align articles as registered order or modified order. + Puede alinear los artículos registrados como fin o modificar el orden. list_order update_order @@ -137,7 +145,7 @@ 로그인 정보 출력 - 登陆表单 + 显示会员信息组 ログイン情報表示 Display Login Info Muestra la información de la conección @@ -147,7 +155,7 @@ 설정 표시 - 设置表单 + 显示管理设置组 設定表示 Display Setup Muestra la información de la Configuración @@ -279,9 +287,11 @@ 썸네일 생성 방법 サムネール生成方法 缩略图生成方式 + Type of Thumbnail 썸네일 생성 방법을 선택할 수 있습니다. (crop : 꽉 채우기, ratio : 비율 맞추기) サムネールの生成方法を選択します(Crop : トリミング, Ratio : 比率)。 可以选择缩略图生成方式(crop : 裁减, ratio : 比例)。 + Choose the type to create the thumnail. (crop / ratio) crop ratio @@ -289,18 +299,22 @@ 썸네일 가로크기 サムネールの横幅 缩略图宽度 + Width of Thumbnail 썸네일의 가로 크기를 지정할 수 있습니다. (기본 100px) サムネールの横幅を指定します(デフォルト 100px)。 可以指定缩略图宽度(默认为 100px)。 + Set the width of thumbnail. Default is 100px. 100 썸네일 세로크기 サムネールの縦幅 缩略图高度 + Height of Thumbnail 썸네일의 세로 크기를 지정할 수 있습니다. (기본 100px) サムネールの縦幅を指定します(デフォルト 100px)。 可以指定缩略图高度(默认为 100px)。 + Set the height of thumbnail. Default is 100px. 100 diff --git a/modules/board/skins/xe_board/style.blog.html b/modules/board/skins/xe_board/style.blog.html index ca991f04d..3946440de 100644 --- a/modules/board/skins/xe_board/style.blog.html +++ b/modules/board/skins/xe_board/style.blog.html @@ -29,11 +29,11 @@ {$document->getTitle()} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} diff --git a/modules/board/skins/xe_board/style.gallery.html b/modules/board/skins/xe_board/style.gallery.html index fe10cbf28..1d00a0d46 100644 --- a/modules/board/skins/xe_board/style.gallery.html +++ b/modules/board/skins/xe_board/style.gallery.html @@ -64,11 +64,11 @@ {$document->getTitle($module_info->subject_cut_size)} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} diff --git a/modules/board/skins/xe_board/style.list.html b/modules/board/skins/xe_board/style.list.html index 85fd43086..67d7485ca 100644 --- a/modules/board/skins/xe_board/style.list.html +++ b/modules/board/skins/xe_board/style.list.html @@ -72,11 +72,11 @@ {$document->getTitle($module_info->subject_cut_size)} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} @@ -102,11 +102,11 @@ {$document->getTitle($module_info->subject_cut_size)} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} diff --git a/modules/board/skins/xe_board/style.webzine.html b/modules/board/skins/xe_board/style.webzine.html index c3ef4501c..47b99e83f 100644 --- a/modules/board/skins/xe_board/style.webzine.html +++ b/modules/board/skins/xe_board/style.webzine.html @@ -70,11 +70,11 @@ {$document->getTitle($module_info->subject_cut_size)} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} @@ -108,11 +108,11 @@ {$document->getTitle($module_info->subject_cut_size)} - {$document->getCommentCount()} + {$document->getCommentCount()} - {$document->getTrackbackCount()} + {$document->getTrackbackCount()} {$document->printExtraImages(60*60*$module_info->duration_new)} diff --git a/modules/board/skins/xe_guestbook/comment_form.html b/modules/board/skins/xe_guestbook/comment_form.html index f44d7c1d2..c51d2c841 100644 --- a/modules/board/skins/xe_guestbook/comment_form.html +++ b/modules/board/skins/xe_guestbook/comment_form.html @@ -50,31 +50,38 @@
    +
    - +
    - +
    - +
    - +
    +
    +
    -
    +
    +
    useNotify())-->checked="checked" id="notify_message" /> +
    - isSecret())-->checked="checked" id="is_secret" /> - -
    +
    + isSecret())-->checked="checked" id="is_secret" /> + +
    +
    {$oComment->getEditor()}
    diff --git a/modules/board/skins/xe_guestbook/css/black.css b/modules/board/skins/xe_guestbook/css/black.css new file mode 100644 index 000000000..555a25939 --- /dev/null +++ b/modules/board/skins/xe_guestbook/css/black.css @@ -0,0 +1,112 @@ +@charset "utf-8"; + +/* board Title */ +.boardHeader h3 { margin:0; border-bottom:3px solid #fe3614; } + +/* board Information */ +.articleNum { float:left; background:url(../images/black/iconArticle.gif) no-repeat left top; } +.articleNum strong { font:bold 11px Tahoma; color:#BBBBBB;} + +/* account Navigation */ +.accountNavigation li.join a { background:url(../images/black/iconMyInfo.gif) no-repeat left top; padding-left:14px; } +.accountNavigation li.myInfo a { background:url(../images/black/iconMyInfo.gif) no-repeat left top; padding-left:14px; } + +/* boardRead */ +.boardRead .fileAttached li { background:url(../images/black/iconFile.gif) no-repeat left top;} + +/* style.list */ +.boardList th { background:transparent url(../images/black/lineBoardListTh.gif) no-repeat left bottom; } +.boardList td.recommend { color:#ff6600; } +.boardList td .replyAndTrackback { color:#BBBBBB; } +.buttonTypeGo { background:url(../images/black/buttonTypeInput24.gif) no-repeat; } + +/* pageNavigation */ +.pageNavigation .current { color:#BBBBBB; } + +/* replyAndTrackback */ +.buttonBox .replyAndTrackback a strong { color:#BBBBBB;} + +.replyBox .fileAttached li { background:url(../images/black/iconFile.gif) no-repeat left top;} + +/* replace common images */ +.boardHeader { border:1px solid #ABA9B4; border-bottom:0; background:transparent url(../images/black/bgH3.gif) repeat-x left bottom; overflow:hidden;} +.boardHeader h3 { background:transparent url(../images/black/lineH3.gif) no-repeat right bottom; color:#AAAAAA; border-bottom:3px solid #ABA9B4;} +.boardDescription { color:#666666; border:1px solid #666666; overflow:hidden; padding:10px; margin-top:5px; background-color:transparent;} +.accountNavigation li.setup a { background:url(../images/black/iconSetup.gif) no-repeat left top; padding-left:14px; } +.accountNavigation li.admin a { background:url(../images/black/iconAdmin.gif) no-repeat left top; padding-left:12px; } +.accountNavigation li.loginAndLogout a { background:url(../images/black/line_1x10_e0e0e0.gif) no-repeat left 2px; padding-left:8px; } + +.boardSubMenu { border-bottom:1px solid #444444;} +.boardList { width:100%; border:1px solid #444444; border-top:none; table-layout:fixed;} +.boardList th { color:#999999; font-weight:normal; border-top:1px solid #444444; border-bottom:1px solid #888888; white-space:nowrap; padding-top:5px; height:28px; overflow:hidden;} +.boardList th a { color:#999999; } +.boardList td { border-top:1px solid #444444; padding:.5em;} +.boardList th.num { border-left:0px solid #444444; } + +#board_category { background-color:transparent; color:#AAAAAA; } +#go_button { color:#AAAAAA; } + +.boardList tr.bg1, .boardList tr.bg2 { background-color:transparent; } +.boardList td.topic strong a, .boardList td.title a { color:#AAAAAA; } +.boardList td.author div { color:#AAAAAA; } +.boardList td.topic div.author strong { font-size:9pt; } +.boardList td.webzineTitle, .boardList td.webzineTitle a { color:#AAAAAA; } + +.boardRead .readHeader .title h4 a { color:#BBBBBB; } +.boardRead .dateAndCount .replyAndTrackback .replyCount { background:transparent url(../images/black/iconReply.gif) no-repeat left 1px; color:#888888; } +.boardRead .dateAndCount .replyAndTrackback .trackbackCount { background:transparent url(../images/black/iconTrackback.gif) no-repeat left 1px; color:#888888; } +.boardRead .dateAndCount .replyAndTrackback .replyCount a,.boardRead .dateAndCount .replyAndTrackback .trackbackCount a { color:#888888; } +.boardRead .dateAndCount .readedCount { background:transparent url("../images/black/read.gif") no-repeat left top; color:#4A3FD7;} +.boardRead .dateAndCount .date { color:#888888; background:transparent url("../images/black/calendar.gif") no-repeat left top; } +.comment_popup_menu, .document_popup_menu { background:url(../images/black/document_menu.gif) no-repeat right top;} + +.tagsBox { border:1px solid #888888; padding:10px; overflow:hidden;} +.tags div a:hover { background-color:#444444; color:#FFFFFF;} +.tags .tagTypeA a { color:#555555; background-color:#444444; margin:0;} +.tags .tagTypeB a { color:#888888; } +.tags .tagTypeC a { background-color:#333333;} +.tags .tagTypeD a { background-color:#111111;} +.boardRead .tag { background:transparent url(../images/common/iconTag.gif) no-repeat 3px 2px; } +.boardRead .fileAttached { border:1px solid #888888; background-color:transparent; padding:5px; margin-top:10px; overflow:hidden;} +.boardRead .fileAttached ul li a { color:#AAAAAA; } +.replyBox .fileAttached { border:1px solid #888888; background-color:transparent; padding:5px; margin-top:10px; overflow:hidden;} +.replyBox .fileAttached ul li a { color:#AAAAAA; } +.boardWrite dl.option dd * { color:#888888; } +.replyBox .replyItem { background-color:transparent; border-bottom:1px dotted #888888; } +.replyBox .date { color:#888888; } +.trackbackBox .trackbackItem { background-color:transparent; } + +#fo_search select { background-color:transparent; color:#AAAAAA; } + +.inputTypeText { background-color:transparent; color:#AAAAAA; } +.inputTypeText:hover, .inputTypeText:focus { background-color:transparent; color:#AAAAAA; } +.boardWrite .tag .inputTypeText { background:transparent; } + +.secretContent { border:1px solid #888888; width:240px; } +.secretContent .title { background-color:#444444; color:#AAAAAA;} +.secretContent .content { background-color:#222222; color:#888888; } +.smallBox .messageBox { background-color:#444444; border-bottom:1px solid #888888; color:#AAAAAA;} +.boardRead .readBody { color:#BBBBBB; } + +/* button */ +a.button, span.button, del.button, +a.button span, span.button button, span.button input, del.button span{ + background-image:url(../images/black/form_buttons.png); + _background-image:url(../images/black/form_buttons.gif); +} + + +del.button span, +a.button, span.button, del.button, +a.button span, span.button button, span.button input, del.button span{ + color:#FFFFFF; +} + + +.trackbackBox {border:1px solid #444444; } +.viewDocument { border:1px solid #444444; } +.replyBox { border:none; } +.replyBox .replyItem { border:none; border-top:1px dotted #444444;} +.boardWrite { border:1px solid #555555; } +.smallBox { border:1px solid #555555; } +.smallBox .header { background-color:transparent; } diff --git a/modules/board/skins/xe_guestbook/css/common.css b/modules/board/skins/xe_guestbook/css/common.css index c5364c458..8eea8d471 100644 --- a/modules/board/skins/xe_guestbook/css/common.css +++ b/modules/board/skins/xe_guestbook/css/common.css @@ -220,11 +220,12 @@ Jeong, Chan Myeong 070601~070630 .boardWrite { border:1px solid #e0e1db; padding-bottom:10px;} .boardWrite fieldset { border:none; } -.boardWrite .inputItem { margin:10px 10px 0 10px; } -.boardWrite .inputItem .userName {width:220px; margin-right:10px; } -.boardWrite .inputItem .userPw {width:220px; margin-right:10px; } -.boardWrite .inputItem .emailAddress {width:220px; margin-right:10px; } -.boardWrite .inputItem .homePage {width:220px; margin-right:10px; } +.boardWrite .inputItem { margin:10px 0 0 5px; float:left; } +.boardWrite .inputItem label { margin:0 0 3px 0; padding;0; display:block; white-space:nowrap;} +.boardWrite .inputItem .userName {width:100px; margin-right:10px; } +.boardWrite .inputItem .userPw {width:100px; margin-right:10px; } +.boardWrite .inputItem .emailAddress {width:100px; margin-right:10px; } +.boardWrite .inputItem .homePage {width:100px; margin-right:10px; } .boardWrite .title { margin-top:5px; } .boardWrite .title .category { margin-left:10px; } diff --git a/modules/board/skins/xe_guestbook/header.html b/modules/board/skins/xe_guestbook/header.html index 335b73520..265ac6348 100644 --- a/modules/board/skins/xe_guestbook/header.html +++ b/modules/board/skins/xe_guestbook/header.html @@ -13,6 +13,7 @@ + diff --git a/modules/board/skins/xe_guestbook/images/black/bgBoardListTh.gif b/modules/board/skins/xe_guestbook/images/black/bgBoardListTh.gif new file mode 100755 index 000000000..bdcd2cf24 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/bgBoardListTh.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/bgH3.gif b/modules/board/skins/xe_guestbook/images/black/bgH3.gif new file mode 100755 index 000000000..fa19e9238 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/bgH3.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/buttonHelp.gif b/modules/board/skins/xe_guestbook/images/black/buttonHelp.gif new file mode 100755 index 000000000..27b905783 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/buttonHelp.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/buttonModifyE.gif b/modules/board/skins/xe_guestbook/images/black/buttonModifyE.gif new file mode 100755 index 000000000..71d8d66b1 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/buttonModifyE.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/buttonReply.gif b/modules/board/skins/xe_guestbook/images/black/buttonReply.gif new file mode 100755 index 000000000..00ca5c56d Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/buttonReply.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/buttonTypeInput24.gif b/modules/board/skins/xe_guestbook/images/black/buttonTypeInput24.gif new file mode 100755 index 000000000..e02ce1f28 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/buttonTypeInput24.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/calendar.gif b/modules/board/skins/xe_guestbook/images/black/calendar.gif new file mode 100755 index 000000000..a27c7a807 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/calendar.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/document_menu.gif b/modules/board/skins/xe_guestbook/images/black/document_menu.gif new file mode 100755 index 000000000..19c3c3649 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/document_menu.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/form_buttons.gif b/modules/board/skins/xe_guestbook/images/black/form_buttons.gif new file mode 100755 index 000000000..965325573 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/form_buttons.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/form_buttons.png b/modules/board/skins/xe_guestbook/images/black/form_buttons.png new file mode 100755 index 000000000..ccc6d2f1f Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/form_buttons.png differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconAdmin.gif b/modules/board/skins/xe_guestbook/images/black/iconAdmin.gif new file mode 100755 index 000000000..65cd25410 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconAdmin.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconAllTags.gif b/modules/board/skins/xe_guestbook/images/black/iconAllTags.gif new file mode 100755 index 000000000..3de34876e Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconAllTags.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconArticle.gif b/modules/board/skins/xe_guestbook/images/black/iconArticle.gif new file mode 100755 index 000000000..95599d108 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconArticle.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconFile.gif b/modules/board/skins/xe_guestbook/images/black/iconFile.gif new file mode 100755 index 000000000..30226d06c Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconFile.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconList.gif b/modules/board/skins/xe_guestbook/images/black/iconList.gif new file mode 100755 index 000000000..2aa7174d4 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconList.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconMyInfo.gif b/modules/board/skins/xe_guestbook/images/black/iconMyInfo.gif new file mode 100755 index 000000000..5413230e0 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconMyInfo.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconReply.gif b/modules/board/skins/xe_guestbook/images/black/iconReply.gif new file mode 100755 index 000000000..7d3e5cb81 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconReply.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconSetup.gif b/modules/board/skins/xe_guestbook/images/black/iconSetup.gif new file mode 100755 index 000000000..7bdc7225e Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconSetup.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconTrackback.gif b/modules/board/skins/xe_guestbook/images/black/iconTrackback.gif new file mode 100755 index 000000000..2aa7174d4 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconTrackback.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/iconWrite.gif b/modules/board/skins/xe_guestbook/images/black/iconWrite.gif new file mode 100755 index 000000000..818bb1784 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/iconWrite.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/lineBoardListTh.gif b/modules/board/skins/xe_guestbook/images/black/lineBoardListTh.gif new file mode 100755 index 000000000..0e78f40a2 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/lineBoardListTh.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/lineH3.gif b/modules/board/skins/xe_guestbook/images/black/lineH3.gif new file mode 100755 index 000000000..18d85c0b2 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/lineH3.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/read.gif b/modules/board/skins/xe_guestbook/images/black/read.gif new file mode 100755 index 000000000..3d658e05f Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/read.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/typeBlog.gif b/modules/board/skins/xe_guestbook/images/black/typeBlog.gif new file mode 100755 index 000000000..0501bb832 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/typeBlog.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/typeGallery.gif b/modules/board/skins/xe_guestbook/images/black/typeGallery.gif new file mode 100755 index 000000000..b61fe872e Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/typeGallery.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/typeList.gif b/modules/board/skins/xe_guestbook/images/black/typeList.gif new file mode 100755 index 000000000..5fc6f3796 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/typeList.gif differ diff --git a/modules/board/skins/xe_guestbook/images/black/typeWebzine.gif b/modules/board/skins/xe_guestbook/images/black/typeWebzine.gif new file mode 100755 index 000000000..061519409 Binary files /dev/null and b/modules/board/skins/xe_guestbook/images/black/typeWebzine.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/black.gif b/modules/board/skins/xe_guestbook/screenshot/black.gif new file mode 100755 index 000000000..1c1ab875f Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/black.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/cyan.gif b/modules/board/skins/xe_guestbook/screenshot/cyan.gif new file mode 100755 index 000000000..12d2b9891 Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/cyan.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/green.gif b/modules/board/skins/xe_guestbook/screenshot/green.gif new file mode 100755 index 000000000..0499098c8 Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/green.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/purple.gif b/modules/board/skins/xe_guestbook/screenshot/purple.gif new file mode 100755 index 000000000..0499098c8 Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/purple.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/red.gif b/modules/board/skins/xe_guestbook/screenshot/red.gif new file mode 100755 index 000000000..0499098c8 Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/red.gif differ diff --git a/modules/board/skins/xe_guestbook/screenshot/white.gif b/modules/board/skins/xe_guestbook/screenshot/white.gif new file mode 100755 index 000000000..0499098c8 Binary files /dev/null and b/modules/board/skins/xe_guestbook/screenshot/white.gif differ diff --git a/modules/board/skins/xe_guestbook/skin.xml b/modules/board/skins/xe_guestbook/skin.xml index 8b363a574..5ab619a24 100644 --- a/modules/board/skins/xe_guestbook/skin.xml +++ b/modules/board/skins/xe_guestbook/skin.xml @@ -4,15 +4,18 @@ zbXE 留言本默认皮肤 zbXE ゲストブックのデフォルトスキン zbXE Basic Guestbook Skin + Zeroboard XE básicos piel Libro de visitas 제로 Zero Zero Zero + Zero board모듈의 기본 방명록 스킨 留言本模块的默认皮肤。 ボード(board)モジュールのデフォルトスキンです。 This is the basic guestbook skin of Zeroboard XE. + Este es el libro de visitas de la piel Zeroboard XE. @@ -20,30 +23,43 @@ 白(デフォルト) 白色(基本) White (default) + Blanco (por defecto) 청록색 青緑 青绿色 Cyan + Cian 초록색 绿色 Green + Verde 빨간색 红色 Red + Roja 보라색 紫色 Purple + Púrpura + + + 검은색 + + Black + Черного + Negro + 黑色 @@ -52,20 +68,24 @@ 标题 タイトル Title + Título 방명록의 제목을 적어주세요. 请输入留言本标题。 ゲストブックのタイトルを入力してください。 Please input the title of guestbook. + Introduce el título del libro de visitas. 방명록 설명 留言本说明 ゲストブックの説明 Description + Description 내용의 기본값 内容默认值 内容のデフォルト値 Default value of content + Valor por defecto de contenido diff --git a/modules/board/skins/xe_guestbook/write_form.html b/modules/board/skins/xe_guestbook/write_form.html index 08ead726f..8a2ce2f1e 100644 --- a/modules/board/skins/xe_guestbook/write_form.html +++ b/modules/board/skins/xe_guestbook/write_form.html @@ -10,21 +10,24 @@
    -
    - - -
    -
    - - -
    -
    - - -
    -
    - - +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 81897364d..86efca68f 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -124,7 +124,7 @@ // 내용에서 제로보드XE만의 태그를 삭제 $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); - $obj->regdate = date("YmdHis"); + if(!$obj->regdate) $obj->regdate = date("YmdHis"); // 세션에서 최고 관리자가 아니면 iframe, script 제거 if($logged_info->is_admin != 'Y') $obj->content = removeHackTag($obj->content); diff --git a/modules/comment/comment.item.php b/modules/comment/comment.item.php index 8d6941dc8..121497409 100644 --- a/modules/comment/comment.item.php +++ b/modules/comment/comment.item.php @@ -210,7 +210,7 @@ $content = trim(cut_str($content, $str_size, '...')); // >, <, "를 다시 복구 - return str_replace(array('<','>','"',' '),array('<','>','"',' '), $content); + return str_replace(array('<','>','"'),array('<','>','"'), $content); } function getRegdate($format = 'Y.m.d H:i:s') { @@ -304,7 +304,7 @@ $GLOBALS['__member_signature_max_height'] = $member_config->signature_max_height; } $max_signature_height = $GLOBALS['__member_signature_max_height']; - if($max_signature_height) $signature = sprintf('
    %s
    ',$max_signature_height, $signature); + if($max_signature_height) $signature = sprintf('
    %s
    ', $max_signature_height, $max_signature_height, $max_signature_height, $signature); return $signature; } diff --git a/modules/comment/lang/en.lang.php b/modules/comment/lang/en.lang.php index 8127365e0..9c917770c 100644 --- a/modules/comment/lang/en.lang.php +++ b/modules/comment/lang/en.lang.php @@ -11,7 +11,7 @@ $lang->cmd_delete_checked_comment = 'Delete selected item'; $lang->comment_count = 'Number of Comments'; - $lang->about_comment_count = 'If there are more comments, they will be moved to list.'; + $lang->about_comment_count = 'Display the comments as much as user inputs the number and it will be moved to the List if the comments are over its number.'; $lang->msg_cart_is_null = 'Please select an article to delete'; $lang->msg_checked_comment_is_deleted = '%d comment(s) is(are) successfully deleted.'; diff --git a/modules/comment/lang/fr.lang.php b/modules/comment/lang/fr.lang.php index 1429111f3..8693b9dd8 100644 --- a/modules/comment/lang/fr.lang.php +++ b/modules/comment/lang/fr.lang.php @@ -8,14 +8,14 @@ $lang->cmd_comment_do = 'Vous voudriez...'; $lang->comment_list = 'Liste des Commentaires'; - $lang->cmd_toggle_checked_comment = 'Renverser item choisi'; - $lang->cmd_delete_checked_comment = 'Supprimer item choisi'; + $lang->cmd_toggle_checked_comment = 'Renverser les choisis'; + $lang->cmd_delete_checked_comment = 'Supprimer les choisis'; - $lang->comment_count = 'Somme de Commentaires'; - $lang->about_comment_count = 'Quand il y a plus de commentaires, ils seront bougs sur le liste.'; + $lang->comment_count = 'Commentaires'; + $lang->about_comment_count = 'Quand il y a plus de commentaires, ils seront bougés sur le liste.'; - $lang->msg_cart_is_null = 'Choisissez un article supprimer, SVP.'; - $lang->msg_checked_comment_is_deleted = '%d commentaire(s) est(sont) supprim(s) avec succs.'; + $lang->msg_cart_is_null = 'Choisissez un article à supprimer, SVP.'; + $lang->msg_checked_comment_is_deleted = '%d commentaire(s) est(sont) supprimé(s) avec succés.'; $lang->search_target_list = array( 'content' => 'Contenu', @@ -25,7 +25,7 @@ 'email_address' => 'Courriel', 'homepage' => 'Page d\'Accueil', 'regdate' => 'Jour', - 'last_update' => 'Mise Jour', + 'last_update' => 'Mise à Jour', 'ipaddress' => 'Addresse IP', ); ?> diff --git a/modules/comment/lang/jp.lang.php b/modules/comment/lang/jp.lang.php index acf314cc0..339d4b964 100644 --- a/modules/comment/lang/jp.lang.php +++ b/modules/comment/lang/jp.lang.php @@ -1,7 +1,7 @@  翻訳:RisaPapa、ミニミ + * @author zero  翻訳:RisaPapa、ミニミ、liahona * @brief コメント(comment) モジュールの基本言語パッケージ **/ @@ -11,8 +11,8 @@ $lang->cmd_toggle_checked_comment = '選択項目の反転'; $lang->cmd_delete_checked_comment = '選択項目削除'; - $lang->comment_count = '댓글 수'; - $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->comment_count = 'コメント数'; + $lang->about_comment_count = 'コメントを指定した数だけ表示し、それ以上はリスト化します。'; $lang->msg_cart_is_null = '削除するコメントを選択してください。'; $lang->msg_checked_comment_is_deleted = '%d個のコメントを削除しました。'; diff --git a/modules/comment/lang/zh-CN.lang.php b/modules/comment/lang/zh-CN.lang.php index e5bba3c8c..f3b1e7aea 100644 --- a/modules/comment/lang/zh-CN.lang.php +++ b/modules/comment/lang/zh-CN.lang.php @@ -11,8 +11,8 @@ $lang->cmd_toggle_checked_comment = '反选'; $lang->cmd_delete_checked_comment = '删除所选'; - $lang->comment_count = '댓글 수'; - $lang->about_comment_count = '댓글을 정해진 수 만큼만 표시하고 그 이상일 경우 목록으로 이동할 수 있게 합니다.'; + $lang->comment_count = '每页评论数'; + $lang->about_comment_count = '可以指定要显示的每页评论数。'; $lang->msg_cart_is_null = '请选择要删除的评论。'; $lang->msg_checked_comment_is_deleted = '已删除%d个评论。'; diff --git a/modules/comment/queries/getCommentPageList.xml b/modules/comment/queries/getCommentPageList.xml index 4e7737fce..de7020db8 100644 --- a/modules/comment/queries/getCommentPageList.xml +++ b/modules/comment/queries/getCommentPageList.xml @@ -14,6 +14,7 @@ + diff --git a/modules/comment/queries/insertComment.xml b/modules/comment/queries/insertComment.xml index c6fd81e3f..fbfb2e8a2 100644 --- a/modules/comment/queries/insertComment.xml +++ b/modules/comment/queries/insertComment.xml @@ -20,6 +20,7 @@ + diff --git a/modules/counter/lang/fr.lang.php b/modules/counter/lang/fr.lang.php index 0fc72a1d1..3e2b8cf10 100644 --- a/modules/counter/lang/fr.lang.php +++ b/modules/counter/lang/fr.lang.php @@ -2,7 +2,7 @@ /** * @file modules/counter/lang/fr.lang.php * @author zero Traduit par Pierre Duvent - * @brief Paquet de la langue franaise (Contenu fondamental est seulement lest) + * @brief Paquet de la langue française (Contenu fondamental seulement) **/ $lang->counter = "Coumpteur"; @@ -11,13 +11,12 @@ 'hour' => 'Par Heure', 'day' => 'Par Jour', 'month' => 'Par Mois', - 'year' => 'Par An', + 'year' => 'Par Année', ); $lang->total_counter = 'Statut Total'; - $lang->selected_day_counter = 'Statut du Jour Choisi'; + $lang->selected_day_counter = 'Statut Journal'; $lang->unique_visitor = 'Visiteurs'; - $lang->pageview = 'Vues de la Page'; + $lang->pageview = 'Vues'; ?> - \ No newline at end of file diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 528737f51..1c9bf575e 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -293,7 +293,8 @@ // 댓글 이전 if($oDocument->getCommentCount()) { $oCommentModel = &getModel('comment'); - $comments = $oCommentModel->getCommentList($document_srl, true); + $comment_output = $oCommentModel->getCommentList($document_srl, true); + $comments = $comment_output->data; if(count($comments)) { $oCommentController = &getController('comment'); $success_count = 0; diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index 746d30cde..05f0a13d1 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -426,6 +426,7 @@ $args->document_srl = $document_srl; $output = executeQuery('document.getDeclaredDocument', $args); if(!$output->toBool()) return $output; + $declared_count = $output->data->declared_count; // 문서 원본을 가져옴 $oDocumentModel = &getModel('document'); @@ -466,7 +467,7 @@ } // 신고글 추가 - if($output->data->declared_count > 0) $output = executeQuery('document.updateDeclaredDocument', $args); + if($declared_count > 0) $output = executeQuery('document.updateDeclaredDocument', $args); else $output = executeQuery('document.insertDeclaredDocument', $args); if(!$output->toBool()) return $output; diff --git a/modules/document/document.item.php b/modules/document/document.item.php index 47b921132..605305586 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -99,7 +99,8 @@ // 전체 설정에서 허용시 모듈별 설정을 체크 else { $module_config = $trackback_config->module_config[$this->get('module_srl')]; - if(!$module_config || $module_config->enable_trackback != 'Y') $this->allow_trackback_status = false; + if(!$module_config || $module_config->enable_trackback != 'N') $this->allow_trackback_status = true; + else $this->allow_trackback_status = false; } } } @@ -217,7 +218,7 @@ $attrs = array(); if($this->get('title_bold')=='Y') $attrs[] = "font-weight:bold;"; - if($this->get('title_color')) $attrs[] = "color:#".$this->get('title_color'); + if($this->get('title_color')&&$this->get('title_color')!='N') $attrs[] = "color:#".$this->get('title_color'); if(count($attrs)) return sprintf("%s", implode(';',$attrs), htmlspecialchars($title)); else return htmlspecialchars($title); @@ -237,7 +238,7 @@ return htmlspecialchars($content); } - function getContent($add_popup_menu = true, $add_content_info = true) { + function getContent($add_popup_menu = true, $add_content_info = true, $resource_realpath = false) { if(!$this->document_srl) return; if($this->isSecret() && !$this->isGranted()) return Context::getLang('msg_is_secret'); @@ -273,6 +274,11 @@ $content = sprintf('
    %s
    ', $content); } + // resource_realpath가 true이면 내용내 이미지의 경로를 절대 경로로 변경 + if($resource_realpath) { + $content = preg_replace_callback('/]+)>/i',array($this,'replaceResourceRealPath'), $content); + } + return $content; } @@ -287,7 +293,7 @@ $content = trim(cut_str($content, $str_size, '...')); // >, <, "를 다시 복구 - return str_replace(array('<','>','"',' '),array('<','>','"',' '), $content); + return str_replace(array('<','>','"'),array('<','>','"'), $content); } function getRegdate($format = 'Y.m.d H:i:s') { @@ -644,10 +650,17 @@ } if($signature) { $max_signature_height = $GLOBALS['__member_signature_max_height']; - if($max_signature_height) $signature = sprintf('
    %s
    ',$max_signature_height, $signature); + if($max_signature_height) $signature = sprintf('
    %s
    ', $max_signature_height, $max_signature_height, $max_signature_height, $signature); } return $signature; } + + /** + * @brief 내용내의 이미지 경로를 절대 경로로 변경 + **/ + function replaceResourceRealPath($matches) { + return preg_replace('/src=(["\']?)files/i','src=$1'.Context::getRequestUri().'files', $matches[0]); + } } ?> diff --git a/modules/document/lang/es.lang.php b/modules/document/lang/es.lang.php index 113cc2a4c..481c2c34f 100644 --- a/modules/document/lang/es.lang.php +++ b/modules/document/lang/es.lang.php @@ -11,16 +11,16 @@ $lang->thumbnail_ratio = 'Ratio'; $lang->cmd_delete_all_thumbnail = 'Delete all thumbnails'; $lang->move_target_module = "Módulo para cambiar de posición"; - $lang->title_bold = '제목 굵게'; - $lang->title_color = '제목 색깔'; + $lang->title_bold = 'Bold'; + $lang->title_color = 'Color'; - $lang->cmd_search_next = '계속 검색'; + $lang->cmd_search_next = 'Buscar siguiente'; - $lang->cmd_temp_save = '임시 저장'; + $lang->cmd_temp_save = 'Guardar Temporales'; - $lang->cmd_toggle_checked_document = '선택항목 반전'; + $lang->cmd_toggle_checked_document = 'Invertir los elementos seleccionados'; $lang->cmd_delete_checked_document = 'Eliminar lo seleccionado'; - $lang->cmd_document_do = '이 게시물을..'; + $lang->cmd_document_do = 'Usted ..'; $lang->msg_cart_is_null = 'Selecciona el documento que desea eliminar'; $lang->msg_category_not_moved = 'No puede se movido'; diff --git a/modules/document/lang/fr.lang.php b/modules/document/lang/fr.lang.php index d9e13e303..14b685e0b 100644 --- a/modules/document/lang/fr.lang.php +++ b/modules/document/lang/fr.lang.php @@ -2,7 +2,7 @@ /** * @file modules/document/lang/fr.lang.php * @author zero Traduit par Pierre Duvent - * @brief Paquet de la langue franaise fondamentale du module du Document + * @brief Paquet de la langue franaise fondamentale du module du Document **/ $lang->document_list = 'Liste des Documents'; @@ -10,7 +10,7 @@ $lang->thumbnail_crop = 'Rogner'; $lang->thumbnail_ratio = 'Proportion'; $lang->cmd_delete_all_thumbnail = 'Supprimer toutes les vignettes'; - $lang->move_target_module = "Module dmnager"; + $lang->move_target_module = "Module à déménager"; $lang->title_bold = 'Gras'; $lang->title_color = 'Couleur'; @@ -18,35 +18,35 @@ $lang->cmd_temp_save = 'Conserver temporairement'; - $lang->cmd_toggle_checked_document = 'Renverser les items choisis'; - $lang->cmd_delete_checked_document = 'Supprimer les documents choisis'; + $lang->cmd_toggle_checked_document = 'Renverser les choisis'; + $lang->cmd_delete_checked_document = 'Supprimer les choisis'; $lang->cmd_document_do = 'Vous voudriez..'; - $lang->msg_cart_is_null = 'Choisissez les articles supprimer, SVP.'; - $lang->msg_category_not_moved = 'Ne peut(peuvent) pas tre boug(s)'; + $lang->msg_cart_is_null = 'Choisissez les articles à supprimer, SVP.'; + $lang->msg_category_not_moved = 'Ne peut(peuvent) pas être bougé(s)'; $lang->msg_is_secret = 'Cet article est secret'; - $lang->msg_checked_document_is_deleted = '%d article(s) est(sont) supprim'; + $lang->msg_checked_document_is_deleted = '%d article(s) est(sont) supprimé(s)'; // Search targets in admin page $lang->search_target_list = array( 'title' => 'Titre', 'content' => 'Contenu', - 'user_id' => 'Compte d\'Utilisateur', - 'member_srl' => 'Nombre Sriel de Membre', - 'user_name' => 'Nom d\'Utilisateur', + 'user_id' => 'Compte', + 'member_srl' => 'Nombre Sériel du Membre', + 'user_name' => 'Nom', 'nick_name' => 'Surnom', 'email_address' => 'Courriel', 'homepage' => 'Page d\'accueil', 'is_notice' => 'Notice', 'is_secret' => 'Secret', 'tags' => 'Tag', - 'readed_count' => 'Somme de Vues (surplus)', - 'voted_count' => 'Somme de Recommandations (surplus)', - 'comment_count ' => 'Somme de Commentaires (surplus)', - 'trackback_count ' => 'Somme de Retroliens (surplus)', - 'uploaded_count ' => 'Somme de Fichiers Attachs (surplus)', - 'regdate' => 'Jour d\'Enregistrement', - 'last_update' => 'La Derniere Mise a Jour', + 'readed_count' => 'Vues (surplus)', + 'voted_count' => 'Recommandés (surplus)', + 'comment_count ' => 'Commentaires (surplus)', + 'trackback_count ' => 'Retroliens (surplus)', + 'uploaded_count ' => 'Fichiers Attachés (surplus)', + 'regdate' => 'Enrégistré', + 'last_update' => 'La Derniere Mise à Jour', 'ipaddress' => 'Addresse IP', ); ?> diff --git a/modules/editor/components/cc_license/info.xml b/modules/editor/components/cc_license/info.xml index f8dc0d73a..9d638c541 100755 --- a/modules/editor/components/cc_license/info.xml +++ b/modules/editor/components/cc_license/info.xml @@ -4,7 +4,7 @@ Licencias Creative Commons Creative Commons Licenses クリエイティブコモンズライセンス - Creative Commons Licenses + 知识共享许可协议 Creative Commons Licenses zero @@ -17,7 +17,7 @@ CCL licencia de producto CCL 라이센스를 출력합니다. CCLライセンスを表示します。 - CCL 라이센스를 출력합니다. + 显示知识共享许可协议。 Output CCL license diff --git a/modules/editor/components/code_highlighter/code.png b/modules/editor/components/code_highlighter/code.png deleted file mode 100755 index b2b401363..000000000 Binary files a/modules/editor/components/code_highlighter/code.png and /dev/null differ diff --git a/modules/editor/components/code_highlighter/code_highlighter.class.php b/modules/editor/components/code_highlighter/code_highlighter.class.php deleted file mode 100755 index cfa6ed5ab..000000000 --- a/modules/editor/components/code_highlighter/code_highlighter.class.php +++ /dev/null @@ -1,88 +0,0 @@ - - * @brief Code Highlighter - **/ - -class code_highlighter extends EditorHandler { - - // editor_sequence 는 에디터에서 필수로 달고 다녀야 함 - var $editor_sequence = 0; - var $component_path = ''; - - /** - * @brief editor_sequence과 컴포넌트의 경로를 받음 - **/ - function code_highlighter($editor_sequence, $component_path) { - $this->editor_sequence = $editor_sequence; - $this->component_path = $component_path; - } - - /** - * @brief popup window요청시 popup window에 출력할 내용을 추가하면 된다 - **/ - function getPopupContent() { - // 템플릿을 미리 컴파일해서 컴파일된 소스를 return - $tpl_path = $this->component_path.'tpl'; - $tpl_file = 'popup.html'; - - Context::set("tpl_path", $tpl_path); - - $oTemplate = &TemplateHandler::getInstance(); - return $oTemplate->compile($tpl_path, $tpl_file); - } - - /** - * @brief 에디터 컴포넌트가 별도의 고유 코드를 이용한다면 그 코드를 html로 변경하여 주는 method - * - * 이미지나 멀티미디어, 설문등 고유 코드가 필요한 에디터 컴포넌트는 고유코드를 내용에 추가하고 나서 - * DocumentModule::transContent() 에서 해당 컴포넌트의 transHtml() method를 호출하여 고유코드를 html로 변경 - **/ - function transHTML($xml_obj) { - $code_type = $xml_obj->attrs->code_type; - $option_file_path = $xml_obj->attrs->file_path; - $option_description = $xml_obj->attrs->description; - $option_first_line = $xml_obj->attrs->first_line; - $option_collapse = $xml_obj->attrs->collapse; - $option_nogutter = $xml_obj->attrs->nogutter; - $option_nocontrols = $xml_obj->attrs->nocontrols; - if($option_collapse == 'true') $option = $option.':collapse'; - if($option_nogutter == 'true') $option = $option.':nogutter'; - if($option_nocontrols == 'true' && $option_collapse != 'true') $option = $option.':nocontrols'; - if($option_first_line > 1) $option = $option.":firstline[$option_first_line]"; - $body = $xml_obj->body; - - - - $body = preg_replace('@()(\n)?@i' , "\n", $body); - $body = strip_tags($body); - - if(!$GLOBALS['_called_editor_component_code_highlighter_']) { - $GLOBALS['_called_editor_component_code_highlighter_'] = true; - $js_code = << -dp.SyntaxHighlighter.ClipboardSwf = '{$this->component_path}script/clipboard.swf'; -dp.SyntaxHighlighter.HighlightAll('code'); - -dpScript; - - Context::addHtmlFooter($js_code); - Context::addCSSFile($this->component_path.'css/SyntaxHighlighter.css'); - Context::addJsFile($this->component_path.'script/shCore.js'); - } - - Context::addJsFile($this->component_path.'script/shBrush'.$code_type.'.js'); - - $output = null; - if($option_file_path != null || $option_description != null) { - $output .= '
    '; - if($option_file_path != null) $output .= ''.$option_file_path.''; - if($option_description != null) $output .= ''.$option_description.''; - $output .= '
    '; - } - $output .= sprintf('
    %s
    ', $code_type.$option, $body); - return $output; - } -} -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/css/SyntaxHighlighter.css b/modules/editor/components/code_highlighter/css/SyntaxHighlighter.css deleted file mode 100755 index 753510002..000000000 --- a/modules/editor/components/code_highlighter/css/SyntaxHighlighter.css +++ /dev/null @@ -1,310 +0,0 @@ -.dp-highlighter -{ - font-family: "Consolas", "Courier New", "Courier", "mono", "serif"; - font-size: 12px; - background-color: #E7E5DC; - width: 99%; - overflow: auto; - padding-top: 1px; /* adds a little border on top when controls are hidden */ -} - -/* clear styles */ -.dp-highlighter ol, -.dp-highlighter ol li, -.dp-highlighter ol li span -{ - margin: 0; - padding: 0; - border: none; -} - -.dp-highlighter a, -.dp-highlighter a:hover -{ - background: none; - border: none; - padding: 0; - margin: 0; -} - -.dp-highlighter .bar -{ - padding-left: 45px; -} - -.dp-highlighter.collapsed .bar, -.dp-highlighter.nogutter .bar -{ - padding-left: 0px; -} - -.dp-highlighter ol -{ - list-style: decimal; /* for ie */ - background-color: #fff; - margin: 0px 0px 1px 45px !important; /* 1px bottom margin seems to fix occasional Firefox scrolling */ - padding: 0px; - color: #5C5C5C; -} - -.dp-highlighter.nogutter ol, -.dp-highlighter.nogutter ol li -{ - list-style: none !important; - margin-left: 0px !important; -} - -.dp-highlighter ol li, -.dp-highlighter .columns div -{ - list-style: decimal; /* better look for others, override cascade from OL */ - list-style-position: outside !important; - background-color: #F8F8F8; - color: #5C5C5C; - padding: 0 3px 0 10px !important; - margin: 0 !important; - line-height: 14px; -} - -.dp-highlighter.nogutter ol li, -.dp-highlighter.nogutter .columns div -{ - border: 0; -} - -.dp-highlighter .columns -{ - background-color: #F8F8F8; - color: gray; - overflow: hidden; - width: 100%; -} - -.dp-highlighter .columns div -{ - padding-bottom: 5px; -} - -.dp-highlighter ol li.alt -{ - background-color: #FFF; - color: inherit; -} - -.dp-highlighter ol li span -{ - color: black; - background-color: inherit; -} - -/* Adjust some properties when collapsed */ - -.dp-highlighter.collapsed ol -{ - margin: 0px; -} - -.dp-highlighter.collapsed ol li -{ - display: none; -} - -/* Additional modifications when in print-view */ - -.dp-highlighter.printing -{ - border: none; -} - -.dp-highlighter.printing .tools -{ - display: none !important; -} - -.dp-highlighter.printing li -{ - display: list-item !important; -} - -/* Styles for the tools */ - -.dp-highlighter .tools -{ - padding: 3px 8px 3px 10px; - font: 9px Verdana, Geneva, Arial, Helvetica, sans-serif; - color: silver; - background-color: #f8f8f8; - padding-bottom: 10px; -} - -.dp-highlighter.nogutter .tools -{ - border-left: 0; -} - -.dp-highlighter.collapsed .tools -{ - border-bottom: 0; -} - -.dp-highlighter .tools a -{ - font-size: 9px; - color: #a0a0a0; - background-color: inherit; - text-decoration: none; - margin-right: 10px; -} - -.dp-highlighter .tools a:hover -{ - color: red; - background-color: inherit; - text-decoration: underline; -} - -/* About dialog styles */ - -.dp-about { background-color: #fff; color: #333; margin: 0px; padding: 0px; } -.dp-about table { width: 100%; height: 100%; font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; } -.dp-about td { padding: 10px; vertical-align: top; } -.dp-about .copy { border-bottom: 1px solid #ACA899; height: 95%; } -.dp-about .title { color: red; background-color: inherit; font-weight: bold; } -.dp-about .para { margin: 0 0 4px 0; } -.dp-about .footer { background-color: #ECEADB; color: #333; border-top: 1px solid #fff; text-align: right; } -.dp-about .close { font-size: 11px; font-family: Tahoma, Verdana, Arial, sans-serif !important; background-color: #ECEADB; color: #333; width: 60px; height: 22px; } - -/* Language specific styles */ - -.dp-highlighter .comment, -.dp-highlighter .comments { color: #008200; background-color: inherit; } -.dp-highlighter .string { color: #FF00FF; background-color: inherit; } -.dp-highlighter .keyword { color: #0000FF; background-color: inherit; } -.dp-highlighter .preprocessor { color: gray; background-color: inherit; } -.dp-highlighter .func { color: #FF0000; } -.dp-highlighter .vars { color: #008080; } - - -/* Language specific styles */ - -.dp-c {} -.dp-c .comment { color: green; } -.dp-c .string { color: blue; } -.dp-c .preprocessor { color: gray; } -.dp-c .keyword { color: blue; } -.dp-c .vars { color: #d00; } - -.dp-vb {} -.dp-vb .comment { color: green; } -.dp-vb .string { color: blue; } -.dp-vb .preprocessor { color: gray; } -.dp-vb .keyword { color: blue; } - -.dp-sql {} -.dp-sql .comment { color: green; } -.dp-sql .string { color: red; } -.dp-sql .keyword { color: blue; } -.dp-sql .func { color: #ff1493; } -.dp-sql .op { color: #808080; } - -.dp-xml {} -.dp-xml .cdata { color: #ff1493; } -.dp-xml .comments { color: green; } -.dp-xml .tag { margin: 0; padding: 0; background: none; font-weight: bold; color: blue; } -.dp-xml .tag-name { color: black; font-weight: bold; } -.dp-xml .attribute { color: red; } -.dp-xml .attribute-value { color: blue; } - -.dp-delphi {} -.dp-delphi .comment { color: #008200; font-style: italic; } -.dp-delphi .string { color: blue; } -.dp-delphi .number { color: blue; } -.dp-delphi .directive { color: #008284; } -.dp-delphi .keyword { font-weight: bold; color: navy; } -.dp-delphi .vars { color: #000; } - -.dp-py {} -.dp-py .comment { color: green; } -.dp-py .string { color: red; } -.dp-py .docstring { color: green; } -.dp-py .keyword { color: blue; font-weight: bold;} -.dp-py .builtins { color: #ff1493; } -.dp-py .magicmethods { color: #808080; } -.dp-py .exceptions { color: brown; } -.dp-py .types { color: brown; font-style: italic; } -.dp-py .commonlibs { color: #8A2BE2; font-style: italic; } - -.dp-rb {} -.dp-rb .comment { color: #c00; } -.dp-rb .string { color: #f0c; } -.dp-rb .symbol { color: #02b902; } -.dp-rb .keyword { color: #069; } -.dp-rb .variable { color: #6cf; } - -.dp-css {} -.dp-css .comment { color: green; } -.dp-css .string { color: red; } -.dp-css .value { color: red; } -.dp-css .keyword { color: blue; } -.dp-css .colors { color: darkred; } -.dp-css .vars { color: #d00; } - -.dp-j {} -.dp-j .comment { color: rgb(63,127,95); } -.dp-j .string { color: rgb(42,0,255); } -.dp-j .keyword { color: rgb(127,0,85); font-weight: bold } -.dp-j .annotation { color: #646464; } -.dp-j .number { color: #C00000; } - -.dp-cpp {} -.dp-cpp .comment { color: #e00; } -.dp-cpp .string { color: red; } -.dp-cpp .preprocessor { color: #CD00CD; font-weight: bold; } -.dp-cpp .keyword { color: #5697D9; font-weight: bold; } -.dp-cpp .datatypes { color: #2E8B57; font-weight: bold; } - -.dp-php { color: #800000; } -.dp-php .comment { color: #008000; } -.dp-php .keyword { color: #4B00FB; } -.dp-php .string { color: #FB00FB; } -.dp-php .func { color: #FF0000; } -.dp-php .vars { color: #008080; } -.dp-php .zbxe_funcs { color: #FF6820; } -.dp-php .zbxe_class { color: #FF6820; font-weight: bold; } - - -.dp-abap { color: #800000; } -.dp-abap .comment { color: #008000; } -.dp-abap .keyword { color: #4B00FB; } -.dp-abap .string { color: #FB00FB; } -.dp-abap .datatypes { color: #2E8B57; font-weight: bold; } - - -pre[name='code'] { - max-height: 300px; - font-size: 1.1em; - border: #666666 dotted 1px; - border-left: #22AAEE solid 5px; - padding: 5px; - overflow: auto; -} - - -.ch_infobox { - padding: 5px 0; - width: 99%; - background-color: #F8F8F8; - border-top: 1px solid #E7E5DC; -} - -.ch_infobox .file_path { - font-size: 0.9em; - font-weight: bold; - margin-left: 10px; -} - -.ch_infobox .description { - color: #AAA; - font-size: 0.9em; - margin-left: 10px; -} \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/icon.gif b/modules/editor/components/code_highlighter/icon.gif deleted file mode 100755 index 4b542c04e..000000000 Binary files a/modules/editor/components/code_highlighter/icon.gif and /dev/null differ diff --git a/modules/editor/components/code_highlighter/info.xml b/modules/editor/components/code_highlighter/info.xml deleted file mode 100755 index 2fcc8a6f4..000000000 --- a/modules/editor/components/code_highlighter/info.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - Code Highlighter - コードハイライト - 代码高亮显示 - Code Highlighter - Código para resaltar - Подсветка кода - - BNU - BNU - BNU - BNU - BNU - BNU - 코드를 보기 좋게 출력합니다. - ソースコードを見やすく表示します。 - 高亮显示所选代码。 - It displays code in good shape. - Muestra el código en buena forma. - Компонент служащий для подсветки кода - - \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/en.lang.php b/modules/editor/components/code_highlighter/lang/en.lang.php deleted file mode 100644 index 99c08f1f2..000000000 --- a/modules/editor/components/code_highlighter/lang/en.lang.php +++ /dev/null @@ -1,16 +0,0 @@ - | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467; - * @brief 위지윅에디터(editor) 모듈 > 코드하이라이터 (code_highlighter) 컴포넌트의 언어팩 / English language for Zeroboard XE - **/ - $lang->code_type = 'Code Type'; - - $lang->used_collapse = 'Use Folding'; - $lang->hidden_linenumber = 'Hide Line Number'; - $lang->hidden_controls = 'Hide Toolbar'; - - $lang->file_path = 'File Path'; - $lang->description = 'Description'; - $lang->first_line = 'First Line'; -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/es.lang.php b/modules/editor/components/code_highlighter/lang/es.lang.php deleted file mode 100644 index f97e71a16..000000000 --- a/modules/editor/components/code_highlighter/lang/es.lang.php +++ /dev/null @@ -1,16 +0,0 @@ - | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467; - * @brief 위지윅에디터(editor) 모듈 > 코드하이라이터 (code_highlighter) 컴포넌트의 언어팩 / English language for Zeroboard XE - **/ - $lang->code_type = 'Código Tipo'; - - $lang->used_collapse = 'Utilice Folding'; - $lang->hidden_linenumber = 'Ocultar número de línea'; - $lang->hidden_controls = 'Ocultar barra de herramientas'; - - $lang->file_path = 'Ruta del archivo'; - $lang->description = 'Descripción'; - $lang->first_line = 'Primera Línea'; -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/jp.lang.php b/modules/editor/components/code_highlighter/lang/jp.lang.php deleted file mode 100644 index 22dc900ee..000000000 --- a/modules/editor/components/code_highlighter/lang/jp.lang.php +++ /dev/null @@ -1,12 +0,0 @@ - 翻訳:ミニミ - * @brief ウイジウイグエディター(editor) モジュール > コードハイライター (code_highlighter) コンポーネントの言語パッケージ - **/ - $lang->code_type = '言語種類'; - - $lang->used_collapse = '折りたたみ機能を使う'; - $lang->hidden_linenumber = '行番号を隠す'; - $lang->hidden_controls = 'ツールバーを隠す'; -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/ko.lang.php b/modules/editor/components/code_highlighter/lang/ko.lang.php deleted file mode 100755 index c5acd5f60..000000000 --- a/modules/editor/components/code_highlighter/lang/ko.lang.php +++ /dev/null @@ -1,16 +0,0 @@ - - * @brief 위지윅에디터(editor) 모듈 > 코드하이라이터 (code_highlighter) 컴포넌트의 언어팩 - **/ - $lang->code_type = '언어 종류'; - - $lang->used_collapse = '접기 기능 사용'; - $lang->hidden_linenumber = '줄 번호 감추기'; - $lang->hidden_controls = '도구바 감추기'; - - $lang->file_path = '파일경로'; - $lang->description = '설명'; - $lang->first_line = '시작 줄 번호'; -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/ru.lang.php b/modules/editor/components/code_highlighter/lang/ru.lang.php deleted file mode 100644 index ee331ac51..000000000 --- a/modules/editor/components/code_highlighter/lang/ru.lang.php +++ /dev/null @@ -1,16 +0,0 @@ - | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467; - * @brief 위지윅에디터(editor) 모듈 > 코드하이라이터 (code_highlighter) 컴포넌트의 언어팩 / Russian language for Zeroboard XE - **/ - $lang->code_type = 'Тип кода'; - - $lang->used_collapse = 'Использованное сокращение'; - $lang->hidden_linenumber = 'Скрытый номер строки'; - $lang->hidden_controls = 'Скрытый контрол'; - - $lang->file_path = 'Путь файла'; - $lang->description = 'Описание'; - $lang->first_line = 'Первая строка'; -?> \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/lang/zh-CN.lang.php b/modules/editor/components/code_highlighter/lang/zh-CN.lang.php deleted file mode 100644 index e1af32249..000000000 --- a/modules/editor/components/code_highlighter/lang/zh-CN.lang.php +++ /dev/null @@ -1,12 +0,0 @@ - - * @brief 编辑器(editor) 模块 > 代码高亮显示(code_highlighter)组件语言包 - **/ - $lang->code_type = '语言类型'; - - $lang->used_collapse = '使用代码折叠'; - $lang->hidden_linenumber = '隐藏行号'; - $lang->hidden_controls = '隐藏工具栏'; -?> diff --git a/modules/editor/components/code_highlighter/script/clipboard.swf b/modules/editor/components/code_highlighter/script/clipboard.swf deleted file mode 100644 index 2cfe37185..000000000 Binary files a/modules/editor/components/code_highlighter/script/clipboard.swf and /dev/null differ diff --git a/modules/editor/components/code_highlighter/script/shBrushAbap.js b/modules/editor/components/code_highlighter/script/shBrushAbap.js deleted file mode 100644 index 9aa1d49ae..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushAbap.js +++ /dev/null @@ -1,26 +0,0 @@ -dp.sh.Brushes.Abap = function() -{ - var datatypes = - 'ACCP CHAR CLNT CUKY CURR DATS DEC FLTP INT1 INT2 INT4 LANG LCHR LRAW NUMC PREC QUAN RAW RAWSTRING SSTRING STRING TIMS UNIT'; - - var keywords = - 'IF RETURN WHILE CASE DEFAULT DO ELSE FOR ENDIF ELSEIF EQ NOT AND DATA TYPES SELETION-SCREEN PARAMETERS ' + - 'FIELD-SYMBOLS EXTERN INLINE REPORT WRITE APPEND SELECT ENDSELECT CALL METHOD CALL FUNCTION LOOP ENDLOOP ' + - 'RAISE READ TABLE CONCATENATE SPLIT SHIFT CONDENSE DESCRIBE CLEAR ENDFUNCTION ASSIGN CREATE DATA TRANSLATE ' + - 'CONTINUE START-OF-SELECTION AT SELECTION-SCREEN MODIFY CALL SCREEN CREATE OBJECT PERFORM FORM ENDFORM ' + - 'REUSE_ALV_BLOCK_LIST_INIT ZBCIALV INCLUDE TYPE REF TO TYPE BEGIN\SOF END\SOF LIKE INTO FROM WHERE ORDER BY ' + - 'WITH KEY INTO STRING SEPARATED BY EXPORTING IMPORTING TO UPPER CASE TO EXCEPTIONS TABLES USING CHANGING'; - - this.regexList = [ - { regex: new RegExp('^\\*.*$', 'gm'), css: 'comment' }, // one line comments - { regex: new RegExp('\\".*$', 'gm'), css: 'comment' }, // one line comments - { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // strings - { regex: new RegExp(this.GetKeywords(datatypes), 'gm'), css: 'datatypes' }, - { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } - ]; - - this.CssClass = 'dp-abap'; -} - -dp.sh.Brushes.Abap.prototype = new dp.sh.Highlighter(); -dp.sh.Brushes.Abap.Aliases = ['abap']; \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/script/shBrushCSharp.js b/modules/editor/components/code_highlighter/script/shBrushCSharp.js deleted file mode 100755 index e8b2b0307..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushCSharp.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.CSharp=function() -{var keywords='abstract as base bool break byte case catch char checked class const '+'continue decimal default delegate do double else enum event explicit '+'extern false finally fixed float for foreach get goto if implicit in int '+'interface internal is lock long namespace new null object operator out '+'override params private protected public readonly ref return sbyte sealed set '+'short sizeof stackalloc static string struct switch this throw true try '+'typeof uint ulong unchecked unsafe ushort using virtual void while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';this.Style='.dp-c .vars { color: #d00; }';} -dp.sh.Brushes.CSharp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSharp.Aliases=['c#','c-sharp','csharp']; diff --git a/modules/editor/components/code_highlighter/script/shBrushCpp.js b/modules/editor/components/code_highlighter/script/shBrushCpp.js deleted file mode 100755 index a88a7a46c..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushCpp.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Cpp=function() -{var datatypes='ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR '+'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH '+'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP '+'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY '+'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT '+'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE '+'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF '+'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR '+'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR '+'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT '+'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 '+'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR '+'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 '+'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT '+'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG '+'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM '+'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t '+'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS '+'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t '+'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t '+'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler '+'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function '+'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf '+'va_list wchar_t wctrans_t wctype_t wint_t signed';var keywords='break case catch class const __finally __exception __try '+'const_cast continue private public protected __declspec '+'default delete deprecated dllexport dllimport do dynamic_cast '+'else enum explicit extern if for friend goto inline '+'mutable naked namespace new noinline noreturn nothrow '+'register reinterpret_cast return selectany '+'sizeof static static_cast struct switch template this '+'thread throw true false try typedef typeid typename union '+'using uuid virtual void volatile whcar_t while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^ *#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(datatypes),'gm'),css:'datatypes'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-cpp';this.Style='.dp-cpp .datatypes { color: #2E8B57; font-weight: bold; }';} -dp.sh.Brushes.Cpp.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Cpp.Aliases=['cpp','c','c++']; diff --git a/modules/editor/components/code_highlighter/script/shBrushCss.js b/modules/editor/components/code_highlighter/script/shBrushCss.js deleted file mode 100755 index db17963c8..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushCss.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.CSS=function() { -var keywords='ascent azimuth background background-attachment background-color background-image background-position background-repeat baseline bbox border border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue cue-after cue-before cursor definition-src descent direction display elevation empty-cells float font font-family font-size font-size-adjust font-stretch font-style font-variant font-weight height left letter-spacing line-height list-style list-style-image list-style-position list-style-type margin margin-top margin-right margin-bottom margin-left marker-offset marks mathline max-height max-width min-height min-width orphans outline outline-color outline-style outline-width overflow padding padding-top padding-right padding-bottom padding-left page page-break-after page-break-before page-break-inside panose-1 pause pause-after pause-before pitch pitch-range play-during position quotes richness right size slope src speak speak-header speak-numeral speak-punctuation speech-rate stemh stemv stress table-layout text-align text-decoration text-indent text-shadow text-transform top unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index'; -var values='above absolute ActiveBorder ActiveCaption all always AppWorkspace aqua armenian attr aural auto avoid Background baseline behind below bidi-override black blink block blue bold bolder both bottom braille ButtonFace ButtonHighlight ButtonShadow ButtonText capitalize caption CaptionText center center-left center-right circle cjk-ideographic close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia georgian gray GrayText green groove handheld hebrew help hidden hide high higher Highlight HighlightText hiragana hiragana-iroha icon InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText inline inline-table inset inside invert italic justify katakana katakana-iroha landscape large larger left left-side leftwards level lighter lime line-through list-item local loud low lower lower-alpha lowercase lower-greek lower-latin lower-roman ltr marker maroon medium Menu MenuText message-box middle mix monospace move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in sans-serif screen scroll Scrollbar semi-condensed semi-expanded separate se-resize serif show silent silver slow slower small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text text-bottom text-top thick thin ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider Window WindowFrame WindowText w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow'; -var fonts='[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier [mM]ono [gG]eneva '; - -this.regexList=[ -{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'}, -{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'}, -{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'}, -{regex:new RegExp('\\#[a-zA-Z0-9]{3,6}','g'),css:'value'}, -{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'}, -{regex:new RegExp('!important','g'),css:'important'}, -{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'keyword'}, -{regex:new RegExp(this.GetValuesCSS(values),'g'),css:'value'}, -{regex:new RegExp(this.GetValuesCSS(fonts),'g'),css:'value'} -]; - -this.CssClass='dp-css'; -this.Style='.dp-css .important { color: black; }'; -} - -dp.sh.Highlighter.prototype.GetKeywordsCSS=function(str) -{return'\\b([a-z_]|)'+str.replace(/ /g,'(?= ?: ?)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';} -dp.sh.Highlighter.prototype.GetValuesCSS=function(str) -{return'\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';} -dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css']; diff --git a/modules/editor/components/code_highlighter/script/shBrushDelphi.js b/modules/editor/components/code_highlighter/script/shBrushDelphi.js deleted file mode 100755 index 38e6505e6..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushDelphi.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Delphi=function() -{var keywords='abs addr and ansichar ansistring array as asm begin boolean byte cardinal '+'case char class comp const constructor currency destructor div do double '+'downto else end except exports extended false file finalization finally '+'for function goto if implementation in inherited int64 initialization '+'integer interface is label library longint longword mod nil not object '+'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended '+'pint64 pointer private procedure program property pshortstring pstring '+'pvariant pwidechar pwidestring protected public published raise real real48 '+'record repeat set shl shortint shortstring shr single smallint string then '+'threadvar to true try type unit until uses val var varirnt while widechar '+'widestring with word write writeln xor';this.regexList=[{regex:new RegExp('\\(\\*[\\s\\S]*?\\*\\)','gm'),css:'comment'},{regex:new RegExp('{(?!\\$)[\\s\\S]*?}','gm'),css:'comment'},{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\{\\$[a-zA-Z]+ .+\\}','g'),css:'directive'},{regex:new RegExp('\\b[\\d\\.]+\\b','g'),css:'number'},{regex:new RegExp('\\$[a-zA-Z0-9]+\\b','g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-delphi';this.Style='.dp-delphi .number { color: blue; }'+'.dp-delphi .directive { color: #008284; }'+'.dp-delphi .vars { color: #000; }';} -dp.sh.Brushes.Delphi.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Delphi.Aliases=['delphi','pascal']; diff --git a/modules/editor/components/code_highlighter/script/shBrushJScript.js b/modules/editor/components/code_highlighter/script/shBrushJScript.js deleted file mode 100755 index 1979de0d5..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushJScript.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.JScript=function() -{var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';} -dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript']; diff --git a/modules/editor/components/code_highlighter/script/shBrushJava.js b/modules/editor/components/code_highlighter/script/shBrushJava.js deleted file mode 100755 index 8a2559f13..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushJava.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Java=function() -{var keywords='abstract assert boolean break byte case catch char class const '+'continue default do double else enum extends '+'false final finally float for goto if implements import '+'instanceof int interface long native new null '+'package private protected public return '+'short static strictfp super switch synchronized this throw throws true '+'transient try void volatile while';this.regexList=[{regex:dp.sh.RegexLib.SingleLineCComments,css:'comment'},{regex:dp.sh.RegexLib.MultiLineCComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp('\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b','gi'),css:'number'},{regex:new RegExp('(?!\\@interface\\b)\\@[\\$\\w]+\\b','g'),css:'annotation'},{regex:new RegExp('\\@interface\\b','g'),css:'keyword'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-j';this.Style='.dp-j .annotation { color: #646464; }'+'.dp-j .number { color: #C00000; }';} -dp.sh.Brushes.Java.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Java.Aliases=['java']; diff --git a/modules/editor/components/code_highlighter/script/shBrushPhp.js b/modules/editor/components/code_highlighter/script/shBrushPhp.js deleted file mode 100755 index 4920644d2..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushPhp.js +++ /dev/null @@ -1,59 +0,0 @@ -dp.sh.Brushes.Php = function() -{ - var funcs = 'abs acos acosh addcslashes addslashes '+ - 'array_change_key_case array_chunk array_combine array_count_values array_diff '+ - 'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+ - 'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+ - 'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+ - 'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+ - 'array_push array_rand array_reduce array_reverse array_search array_shift '+ - 'array_slice array_splice array_sum array_udiff array_udiff_assoc '+ - 'array_udiff_uassoc array_uintersect array_uintersect_assoc '+ - 'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+ - 'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+ - 'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+ - 'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+ - 'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+ - 'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+ - 'deg2rad delete ebcdic2ascii end ereg ereg_replace eregi eregi_replace error_log '+ - 'error_reporting escapeshellarg escapeshellcmd exec exp explode extension_loaded '+ - 'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+ - 'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+ - 'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+ - 'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+ - 'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+ - 'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+ - 'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+ - 'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+ - 'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+ - 'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+ - 'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+ - 'phpinfo parse_ini_file parse_str parse_url passthru pathinfo readlink realpath rewind rewinddir rmdir preg_replace '+ - 'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+ - 'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+ - 'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+ - 'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+ - 'strtoupper strtr strval substr substr_compare get_magic_quotes_gpc sprintf implode'; - - var keywords = '__CLASS__ __FILE__ __FUNCTION__ __LINE__ __METHOD__ abstract and array as break case catch cfunction '+ - 'class clone const continue declare default die do echo else elseif empty enddeclare endfor endforeach '+ - 'endif endswitch endwhile eval exception exit extends final for foreach function global if implements '+ - 'include include_once interface isset list new old_function or php_user_filter print private protected '+ - 'public require require_once return static switch this throw try unset use var while xor '+ - '-> :: @ TRUE FALSE NULL true false null'; - - this.regexList = [ - { regex: dp.sh.RegexLib.SingleLineCComments, css: 'comment' }, // one line comments - { regex: dp.sh.RegexLib.MultiLineCComments, css: 'comment' }, // multiline comments - { regex: dp.sh.RegexLib.DoubleQuotedString, css: 'string' }, // double quoted strings - { regex: dp.sh.RegexLib.SingleQuotedString, css: 'string' }, // single quoted strings - { regex: new RegExp('\\$[a-zA-Z0-9_]+', 'g'), css: 'vars' }, // variables - { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions - { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword - ]; - - this.CssClass = 'dp-php'; -} - -dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter(); -dp.sh.Brushes.Php.Aliases = ['php']; \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/script/shBrushPython.js b/modules/editor/components/code_highlighter/script/shBrushPython.js deleted file mode 100755 index 66c9d4575..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushPython.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Python=function() -{var keywords='and assert break class continue def del elif else '+'except exec finally for from global if import in is '+'lambda not or pass print raise return try yield while';var special='None True False self cls class_' -this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:new RegExp("^\\s*@\\w+",'gm'),css:'decorator'},{regex:new RegExp("(['\"]{3})([^\\1])*?\\1",'gm'),css:'comment'},{regex:new RegExp('"(?!")(?:\\.|\\\\\\"|[^\\""\\n\\r])*"','gm'),css:'string'},{regex:new RegExp("'(?!')*(?:\\.|(\\\\\\')|[^\\''\\n\\r])*'",'gm'),css:'string'},{regex:new RegExp("\\b\\d+\\.?\\w*",'g'),css:'number'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(special),'gm'),css:'special'}];this.CssClass='dp-py';this.Style='.dp-py .builtins { color: #ff1493; }'+'.dp-py .magicmethods { color: #808080; }'+'.dp-py .exceptions { color: brown; }'+'.dp-py .types { color: brown; font-style: italic; }'+'.dp-py .commonlibs { color: #8A2BE2; font-style: italic; }';} -dp.sh.Brushes.Python.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Python.Aliases=['py','python']; diff --git a/modules/editor/components/code_highlighter/script/shBrushRuby.js b/modules/editor/components/code_highlighter/script/shBrushRuby.js deleted file mode 100755 index c19df8218..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushRuby.js +++ /dev/null @@ -1,11 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Ruby=function() -{var keywords='alias and BEGIN begin break case class def define_method defined do each else elsif '+'END end ensure false for if in module new next nil not or raise redo rescue retry return '+'self super then throw true undef unless until when while yield';var builtins='Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload '+'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol '+'ThreadGroup Thread Time TrueClass' -this.regexList=[{regex:dp.sh.RegexLib.SingleLinePerlComments,css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(':[a-z][A-Za-z0-9_]*','g'),css:'symbol'},{regex:new RegExp('(\\$|@@|@)\\w+','g'),css:'variable'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetKeywords(builtins),'gm'),css:'builtin'}];this.CssClass='dp-rb';this.Style='.dp-rb .symbol { color: #a70; }'+'.dp-rb .variable { color: #a70; font-weight: bold; }';} -dp.sh.Brushes.Ruby.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Ruby.Aliases=['ruby','rails','ror']; diff --git a/modules/editor/components/code_highlighter/script/shBrushSql.js b/modules/editor/components/code_highlighter/script/shBrushSql.js deleted file mode 100755 index 94151e97b..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushSql.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Sql=function() -{var funcs='abs avg case cast coalesce convert count current_timestamp '+'current_user day isnull left lower month nullif replace right '+'session_user space substring sum system_user upper user year';var keywords='absolute action add after alter as asc at authorization begin bigint '+'binary bit by cascade char character check checkpoint close collate '+'column commit committed connect connection constraint contains continue '+'create cube current current_date current_time cursor database date '+'deallocate dec decimal declare default delete desc distinct double drop '+'dynamic else end end-exec escape except exec execute false fetch first '+'float for force foreign forward free from full function global goto grant '+'group grouping having hour ignore index inner insensitive insert instead '+'int integer intersect into is isolation key last level load local max min '+'minute modify move name national nchar next no numeric of off on only '+'open option order out output partial password precision prepare primary '+'prior privileges procedure public read real references relative repeatable '+'restrict return returns revoke rollback rollup rows rule schema scroll '+'second section select sequence serializable set size smallint static '+'statistics table temp temporary then time timestamp to top transaction '+'translation trigger true truncate uncommitted union unique update values '+'varchar varying view when where with work';var operators='all and any between cross in join like not null or outer some';this.regexList=[{regex:new RegExp('--(.*)$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:dp.sh.RegexLib.SingleQuotedString,css:'string'},{regex:new RegExp(this.GetKeywords(funcs),'gmi'),css:'func'},{regex:new RegExp(this.GetKeywords(operators),'gmi'),css:'op'},{regex:new RegExp(this.GetKeywords(keywords),'gmi'),css:'keyword'}];this.CssClass='dp-sql';this.Style='.dp-sql .func { color: #ff1493; }'+'.dp-sql .op { color: #808080; }';} -dp.sh.Brushes.Sql.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Sql.Aliases=['sql']; diff --git a/modules/editor/components/code_highlighter/script/shBrushVb.js b/modules/editor/components/code_highlighter/script/shBrushVb.js deleted file mode 100755 index 59b37e83c..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushVb.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Vb=function() -{var keywords='AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto '+'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate '+'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType '+'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each '+'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend '+'Function Get GetType GoSub GoTo Handles If Implements Imports In '+'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module '+'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing '+'NotInheritable NotOverridable Object On Option Optional Or OrElse '+'Overloads Overridable Overrides ParamArray Preserve Private Property '+'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume '+'Return Select Set Shadows Shared Short Single Static Step Stop String '+'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until '+'Variant When While With WithEvents WriteOnly Xor';this.regexList=[{regex:new RegExp('\'.*$','gm'),css:'comment'},{regex:dp.sh.RegexLib.DoubleQuotedString,css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-vb';} -dp.sh.Brushes.Vb.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Vb.Aliases=['vb','vb.net']; diff --git a/modules/editor/components/code_highlighter/script/shBrushXml.js b/modules/editor/components/code_highlighter/script/shBrushXml.js deleted file mode 100755 index c39fc8105..000000000 --- a/modules/editor/components/code_highlighter/script/shBrushXml.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - * JsMin - * Javascript Compressor - * http://www.crockford.com/ - * http://www.smallsharptools.com/ -*/ - -dp.sh.Brushes.Xml=function() -{this.CssClass='dp-xml';this.Style='.dp-xml .cdata { color: #ff1493; }'+'.dp-xml .tag, .dp-xml .tag-name { color: #069; font-weight: bold; }'+'.dp-xml .attribute { color: red; }'+'.dp-xml .attribute-value { color: blue; }';} -dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function() -{function push(array,value) -{array[array.length]=value;} -var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('(\<|<)\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\](\>|>)','gm'),'cdata');this.GetMatches(new RegExp('(\<|<)!--\\s*.*?\\s*--(\>|>)','gm'),'comments');regex=new RegExp('([:\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*|(\\w+)','gm');while((match=regex.exec(this.code))!=null) -{if(match[1]==null) -{continue;} -push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined) -{push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));}} -this.GetMatches(new RegExp('(\<|<)/*\\?*(?!\\!)|/*\\?*(\>|>)','gm'),'tag');regex=new RegExp('(?:\<|<)/*\\?*\\s*([:\\w-\.]+)','gm');while((match=regex.exec(this.code))!=null) -{push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));}} diff --git a/modules/editor/components/code_highlighter/script/shCore.js b/modules/editor/components/code_highlighter/script/shCore.js deleted file mode 100755 index df3d26060..000000000 --- a/modules/editor/components/code_highlighter/script/shCore.js +++ /dev/null @@ -1,706 +0,0 @@ -/** - * Code Syntax Highlighter. - * Version 1.5.1 - * Copyright (C) 2004-2007 Alex Gorbatchev. - * http://www.dreamprojections.com/syntaxhighlighter/ - * - * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General - * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -// -// create namespaces -// -var dp = { - sh : - { - Toolbar : {}, - Utils : {}, - RegexLib: {}, - Brushes : {}, - Strings : { - AboutDialog : 'About...

    dp.SyntaxHighlighter

    Version: {V}

    http://www.dreamprojections.com/syntaxhighlighter

    ©2004-2007 Alex Gorbatchev.
    ' - }, - ClipboardSwf : null, - Version : '1.5.1' - } -}; - -// make an alias -dp.SyntaxHighlighter = dp.sh; - -// -// Toolbar functions -// - -dp.sh.Toolbar.Commands = { - ExpandSource: { - label: '+ expand source', - check: function(highlighter) { return highlighter.collapse; }, - func: function(sender, highlighter) - { - sender.parentNode.removeChild(sender); - highlighter.div.className = highlighter.div.className.replace('collapsed', ''); - } - }, - - // opens a new windows and puts the original unformatted source code inside. - ViewSource: { - label: 'view plain', - func: function(sender, highlighter) - { - var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/' + code + ''); - wnd.document.close(); - } - }, - - // Copies the original source code in to the clipboard. Uses either IE only method or Flash object if ClipboardSwf is set - CopyToClipboard: { - label: 'copy to clipboard', - check: function() { return window.clipboardData != null || dp.sh.ClipboardSwf != null; }, - func: function(sender, highlighter) - { - var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode) - .replace(/</g,'<') - .replace(/>/g,'>') - .replace(/&/g,'&') - .replace(/ /g,' ') - ; - - if(window.clipboardData) - { - window.clipboardData.setData('text', code); - } - else if(dp.sh.ClipboardSwf != null) - { - var flashcopier = highlighter.flashCopier; - - if(flashcopier == null) - { - flashcopier = document.createElement('div'); - highlighter.flashCopier = flashcopier; - highlighter.div.appendChild(flashcopier); - } - - flashcopier.innerHTML = ''; - } - - alert('The code is in your clipboard now'); - } - }, - - // creates an invisible iframe, puts the original source code inside and prints it - PrintSource: { - label: 'print', - func: function(sender, highlighter) - { - var iframe = document.createElement('IFRAME'); - var doc = null; - - // this hides the iframe - iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;'; - - document.body.appendChild(iframe); - doc = iframe.contentWindow.document; - - dp.sh.Utils.CopyStyles(doc, window.document); - doc.write('
    ' + highlighter.div.innerHTML + '
    '); - doc.close(); - - iframe.contentWindow.focus(); - iframe.contentWindow.print(); - - alert('Printing...'); - - document.body.removeChild(iframe); - } - }, - - About: { - label: '?', - func: function(highlighter) - { - var wnd = window.open('', '_blank', 'dialog,width=300,height=150,scrollbars=0'); - var doc = wnd.document; - - dp.sh.Utils.CopyStyles(doc, window.document); - - doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version)); - doc.close(); - wnd.focus(); - } - } -}; - -// creates a
    with all toolbar links -dp.sh.Toolbar.Create = function(highlighter) -{ - var div = document.createElement('DIV'); - - div.className = 'tools'; - - for(var name in dp.sh.Toolbar.Commands) - { - var cmd = dp.sh.Toolbar.Commands[name]; - - if(cmd.check != null && !cmd.check(highlighter)) - continue; - - div.innerHTML += '' + cmd.label + ''; - } - - return div; -} - -// executes toolbar command by name -dp.sh.Toolbar.Command = function(name, sender) -{ - var n = sender; - - while(n != null && n.className.indexOf('dp-highlighter') == -1) - n = n.parentNode; - - if(n != null) - dp.sh.Toolbar.Commands[name].func(sender, n.highlighter); -} - -// copies all from 'target' window to 'dest' -dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc) -{ - var links = sourceDoc.getElementsByTagName('link'); - - for(var i = 0; i < links.length; i++) - if(links[i].rel.toLowerCase() == 'stylesheet') - destDoc.write(''); -} - -dp.sh.Utils.FixForBlogger = function(str) -{ - return (dp.sh.isBloggerMode == true) ? str.replace(/|<br\s*\/?>/gi, '\n') : str; -} - -// -// Common reusable regular expressions -// -dp.sh.RegexLib = { - MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'), - SingleLineCComments : new RegExp('//.*$', 'gm'), - SingleLinePerlComments : new RegExp('#.*$', 'gm'), - DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'), - SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'", 'g') -}; - -// -// Match object -// -dp.sh.Match = function(value, index, css) -{ - this.value = value; - this.index = index; - this.length = value.length; - this.css = css; -} - -// -// Highlighter object -// -dp.sh.Highlighter = function() -{ - this.noGutter = false; - this.addControls = true; - this.collapse = false; - this.tabsToSpaces = true; - this.wrapColumn = 40; - this.showColumns = true; -} - -// static callback for the match sorting -dp.sh.Highlighter.SortCallback = function(m1, m2) -{ - // sort matches by index first - if(m1.index < m2.index) - return -1; - else if(m1.index > m2.index) - return 1; - else - { - // if index is the same, sort by length - if(m1.length < m2.length) - return -1; - else if(m1.length > m2.length) - return 1; - } - return 0; -} - -dp.sh.Highlighter.prototype.CreateElement = function(name) -{ - var result = document.createElement(name); - result.highlighter = this; - return result; -} - -// gets a list of all matches for a given regular expression -dp.sh.Highlighter.prototype.GetMatches = function(regex, css) -{ - var index = 0; - var match = null; - - while((match = regex.exec(this.code)) != null) - this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); -} - -dp.sh.Highlighter.prototype.AddBit = function(str, css) -{ - if(str == null || str.length == 0) - return; - - var span = this.CreateElement('SPAN'); - -// str = str.replace(/&/g, '&'); - str = str.replace(/ /g, ' '); - str = str.replace(//g, '>'); - str = str.replace(/\n/gm, ' 
    '); - - // when adding a piece of code, check to see if it has line breaks in it - // and if it does, wrap individual line breaks with span tags - if(css != null) - { - if((/br/gi).test(str)) - { - var lines = str.split(' 
    '); - - for(var i = 0; i < lines.length; i++) - { - span = this.CreateElement('SPAN'); - span.className = css; - span.innerHTML = lines[i]; - - this.div.appendChild(span); - - // don't add a
    for the last line - if(i + 1 < lines.length) - this.div.appendChild(this.CreateElement('BR')); - } - } - else - { - span.className = css; - span.innerHTML = str; - this.div.appendChild(span); - } - } - else - { - span.innerHTML = str; - this.div.appendChild(span); - } -} - -// checks if one match is inside any other match -dp.sh.Highlighter.prototype.IsInside = function(match) -{ - if(match == null || match.length == 0) - return false; - - for(var i = 0; i < this.matches.length; i++) - { - var c = this.matches[i]; - - if(c == null) - continue; - - if((match.index > c.index) && (match.index < c.index + c.length)) - return true; - } - - return false; -} - -dp.sh.Highlighter.prototype.ProcessRegexList = function() -{ - for(var i = 0; i < this.regexList.length; i++) - this.GetMatches(this.regexList[i].regex, this.regexList[i].css); -} - -dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code) -{ - var lines = code.split('\n'); - var result = ''; - var tabSize = 4; - var tab = '\t'; - - // This function inserts specified amount of spaces in the string - // where a tab is while removing that given tab. - function InsertSpaces(line, pos, count) - { - var left = line.substr(0, pos); - var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab - var spaces = ''; - - for(var i = 0; i < count; i++) - spaces += ' '; - - return left + spaces + right; - } - - // This function process one line for 'smart tabs' - function ProcessLine(line, tabSize) - { - if(line.indexOf(tab) == -1) - return line; - - var pos = 0; - - while((pos = line.indexOf(tab)) != -1) - { - // This is pretty much all there is to the 'smart tabs' logic. - // Based on the position within the line and size of a tab, - // calculate the amount of spaces we need to insert. - var spaces = tabSize - pos % tabSize; - - line = InsertSpaces(line, pos, spaces); - } - - return line; - } - - // Go through all the lines and do the 'smart tabs' magic. - for(var i = 0; i < lines.length; i++) - result += ProcessLine(lines[i], tabSize) + '\n'; - - return result; -} - -dp.sh.Highlighter.prototype.SwitchToList = function() -{ - // thanks to Lachlan Donald from SitePoint.com for this
    tag fix. - var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n'); - var lines = html.split('\n'); - - if(this.addControls == true) - this.bar.appendChild(dp.sh.Toolbar.Create(this)); - - // add columns ruler - if(this.showColumns) - { - var div = this.CreateElement('div'); - var columns = this.CreateElement('div'); - var showEvery = 10; - var i = 1; - - while(i <= 150) - { - if(i % showEvery == 0) - { - div.innerHTML += i; - i += (i + '').length; - } - else - { - div.innerHTML += '·'; - i++; - } - } - - columns.className = 'columns'; - columns.appendChild(div); - this.bar.appendChild(columns); - } - - for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++) - { - var li = this.CreateElement('LI'); - var span = this.CreateElement('SPAN'); - - // uses .line1 and .line2 css styles for alternating lines - li.className = (i % 2 == 0) ? 'alt' : ''; - span.innerHTML = lines[i] + ' '; - - li.appendChild(span); - this.ol.appendChild(li); - } - - this.div.innerHTML = ''; -} - -dp.sh.Highlighter.prototype.Highlight = function(code) -{ - function Trim(str) - { - return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); - } - - function Chop(str) - { - return str.replace(/\n*$/, '').replace(/^\n*/, ''); - } - - function Unindent(str) - { - var lines = dp.sh.Utils.FixForBlogger(str).split('\n'); - var indents = new Array(); - var regex = new RegExp('^\\s*', 'g'); - var min = 1000; - - // go through every line and check for common number of indents - for(var i = 0; i < lines.length && min > 0; i++) - { - if(Trim(lines[i]).length == 0) - continue; - - var matches = regex.exec(lines[i]); - - if(matches != null && matches.length > 0) - min = Math.min(matches[0].length, min); - } - - // trim minimum common number of white space from the begining of every line - if(min > 0) - for(var i = 0; i < lines.length; i++) - lines[i] = lines[i].substr(min); - - return lines.join('\n'); - } - - // This function returns a portions of the string from pos1 to pos2 inclusive - function Copy(string, pos1, pos2) - { - return string.substr(pos1, pos2 - pos1); - } - - var pos = 0; - - if(code == null) - code = ''; - - this.originalCode = code; - this.code = Chop(Unindent(code)); - this.div = this.CreateElement('DIV'); - this.bar = this.CreateElement('DIV'); - this.ol = this.CreateElement('OL'); - this.matches = new Array(); - - this.div.className = 'dp-highlighter'; - this.div.highlighter = this; - - this.bar.className = 'bar'; - - // set the first line - this.ol.start = this.firstLine; - - if(this.CssClass != null) - this.ol.className = this.CssClass; - - if(this.collapse) - this.div.className += ' collapsed'; - - if(this.noGutter) - this.div.className += ' nogutter'; - - // replace tabs with spaces - if(this.tabsToSpaces == true) - this.code = this.ProcessSmartTabs(this.code); - - this.ProcessRegexList(); - - // if no matches found, add entire code as plain text - if(this.matches.length == 0) - { - this.AddBit(this.code, null); - this.SwitchToList(); - this.div.appendChild(this.bar); - this.div.appendChild(this.ol); - return; - } - - // sort the matches - this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); - - // The following loop checks to see if any of the matches are inside - // of other matches. This process would get rid of highligted strings - // inside comments, keywords inside strings and so on. - for(var i = 0; i < this.matches.length; i++) - if(this.IsInside(this.matches[i])) - this.matches[i] = null; - - // Finally, go through the final list of matches and pull the all - // together adding everything in between that isn't a match. - for(var i = 0; i < this.matches.length; i++) - { - var match = this.matches[i]; - - if(match == null || match.length == 0) - continue; - - this.AddBit(Copy(this.code, pos, match.index), null); - this.AddBit(match.value, match.css); - - pos = match.index + match.length; - } - - this.AddBit(this.code.substr(pos), null); - - this.SwitchToList(); - this.div.appendChild(this.bar); - this.div.appendChild(this.ol); -} - -dp.sh.Highlighter.prototype.GetKeywords = function(str) -{ - return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b'; -} - -dp.sh.BloggerMode = function() -{ - dp.sh.isBloggerMode = true; -} - -// highlightes all elements identified by name and gets source code from specified property -dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */) -{ - function FindValue() - { - var a = arguments; - - for(var i = 0; i < a.length; i++) - { - if(a[i] == null) - continue; - - if(typeof(a[i]) == 'string' && a[i] != '') - return a[i] + ''; - - if(typeof(a[i]) == 'object' && a[i].value != '') - return a[i].value + ''; - } - - return null; - } - - function IsOptionSet(value, list) - { - for(var i = 0; i < list.length; i++) - if(list[i] == value) - return true; - - return false; - } - - function GetOptionValue(name, list, defaultValue) - { - var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi'); - var matches = null; - - for(var i = 0; i < list.length; i++) - if((matches = regex.exec(list[i])) != null) - return matches[1]; - - return defaultValue; - } - - function FindTagsByName(list, name, tagName) - { - var tags = document.getElementsByTagName(tagName); - - for(var i = 0; i < tags.length; i++) - if(tags[i].getAttribute('name') == name) - list.push(tags[i]); - } - - var elements = []; - var highlighter = null; - var registered = {}; - var propertyName = 'innerHTML'; - - // for some reason IE doesn't find
     by name, however it does see them just fine by tag name... 
    -	FindTagsByName(elements, name, 'pre');
    -	FindTagsByName(elements, name, 'textarea');
    -
    -	if(elements.length == 0)
    -		return;
    -
    -	// register all brushes
    -	for(var brush in dp.sh.Brushes)
    -	{
    -		var aliases = dp.sh.Brushes[brush].Aliases;
    -
    -		if(aliases == null)
    -			continue;
    -		
    -		for(var i = 0; i < aliases.length; i++)
    -			registered[aliases[i]] = brush;
    -	}
    -
    -	for(var i = 0; i < elements.length; i++)
    -	{
    -		var element = elements[i];
    -		var options = FindValue(
    -				element.attributes['class'], element.className, 
    -				element.attributes['language'], element.language
    -				);
    -		var language = '';
    -		
    -		if(options == null)
    -			continue;
    -		
    -		options = options.split(':');
    -		
    -		language = options[0].toLowerCase();
    -
    -		if(registered[language] == null)
    -			continue;
    -		
    -		// instantiate a brush
    -		highlighter = new dp.sh.Brushes[registered[language]]();
    -		
    -		// hide the original element
    -		element.style.display = 'none';
    -
    -		highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter;
    -		highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls;
    -		highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll;
    -		highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns;
    -
    -		// write out custom brush style
    -		var headNode = document.getElementsByTagName('head')[0];
    -		if(highlighter.Style && headNode)
    -		{
    -			var styleNode = document.createElement('style');
    -			styleNode.setAttribute('type', 'text/css');
    -
    -			if(styleNode.styleSheet) // for IE
    -			{
    -				styleNode.styleSheet.cssText = highlighter.Style;
    -			}
    -			else // for everyone else
    -			{
    -				var textNode = document.createTextNode(highlighter.Style);
    -				styleNode.appendChild(textNode);
    -			}
    -
    -			headNode.appendChild(styleNode);
    -		}
    -		
    -		// first line idea comes from Andrew Collington, thanks!
    -		highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine;
    -
    -		highlighter.Highlight(element[propertyName]);
    -		
    -		highlighter.source = element;
    -
    -		element.parentNode.insertBefore(highlighter.div, element);
    -	}	
    -}
    diff --git a/modules/editor/components/code_highlighter/tpl/images/border_dotted.gif b/modules/editor/components/code_highlighter/tpl/images/border_dotted.gif
    deleted file mode 100755
    index eaf1ae738..000000000
    Binary files a/modules/editor/components/code_highlighter/tpl/images/border_dotted.gif and /dev/null differ
    diff --git a/modules/editor/components/code_highlighter/tpl/images/border_left_dotted.gif b/modules/editor/components/code_highlighter/tpl/images/border_left_dotted.gif
    deleted file mode 100755
    index 101259cb7..000000000
    Binary files a/modules/editor/components/code_highlighter/tpl/images/border_left_dotted.gif and /dev/null differ
    diff --git a/modules/editor/components/code_highlighter/tpl/images/border_left_solid.gif b/modules/editor/components/code_highlighter/tpl/images/border_left_solid.gif
    deleted file mode 100755
    index 10b7e789f..000000000
    Binary files a/modules/editor/components/code_highlighter/tpl/images/border_left_solid.gif and /dev/null differ
    diff --git a/modules/editor/components/code_highlighter/tpl/images/border_solid.gif b/modules/editor/components/code_highlighter/tpl/images/border_solid.gif
    deleted file mode 100755
    index 9fbf79f57..000000000
    Binary files a/modules/editor/components/code_highlighter/tpl/images/border_solid.gif and /dev/null differ
    diff --git a/modules/editor/components/code_highlighter/tpl/popup.css b/modules/editor/components/code_highlighter/tpl/popup.css
    deleted file mode 100755
    index 29361e224..000000000
    --- a/modules/editor/components/code_highlighter/tpl/popup.css
    +++ /dev/null
    @@ -1,24 +0,0 @@
    -@charset "utf-8";
    -@import url(../../../../../modules/admin/tpl/css/admin.css);
    -
    -#folder_area { clear:left; }
    -
    -.border_type { float:left; margin-right:1em; width:120px; }
    -
    -img.color_icon { width:14px; height:14px; border:1px solid #FFFFFF; }
    -
    -img.color_icon_over { width:14px; height:14px; border:1px solid #000000; cursor:pointer; }
    -
    -img.border_preview_color { width:30px; height:16px; border:1px solid #EEEEEE; background-color:#88EE22; }
    -
    -img.border_preview_none_color { width:30px; height:12px; border:1px solid #EEEEEE; background-color:#FFFFFF; }
    -
    -img.bg_preview_color { width:30px; height:16px; border:1px solid #000000; background-color:#FFFFFF; }
    -
    -.editor_color_box { clear:both; height:65px; width:400px; border:1px solid #DDDDDD; padding:2px; }
    -
    -.editor_link_type { float:left; margin-right:.5em; vertical-align:middle; white-space:nowrap; }
    -
    -.editor_color_input { clear:both; }
    -
    -li { list-style:none; float:left; margin:5px 10px 0px 0;}
    diff --git a/modules/editor/components/code_highlighter/tpl/popup.html b/modules/editor/components/code_highlighter/tpl/popup.html
    deleted file mode 100755
    index a519c88c1..000000000
    --- a/modules/editor/components/code_highlighter/tpl/popup.html
    +++ /dev/null
    @@ -1,74 +0,0 @@
    -
    -
    -
    -
    -
    -

    {$component_info->title} ver. {$component_info->version}

    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {$lang->code_type} - -
    {$lang->file_path} - -
    {$lang->description} - -
    {$lang->first_line} - - -
    {$lang->used_collapse} - -
    {$lang->hidden_controls} - -
    -
    - - - -
    \ No newline at end of file diff --git a/modules/editor/components/code_highlighter/tpl/popup.js b/modules/editor/components/code_highlighter/tpl/popup.js deleted file mode 100755 index 76a73e499..000000000 --- a/modules/editor/components/code_highlighter/tpl/popup.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * popup으로 열렸을 경우 부모창의 위지윅에디터에 select된 멀티미디어 컴포넌트 코드를 체크하여 - * 있으면 가져와서 원하는 곳에 삽입 - **/ -var selected_node = null; -function getCode() { - // 부모 위지윅 에디터에서 선택된 영역이 있는지 확인 - if(typeof(opener)=='undefined') return; - - var node = opener.editorPrevNode; - if(!node || node.nodeName != 'DIV') return; - - selected_node = node; - - var code_type = node.getAttribute('code_type'); - var file_path = node.getAttribute('file_path'); - var description = node.getAttribute('description'); - var first_line = node.getAttribute('first_line'); - var collapse = node.getAttribute('collapse'); - var nogutter = node.getAttribute('nogutter'); - var nocontrols = node.getAttribute('nocontrols'); - - xGetElementById('code_type').value = code_type; - xGetElementById('file_path').value = file_path; - xGetElementById('description').value = description; - if(!first_line) xGetElementById('first_line').value = '1'; - else xGetElementById('first_line').value = first_line; - if(collapse == 'Y') xGetElementById('collapse').checked = true; - if(nogutter == 'Y') xGetElementById('nogutter').checked = true; - if(nocontrols == 'Y') xGetElementById('nocontrols').checked = true; -} - -/* 추가 버튼 클릭시 부모창의 위지윅 에디터에 인용구 추가 */ -function insertCode() { - if(typeof(opener)=='undefined') return; - - var code_type = xGetElementById('code_type').value; - var file_path = xGetElementById('file_path').value; - var description = xGetElementById('description').value; - var first_line = xGetElementById('first_line').value; - var collapse = xGetElementById('collapse').checked; - var nogutter = xGetElementById("nogutter").checked; - var nocontrols = xGetElementById("nocontrols").checked; - - var content = ''; - if(selected_node) content = xInnerHtml(selected_node); - else content = opener.editorGetSelectedHtml(opener.editorPrevSrl); - - var style = "border: #666666 1px dotted; border-left: #22aaee 5px solid; padding: 5px; background: #FAFAFA url('./modules/editor/components/code_highlighter/code.png') no-repeat top right;"; - - if(!content) content = " "; - - var text = '
    '+content+'
    '+"
    "; - - if(selected_node) { - selected_node.setAttribute('code_type', code_type); - selected_node.setAttribute('file_path', file_path); - selected_node.setAttribute('description', description); - selected_node.setAttribute('first_line', first_line); - selected_node.setAttribute("collapse", collapse); - selected_node.setAttribute('nogutter', nogutter); - selected_node.setAttribute('nocontrols', nocontrols); - selected_node.setAttribute('style', style); - opener.editorFocus(opener.editorPrevSrl); - - } else { - - opener.editorFocus(opener.editorPrevSrl); - var iframe_obj = opener.editorGetIFrame(opener.editorPrevSrl) - opener.editorReplaceHTML(iframe_obj, text); - opener.editorFocus(opener.editorPrevSrl); - } - - window.close(); -} - -xAddEventListener(window, 'load', getCode); diff --git a/modules/editor/components/quotation/info.xml b/modules/editor/components/quotation/info.xml index 641d55c3f..a1fc12438 100644 --- a/modules/editor/components/quotation/info.xml +++ b/modules/editor/components/quotation/info.xml @@ -3,8 +3,8 @@ 인용구 작성 引用文作成 引用 - Citas célebres - Quotations + Citas célebres + Quotations Цитаты 제로 diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index 997e79364..4d65847bc 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -324,6 +324,11 @@ // 자동저장한 결과가 없으면 null값 return if(!$saved_doc) return; + // 자동저장된 값이 혹시 이미 등록된 글인지 확인 + $oDocumentModel = &getModel('document'); + $oSaved = $oDocumentModel->getDocument($saved_doc->document_srl); + if($oSaved->isExists()) return; + // 자동저장 데이터에 문서번호가 있고 이 번호에 파일이 있다면 파일을 모두 이동하고 // 해당 문서 번호를 editor_sequence로 세팅함 if($saved_doc->document_srl) { diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index ae68b3db9..d48cabdaa 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -8,47 +8,47 @@ $lang->editor = "Tel-tel Editeur"; $lang->component_name = "Composant"; $lang->component_version = "Version"; - $lang->component_author = "Dvelopeur"; + $lang->component_author = "Développeur"; $lang->component_link = "Lien"; - $lang->component_date = "Jour de Cration"; + $lang->component_date = "Jour de Création"; $lang->component_description = "Description"; - $lang->component_extra_vars = "Variable d\'Option"; + $lang->component_extra_vars = "Variables d\'Option"; $lang->component_grant = "Configuration de l\'Autorisation"; $lang->about_component = "Sur le Composant"; - $lang->about_component_grant = "Groupe slectionn sont seulement autoris utiliser. (Tout le monde peut utiliser a quand le mode est invalid)"; + $lang->about_component_grant = "Le groupe sélectionné peut seulement utiliser. (Tout le monde peut utiliser quand le mode est invalid)"; $lang->msg_component_is_not_founded = 'Ne peut pas trouver Composant %s'; - $lang->msg_component_is_inserted = 'Composant choisi est dj insr'; - $lang->msg_component_is_first_order = 'Composant choisi est localis la premire position'; - $lang->msg_component_is_last_order = 'Composant choisi est localis la position dernire'; - $lang->msg_load_saved_doc = "Il y a un article conserv automatiquement. Voulez-vous le rstaurer?\nL\'esquisse conserv automatiquement va tre dbarrasser aprs conserver l\'article courant"; - $lang->msg_auto_saved = "Conserv automatiquement"; + $lang->msg_component_is_inserted = 'Composant choisi est déjà inséré'; + $lang->msg_component_is_first_order = 'Composant choisi est localisé à la première position'; + $lang->msg_component_is_last_order = 'Composant choisi est localisé à la position dernière'; + $lang->msg_load_saved_doc = "Il y a un article conservé automatiquement. Voulez-vous le réstaurer?\nL\'esquisse conservé automatiquement va être débarrasser après conserver l\'article courant."; + $lang->msg_auto_saved = "Conservé automatiquement"; $lang->cmd_disable = "Invalider"; $lang->cmd_enable = "Valider"; - $lang->editor_skin = 'Thme de l\'Editeur'; - $lang->upload_file_grant = 'Autorisation tlcharger(tlverser) '; - $lang->enable_default_component_grant = 'Autorisation utiliser des composants par dfaut'; - $lang->enable_component_grant = 'Autorisation utiliser des composants'; - $lang->enable_html_grant = 'Autorisation utiliser HTML'; - $lang->enable_autosave = 'Valider conserver automatiquement'; - $lang->height_resizable = 'possible remettre l\'hauteur'; + $lang->editor_skin = 'Thême de l\'Editeur'; + $lang->upload_file_grant = 'Autorisation à télécharger(téléverser) '; + $lang->enable_default_component_grant = 'Autorisation à utiliser les Composants Par Défaut'; + $lang->enable_component_grant = 'Autorisation à utiliser des composants'; + $lang->enable_html_grant = 'Autorisation à utiliser HTML'; + $lang->enable_autosave = 'Valider à conserver automatiquement'; + $lang->height_resizable = 'possible à remettre l\'hauteur'; $lang->editor_height = 'Hauteur de l\'Editeur'; - $lang->about_editor_skin = 'Vous pouvez choisir le thme de l\'Editeur.'; - $lang->about_upload_file_grant = 'Vous pouvez configurer l\'autorisation tlcharger les fichiers attachs. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; - $lang->about_default_component_grant = 'Vous pouvez configurer l\'autorisation utiliser les composants par dfaut de l\'Editeur. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; - $lang->about_component_grant = 'Vous pouvez configurer l\'autorisation utiliser des composants tendus de l\'Editeur. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; + $lang->about_editor_skin = 'Vous pouvez choisir le thême de l\'Editeur.'; + $lang->about_upload_file_grant = 'Vous pouvez configurer l\'autorisation à télécharger(attacher) les fichiers. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; + $lang->about_default_component_grant = 'Vous pouvez configurer l\'autorisation à utiliser les Composants Par Défaut de l\'Editeur. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; + $lang->about_component_grant = 'Vous pouvez configurer l\'autorisation à utiliser des composants tendus de l\'Editeur. (Tout le monde aura l\'autorisation si vous ne cochez rien)'; $lang->about_editor_height = 'Vous pouvez configurer l\'hauteur de l\'Editeur.'; - $lang->about_editor_height_resizable = 'Autoriser remettre l\'hauteur de l\'Editeur.'; - $lang->about_enable_html_grant = 'Vous pouvez autoriser utiliser HTML'; - $lang->about_enable_autosave = 'Vous pouvez valider la fonction conserver automatiquement pendant crire des articles.'; + $lang->about_editor_height_resizable = 'Autoriser à remettre l\'hauteur de l\'Editeur.'; + $lang->about_enable_html_grant = 'Vous pouvez autoriser à utiliser HTML'; + $lang->about_enable_autosave = 'Vous pouvez valider la fonction à conserver automatiquement pendant écrire des articles.'; - $lang->edit->fontname = 'Police de caractres'; + $lang->edit->fontname = 'Police de caractères'; $lang->edit->fontsize = 'Mesure'; - $lang->edit->use_paragraph = 'Fonction de Paragraphe'; + $lang->edit->use_paragraph = 'Fonctions sur Paragraphe'; $lang->edit->fontlist = array( "Gulim", "Dodum", @@ -72,36 +72,36 @@ $lang->edit->submit = 'Valider'; - $lang->edit->help_remove_format = "Supprimer les Tags dans l\'endroit slectionn"; - $lang->edit->help_strike_through = "Reprsenter la ligne d\'annulation sur les lettres."; + $lang->edit->help_remove_format = "Supprimer les Tags dans l\'endroit sélectionné"; + $lang->edit->help_strike_through = "Représenter la ligne d\'annulation sur les lettres."; $lang->edit->help_align_full = "Aligner pleinement selon largeur"; - $lang->edit->help_fontcolor = "Slectionner la couleur de la Police de caractres"; - $lang->edit->help_fontbgcolor = "Slectionner la couleur de l\'arrire-plan de la Police de caractres."; + $lang->edit->help_fontcolor = "Sélectionner la couleur de la Police de caractères"; + $lang->edit->help_fontbgcolor = "Sélectionner la couleur de l\'arrière-plan de la Police de caractères."; $lang->edit->help_bold = "Faire Police gras"; $lang->edit->help_italic = "Faire Police italique"; - $lang->edit->help_underline = "Police soulign"; - $lang->edit->help_strike = "Police biff"; - $lang->edit->help_redo = "Rtablir"; + $lang->edit->help_underline = "Police souligné"; + $lang->edit->help_strike = "Police biffé"; + $lang->edit->help_redo = "Réfaire"; $lang->edit->help_undo = "Annuler"; - $lang->edit->help_align_left = "Alignement gauche"; - $lang->edit->help_align_center = "Alignment centr"; - $lang->edit->help_align_right = "Alignement droite"; - $lang->edit->help_add_indent = "Ajouter un Rentr"; - $lang->edit->help_remove_indent = "Enlever un Rentr"; - $lang->edit->help_list_number = "Appliquer le liste numrote"; - $lang->edit->help_list_bullet = "Appliquer le liste puces"; - $lang->edit->help_use_paragrapth = "Appuyez Ctrl+Enter pour sparer paragraphe. (Appuyez Alt+S pour conserver)"; + $lang->edit->help_align_left = "Aligner à gauche"; + $lang->edit->help_align_center = "Aligner centr"; + $lang->edit->help_align_right = "Aligner droite"; + $lang->edit->help_add_indent = "Ajouter un Rentré"; + $lang->edit->help_remove_indent = "Enlever un Rentré"; + $lang->edit->help_list_number = "Appliquer le liste numrote"; + $lang->edit->help_list_bullet = "Appliquer le liste à puces"; + $lang->edit->help_use_paragrapth = "Appuyez Ctrl+Enter pour séparer les paragraphe. (Appuyez Alt+S pour conserver)"; - $lang->edit->upload = 'Attachement'; + $lang->edit->upload = 'Attacher'; $lang->edit->upload_file = 'Attacher un(des) Fichier(s)'; - $lang->edit->link_file = 'Insrer dans le Texte'; - $lang->edit->delete_selected = 'Supprimer le Slectionn'; + $lang->edit->link_file = 'Insérer dans le Texte'; + $lang->edit->delete_selected = 'Supprimer le Sélectionné'; $lang->edit->icon_align_article = 'Occuper un paragraphe'; - $lang->edit->icon_align_left = 'Placer gauche du texte'; + $lang->edit->icon_align_left = 'Placer à gauche du texte'; $lang->edit->icon_align_middle = 'Placer au centre'; - $lang->edit->icon_align_right = 'Placer droite du texte'; + $lang->edit->icon_align_right = 'Placer à droite du texte'; - $lang->about_dblclick_in_editor = 'Vous pouvez configurer en dtail des composants par double-click sur un arrire-plan, un texte, une image ou une citation'; + $lang->about_dblclick_in_editor = 'Vous pouvez configurer en détail des composants par double-click sur un arrière-plan, un texte, une image ou une citation'; ?> diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 5f0570ec7..da5bb2b68 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -30,21 +30,21 @@ $lang->editor_skin = '编辑器皮肤'; $lang->upload_file_grant = '文件上传权限'; - $lang->enable_default_component_grant = '基本组件使用权限'; + $lang->enable_default_component_grant = '默认组件使用权限'; $lang->enable_component_grant = '组件使用权限'; $lang->enable_html_grant = 'HTML编辑权限'; - $lang->enable_autosave = '使用自动保存'; - $lang->height_resizable = '使用高度调整'; + $lang->enable_autosave = '内容自动保存'; + $lang->height_resizable = '高度调整'; $lang->editor_height = '编辑器高度'; $lang->about_editor_skin = '可以选择编辑器皮肤。'; - $lang->about_upload_file_grant = '可以设置上传文件的权限。 (全部解除时任何用户都可以上传文件)'; - $lang->about_default_component_grant = '可以指定在编辑器基本组件的使用权限。 (全部解除时任何用户都可以使用)'; - $lang->about_component_grant = '可以指定除了基本组件外的扩展组件使用的权限。 (全部解除时任何用户都可以使用)'; - $lang->about_editor_height = '可以指定编辑器的基本高度。'; - $lang->about_editor_height_resizable = '允许直接变更编辑器的高度。'; - $lang->about_enable_html_grant = '用HTML代码编辑的权限。'; - $lang->about_enable_autosave = '发表主题时激活自动保存内容的功能。'; + $lang->about_upload_file_grant = '可以设置上传文件的权限(全部解除为无限制)。'; + $lang->about_default_component_grant = '可以设置编辑器默认组件的使用权限(全部解除为无限制)。'; + $lang->about_component_grant = '可以设置除默认组件外的扩展组件使用权限(全部解除时任何用户都可以使用)。'; + $lang->about_editor_height = '可以指定编辑器的默认高度。'; + $lang->about_editor_height_resizable = '允许用户拖动编辑器高度。'; + $lang->about_enable_html_grant = 'HTML代码编辑权限设置。'; + $lang->about_enable_autosave = '发表主题时激活内容自动保存功能。'; $lang->edit->fontname = '字体'; $lang->edit->fontsize = '大小'; diff --git a/modules/editor/skins/default_black/css/editor.css b/modules/editor/skins/default_black/css/editor.css new file mode 100644 index 000000000..82bb9ac5c --- /dev/null +++ b/modules/editor/skins/default_black/css/editor.css @@ -0,0 +1,53 @@ +@charset "utf-8"; + +.xeEditor { } +.xeEditor .optionABC { clear:both; width:100%; overflow:hidden; background:transparent;} +.xeEditor .optionABC .selectGroup { white-space:nowrap; display:block; height:21px; margin:0 .5em 0 0; padding-left:1em; float:left;} +.xeEditor .optionABC .selectGroup select {background-color:#444444; color:#AAAAAA; } +.xeEditor .optionABC .buttonGroup { white-space:nowrap; position:relative; display:block; margin:0 .5em 0 0; float:left; height:21px; overflow:hidden; padding-left:2px;} +.xeEditor .optionABC .buttonGroup img { float:left; display:block; margin-left:-1px; cursor:pointer;} +.xeEditor .optionA, +.xeEditor .optionB, +.xeEditor .optionC { float:left; background:transparent; padding:.5em 0 .5em .7em; overflow:hidden;} +.xeEditor .optionA *, +.xeEditor .optionB *, +.xeEditor .optionC * { vertical-align:middle;} +.xeEditor .optionA { background-position:-3px bottom; padding-left:0;} +.xeEditor .optionA select option { font-size:.9em; } +.xeEditor .optionDE { width:100%; clear:both; overflow:hidden; background:transparent;height:29px;} +.xeEditor .optionDE .buttonGroup { white-space:nowrap; position:relative; display:block; float:left; height:21px; overflow:hidden; padding-left:2px;} +.xeEditor .optionDE img { float:left; display:block; margin-right:.5em; cursor:pointer;} +.xeEditor .optionD { padding:.5em 0 .5em .8em; overflow:hidden; float:left; border-right:1px solid #e0e0e0;} +.xeEditor .optionE { padding:4px 0 0 9px; overflow:hidden; float:left;} + +.xeEditor .editorInfo { background:transparent; padding:.5em; border:1px solid #e1e1dd; color:#999999; position:relative; margin:5px 10px 0 10px;} +.xeEditor .close { cursor:pointer; position:absolute; top:3px; right:3px; _top:3px; _right:15px;} +.xeEditor .editor_iframe_box { clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; padding:0; margin:3px 10px 5px 10px; } +.xeEditor .editor_iframe_textarea { background:#ffffff; clear:both; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; margin:5px 10px 0 10px; width:100%; font-size:1em; display:none;} + +.xeEditor .textAreaDragIndicator { text-align:center; background:url(../images/lineTextAreaDrag.gif) repeat-x left center; padding:5px 0 5px 0; } +.xeEditor .textAreaDragIndicatorBar { background:url(../images/buttonTextAreaDrag.gif) no-repeat center; cursor:move;height:14px;} + +.xeEditor .editor_info { clear:both; padding:5px 10px 0 10px; overflow:hidden;} +.xeEditor .editor_info .editor_option { float:left; color:#888888; } +.xeEditor .editor_info .editor_autosaved_message { display:none; color:#888888; float:right; } + +.xeEditor .inputTypeTextArea { background:#fbfbfb; padding:1em; width:94%;} + +.xeEditor .fileAttach { border:none; table-layout:fixed; margin:0 10px 0 10px; } + +.xeEditor .fileAttach .preview { padding:5px; border:1px solid #e1e1dd; width:100px; height:100px; margin-right:10px;} +.xeEditor .fileAttach .preview img { width:100px; height:100px; } + +.xeEditor .fileAttach .fileListArea .fileList { background:#444444; overflow:auto; width:100%; height:auto; border:1px solid; border-color:#a6a6a6 #d8d8d8 #d8d8d8 #a6a6a6; margin-bottom:10px; font-size:11px;} +.xeEditor .fileAttach .fileListArea .fileList option { line-height:100%; padding-left:.5em; color:#AAAAAA;} +.xeEditor .fileAttach .fileUploadControl { float:left; } +.xeEditor .fileAttach .file_attach_info { color:#AAAAAA; font-size:.9em; _font-size:8pt; text-align:right;} +*:first-child+html .xeEditor .fileAttach .file_attach_info { font-size:8pt; } + +.xeEditor .fileAttach .fileUploadControl .uploaderButton { display:block; cursor:pointer; background:url(../images/buttonTypeBCenter.gif) repeat-x left center; line-height:100%; overflow:visible; color:#3f4040; margin:0 1px; font-size:.9em; white-space:nowrap;} +.xeEditor .fileAttach .fileUploadControl .uploaderButton:hover { text-decoration:none;} +.xeEditor .fileAttach .fileUploadControl .uploaderButton img { vertical-align:middle;} +.xeEditor .fileAttach .fileUploadControl .uploaderButton .leftCap { width:2px; height:21px; background:url(../images/buttonTypeBLeft.gif) no-repeat; margin:0 .3em 0 0; position:relative; left:-1px;} +.xeEditor .fileAttach .fileUploadControl .uploaderButton .rightCap { width:2px; height:21px; background:url(../images/buttonTypeBRight.gif) no-repeat; margin:0 -1px 0 .4em;} +.xeEditor .fileAttach .fileUploadControl .uploaderButton .icon { margin:0 .2em;} diff --git a/modules/editor/skins/default_black/editor.html b/modules/editor/skins/default_black/editor.html new file mode 100644 index 000000000..74115f2df --- /dev/null +++ b/modules/editor/skins/default_black/editor.html @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + +
    + +
    + + + +
    +
    +
    + + + + + +
    + +
    + {$lang->edit->help_bold} + {$lang->edit->help_italic} + {$lang->edit->help_underline} + {$lang->edit->help_underline} + {$lang->edit->help_underline} + {$lang->edit->help_fontcolor} + {$lang->edit->help_fontbgcolor} +
    +
    + +
    +
    + {$lang->edit->help_align_left} + {$lang->edit->help_align_center} + {$lang->edit->help_align_right} + {$lang->edit->help_align_full} +
    + +
    + {$lang->edit->help_remove_indent} + {$lang->edit->help_add_indent} +
    + +
    + {$lang->edit->help_list_number} + {$lang->edit->help_list_bullet} +
    + + +
    + + +
    + + + + +
    +
    +
    + + + {$component->title} + + +
    +
    +
    + +
    + + + +
    + {$lang->about_dblclick_in_editor} + + close +
    + + + + +
    + +
    + +
    + + +
    + +
    + + + +
    + + + + +
    + + + + + + + + + + + + + + +
    preview
    + +
    + +
    + +
    {$upload_status}
    +
    + +
    + + + + + diff --git a/modules/editor/skins/default_black/images/bgBoardEditorOption.gif b/modules/editor/skins/default_black/images/bgBoardEditorOption.gif new file mode 100644 index 000000000..559588af6 Binary files /dev/null and b/modules/editor/skins/default_black/images/bgBoardEditorOption.gif differ diff --git a/modules/editor/components/code_highlighter/tpl/images/blank.gif b/modules/editor/skins/default_black/images/blank.gif old mode 100755 new mode 100644 similarity index 100% rename from modules/editor/components/code_highlighter/tpl/images/blank.gif rename to modules/editor/skins/default_black/images/blank.gif diff --git a/modules/editor/skins/default_black/images/buttonClose.gif b/modules/editor/skins/default_black/images/buttonClose.gif new file mode 100644 index 000000000..12cd8aaa9 Binary files /dev/null and b/modules/editor/skins/default_black/images/buttonClose.gif differ diff --git a/modules/editor/skins/default_black/images/buttonTextAreaDrag.gif b/modules/editor/skins/default_black/images/buttonTextAreaDrag.gif new file mode 100644 index 000000000..148e9ee10 Binary files /dev/null and b/modules/editor/skins/default_black/images/buttonTextAreaDrag.gif differ diff --git a/modules/editor/skins/default_black/images/buttonTypeBCenter.gif b/modules/editor/skins/default_black/images/buttonTypeBCenter.gif new file mode 100644 index 000000000..8998cbae2 Binary files /dev/null and b/modules/editor/skins/default_black/images/buttonTypeBCenter.gif differ diff --git a/modules/editor/skins/default_black/images/buttonTypeBLeft.gif b/modules/editor/skins/default_black/images/buttonTypeBLeft.gif new file mode 100644 index 000000000..378be04ed Binary files /dev/null and b/modules/editor/skins/default_black/images/buttonTypeBLeft.gif differ diff --git a/modules/editor/skins/default_black/images/buttonTypeBRight.gif b/modules/editor/skins/default_black/images/buttonTypeBRight.gif new file mode 100644 index 000000000..4a85fd289 Binary files /dev/null and b/modules/editor/skins/default_black/images/buttonTypeBRight.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_ac.gif b/modules/editor/skins/default_black/images/editor_btn_ac.gif new file mode 100644 index 000000000..e19fbbe86 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_ac.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_aj.gif b/modules/editor/skins/default_black/images/editor_btn_aj.gif new file mode 100644 index 000000000..a4cc61176 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_aj.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_al.gif b/modules/editor/skins/default_black/images/editor_btn_al.gif new file mode 100644 index 000000000..efb06184e Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_al.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_ar.gif b/modules/editor/skins/default_black/images/editor_btn_ar.gif new file mode 100644 index 000000000..ea27284f6 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_ar.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_b.gif b/modules/editor/skins/default_black/images/editor_btn_b.gif new file mode 100644 index 000000000..ea3ec1e6d Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_b.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_bg.gif b/modules/editor/skins/default_black/images/editor_btn_bg.gif new file mode 100644 index 000000000..37ca8c1c8 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_bg.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_c.gif b/modules/editor/skins/default_black/images/editor_btn_c.gif new file mode 100644 index 000000000..010a75aa7 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_c.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_i.gif b/modules/editor/skins/default_black/images/editor_btn_i.gif new file mode 100644 index 000000000..98ca8e271 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_i.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_id.gif b/modules/editor/skins/default_black/images/editor_btn_id.gif new file mode 100644 index 000000000..efbe8ed2e Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_id.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_lh.gif b/modules/editor/skins/default_black/images/editor_btn_lh.gif new file mode 100644 index 000000000..b07bb8370 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_lh.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_od.gif b/modules/editor/skins/default_black/images/editor_btn_od.gif new file mode 100644 index 000000000..3222a806d Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_od.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_ol.gif b/modules/editor/skins/default_black/images/editor_btn_ol.gif new file mode 100644 index 000000000..205fb9fb7 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_ol.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_removeformat.gif b/modules/editor/skins/default_black/images/editor_btn_removeformat.gif new file mode 100644 index 000000000..a53b49625 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_removeformat.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_strikethrough.gif b/modules/editor/skins/default_black/images/editor_btn_strikethrough.gif new file mode 100644 index 000000000..cdae068ea Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_strikethrough.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_tag.gif b/modules/editor/skins/default_black/images/editor_btn_tag.gif new file mode 100644 index 000000000..df52b8ca9 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_tag.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_u.gif b/modules/editor/skins/default_black/images/editor_btn_u.gif new file mode 100644 index 000000000..f506d767e Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_u.gif differ diff --git a/modules/editor/skins/default_black/images/editor_btn_ul.gif b/modules/editor/skins/default_black/images/editor_btn_ul.gif new file mode 100644 index 000000000..bad97cf24 Binary files /dev/null and b/modules/editor/skins/default_black/images/editor_btn_ul.gif differ diff --git a/modules/editor/skins/default_black/images/lineTextAreaDrag.gif b/modules/editor/skins/default_black/images/lineTextAreaDrag.gif new file mode 100644 index 000000000..3df035047 Binary files /dev/null and b/modules/editor/skins/default_black/images/lineTextAreaDrag.gif differ diff --git a/modules/editor/skins/default_black/skin.xml b/modules/editor/skins/default_black/skin.xml new file mode 100644 index 000000000..491f94c00 --- /dev/null +++ b/modules/editor/skins/default_black/skin.xml @@ -0,0 +1,18 @@ + + + 제로보드XE 검은 배경 기본 에디터 + + zero + Zero + Zero + + 개발 : zero (http://www.zeroboard.com) + + + 程序 : zero (http://www.zeroboard.com) + + + 開発 : Zero (http://www.zeroboard.com) + + + diff --git a/modules/editor/skins/textarea/skin.xml b/modules/editor/skins/textarea/skin.xml index 7a3d79e20..a63fbde28 100644 --- a/modules/editor/skins/textarea/skin.xml +++ b/modules/editor/skins/textarea/skin.xml @@ -11,8 +11,8 @@ 개발 : zero (http://www.zeroboard.com) - 适用于纯文本形式输入内容时使用的皮肤。 - 不支持编辑器组件和上传文件的功能,可使用在纯文本形式的内容。 + 适用于编辑纯文本形式内容时使用的皮肤。 + 不支持编辑器组件及上传文件功能,只能处理纯文本形式的内容。 开发 : zero (http://www.zeroboard.com) diff --git a/modules/editor/tpl/js/editor.js b/modules/editor/tpl/js/editor.js index 1e8ab9d2e..677fccd07 100755 --- a/modules/editor/tpl/js/editor.js +++ b/modules/editor/tpl/js/editor.js @@ -63,7 +63,9 @@ function editorGetSelectedNode(editor_sequence) { /** * editor 시작 (editor_sequence로 iframe객체를 얻어서 쓰기 모드로 전환) **/ -function editorStart(editor_sequence, primary_key, content_key, editor_height) { +function editorStart(editor_sequence, primary_key, content_key, editor_height, font_color) { + if(typeof(font_color)=='undefined') font_color = '#000000'; + // iframe obj를 찾음 var iframe_obj = editorGetIFrame(editor_sequence); if(!iframe_obj) return; @@ -118,7 +120,7 @@ function editorStart(editor_sequence, primary_key, content_key, editor_height) { ''+ ''+ ''+ ''+ content+ diff --git a/modules/file/lang/fr.lang.php b/modules/file/lang/fr.lang.php index 5500cb37f..85bc308fc 100644 --- a/modules/file/lang/fr.lang.php +++ b/modules/file/lang/fr.lang.php @@ -8,7 +8,7 @@ $lang->file = 'Attachement'; $lang->file_name = 'Nom du Fichier'; $lang->file_size = 'Mesure du Fichier'; - $lang->download_count = 'Somme du Tlcharg'; + $lang->download_count = 'Somme du Téléchargé'; $lang->status = 'Statut'; $lang->is_valid = 'Valide'; $lang->is_stand_by = 'Attente'; @@ -16,26 +16,26 @@ $lang->allowed_filesize = 'Mesure du Fichier Maximum'; $lang->allowed_attach_size = 'Somme des Attachements Maximum'; $lang->allowed_filetypes = 'Extensions consentis'; - $lang->enable_download_group = 'Groupe autoris Tlcharger'; + $lang->enable_download_group = 'Groupe autorisé Télécharger'; $lang->about_allowed_filesize = 'Vous pouvez assigner la limite de mesure pour chaque fichier. (Exclure administrateurs)'; $lang->about_allowed_attach_size = 'Vous pouvez assigner la limite de mesure pour chaque document. (Exclure administrateurs)'; - $lang->about_allowed_filetypes = 'Extensions consentis seulement peuvent tre attachs. Pour consentir une extension, utilisez "*.[extention]". Pour consentir plusieurs extensions, utilisez ";" entre chaque extension.
    ex) *.* or *.jpg;*.gif;
    (Exclure Administraterrs)'; + $lang->about_allowed_filetypes = 'Extensions consentis seulement peuvent être attachés. Pour consentir une extension, utilisez "*.[extention]". Pour consentir plusieurs extensions, utilisez ";" entre chaque extension.
    ex) *.* ou *.jpg;*.gif;
    (Exclure Administrateurs)'; - $lang->cmd_delete_checked_file = 'Supprier item(s) slectionn(s)'; + $lang->cmd_delete_checked_file = 'Supprimer item(s) slectionné(s)'; $lang->cmd_move_to_document = 'Bouger au Document'; - $lang->cmd_download = 'Tlcharger'; + $lang->cmd_download = 'Télécharger'; - $lang->msg_not_permitted_download = 'Vous n\'tes pas autoris tlcharger'; - $lang->msg_cart_is_null = 'Choisissez un(des) fichier(s) supprimer'; - $lang->msg_checked_file_is_deleted = '%d attachement(s) est(sont) supprim(s)'; - $lang->msg_exceeds_limit_size = 'La mesure de l\'(des) attachement(s) est plus grande que celle de consentie.'; + $lang->msg_not_permitted_download = 'Vous n\'tes pas autorisé à télécharger'; + $lang->msg_cart_is_null = 'Choisissez un(des) fichier(s) à supprimer'; + $lang->msg_checked_file_is_deleted = '%d attachement(s) est(sont) supprimé(s)'; + $lang->msg_exceeds_limit_size = 'La mesure de l\'(des) attachement(s) est plus grande que celle de la consentie.'; $lang->search_target_list = array( 'filename' => 'Nom de Fichier', 'filesize' => 'Mesure de Fichier (octet, surplus)', - 'download_count' => 'Somme de Tlcharg (surplus)', - 'regdate' => 'Jour de Renrgistrer', + 'download_count' => 'Téléchargés (surplus)', + 'regdate' => 'Enrgistré', 'ipaddress' => 'Addresse IP', ); ?> diff --git a/modules/file/queries/insertFile.xml b/modules/file/queries/insertFile.xml index 9d846a3e3..669cb4f30 100644 --- a/modules/file/queries/insertFile.xml +++ b/modules/file/queries/insertFile.xml @@ -16,5 +16,6 @@ + diff --git a/modules/importer/conf/module.xml b/modules/importer/conf/module.xml index db64b2017..b923bd987 100644 --- a/modules/importer/conf/module.xml +++ b/modules/importer/conf/module.xml @@ -3,6 +3,9 @@ + + + diff --git a/modules/importer/extract.class.php b/modules/importer/extract.class.php new file mode 100644 index 000000000..9d43b75fd --- /dev/null +++ b/modules/importer/extract.class.php @@ -0,0 +1,207 @@ +filename = $filename; + + $this->startTag = $startTag; + if($endTag) $this->endTag = $endTag; + $this->itemStartTag = $itemTag; + $this->itemEndTag = $itemEndTag; + + $this->key = md5($filename); + + $this->cache_path = './files/cache/tmp/'.$this->key; + $this->cache_index_file = $this->cache_path.'/index'; + + if(!is_dir($this->cache_path)) FileHandler::makeDir($this->cache_path); + + return $this->openFile(); + } + + /** + * @brief 지정된 파일의 지시자를 염 + **/ + function openFile() { + @unlink($this->cache_index_file); + $this->index_fd = fopen($this->cache_index_file,"a"); + + // local 파일일 경우 + if(!preg_match('/^http:/i',$this->filename)) { + if(!file_exists($this->filename)) return new Object(-1,'msg_no_xml_file'); + $this->fd = fopen($this->filename,"r"); + + // remote 파일일 경우 + } else { + $url_info = parse_url($this->filename); + if(!$url_info['port']) $url_info['port'] = 80; + if(!$url_info['path']) $url_info['path'] = '/'; + + $this->fd = @fsockopen($url_info['host'], $url_info['port']); + if(!$this->fd) return new Object(-1,'msg_no_xml_file'); + + // 한글 파일이 있으면 한글파일 부분만 urlencode하여 처리 (iconv 필수) + $path = $url_info['path']; + if(preg_match('/[\xEA-\xED][\x80-\xFF]{2}/', $path)&&function_exists('iconv')) { + $path_list = explode('/',$path); + $cnt = count($path_list); + $filename = $path_list[$cnt-1]; + $filename = urlencode(iconv("UTF-8","EUC-KR",$filename)); + $path_list[$cnt-1] = $filename; + $path = implode('/',$path_list); + $url_info['path'] = $path; + } + + $header = sprintf("GET %s?%s HTTP/1.0\r\nHost: %s\r\nReferer: %s://%s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query'], $url_info['host'], $url_info['scheme'], $url_info['host']); + @fwrite($this->fd, $header); + $buff = ''; + while(!feof($this->fd)) { + $buff .= $str = fgets($this->fd, 1024); + if(!trim($str)) break; + } + if(preg_match('/404 Not Found/i',$buff)) return new Object(-1,'msg_no_xml_file'); + } + + if($this->startTag) { + while(!feof($this->fd)) { + $str = fgets($this->fd, 1024); + $pos = strpos($str, $this->startTag); + if($pos !== false) { + $this->buff = substr($this->buff, $pos+strlen($this->startTag)); + $this->isStarted = true; + $this->isFinished = false; + break; + } + } + } else { + $this->isStarted = true; + $this->isFinished = false; + } + + return new Object(); + } + + function closeFile() { + $this->isFinished = true; + fclose($this->fd); + fclose($this->index_fd); + } + + function isFinished() { + return $this->isFinished || !$this->fd || feof($this->fd); + } + + function saveItems() { + $this->index = 0; + while(!$this->isFinished()) { + $this->getItem(); + } + } + + function mergeItems($filename) { + $this->saveItems(); + + $filename = sprintf('%s/%s', $this->cache_path, $filename); + + $index_fd = fopen($this->cache_index_file,"r"); + $fd = fopen($filename,'w'); + + fwrite($fd, ''); + while(!feof($index_fd)) { + $target_file = trim(fgets($index_fd,1024)); + if(!file_exists($target_file)) continue; + $buff = FileHandler::readFile($target_file); + fwrite($fd, FileHandler::readFile($target_file)); + + @unlink($target_file); + } + fwrite($fd, ''); + fclose($fd); + } + + function getItem() { + if($this->isFinished()) return; + + while(!feof($this->fd)) { + $startPos = strpos($this->buff, $this->itemStartTag); + if($startPos !== false) { + $this->buff = substr($this->buff, $startPos); + break; + } elseif($this->endTag) { + $endPos = strpos($this->buff, $this->endTag); + if($endPos !== false) { + $this->closeFile(); + return; + } + } + $this->buff .= fgets($this->fd, 1024); + } + + $startPos = strpos($this->buff, $this->itemStartTag); + if($startPos === false) { + $this->closeFile(); + return; + } + + $filename = sprintf('%s/%s.xml',$this->cache_path, $this->index++); + fwrite($this->index_fd, $filename."\r\n"); + + $fd = fopen($filename,'w'); + + while(!feof($this->fd)) { + $endPos = strpos($this->buff, $this->itemEndTag); + if($endPos !== false) { + $endPos += strlen($this->itemEndTag); + $buff = substr($this->buff, 0, $endPos); + fwrite($fd, $this->_addTagCRTail($buff)); + fclose($fd); + $this->buff = substr($this->buff, $endPos); + break; + } + + fwrite($fd, $this->_addTagCRTail($this->buff)); + $this->buff = fgets($this->fd, 1024); + } + } + + function getTotalCount() { + return $this->index; + } + + function getKey() { + return $this->key; + } + + function _addTagCRTail($str) { + $str = preg_replace('/<\/([^>]*)>\r\n<", $str); + return $str; + } + } +?> diff --git a/modules/importer/importer.admin.controller.php b/modules/importer/importer.admin.controller.php index a67d1a2ae..3d95da38d 100644 --- a/modules/importer/importer.admin.controller.php +++ b/modules/importer/importer.admin.controller.php @@ -5,18 +5,12 @@ * @brief importer 모듈의 admin controller class **/ + @set_time_limit(0); + @require_once('./modules/importer/extract.class.php'); + class importerAdminController extends importer { - var $oMemberController = null; - var $oMemberModel = null; - var $default_group_srl = 0; - - var $oDocumentController = null; - var $oDocumentModel = null; - var $oCommentController = null; - var $oCommentModel = null; - var $oTrackbackController = null; - + var $unit_count = 300; var $oXmlParser = null; /** @@ -29,8 +23,6 @@ * @brief 회원정보와 게시물 정보를 싱크 **/ function procImporterAdminSync() { - set_time_limit(0); - // 게시물정보 싱크 $output = executeQuery('importer.updateDocumentSync'); @@ -41,25 +33,139 @@ } /** - * @brief 회원xml 파일을 분석해서 import + * @brief XML파일을 미리 분석하여 개발 단위로 캐싱 **/ - function procImporterAdminMemberImport() { - set_time_limit(0); - + function procImporterAdminPreProcessing() { + // 이전할 대상 xml파일을 구함 $xml_file = Context::get('xml_file'); - $total_count = (int)Context::get('total_count'); - $success_count = (int)Context::get('success_count'); - $readed_line = (int)Context::get('readed_line'); - // xml_file 경로가 없으면 에러~ - if(!$xml_file) return new Object(-1, 'msg_no_xml_file'); + // 이전할 대상의 type을 구함 + $type = Context::get('type'); - // local 파일 지정인데 파일이 없으면 역시 에러~ - if(!preg_match('/^http:/i',$xml_file) && (!preg_match("/\.xml$/i", $xml_file) || !file_exists($xml_file)) ) return new Object(-1,'msg_no_xml_file'); + // xml파일에서 정해진 규칙으로 캐싱 + $oExtract = new extract(); - // 이제부터 데이터를 가져오면서 처리 - $fp = $this->getFilePoint($xml_file); - if(!$fp) return new Object(-1,'msg_no_xml_file'); + switch($type) { + case 'member' : + $output = $oExtract->set($xml_file,'', '', ''); + if($output->toBool()) $oExtract->saveItems(); + break; + case 'message' : + $output = $oExtract->set($xml_file,'', '',''); + if($output->toBool()) $oExtract->saveItems(); + break; + case 'ttxml' : + // 카테고리 정보를 먼저 구함 + $output = $oExtract->set($xml_file,'','', 'toBool()) { + // ttxml 카테고리는 별도로 구함 + $started = false; + $buff = ''; + while(!feof($oExtract->fd)) { + $str = fgets($oExtract->fd, 1024); + if(substr($str,0,strlen(''))=='') $started = true; + if(substr($str,0,strlen(''; + $oExtract->closeFile(); + $category_filename = sprintf('%s/%s', $oExtract->cache_path, 'category'); + FileHandler::writeFile($category_filename, $buff); + + // 개별 아이템 구함 + $output = $oExtract->set($xml_file,'', ''); + if($output->toBool()) $oExtract->saveItems(); + } + break; + default : + // 카테고리 정보를 먼저 구함 + $output = $oExtract->set($xml_file,'', '', ''); + if($output->toBool()) { + $oExtract->mergeItems('category'); + + // 개별 아이템 구함 + $output = $oExtract->set($xml_file,'', '', ''); + if($output->toBool()) $oExtract->saveItems(); + } + break; + + } + + if(!$output->toBool()) { + $this->add('error',0); + $this->add('status',-1); + $this->setMessage($output->getMessage()); + return; + } + + // extract가 종료됨을 알림 + $this->add('type',$type); + $this->add('total',$oExtract->getTotalCount()); + $this->add('cur',0); + $this->add('key', $oExtract->getKey()); + $this->add('status',0); + } + + /** + * @brief xml파일의 내용이 extract되고 난후 차례대로 마이그레이션 + **/ + function procImporterAdminImport() { + // 변수 설정 + $type = Context::get('type'); + $total = Context::get('total'); + $cur = Context::get('cur'); + $key = Context::get('key'); + $user_id = Context::get('user_id'); + $target_module = Context::get('target_module'); + $this->unit_count = Context::get('unit_count'); + + // index파일이 있는지 확인 + $index_file = './files/cache/tmp/'.$key.'/index'; + if(!file_exists($index_file)) return new Object(-1, 'msg_invalid_xml_file'); + + switch($type) { + case 'ttxml' : + if(!$target_module) return new Object(-1,'msg_invalid_request'); + + require_once('./modules/importer/ttimport.class.php'); + $oTT = new ttimport(); + $cur = $oTT->importModule($key, $cur, $index_file, $this->unit_count, $target_module, $user_id); + break; + case 'message' : + $cur = $this->importMessage($key, $cur, $index_file); + break; + case 'member' : + $cur = $this->importMember($key, $cur, $index_file); + break; + case 'module' : + // 타켓 모듈의 유무 체크 + if(!$target_module) return new Object(-1,'msg_invalid_request'); + $cur = $this->importModule($key, $cur, $index_file, $target_module); + break; + } + + // extract가 종료됨을 알림 + $this->add('type',$type); + $this->add('total',$total); + $this->add('cur',$cur); + $this->add('key', $key); + $this->add('target_module', $target_module); + + // 모두 입력시 성공 메세지 출력하고 cache 파일제거 + if($total <= $cur) { + $this->setMessage( sprintf(Context::getLang('msg_import_finished'), $cur, $total) ); + FileHandler::removeFilesInDir('./files/cache/tmp/'); + } else $this->setMessage( sprintf(Context::getLang('msg_importing'), $total, $cur) ); + } + + /** + * @brief 회원 정보 입력 + **/ + function importMember($key, $cur, $index_file) { + if(!$cur) $cur = 0; + + // xmlParser객체 생성 + $oXmlParser = new XmlParser(); // 회원 입력을 위한 기본 객체들 생성 $this->oMemberController = &getController('member'); @@ -67,593 +173,689 @@ // 기본 회원 그룹을 구함 $default_group = $this->oMemberModel->getDefaultGroup(); - $this->default_group_srl = $default_group->group_srl; + $default_group_srl = $default_group->group_srl; - $obj = null; - $extra_var = null; - $is_extra_var = false; + // index파일을 염 + $f = fopen($index_file,"r"); - $inserted_count = 0; + // 이미 읽혀진 것은 패스 + for($i=0;$i<$cur;$i++) fgets($f, 1024); - // 본문 데이터부터 처리 시작 - $read_line = 0; - while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); + // 라인단위로 읽어들이면서 $cur보다 커지고 $cur+$this->unit_count개보다 작으면 중지 + for($idx=$cur;$idx<$cur+$this->unit_count;$idx++) { + if(feof($f)) break; - if($str == "") $read_line ++; - if($read_line < $readed_line) continue; + // 정해진 위치를 찾음 + $target_file = trim(fgets($f, 1024)); - // 한 아이템 준비 시작 - if($str == '') { - $obj = $extra_var = null; - $is_extra_var = false; - continue; + // 대상 파일을 읽여서 파싱후 입력 + $xmlObj = $oXmlParser->loadXmlFile($target_file); + @unlink($target_file); + if(!$xmlObj) continue; - // 추가 변수 시자r 일 경우 - } elseif($str == '') { - $is_extra_var = true; + // 객체 정리 + $obj = null; + $obj->user_id = base64_decode($xmlObj->member->user_id->body); + $obj->password = base64_decode($xmlObj->member->password->body); + $obj->user_name = base64_decode($xmlObj->member->user_name->body); + $obj->nick_name = base64_decode($xmlObj->member->nick_name->body); + if(!$obj->user_name) $obj->user_name = $obj->nick_name; + $obj->email = base64_decode($xmlObj->member->email->body); + $obj->homepage = base64_decode($xmlObj->member->homepage->body); + $obj->blog = base64_decode($xmlObj->member->blog->body); + $obj->birthday = substr(base64_decode($xmlObj->member->birthday->body),0,8); + $obj->allow_mailing = base64_decode($xmlObj->member->allow_mailing->body); + $obj->point = base64_decode($xmlObj->member->point->body); + $obj->image_nickname = base64_decode($xmlObj->member->image_nickname->buff->body); + $obj->image_mark = base64_decode($xmlObj->member->image_mark->buff->body); + $obj->profile_image = base64_decode($xmlObj->member->profile_image->buff->body); + $obj->signature = base64_decode($xmlObj->member->signature->body); + $obj->regdate = base64_decode($xmlObj->member->regdate->body); + $obj->last_login = base64_decode($xmlObj->member->last_login->body); - // 추가 변수 종료 일 경우 - } elseif($str == '') { - $is_extra_var = false; - $obj->extra_vars = $extra_var; - - // 아이템 종료시 DB 입력 - } else if( $str == '') { - if($this->importMember($obj)) $inserted_count ++; - if($inserted_count >= 300) { - $manual_break = true; - break; - } - - // members 태그 체크 (전체 개수를 구함) - } else if(substr($str,0,8)=='') { - break; - - // 이미지 마크, 이미지이름, 프로필 사진일 경우 - } else if(in_array($str, array('','',''))) { - - // binary buffer일 경우 임의의 위치에 파일을 저장시켜 놓고 그 파일의 경로를 return - $key = substr($str,1,strlen($str)-2); - $filename = $this->readFileBuff($fp, $key); - $obj->{$key} = $filename; - - // 변수 체크 - } else { - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - if($is_extra_var) $extra_var->{$key} = $val; - else $obj->{$key} = $val; - $buff = null; + if($xmlObj->member->extra_vars) { + foreach($xmlObj->member->extra_vars as $key => $val) { + if(in_array($key, array('node_name','attrs','body'))) continue; + $obj->extra_vars->{$key} = base64_decode($val->body); } } - } - fclose($fp); + // homepage, blog의 url을 정확히 만듬 + if($obj->homepage && !preg_match("/^http:\/\//i",$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage; + if($obj->blog && !preg_match("/^http:\/\//i",$obj->blog)) $obj->blog = 'http://'.$obj->blog; - $success_count += $inserted_count; + // email address 필드 정리 + $obj->email_address = $obj->email; + list($obj->email_id, $obj->email_host) = explode('@', $obj->email); - if($manual_break) { - $this->add('total_count',$total_count); - $this->add('success_count',$success_count); - $this->add('readed_line',$read_line); - $this->add('is_finished','0'); - $this->setMessage(sprintf(Context::getLang('msg_importing'), $total_count, $success_count)); - } else { - $this->add('is_finished','1'); - $this->setMessage(sprintf(Context::getLang('msg_import_finished'), $success_count, $total_count)); - } - } + // 메일링 허용 체크 + if($obj->allow_mailing!='Y') $obj->allow_mailing = 'N'; - /** - * @brief 주어진 xml 파일을 파싱해서 회원 정보 입력 - **/ - function importMember($obj) { - // homepage, blog의 url을 정확히 만듬 - if($obj->homepage && !preg_match("/^http:\/\//i",$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage; - if($obj->blog && !preg_match("/^http:\/\//i",$obj->blog)) $obj->blog = 'http://'.$obj->blog; + // 쪽지 수신 체크 + $obj->allow_message = 'Y'; + if(!in_array($obj->allow_message, array('Y','N','F'))) $obj->allow_message= 'Y'; - $obj->email_address = $obj->email; - list($obj->email_id, $obj->email_host) = explode('@', $obj->email); + // 최종 로그인 시간이 없으면 가입일을 입력 + if(!$obj->last_login) $obj->last_login = $obj->regdate; - if($obj->allow_mailing!='Y') $obj->allow_mailing = 'N'; + // 회원 번호를 구함 + $obj->member_srl = getNextSequence(); - $obj->allow_message = 'Y'; - if(!in_array($obj->allow_message, array('Y','N','F'))) $obj->allow_message= 'Y'; + // 확장변수의 정리 + $extra_vars = $obj->extra_vars; + unset($obj->extra_vars); + $obj->extra_vars = serialize($extra_vars); - $obj->member_srl = getNextSequence(); - - $extra_vars = $obj->extra_vars; - unset($obj->extra_vars); - $obj->extra_vars = serialize($extra_vars); - - $output = executeQuery('member.insertMember', $obj); - - // 입력실패시 닉네임 중복인지 확인 - if(!$output->toBool()) { - - // 닉네임 중복이라면 닉네임을 바꾸어서 입력 + // 중복되는 nick_name 데이터가 있는지 체크 + $nick_args = null; $nick_args->nick_name = $obj->nick_name; $nick_output = executeQuery('member.getMemberSrl', $nick_args); - if($nick_ouptut->data->member_srl) { - $obj->nick_name .= rand(111,999); - $output = executeQuery('member.insertMember', $obj); - } - } + if(!$nick_output->toBool()) $obj->nick_name .= '_'.$obj->member_srl; - // 입력 성공시 - if($output->toBool()) { + // 회원 추가 + $output = executeQuery('member.insertMember', $obj); - // 기본 그룹 가입 시킴 - $obj->group_srl = $this->default_group_srl; - executeQuery('member.addMemberToGroup',$obj); + // 입력 성공시 그룹 가입/ 이미지이름-마크-서명등을 추가 + if($output->toBool()) { - // 이미지네임 - if($obj->image_nickname && file_exists($obj->image_nickname)) { - $target_path = sprintf('files/member_extra_info/image_name/%s/', getNumberingPath($obj->member_srl)); - if(!is_dir($target_path)) FileHandler::makeDir($target_path); - $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); - @rename($obj->image_nickname, $target_filename); - } + // 기본 그룹 가입 시킴 + $obj->group_srl = $default_group_srl; + executeQuery('member.addMemberToGroup',$obj); - // 이미지마크 - if($obj->image_mark && file_exists($obj->image_mark)) { - $target_path = sprintf('files/member_extra_info/image_mark/%s/', getNumberingPath($obj->member_srl)); - if(!is_dir($target_path)) FileHandler::makeDir($target_path); - $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); - @rename($obj->image_mark, $target_filename); - } - - // 프로필 이미지 - if($obj->profile_image && file_exists($obj->profile_image)) { - $target_path = sprintf('files/member_extra_info/profile_image/%s/', getNumberingPath($obj->member_srl)); - if(!is_dir($target_path)) FileHandler::makeDir($target_path); - $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); - @rename($obj->profile_image, $target_filename); - } - - // 서명 - if($obj->signature) { - $signature = removeHackTag($obj->signature); - $signature_buff = sprintf('%s', $signature); - - $target_path = sprintf('files/member_extra_info/signature/%s/', getNumberingPath($obj->member_srl)); - if(!is_dir($target_path)) FileHandler::makeDir($target_path); - $target_filename = sprintf('%s%d.signature.php', $target_path, $obj->member_srl); - - FileHandler::writeFile($target_filename, $signature_buff); - } - return true; - } - - return false; - } - - /** - * @brief 메세지xml 파일을 분석해서 import - **/ - function procImporterAdminMessageImport() { - set_time_limit(0); - - $xml_file = Context::get('xml_file'); - $total_count = (int)Context::get('total_count'); - $success_count = (int)Context::get('success_count'); - $readed_line = (int)Context::get('readed_line'); - - // xml_file 경로가 없으면 에러~ - if(!$xml_file) return new Object(-1, 'msg_no_xml_file'); - - // local 파일 지정인데 파일이 없으면 역시 에러~ - if(!preg_match('/^http:/i',$xml_file) && (!preg_match("/\.xml$/i", $xml_file) || !file_exists($xml_file)) ) return new Object(-1,'msg_no_xml_file'); - - // 이제부터 데이터를 가져오면서 처리 - $fp = $this->getFilePoint($xml_file); - if(!$fp) return new Object(-1,'msg_no_xml_file'); - - $obj = null; - $inserted_count = 0; - - // 본문 데이터부터 처리 시작 - $read_line = 0; - while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); - - if($str == "") $read_line ++; - if($read_line < $readed_line) continue; - - // 한 아이템 준비 시작 - if($str == '') { - $obj = null; - continue; - - // 아이템 종료시 DB 입력 - } else if( $str == '') { - if($this->importMessage($obj)) $inserted_count ++; - if($inserted_count >= 100) { - $manual_break = true; - break; + // 이미지네임 + if($obj->image_nickname) { + $target_path = sprintf('files/member_extra_info/image_name/%s/', getNumberingPath($obj->member_srl)); + $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); + FileHandler::writeFile($target_filename, $obj->image_nickname); } - // messages 태그 체크 (전체 개수를 구함) - } else if(substr($str,0,9)=='image_mark && file_exists($obj->image_mark)) { + $target_path = sprintf('files/member_extra_info/image_mark/%s/', getNumberingPath($obj->member_srl)); + $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); + FileHandler::writeFile($target_filename, $obj->image_mark); + } - // 선언구 패스~ - } else if(substr($str,0,5)=='') { - break; + // 프로필 이미지 + if($obj->profile_image) { + $target_path = sprintf('files/member_extra_info/profile_image/%s/', getNumberingPath($obj->member_srl)); + $target_filename = sprintf('%s%d.gif', $target_path, $obj->member_srl); + FileHandler::writeFile($target_filename, $obj->profile_image); + } - // 변수 체크 - } else { - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - if($is_extra_var) $extra_var->{$key} = $val; - else $obj->{$key} = $val; - $buff = null; + // 서명 + if($obj->signature) { + $signature = removeHackTag($obj->signature); + $signature_buff = sprintf('%s', $signature); + + $target_path = sprintf('files/member_extra_info/signature/%s/', getNumberingPath($obj->member_srl)); + if(!is_dir($target_path)) FileHandler::makeDir($target_path); + $target_filename = sprintf('%s%d.signature.php', $target_path, $obj->member_srl); + + FileHandler::writeFile($target_filename, $signature_buff); } } } - fclose($fp); + fclose($f); - $success_count += $inserted_count; - - if($manual_break) { - $this->add('total_count',$total_count); - $this->add('success_count',$success_count); - $this->add('readed_line',$read_line); - $this->add('is_finished','0'); - $this->setMessage(sprintf(Context::getLang('msg_importing'), $total_count, $success_count)); - } else { - $this->add('is_finished','1'); - $this->setMessage(sprintf(Context::getLang('msg_import_finished'), $success_count, $total_count)); - } + return $idx-1; } /** - * @brief 주어진 xml 파일을 파싱해서 회원 정보 입력 + * @brief 주어진 xml 파일을 파싱해서 쪽지 정보 입력 **/ - function importMessage($obj) { - // 보낸이/ 받는이의 member_srl을 구함 (존재하지 않으면 그냥 pass..) - if(!$obj->sender) return false; - $sender_args->user_id = $obj->sender; - $sender_output = executeQuery('member.getMemberInfo',$sender_args); - $sender_srl = $sender_output->data->member_srl; - if(!$sender_srl) return false; + function importMessage($key, $cur, $index_file) { + if(!$cur) $cur = 0; - $receiver_args->user_id = $obj->receiver; - if(!$obj->receiver) return false; - $receiver_output = executeQuery('member.getMemberInfo',$receiver_args); - $receiver_srl = $receiver_output->data->member_srl; - if(!$receiver_srl) return false; + // xmlParser객체 생성 + $oXmlParser = new XmlParser(); - // 보내는 사용자의 쪽지함에 넣을 쪽지 - $sender_args->sender_srl = $sender_srl; - $sender_args->receiver_srl = $receiver_srl; - $sender_args->message_type = 'S'; - $sender_args->title = $obj->title; - $sender_args->content = $obj->content; - $sender_args->readed = $obj->readed; - $sender_args->regdate = $obj->regdate; - $sender_args->readed_date = $obj->readed_date; - $sender_args->related_srl = getNextSequence(); - $sender_args->message_srl = getNextSequence(); - $sender_args->list_order = $sender_args->message_srl * -1; + // index파일을 염 + $f = fopen($index_file,"r"); - $output = executeQuery('member.sendMessage', $sender_args); - if(!$output->toBool()) return false; + // 이미 읽혀진 것은 패스 + for($i=0;$i<$cur;$i++) fgets($f, 1024); - // 받는 회원의 쪽지함에 넣을 쪽지 - $receiver_args->message_srl = $sender_args->related_srl; - $receiver_args->list_order = $sender_args->related_srl*-1; - $receiver_args->sender_srl = $sender_srl; - if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl; - $receiver_args->receiver_srl = $receiver_srl; - $receiver_args->message_type = 'R'; - $receiver_args->title = $obj->title; - $receiver_args->content = $obj->content; - $receiver_args->readed = $obj->readed; - $receiver_args->regdate = $obj->regdate; - $receiver_args->readed_date = $obj->readed_date; - $output = executeQuery('member.sendMessage', $receiver_args); - if(!$output->toBool()) return false; + // 라인단위로 읽어들이면서 $cur보다 커지고 $cur+$this->unit_count개보다 작으면 중지 + for($idx=$cur;$idx<$cur+$this->unit_count;$idx++) { + if(feof($f)) break; - return true; + // 정해진 위치를 찾음 + $target_file = trim(fgets($f, 1024)); + + // 대상 파일을 읽여서 파싱후 입력 + $xmlObj = $oXmlParser->loadXmlFile($target_file); + @unlink($target_file); + if(!$xmlObj) continue; + + // 객체 정리 + $obj = null; + $obj->receiver = base64_decode($xmlObj->message->receiver->body); + $obj->sender = base64_decode($xmlObj->message->sender->body); + $obj->title = base64_decode($xmlObj->message->title->body); + $obj->content = base64_decode($xmlObj->message->content->body); + $obj->readed = base64_decode($xmlObj->message->readed->body)=='Y'?'Y':'N'; + $obj->regdate = base64_decode($xmlObj->message->regdate->body); + $obj->readed_date = base64_decode($xmlObj->message->readed_date->body); + $obj->receiver = base64_decode($xmlObj->message->receiver->body); + + // 보낸이/ 받는이의 member_srl을 구함 (존재하지 않으면 그냥 pass..) + if(!$obj->sender) continue; + $sender_args->user_id = $obj->sender; + $sender_output = executeQuery('member.getMemberInfo',$sender_args); + $sender_srl = $sender_output->data->member_srl; + if(!$sender_srl) continue; + + $receiver_args->user_id = $obj->receiver; + if(!$obj->receiver) continue; + $receiver_output = executeQuery('member.getMemberInfo',$receiver_args); + $receiver_srl = $receiver_output->data->member_srl; + if(!$receiver_srl) continue; + + // 보내는 사용자의 쪽지함에 넣을 쪽지 + $sender_args->sender_srl = $sender_srl; + $sender_args->receiver_srl = $receiver_srl; + $sender_args->message_type = 'S'; + $sender_args->title = $obj->title; + $sender_args->content = $obj->content; + $sender_args->readed = $obj->readed; + $sender_args->regdate = $obj->regdate; + $sender_args->readed_date = $obj->readed_date; + $sender_args->related_srl = getNextSequence(); + $sender_args->message_srl = getNextSequence(); + $sender_args->list_order = $sender_args->message_srl * -1; + + $output = executeQuery('member.sendMessage', $sender_args); + if($output->toBool()) { + // 받는 회원의 쪽지함에 넣을 쪽지 + $receiver_args->message_srl = $sender_args->related_srl; + $receiver_args->list_order = $sender_args->related_srl*-1; + $receiver_args->sender_srl = $sender_srl; + if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl; + $receiver_args->receiver_srl = $receiver_srl; + $receiver_args->message_type = 'R'; + $receiver_args->title = $obj->title; + $receiver_args->content = $obj->content; + $receiver_args->readed = $obj->readed; + $receiver_args->regdate = $obj->regdate; + $receiver_args->readed_date = $obj->readed_date; + $output = executeQuery('member.sendMessage', $receiver_args); + } + } + + fclose($f); + + return $idx-1; } /** * @brief module.xml 형식의 데이터 import **/ - function procImporterAdminModuleImport() { - set_time_limit(0); - - $xml_file = Context::get('xml_file'); - $target_module = Context::get('target_module'); - $total_count = (int)Context::get('total_count'); - $success_count = (int)Context::get('success_count'); - $readed_line = (int)Context::get('readed_line'); - - // xml_file 경로가 없으면 에러~ - if(!$xml_file) return new Object(-1, 'msg_no_xml_file'); - - // local 파일 지정인데 파일이 없으면 역시 에러~ - if(!preg_match('/^http:/i',$xml_file) && (!preg_match("/\.xml$/i", $xml_file) || !file_exists($xml_file)) ) return new Object(-1,'msg_no_xml_file'); - + function importModule($key, $cur, $index_file, $module_srl) { // 필요한 객체 미리 생성 - $this->oDocumentController = &getController('document'); - $this->oDocumentModel = &getModel('document'); - $this->oCommentController = &getController('comment'); - $this->oCommentModel = &getModel('comment'); - $this->oTrackbackController = &getController('trackback'); - - // 타켓 모듈의 유무 체크 - if(!$target_module) return new Object(-1,'msg_invalid_request'); - $module_srl = $target_module; + $this->oXmlParser = new XmlParser(); // 타겟 모듈의 카테고리 정보 구함 - $category_list = $this->oDocumentModel->getCategoryList($module_srl); - if(count($category_list)) { - foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; - } else { - $category_list = $category_titles = array(); + $oDocumentController = &getController('document'); + $oDocumentModel = &getModel('document'); + $category_list = $category_titles = array(); + $category_list = $oDocumentModel->getCategoryList($module_srl); + if(count($category_list)) foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; + + // 먼저 카테고리 정보를 입력함 + $category_file = preg_replace('/index$/i', 'category', $index_file); + if(file_exists($category_file)) { + $buff = FileHandler::readFile($category_file); + + // xmlParser객체 생성 + $xmlDoc = $this->oXmlParser->loadXmlFile($category_file); + + $categories = $xmlDoc->items->category; + if($categories) { + if(!is_array($categories)) $categories = array($categories); + $match_sequence = array(); + foreach($categories as $k => $v) { + $category = trim(base64_decode($v->body)); + if(!$category || $category_titles[$category]) continue; + + $sequence = $v->attrs->sequence; + $parent = $v->attrs->parent; + + $obj = null; + $obj->title = $category; + $obj->module_srl = $module_srl; + if($parent) $obj->parent_srl = $match_sequence[$parent]; + + $output = $oDocumentController->insertCategory($obj); + if($output->toBool()) $match_sequence[$sequence] = $output->get('category_srl'); + } + $oDocumentController = &getController('document'); + $oDocumentController->makeCategoryFile($module_srl); + } + @unlink($category_file); } - // 이제부터 데이터를 가져오면서 처리 - $fp = $this->getFilePoint($xml_file); - if(!$fp) return new Object(-1,'msg_no_xml_file'); + $category_list = $category_titles = array(); + $category_list = $oDocumentModel->getCategoryList($module_srl); + if(count($category_list)) foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; + + if(!$cur) $cur = 0; - $manual_break = false; - $obj = null; - $document_srl = null; + // index파일을 염 + $f = fopen($index_file,"r"); - $inserted_count = 0; + // 이미 읽혀진 것은 패스 + for($i=0;$i<$cur;$i++) fgets($f, 1024); - // 본문 데이터부터 처리 시작 - $read_line = 0; - while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); + // 라인단위로 읽어들이면서 $cur보다 커지고 $cur+$this->unit_count개보다 작으면 중지 + for($idx=$cur;$idx<$cur+$this->unit_count;$idx++) { + if(feof($f)) break; - if($str == "") $read_line ++; - if($read_line < $readed_line) continue; + // 정해진 위치를 찾음 + $target_file = trim(fgets($f, 1024)); - // 한 아이템 준비 시작 - if(substr($str,0,6) == '') { - $obj = null; - $obj->module_srl = $module_srl; - $obj->document_srl = getNextSequence(); - continue; + if(!file_exists($target_file)) continue; - // 아이템 종료시 DB 입력 - } else if( $str == '') { - $obj->member_srl = 0; - if($this->importDocument($obj)) $inserted_count ++; - if($inserted_count >= 50) { - $manual_break = true; - break; + // 이제부터 데이터를 가져오면서 처리 + $fp = fopen($target_file,"r"); + if(!$fp) continue; + + $obj = null; + $obj->module_srl = $module_srl; + $obj->document_srl = getNextSequence(); + + $files = array(); + + $started = false; + $buff = null; + + // 본문 데이터부터 처리 시작 + while(!feof($fp)) { + $str = fgets($fp, 1024); + + // 한 아이템 준비 시작 + if(trim($str) == '') { + $started = true; + + // 엮인글 입력 + } else if(substr($str,0,11) == 'trackback_count = $this->importTrackbacks($fp, $module_srl, $obj->document_srl); + continue; + + // 댓글 입력 + } else if(substr($str,0,9) == 'comment_count = $this->importComments($fp, $module_srl, $obj->document_srl); + continue; + + // 첨부파일 입력 + } else if(substr($str,0,9) == 'uploaded_count = $this->importAttaches($fp, $module_srl, $obj->document_srl, $files); + continue; + + // 추가 변수 시작 일 경우 + } elseif(trim($str) == '') { + $this->importExtraVars($fp, $obj); + continue; } - // posts 태그 체크 (전체 개수를 구함) - } else if(substr($str,0,6)=='') { - $manual_break = false; - break; + $xmlDoc = $this->oXmlParser->parse($buff); + + $category = base64_decode($xmlDoc->post->category->body); + if($category_titles[$category]) $obj->category_srl = $category_titles[$category]; - // 카테고리 입력 - } else if($str == '') { - $this->importCategoris($fp, $module_srl, $category_list, $category_titles); - continue; + $obj->member_srl = 0; - // 엮인글 입력 - } else if(substr($str,0,11) == 'trackbacks = $this->importTrackbacks($fp); + $obj->is_notice = base64_decode($xmlDoc->post->is_notice->body)=='Y'?'Y':'N'; + $obj->is_secret = base64_decode($xmlDoc->post->is_secret->body)=='Y'?'Y':'N'; + $obj->title = base64_decode($xmlDoc->post->title->body); + $obj->content = base64_decode($xmlDoc->post->content->body); + $obj->readed_count = base64_decode($xmlDoc->post->readed_count->body); + $obj->voted_count = base64_decode($xmlDoc->post->voted_count->body); + $obj->password = base64_decode($xmlDoc->post->password->body); + $obj->user_name = $obj->nick_name = base64_decode($xmlDoc->post->nick_name->body); + $obj->user_id = base64_decode($xmlDoc->post->user_id->body); + $obj->email_address = base64_decode($xmlDoc->post->email->body); + $obj->homepage = base64_decode($xmlDoc->post->homepage->body); + if($obj->homepage && !preg_match('/^http:\/\//i',$obj->homepage)) $obj->homepage = 'http://'.$obj->homepage; + $obj->tags = base64_decode($xmlDoc->post->tags->body); + $obj->regdate = base64_decode($xmlDoc->post->regdate->body); + $obj->last_update = base64_decode($xmlDoc->post->update->body); + if(!$obj->last_update) $obj->last_update = $obj->regdate; + $obj->ipaddress = base64_decode($xmlDoc->post->ipaddress->body); + $obj->list_order = $obj->update_order = $obj->document_srl*-1; + $obj->allow_comment = base64_decode($xmlDoc->post->allow_comment->body)!='N'?'Y':'N'; + $obj->lock_comment = base64_decode($xmlDoc->post->lock_comment->body)=='Y'?'Y':'N'; + $obj->allow_trackback = base64_decode($xmlDoc->post->allow_trackback->body)!='N'?'Y':'N'; + $obj->notify_message = base64_decode($xmlDoc->post->is_notice->body); - // 댓글 입력 - } else if(substr($str,0,9) == 'comments = $this->importComments($fp); - - // 첨부파일 입력 - } else if(substr($str,0,9) == 'attaches = $this->importAttaches($fp); - - // 추가 변수 시작 일 경우 - } elseif($str == '') { - $this->importExtraVars($fp, $obj); - - // 변수 체크 - } else { - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - if($key == 'category' && $category_titles[$val]) $obj->category_srl = $category_titles[$val]; - else $obj->{$key} = $val; - $buff = null; + // content 정보 변경 (첨부파일) + if(count($files)) { + foreach($files as $key => $val) { + $obj->content = preg_replace('/(src|href)\=(["\']?)'.preg_quote($key).'(["\']?)/i','$1="'.$val.'"',$obj->content); } } + + $output = executeQuery('document.insertDocument', $obj); + + if($output->toBool() && $obj->tags) { + $tag_list = explode(',',$obj->tags); + $tag_count = count($tag_list); + for($i=0;$i<$tag_count;$i++) { + $args = null; + $args->tag_srl = getNextSequence(); + $args->module_srl = $module_srl; + $args->document_srl = $obj->document_srl; + $args->tag = trim($tag_list[$i]); + $args->regdate = $obj->regdate; + if(!$args->tag) continue; + $output = executeQuery('tag.insertTag', $args); + } + + } + + fclose($fp); + @unlink($target_file); } - fclose($fp); + fclose($f); - $success_count += $inserted_count; + // 카테고리별 개수 동기화 + if(count($category_list)) foreach($category_list as $key => $val) $oDocumentController->updateCategoryCount($module_srl, $val->category_srl); - if($manual_break) { - $this->add('total_count',$total_count); - $this->add('success_count',$success_count); - $this->add('readed_line',$read_line); - $this->add('is_finished','0'); - $this->setMessage(sprintf(Context::getLang('msg_importing'), $total_count, $success_count)); - } else { - $this->add('is_finished','1'); - $this->setMessage(sprintf(Context::getLang('msg_import_finished'), $success_count, $total_count)); - } + return $idx-1; } /** * @brief 엮인글 정리 **/ - function importTrackbacks($fp) { - $trackbacks = array(); - $obj = null; + function importTrackbacks($fp, $module_srl, $document_srl) { + $started = false; + $buff = null; + $cnt = 0; while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); - if($str == '') break; - elseif($str == '') { + + $str = fgets($fp, 1024); + + // 이면 중단 + if(trim($str) == '') break; + + // 면 시작 + if(trim($str) == '') $started = true; + + if($started) $buff .= $str; + + // 이면 DB에 입력 + if(trim($str) == '') { + $xmlDoc = $this->oXmlParser->parse($buff); + $obj = null; - continue; + $obj->trackback_srl = getNextSequence(); + $obj->module_srl = $module_srl; + $obj->document_srl = $document_srl; + $obj->url = base64_decode($xmlDoc->trackback->url->body); + $obj->title = base64_decode($xmlDoc->trackback->title->body); + $obj->blog_name = base64_decode($xmlDoc->trackback->blog_name->body); + $obj->excerpt = base64_decode($xmlDoc->trackback->excerpt->body); + $obj->regdate = base64_decode($xmlDoc->trackback->regdate->body); + $obj->ipaddress = base64_decode($xmlDoc->trackback->ipaddress->body); + $obj->list_order = -1*$obj->trackback_srl; + $output = executeQuery('trackback.insertTrackback', $obj); + if($output->toBool()) $cnt++; - } elseif($str == '') { - $trackbacks[] = $obj; - continue; - } - - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - $obj->{$key} = $val; $buff = null; + $started = false; } } - - return $trackbacks; + return $cnt; } /** * @brief 댓글 정리 **/ - function importComments($fp) { - $comments = array(); - $obj = null; + function importComments($fp, $module_srl, $document_srl) { + $started = false; + $buff = null; + $cnt = 0; + + $sequences = array(); + while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); - // 댓글 전체 끝 - if($str == '') break; - // 개별 댓글 시작 - elseif($str == '') { + $str = fgets($fp, 1024); + + // 이면 중단 + if(trim($str) == '') break; + + // 면 시작 + if(trim($str) == '') { + $started = true; $obj = null; - continue; - - // 댓글 끝 - } elseif($str == '') { - $comments[] = $obj; - continue; - - // 첨부파일이 있을때 - } else if(substr($str,0,9) == 'attaches = $this->importAttaches($fp); + $obj->comment_srl = getNextSequence(); + $files = array(); } - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - $obj->{$key} = $val; + // attaches로 시작하면 첨부파일 시작 + if(substr($str,0,9) == 'uploaded_count = $this->importAttaches($fp, $module_srl, $obj->comment_srl, $files); + continue; + } + + if($started) $buff .= $str; + + // 이면 DB에 입력 + if(trim($str) == '') { + $xmlDoc = $this->oXmlParser->parse($buff); + + $sequence = base64_decode($xmlDoc->comment->sequence->body); + $sequences[$sequence] = $obj->comment_srl; + $parent = base64_decode($xmlDoc->comment->parent->body); + + $obj->module_srl = $module_srl; + + if($parent) $obj->parent_srl = $sequences[$parent]; + else $obj->parent_srl = 0; + + $obj->document_srl = $document_srl; + $obj->is_secret = base64_decode($xmlDoc->comment->is_secret->body)=='Y'?'Y':'N'; + $obj->notify_message = base64_decode($xmlDoc->comment->notify_message->body)=='Y'?'Y':'N'; + $obj->content = base64_decode($xmlDoc->comment->content->body); + $obj->voted_count = base64_decode($xmlDoc->comment->voted_count->body); + $obj->password = base64_decode($xmlDoc->comment->password->body); + $obj->user_name = $obj->nick_name = base64_decode($xmlDoc->comment->nick_name->body); + $obj->user_id = base64_decode($xmlDoc->comment->user_id->body); + $obj->member_srl = 0; + $obj->email_address = base64_decode($xmlDoc->comment->email->body); + $obj->homepage = base64_decode($xmlDoc->comment->homepage->body); + $obj->regdate = base64_decode($xmlDoc->comment->regdate->body); + $obj->last_update = base64_decode($xmlDoc->comment->update->body); + if(!$obj->last_update) $obj->last_update = $obj->regdate; + $obj->ipaddress = base64_decode($xmlDoc->comment->ipaddress->body); + $obj->list_order = $obj->comment_srl*-1; + + // content 정보 변경 (첨부파일) + if(count($files)) { + foreach($files as $key => $val) { + $obj->content = preg_replace('/(src|href)\=(["\']?)'.preg_quote($key).'(["\']?)/i','$1="'.$val.'"',$obj->content); + } + } + + // 댓글 목록 부분을 먼저 입력 + $list_args = null; + $list_args->comment_srl = $obj->comment_srl; + $list_args->document_srl = $obj->document_srl; + $list_args->module_srl = $obj->module_srl; + $list_args->regdate = $obj->regdate; + + // 부모댓글이 없으면 바로 데이터를 설정 + if(!$obj->parent_srl) { + $list_args->head = $list_args->arrange = $obj->comment_srl; + $list_args->depth = 0; + + // 부모댓글이 있으면 부모글의 정보를 구해옴 + } else { + // 부모댓글의 정보를 구함 + $parent_args->comment_srl = $obj->parent_srl; + $parent_output = executeQuery('comment.getCommentListItem', $parent_args); + + // 부모댓글이 존재하지 않으면 return + if(!$parent_output->toBool() || !$parent_output->data) continue; + $parent = $parent_output->data; + + $list_args->head = $parent->head; + $list_args->depth = $parent->depth+1; + if($list_args->depth<2) $list_args->arrange = $obj->comment_srl; + else { + $list_args->arrange = $parent->arrange; + $output = executeQuery('comment.updateCommentListArrange', $list_args); + if(!$output->toBool()) return $output; + } + } + + $output = executeQuery('comment.insertCommentList', $list_args); + if($output->toBool()) { + $output = executeQuery('comment.insertComment', $obj); + if($output->toBool()) $cnt++; + } + $buff = null; + $started = false; } } - - return $comments; + return $cnt; } /** * @brief 첨부파일 정리 **/ - function importAttaches($fp) { - $attaches = array(); - $obj = null; - $index = 0; + function importAttaches($fp, $module_srl, $upload_target_srl, &$files) { + $uploaded_count = 0; + + $started = false; + $buff = null; while(!feof($fp)) { $str = trim(fgets($fp, 1024)); - if($str == '') break; - elseif($str == '') { - $obj = null; - continue; - } elseif($str == '') { - $attaches[] = $obj; - continue; + // 로 끝나면 중단 + if(trim($str) == '') break; - // 첨부파일 - } else if($str == '') { - // binary buffer일 경우 임의의 위치에 파일을 저장시켜 놓고 그 파일의 경로를 return - $filename = $this->readFileBuff($fp, 'file'); - $obj->file = $filename; + // 로 시작하면 첨부파일 수집 + if(trim($str) == '') { + $file_obj = null; + $file_obj->file_srl = getNextSequence(); + $file_obj->upload_target_srl = $upload_target_srl; + $file_obj->module_srl = $module_srl; + + $started = true; + $buff = null; + // 로 시작하면 xml파일내의 첨부파일로 처리 + } else if(trim($str) == '') { + $file_obj->file = $this->saveTemporaryFile($fp); continue; } - $buff .= $str; - $pos = strpos($buff, '>'); - $key = substr($buff, 1, $pos-1); - if(substr($buff, -1 * ( strlen($key)+3)) == '') { - $val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2)); - $obj->{$key} = $val; - $buff = null; + if($started) $buff .= $str; + + // 로 끝나면 첨부파일 정리 + if(trim($str) == '') { + $xmlDoc = $this->oXmlParser->parse($buff.$str); + + $file_obj->source_filename = base64_decode($xmlDoc->attach->filename->body); + $file_obj->download_count = base64_decode($xmlDoc->attach->download_count->body); + + if(!$file_obj->file) { + $url = base64_decode($xmlDoc->attach->url->body); + $path = base64_decode($xmlDoc->attach->path->body); + if($path && file_exists($path)) $file_obj->file = $path; + else { + $file_obj->file = $this->getTmpFilename(); + FileHandler::getRemoteFile($url, $file_obj->file); + } + } + + if(file_exists($file_obj->file)) { + + // 이미지인지 기타 파일인지 체크하여 upload path 지정 + if(preg_match("/\.(jpg|jpeg|gif|png|wmv|wma|mpg|mpeg|avi|swf|flv|mp3|asaf|wav|asx|midi|asf)$/i", $file_obj->source_filename)) { + $path = sprintf("./files/attach/images/%s/%s/", $module_srl,$upload_target_srl); + $filename = $path.$file_obj->source_filename; + $file_obj->direct_download = 'Y'; + } else { + $path = sprintf("./files/attach/binaries/%s/%s/", $module_srl, $upload_target_srl); + $filename = $path.md5(crypt(rand(1000000,900000), rand(0,100))); + $file_obj->direct_download = 'N'; + } + + // 디렉토리 생성 + if(!FileHandler::makeDir($path)) continue; + + if(preg_match('/^\.\/files\/cache\/tmp/i',$file_obj->file)) @rename($file_obj->file, $filename); + else @copy($file_obj->file, $filename); + + // DB입력 + unset($file_obj->file); + if(file_exists($filename)) { + $file_obj->uploaded_filename = $filename; + $file_obj->file_size = filesize($filename); + $file_obj->comment = NULL; + $file_obj->member_srl = 0; + $file_obj->sid = md5(rand(rand(1111111,4444444),rand(4444445,9999999))); + $file_obj->isvalid = 'Y'; + $output = executeQuery('file.insertFile', $file_obj); + + if($output->toBool()) { + $uploaded_count++; + $tmp_obj = null; + $tmp_obj->source_filename = $file_obj->source_filename; + if($file_obj->direct_download == 'Y') $files[$file_obj->source_filename] = $file_obj->uploaded_filename; + else $files[$file_obj->source_filename] = getUrl('','module','file','act','procFileDownload','file_srl',$file_obj->file_srl,'sid',$file_obj->sid); + } + } + } } } - - return $attaches; + return $uploaded_count; } /** - * @brief 카테고리 정보 가져오기 + * @biref 임의로 사용할 파일이름을 return **/ - function importCategoris($fp, $module_srl, &$category_list, &$category_titles) { + function getTmpFilename() { + $path = "./files/cache/tmp"; + if(!is_dir($path)) FileHandler::makeDir($path); + $filename = sprintf("%s/%d", $path, rand(11111111,99999999)); + if(file_exists($filename)) $filename .= rand(111,999); + return $filename; + } + + /** + * @brief 특정 파일포인트로부터 key에 해당하는 값이 나타날때까지 buff를 읽음 + **/ + function saveTemporaryFile($fp) { + $temp_filename = $this->getTmpFilename(); + $f = fopen($temp_filename, "w"); + + $buff = ''; while(!feof($fp)) { $str = trim(fgets($fp, 1024)); - if($str == '') break; + if(trim($str) == '') break; - $category = base64_decode(substr($str,10,-11)); - if($category_titles[$category]) continue; + $buff .= $str; - $obj = null; - $obj->title = $category; - $obj->module_srl = $module_srl; - $output = $this->oDocumentController->insertCategory($obj); - } - - $category_list = $this->oDocumentModel->getCategoryList($module_srl); - if(count($category_list)) { - foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; - } else { - $category_list = $category_titles = array(); + if(substr($buff,-7)=='') { + fwrite($f, base64_decode(substr($buff, 6, -7))); + $buff = ''; + } } + fclose($f); + return $temp_filename; } + /** * @brief 게시글 추가 변수 설정 **/ @@ -661,7 +863,7 @@ $index = 1; while(!feof($fp)) { $str = trim(fgets($fp, 1024)); - if($str == '') break; + if(trim($str) == '') break; $buff .= $str; $pos = strpos($buff, '>'); @@ -673,523 +875,5 @@ } } } - - /** - * @brief 게시글 입력 - **/ - function importDocument($obj) { - // 본문, 댓글, 엮인글, 첨부파일별로 변수 정리 - $comments = $obj->comments; - $trackbacks = $obj->trackbacks; - $attaches = $obj->attaches; - unset($obj->comments); - unset($obj->trackbacks); - unset($obj->attaches); - - // 첨부파일 미리 등록 - if(count($attaches)) { - foreach($attaches as $key => $val) { - $filename = $val->filename; - $download_count = (int)$val->download_count; - $file = $val->file; - - if(!file_exists($file)) continue; - - $file_info['tmp_name'] = $file; - $file_info['name'] = $filename; - - $oFileController = &getController('file'); - $file_output = $oFileController->insertFile($file_info, $obj->module_srl, $obj->document_srl, $download_count, true); - - // 컨텐츠의 내용 수정 (이미지 첨부파일 관련) - if($file_output->toBool()) { - if($file_output->get('direct_download') == 'Y') { - $obj->content = str_replace($filename, sprintf('./files/attach/images/%s/%s/%s', $obj->module_srl, $obj->document_srl, $filename), $obj->content); - } else { - $oFileModel = &getModel('file'); - $url = $oFileModel->getDownloadUrl($file_output->get('file_srl'), $file_output->get('sid')); - $obj->content = str_replace('"'.$filename.'"', $url, $obj->content); - } - } - @unlink($file); - } - } - - // 게시글 등록 - //$obj->member_srl = 0; - $obj->password_is_hashed = true; - $output = $this->oDocumentController->insertDocument($obj, true); - - // 등록 실패시 첨부파일을 일단 모두 지움 - if(!$output->toBool()) { - return false; - } - - // 댓글 부모/자식 관계 정리하기 위한 변수 - $comment_parent_srls = array(); - - // 댓글 등록 - if(count($comments)) { - $last_comment_updator = ''; - foreach($comments as $key => $val) { - // 댓글 내용 정리 - $comment_args->comment_srl = getNextSequence(); - $comment_parent_srls[$val->sequence] = $comment_args->comment_srl; - if($val->parent) $comment_args->parent_srl = $comment_parent_srls[$val->parent]; - $comment_args->module_srl = $obj->module_srl; - $comment_args->document_srl = $obj->document_srl; - $comment_args->content = $val->content; - $comment_args->password = $val->password; - $comment_args->nick_name = $val->nick_name; - $comment_args->user_id = $val->user_id; - $comment_args->user_name = $val->user_name; - $comment_args->member_srl = 0; - $comment_args->email_address = $val->email; - $comment_args->homepage = $val->homepage; - $comment_args->regdate = $val->regdate; - $comment_args->ipaddress = $val->ipaddress; - - $last_comment_updator = $val->nick_name; - - // 첨부파일 미리 등록 - if(count($val->attaches)) { - foreach($val->attaches as $k => $v) { - $filename = $v->filename; - $download_count = (int)$v->download_count; - $file = $v->file; - - if(!file_exists($file)) continue; - - $file_info['tmp_name'] = $file; - $file_info['name'] = $filename; - - $oFileController = &getController('file'); - $file_output = $oFileController->insertFile($file_info, $obj->module_srl, $comment_args->comment_srl, $download_count, true); - - - // 컨텐츠의 내용 수정 (이미지 첨부파일 관련) - if($file_output->toBool()) { - if($file_output->get('direct_download') == 'Y') { - $comment_args->content = str_replace($filename, sprintf('./files/attach/images/%s/%s/%s', $comment_args->module_srl, $comment_args->comment_srl, $filename), $comment_args->content); - } else { - $oFileModel = &getModel('file'); - $url = $oFileModel->getDownloadUrl($file_output->get('file_srl'), $file_output->get('sid')); - $comment_args->content = str_replace('"'.$filename.'"', $url, $comment_args->content); - } - } - @unlink($file); - } - } - - $comment_output = $this->oCommentController->insertComment($comment_args, true); - } - - // 댓글 수 update - $comment_count = $this->oCommentModel->getCommentCount($obj->document_srl); - $update_output = $this->oDocumentController->updateCommentCount($obj->document_srl, $comment_count, $last_comment_updator, true); - } - - // 엮인글 등록 - if(count($trackbacks)) { - foreach($trackbacks as $key => $val) { - $val->module_srl = $obj->module_srl; - $val->document_srl = $obj->document_srl; - $val->trackback_srl = getNextSequence(); - $val->list_order = $val->trackback_srl*-1; - $trackback_output = executeQuery('trackback.insertTrackback', $val); - //$trackback_output = $this->oTrackbackController->insertTrackback($val, true); - } - $oTrackbackModel = &getModel('trackback'); - $trackback_count = $oTrackbackModel->getTrackbackCount($obj->document_srl); - $this->oDocumentController->updateTrackbackCount($obj->document_srl, $trackback_count); - } - - return true; - } - - - /** - * @brief 파일포인터 return (local or http wrapper) - **/ - function getFilePoint($filename) { - $fp = null; - if(preg_match('/^http:/i', $filename)) { - $url_info = parse_url($filename); - if(!$url_info['port']) $url_info['port'] = 80; - if(!$url_info['path']) $url_info['path'] = '/'; - - $fp = @fsockopen($url_info['host'], $url_info['port']); - if($fp) { - - // 한글 파일이 있으면 한글파일 부분만 urlencode하여 처리 (iconv 필수) - $path = $url_info['path']; - if(preg_match('/[\xEA-\xED][\x80-\xFF]{2}/', $path)&&function_exists('iconv')) { - $path_list = explode('/',$path); - $cnt = count($path_list); - $filename = $path_list[$cnt-1]; - $filename = urlencode(iconv("UTF-8","EUC-KR",$filename)); - $path_list[$cnt-1] = $filename; - $path = implode('/',$path_list); - $url_info['path'] = $path; - } - - $header = sprintf("GET %s?%s HTTP/1.0\r\nHost: %s\r\nReferer: %s://%s\r\nConnection: Close\r\n\r\n", $url_info['path'], $url_info['query'], $url_info['host'], $url_info['scheme'], $url_info['host']); - @fwrite($fp, $header); - while(!feof($fp)) { - $str = fgets($fp, 1024); - if(!trim($str)) break; - } - } - } else { - $fp = fopen($filename,"r"); - } - - return $fp; - } - - /** - * @biref 임의로 사용할 파일이름을 return - **/ - function getTmpFilename($key) { - $path = "./files/cache/tmp"; - if(!is_dir($path)) FileHandler::makeDir($path); - $filename = sprintf("%s/%s.%d", $path, $key, rand(11111111,99999999)); - if(file_exists($filename)) $filename .= rand(111,999); - return $filename; - } - - /** - * @brief 특정 파일포인트로부터 key에 해당하는 값이 나타날때까지 buff를 읽음 - **/ - function readFileBuff($fp,$key) { - $temp_filename = $this->getTmpFilename($key); - $f = fopen($temp_filename, "w"); - - $buff = ''; - while(!feof($fp)) { - $str = trim(fgets($fp, 1024)); - if($str == sprintf('', $key)) break; - - $buff .= $str; - - if(substr($buff, -7) == '') { - fwrite($f, base64_decode(substr($buff, 6, -7))); - $buff = null; - } - } - fclose($f); - return $temp_filename; - } - - /** - * @brief TTXML import - **/ - function procImporterAdminTTXMLImport() { - set_time_limit(0); - - $xml_file = Context::get('xml_file'); - $target_module = Context::get('target_module'); - $user_id = Context::get('user_id'); - if(!$user_id) return new Object(-1,'msg_invalid_request'); - - $oMemberModel = &getModel('member'); - $member_info = $oMemberModel->getMemberInfoByUserID($user_id); - - $total_count = 0; - $success_count = 0; - - // xml_file 경로가 없으면 에러~ - if(!$xml_file) return new Object(-1, 'msg_no_xml_file'); - - // local 파일 지정인데 파일이 없으면 역시 에러~ - if(!preg_match('/^http:/i',$xml_file) && (!preg_match("/\.xml$/i", $xml_file) || !file_exists($xml_file)) ) return new Object(-1,'msg_no_xml_file'); - - // 필요한 객체 미리 생성 - $this->oDocumentController = &getController('document'); - $this->oDocumentModel = &getModel('document'); - $this->oCommentController = &getController('comment'); - $this->oCommentModel = &getModel('comment'); - $this->oTrackbackController = &getController('trackback'); - - // 타켓 모듈의 유무 체크 - if(!$target_module) return new Object(-1,'msg_invalid_request'); - $module_srl = $target_module; - - // 타겟 모듈의 카테고리 정보 구함 - $category_list = $this->oDocumentModel->getCategoryList($module_srl); - if(count($category_list)) { - foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; - } else { - $category_list = $category_titles = array(); - } - - // 이제부터 데이터를 가져오면서 처리 - $fp = $this->getFilePoint($xml_file); - if(!$fp) return new Object(-1,'msg_no_xml_file'); - - $manual_break = false; - $obj = null; - $attaches = array(); - $document_srl = null; - - $inserted_count = 0; - - ob_start(); - - $this->oXmlParser = new XmlParser(); - - // 본문 데이터부터 처리 시작 - $i=0; - $started = $category_started = $post_started = false; - $category_buff = ''; - $manual_break = false; - while(!$manual_break && !feof($fp)) { - $str = fgets($fp, 1024); - - if(substr($str,0,7)=='') $str = substr($str,7); - if(substr($str,0,6)=='') $str = substr($str,6); - - if(substr($str,0,10)=='' || substr($str,0,6) == '') { - $category_started = true; - $category_buff .= $str; - } - - // ') { - $str = substr($str,7); - - // 게시글 처리 - $post_buff .= ''; - $xml_doc = $this->oXmlParser->parse($post_buff); - $post = $xml_doc->post; - - if($post->visibility->body=='public') { - $obj = null; - $obj->module_srl = $module_srl; - $obj->document_srl = getNextSequence(); - $obj->title = $post->title->body; - $obj->content = str_replace('[##_ATTACH_PATH_##]/','',$post->content->body); - $obj->content = preg_replace_callback('!\[##_1C\|([^\|]*)\|([^\|]*)\|(.*?)_##\]!is', array($this, '_replaceTTImgTag'), $obj->content); - $obj->content = nl2br($obj->content); - $obj->password = md5($post->password->body); - $obj->allow_comment = $post->acceptcomment->body==1?'Y':'N'; - $obj->allow_trackback= $post->accepttrackback->body==1?'Y':'N'; - $obj->regdate = date("YmdHis",$post->created->body); - $obj->last_update = date("YmdHis",$post->modified->body); - - $category = trim($post->category->body); - if($category) { - $tmp_category = explode('/',$category); - if(count($tmp_category)>1) $category = $tmp_category[1]; - $obj->category_srl = (int)$category_titles[$category]; - if(!$obj->category_srl) { - $tmp = array_values($category_titles); - $obj->category_srl = (int)$tmp[0]; - } - } - $obj->user_id = $member_info->user_id; - $obj->nick_name = $member_info->nick_name; - $obj->user_name = $member_info->user_name; - $obj->member_srl = $member_info->member_srl; - - // 댓글 - $obj->comments = $this->importTTComment($post->comment); - - // 꼬리표 - $tags = $post->tag; - if(!is_array($tags)) $tags = array($tags); - if(count($tags)) { - $tag_list = array(); - foreach($tags as $key => $val) { - $tag = trim($val->body); - if(!$tag) continue; - $tag_list[] = $tag; - } - if(count($tag_list)) $obj->tags = implode(',',$tag_list); - } - - // 엮인글 - if($post->trackback) { - $trackbacks = $post->trackback; - if(!is_array($trackbacks)) $trackbacks = array($trackbacks); - if(count($trackbacks)) { - foreach($trackbacks as $key => $val) { - $tobj = null; - $tobj->url = $val->url->body; - $tobj->title = $val->title->body; - $tobj->blog_name = $val->site->body; - $tobj->excerpt = $val->excerpt->body; - $tobj->regdate = date("YmdHis",$val->received->body); - $tobj->ipaddress = $val->ip->body; - $obj->trackbacks[] = $tobj; - } - } - } - - // 첨부파일 - $obj->attaches = $attaches; - - $total_count ++; - if($this->importDocument($obj)) $success_count ++; - } - - // 새로운 게시글을 위한 처리 - $post_started = false; - $obj = null; - $post_buff = ''; - $attaches = array(); - - // 만약 글입력후 oXmlParser->parse(''.$category_buff.''); - - if($xml_doc->category) { - $this->insertTTCategory($xml_doc, 0, $module_srl, $category_titles); - - // 입력완료 후 카테고리 xml파일 재생성 - $this->oDocumentController->makeCategoryFile($module_srl); - $xml_doc = null; - } - - $category_buff = null; - } - - $post_started = true; - } - - // 게시글 버퍼링중일때 처리 - if($post_started) { - // 첨부파일의 경우 별도로 버퍼링을 하지 않고 직접 파일에 기록해야 함 - if(substr($str,0,12)=='importTTAttaches($fp, $str); - else $post_buff .= $str; - } - } - } - fclose($fp); - - $output = ob_get_clean(); - - $this->add('is_finished','1'); - $this->add('total_count',$total_count); - $this->add('success_count',$success_count); - $this->add('readed_line',0); - $this->setMessage(sprintf(Context::getLang('msg_import_finished'), $success_count, $total_count)); - } - - /** - * @brief ttxml의 자체 img 태그를 치환 - **/ - function _replaceTTImgTag($matches) { - return sprintf("\"%s\"", $matches[1], str_replace("\"","\\\"",$matches[3])); - } - - /** - * @brief TTXML에 맞게 category정보 입력 - **/ - function insertTTCategory($xml_doc, $parent_srl =0, $module_srl, &$category_titles) { - // category element가 없으면 pass - if(!$xml_doc->category) return; - $categories = $xml_doc->category; - - // 하나만 있을 경우 배열 처리 - if(!is_array($categories)) $categories = array($categories); - - // ttxml에서는 priority순서로 오는게 아니라서 정렬 - foreach($categories as $obj) { - $title = trim($obj->name->body); - $priority = $obj->priority->body; - $root = $obj->root->body; - if($root==1) continue; - $category_list[$priority]->title = $title; - $category_list[$priority]->category = $obj->category; - } - - // 데이터 입력 - foreach($category_list as $obj) { - if(!$category_titles[$obj->title]) { - $args = null; - $args->title = $obj->title; - $args->parent_srl = $parent_srl; - $args->module_srl = $module_srl; - $output = $this->oDocumentController->insertCategory($args); - if($output->toBool()) $category_titles[$args->title] = $output->get('category_srl'); - $output = null; - } - - $this->insertTTCategory($obj, $category_titles[$obj->title], $module_srl, $category_titles); - - } - } - - /** - * @brief TTXML 첨부파일 정리 - **/ - function importTTAttaches($fp, $buff) { - if(substr(trim($buff), -13) != '') { - while(!feof($fp)) { - $buff .= fgets($fp, 1024); - if(substr(trim($buff), -13) == '') break; - } - } - - $xml_doc = $this->oXmlParser->parse($buff); - $buff = ''; - - $obj = null; - $obj->filename = $xml_doc->attachment->name->body; - $obj->file = $this->getTmpFilename('file'); - $obj->download_count = $xml_doc->attachment->downloads->body; - - $f = fopen($obj->file, "w"); - fwrite($f, base64_decode($xml_doc->attachment->content->body)); - fclose($f); - - return $obj; - } - - /** - * @brief TTXML 댓글 정리 - **/ - function importTTComment($comment) { - if(!$comment) return; - if(!is_array($comment)) $comment = array($comment); - - $comments = array(); - - $sequence = 0; - foreach($comment as $key => $val) { - $obj = null; - $obj->sequence = $sequence; - - if($val->commenter->attrs->id) $obj->parent = $sequence-1; - - $obj->is_secret = $val->secret->body==1?'Y':'N'; - $obj->content = nl2br($val->content->body); - $obj->password = $val->password->body; - $obj->nick_name = $val->commenter->name->body; - $obj->homepage = $val->commenter->homepage->body; - $obj->regdate = date("YmdHis",$val->written->body); - $obj->ipaddress = $val->commenter->ip->body; - $comments[] = $obj; - - $sequence++; - } - return $comments; - } - } ?> diff --git a/modules/importer/importer.admin.view.php b/modules/importer/importer.admin.view.php index 2bd362f10..f0560ff3f 100644 --- a/modules/importer/importer.admin.view.php +++ b/modules/importer/importer.admin.view.php @@ -50,6 +50,7 @@ $template_filename = "index"; break; } + $this->setTemplateFile($template_filename); } diff --git a/modules/importer/lang/en.lang.php b/modules/importer/lang/en.lang.php index cb42af6b2..557c79647 100644 --- a/modules/importer/lang/en.lang.php +++ b/modules/importer/lang/en.lang.php @@ -8,6 +8,7 @@ // words for button $lang->cmd_sync_member = 'Synchronize'; $lang->cmd_continue = 'Continue'; + $lang->preprocessing = 'It is preparing for transferring data.'; // items $lang->importer = 'Transfer Zeroboard Data'; @@ -51,7 +52,7 @@ $lang->about_ttxml_user_id = 'Please input user ID to set as author on transfering TTXML. (user ID must be already signed up)'; $lang->about_type_module = 'If you are transfering the board or articles information, select this option'; $lang->about_type_syncmember = 'If you are trying to synchronize the member information after transfering member and article information, select this option'; - $lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use XML Exporter to convert the data you want into XML File then upload it."; + $lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use XML Exporter to convert the data you want into XML File then upload it."; $lang->about_target_path = "To get attachments from Zeroboard4, please input the address where Zeroboard4 is installed.\nIf it is located in the same server, input Zeroboard4's path such as /home/USERID/public_html/bbs\nIf it is not located in the same server, input the address where Zeroboard4 is installed. ex. http://Domain/bbs"; ?> diff --git a/modules/importer/lang/es.lang.php b/modules/importer/lang/es.lang.php index a058759ba..776021ae6 100644 --- a/modules/importer/lang/es.lang.php +++ b/modules/importer/lang/es.lang.php @@ -8,6 +8,7 @@ // Palabras para los botones $lang->cmd_sync_member = 'Sincronizar'; $lang->cmd_continue = 'Continuar'; + $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; // Especificaciones $lang->importer = 'Transferir los datos de zeroboard'; @@ -51,7 +52,7 @@ $lang->about_ttxml_user_id = 'Por favor, de entrada ID de usuario establecer como autor de la transferencia de TTXML. (Identificación de usuario debe ser firmado ya en marcha)'; $lang->about_type_module = 'Seleccione esta opción si estas transfeririendo información del documento de los tableros'; $lang->about_type_syncmember = 'Seleccione esta opción cuando tenga que sincronizar la información del usuario luego de haber transferido la información del usuario y del artículo.'; - $lang->about_importer = "Es posible trasferir los datos de Zeroboard4, zb5beta o de otros programas a ZeroBoardXE.\nPara la transferencia debe utilizar Exportador XML para transformar los datos en archivo XML, y luego subir ese archivo."; + $lang->about_importer = "Es posible trasferir los datos de Zeroboard4, zb5beta o de otros programas a ZeroBoardXE.\nPara la transferencia debe utilizar XML Exporter para transformar los datos en archivo XML, y luego subir ese archivo."; $lang->about_target_path = "Para descargar los archivos adjuntos de ZeroBoard4, ingresa la ubicación de ZeroBoard4 instalado.\nSi esta en el mismo servidor escriba la ubicación de ZeroBoard4 como por ejemplo: /home/ID/public_html/bbs o si esta en otro servidor escriba la ubicación de ZeroBoard4 instalado como por ejemplo: http://dominio/bbs"; ?> diff --git a/modules/importer/lang/fr.lang.php b/modules/importer/lang/fr.lang.php index 1b2fc26b8..ae27da5a3 100644 --- a/modules/importer/lang/fr.lang.php +++ b/modules/importer/lang/fr.lang.php @@ -8,50 +8,51 @@ // words for button $lang->cmd_sync_member = 'Synchroniser'; $lang->cmd_continue = 'Continuer'; + $lang->preprocessing = 'On est en train de préparer pour transférer les données.'; // items - $lang->importer = 'Transfrer des Donnes du Zeroboard'; + $lang->importer = 'Transférer les Données du Zeroboard'; $lang->source_type = 'Sorte de Source'; - $lang->type_member = 'Donnes des Membres'; - $lang->type_message = 'Donnes des Messages'; + $lang->type_member = 'Données des Membres'; + $lang->type_message = 'Données des Messages'; $lang->type_ttxml = 'TTXML'; - $lang->type_module = 'Donnes des Articles'; - $lang->type_syncmember = 'Synchroniser les Donnes des Membres'; - $lang->target_module = 'Module de cible '; + $lang->type_module = 'Données des Articles'; + $lang->type_syncmember = 'Synchroniser les Données des Membres'; + $lang->target_module = 'Module objectif'; $lang->xml_file = 'Fichier de XML'; $lang->import_step_title = array( - 1 => 'Step 1. Choisir cible transfrer', - 12 => 'Step 1-2. Choisir module de Cible', - 13 => 'Step 1-3. Choisir categorie de Cible', - 2 => 'Step 2. Tlcharger fichier XML', - 3 => 'Step 2. Synchroniser donnes des membres et des articles', + 1 => 'Pas 1. Choisir cible à transférer', + 12 => 'Pas 1-2. Choisir module de Cible', + 13 => 'Pas 1-3. Choisir categorie de Cible', + 2 => 'Pas 2. Télécharger fichier de XML', + 3 => 'Pas 2. Synchroniser données des membres et des articles', ); $lang->import_step_desc = array( - 1 => 'Slectionnez la sorte du fichier de XML que vous voulez transfrer.', - 12 => 'Slectionnez le module objectif dans lequel vous voulez tranfrer des donnes.', - 13 => 'Slctionnez la categorie objective dans laquelle vous voulez transfrer des donnes.', - 2 => "Entrez le chemin du fichier de XML pour transfrer des donnes.\nS\'il est localis dans le mme compte, entrz le chemin absolute/relative. Sinon, entrez le URL commenant avec http://..", - 3 => 'Les donnes des membres et ceux des articles ne peuvent pas corrects aprs la transfrement. Dans ce cas, synchronisez pour les rparer fond sur le compte d\'utilisateur.', + 1 => 'Sélectionnez la sorte du fichier de XML que vous voulez transférer.', + 12 => 'Sélectionnez le module objectif dans lequel vous voulez tranférer les données.', + 13 => 'Séléctionnez la catégorie objective dans laquelle vous voulez transférer les données.', + 2 => "Entrez le chemin du fichier de XML pour transférer les données.\nS'il est localisé dans le même compte, entréz le chemin absolut ou relatif. Sinon, entrez l'URL commençant avec http://..", + 3 => 'Les données des membres et ceux des articles ne peuvent pas corrects après la transfèrement. Dans ce cas, synchronisez SVP. Ça arrangera les données en fondant sur le compte d\'utilisateur.', ); // guide/alert - $lang->msg_sync_member = 'Member and article data synchronization will begin by clicking the synchronize button.'; - $lang->msg_no_xml_file = 'Could not find XML file. Please check the path again'; - $lang->msg_invalid_xml_file = 'Invalid type of XML file.'; - $lang->msg_importing = 'Writing %d datas of %d. (If it keeps being frozen, click the button "Continue")'; - $lang->msg_import_finished = '%d/%d datas were inputted completely. Depending on the situation, there might be some datas which couldn\'t be inputted.'; - $lang->msg_sync_completed = 'Completed synchronzing member article and comments.'; + $lang->msg_sync_member = 'On commencera à synchroniser les données des membres et des articles quand vous cliquez le boutton de synchroniser.'; + $lang->msg_no_xml_file = 'On ne peut pas trouver le fichier de XML. Vérifiez le chemin encore une fois, SVP.'; + $lang->msg_invalid_xml_file = 'Ce fichier de XML est invalide.'; + $lang->msg_importing = 'On écrit %d données sur %d. (Si c\'est arrêté, cliquez le boutton "Continuer")'; + $lang->msg_import_finished = '%d/%d données sont insérées complètement. En dépendant sur la situation, il y aura quelques données qui n\'ont pas été insérées.'; + $lang->msg_sync_completed = 'On a terminé de synchroniser les données des membres, des articles et des commentaires.'; // blah blah.. - $lang->about_type_member = 'If you are transfering the member information, select this option'; - $lang->about_type_message = 'If you are transfering the message information, select this option'; - $lang->about_type_ttxml = 'If you are transfering the TTXML(textcube) information, select this option'; - $lang->about_ttxml_user_id = 'Please input user ID to set as author on transfering TTXML. (user ID must be already signed up)'; - $lang->about_type_module = 'If you are transfering the board or articles information, select this option'; - $lang->about_type_syncmember = 'If you are trying to synchronize the member information after transfering member and article information, select this option'; - $lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use XML Exporter to convert the data you want into XML File then upload it."; + $lang->about_type_member = 'Sélectionnez cette option si vous voulez transférer les informations des membres'; + $lang->about_type_message = 'Sélectionnez cette option si vous voulez transférer les informations des messages'; + $lang->about_type_ttxml = 'Sélectionnez cette option si vous voulez transférer les informations des TTXML(textcube)'; + $lang->about_ttxml_user_id = 'Insérez le compte d\'utilisateur pour déclarer comme l\'auteur. (Le compte d\'utilisateur doit être déjà inscrit)'; + $lang->about_type_module = 'Sélectionnez cette option si vous voulez transférer les informations des panneaux ou des articles.'; + $lang->about_type_syncmember = 'Sélectionnez cette option si vous voulez synchroniser les informations des membres après le trensfert des informations des membres et des articles.'; + $lang->about_importer = "Vous pouvez transeférer les données de Zeroboard4, de Zeroboard5 Beta ou d\'autres logiciels en les données de ZeroboardXE.\nPour tranférer, vous devez utiliser Exporteur de XML pour convertir les données en fichier de XML, et puis téléchargez-le."; - $lang->about_target_path = "To get attachments from Zeroboard4, please input the address where Zeroboard4 is installed.\nIf it is located in the same server, input Zeroboard4's path such as /home/USERID/public_html/bbs\nIf it is not located in the same server, input the address where Zeroboard4 is installed. ex. http://Domain/bbs"; + $lang->about_target_path = "Pour obtenir les attachés de Zeroboard4, Insérez l\'addresse ou Zeroboard4 est installé.\nSi ça se trouve dans le même serveur, entrez le chemin comme \'/home/USERID/public_html/bbs\'\nSi ça ne se trouve pas dans le même serveur, entrez l\'address où Zeroboard4 est installé comme \'http://Domain/bbs\'"; ?> diff --git a/modules/importer/lang/jp.lang.php b/modules/importer/lang/jp.lang.php index a390d8129..d920f31f1 100644 --- a/modules/importer/lang/jp.lang.php +++ b/modules/importer/lang/jp.lang.php @@ -8,6 +8,7 @@ // ボタンに使用する用語 $lang->cmd_sync_member = '同期化'; $lang->cmd_continue = '続ける'; + $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; // 項目 $lang->importer = 'ZBデータ変換'; @@ -51,7 +52,7 @@ $lang->about_ttxml_user_id = 'TTXML移転時に投稿者として指定するユーザIDを入力してください(すでに加入されているIDでなければなりません)。'; $lang->about_type_module = 'データ変換の対象が書き込みデータである場合は選択してください。'; $lang->about_type_syncmember = '会員情報と書き込みデータなどの変換を行った後、会員情報を同期化する必要がある場合は、選択してください。'; - $lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをゼロボードXEのデータに変換することができます。\n変換するためには、XML Exporterを利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。"; + $lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをゼロボードXEのデータに変換することができます。\n変換するためには、XML Exporterを利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。"; $lang->about_target_path = "添付ファイルをダウンロードするためには、ゼロボード4がインストールされた場所を入力してください。同じサーバ上にある場合は「/home/ID/public_html/bbs」のように入力し、他のサーバにある場合は、「http://ドメイン/bbs」のようにゼロボードがインストールされているURLを入力してください。"; ?> diff --git a/modules/importer/lang/ko.lang.php b/modules/importer/lang/ko.lang.php index 95e9e5224..21e54f2ad 100644 --- a/modules/importer/lang/ko.lang.php +++ b/modules/importer/lang/ko.lang.php @@ -8,6 +8,7 @@ // 버튼에 사용되는 언어 $lang->cmd_sync_member = '동기화'; $lang->cmd_continue = '계속진행'; + $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; // 항목 $lang->importer = '제로보드 데이터 이전'; @@ -26,6 +27,7 @@ 13 => 'Step 1-3. 대상 분류 선택', 2 => 'Step 2. XML파일 지정', 3 => 'Step 2. 회원정보와 게시물의 정보 동기화', + 99 => '데이터 이전', ); $lang->import_step_desc = array( @@ -34,6 +36,7 @@ 13 => '데이터 이전을 할 대상 분류를 선택해주세요.', 2 => "데이터 이전을 할 XML파일의 경로를 입력해주세요.\n상대 또는 절대 경로를 입력하시면 됩니다", 3 => '회원정보와 게시물의 정보가 이전후에 맞지 않을 수 있습니다. 이 때 동기화를 하시면 user_id를 기반으로 올바르게 동작하도록 합니다.', + 99 => '데이터를 이전중입니다', ); // 안내/경고 @@ -51,6 +54,6 @@ $lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)'; $lang->about_type_module = '데이터 이전 대상이 게시판등의 게시물 정보일 경우 선택해주세요'; $lang->about_type_syncmember = '회원정보와 게시물정보등을 이전후 회원정보 동기화 해야 할때 선택해주세요'; - $lang->about_importer = "제로보드4, zb5beta 또는 다른 프로그램의 데이터를 제로보드XE 데이터로 이전할 수 있습니다.\n이전을 위해서는 XML Exporter를 이용해서 원하는 데이터를 XML파일로 생성후 업로드해주셔야 합니다."; + $lang->about_importer = "제로보드4, zb5beta 또는 다른 프로그램의 데이터를 제로보드XE 데이터로 이전할 수 있습니다.\n이전을 위해서는 XML Exporter를 이용해서 원하는 데이터를 XML파일로 생성후 업로드해주셔야 합니다."; $lang->about_target_path = "첨부파일을 받기 위해 제로보드4가 설치된 위치를 입력해주세요.\n같은 서버에 있을 경우 /home/아이디/public_html/bbs 등과 같이 제로보드4의 위치를 입력하시고\n다른 서버일 경우 http://도메인/bbs 처럼 제로보드가 설치된 곳의 url을 입력해주세요"; ?> diff --git a/modules/importer/lang/ru.lang.php b/modules/importer/lang/ru.lang.php index a5f5d3f71..f47810488 100644 --- a/modules/importer/lang/ru.lang.php +++ b/modules/importer/lang/ru.lang.php @@ -8,6 +8,7 @@ // слова для кнопок $lang->cmd_sync_member = 'Синхронизировать'; $lang->cmd_continue = 'Продолжить'; + $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; // объекты $lang->importer = 'Импортировать данные zeroboard'; @@ -51,7 +52,7 @@ $lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)'; $lang->about_type_module = 'Если Вы импортируете информацию форума или статей, выберите эту опцию'; $lang->about_type_syncmember = 'Если Вы пытаетесь синхронизировать информацию пользователей после импорта информации пользователей и статей, выберите эту опцию'; - $lang->about_importer = "Вы можете импортировать данные Zeroboard4, Zeroboard5 Beta или других программ в ZeroboardXE.\nЧтобы импортировать, Вам следует использовать XML Экспортер (XML Exporter), чтобы конвертировать нужные данные в XML Файл и затем загрузить его."; + $lang->about_importer = "Вы можете импортировать данные Zeroboard4, Zeroboard5 Beta или других программ в ZeroboardXE.\nЧтобы импортировать, Вам следует использовать XML Экспортер (XML Exporter), чтобы конвертировать нужные данные в XML Файл и затем загрузить его."; $lang->about_target_path = "Чтобы получить вложения с Zeroboard4, пожалуйста, введите адрес, где установлена Zeroboard4.\nЕсли она раположена на том же сервере, введите путь к Zeroboard4 как /home/USERID/public_html/bbs\nЕсли нет, введите адрес, где Zeroboard4 установлена. Например: http://Domain/bbs"; ?> diff --git a/modules/importer/lang/zh-CN.lang.php b/modules/importer/lang/zh-CN.lang.php index ca381956f..137b31008 100644 --- a/modules/importer/lang/zh-CN.lang.php +++ b/modules/importer/lang/zh-CN.lang.php @@ -8,6 +8,7 @@ // 按钮上使用的语言 $lang->cmd_sync_member = '同步'; $lang->cmd_continue = '继续进行'; + $lang->preprocessing = '데이터 이전을 위한 사전 준비중입니다.'; // 项目 $lang->importer = '数据导入'; @@ -47,11 +48,11 @@ // 说明 $lang->about_type_member = '数据导入对象为会员信息时请选择此项。'; $lang->about_type_message = '数据导入对象为短信息(MemoBox)时请选择此项。'; - $lang->about_type_ttxml = '데이터 이전 대상이 TTXML(textcube계열)일 경우 선택해주세요'; - $lang->about_ttxml_user_id = 'TTXML이전시에 글쓴이로 지정할 사용자 아이디를 입력해주세요. (이미 가입된 아이디여야 합니다)'; + $lang->about_type_ttxml = '数据导入对象为TTXML(textcube系列)时请选择此项。'; + $lang->about_ttxml_user_id = '请输入导入TTXML数据时指定为主题发布者的ID(必须是已注册会员)。'; $lang->about_type_module = '数据导入对象为版面主题时请选择此项。'; $lang->about_type_syncmember = '导入会员信息和文章信息后需要同步会员信息时请选择此项。'; - $lang->about_importer = "不仅可以导入Zeroboard 4,Zb5beta的数据,也可以把其他程序数据导入到Zeroboard XE当中。\n导入数据时请利用 XML Exporter生成XML文件后再上传。"; + $lang->about_importer = "不仅可以导入Zeroboard 4,Zb5beta的数据,也可以把其他程序数据导入到Zeroboard XE当中。\n导入数据时请利用 XML Exporter生成XML文件后再上传。"; $lang->about_target_path = "为了下载附件请输入Zeroboard 4的安装位置。\n位置在同一个服务器时,请输入如 /home/id/public_html/bbs的路径,在不同服务器时,请输入如 http://域名/bbs的url地址。"; ?> diff --git a/modules/importer/tpl/css/importer.css b/modules/importer/tpl/css/importer.css index cdd6e64a7..6362bd0d7 100644 --- a/modules/importer/tpl/css/importer.css +++ b/modules/importer/tpl/css/importer.css @@ -1,3 +1,9 @@ @charset "utf-8"; #step2_position { height:150px; overflow-y:scroll; border:2px solid #DDDDDD; } + +div.progressBox { width:700px; margin:30px auto; border:1px solid #DDDDDD; white-space:nowrap; overflow:hidden; height:20px;} +div.progress1 { float:left; border-right:1px solid #DDDDDD; text-align:right; overflow:hidden; background-color:#361DB5; color:#FFFFFF; font-family:tahoma; font-family:tahoma; font-size:9pt; white-space:nowrap; height:20px;} +div.progress2 { float:left; text-align:left; overflow:hidden; white-space:nowrap; color:#444444; font-family:tahoma; font-size:9pt; height:20px;} + +.w700 { width:700px; } diff --git a/modules/importer/tpl/header.html b/modules/importer/tpl/header.html new file mode 100644 index 000000000..f71cc75c2 --- /dev/null +++ b/modules/importer/tpl/header.html @@ -0,0 +1,18 @@ + + + +{@ $type_list = array('module'=>$lang->type_module, 'ttxml'=>$lang->type_ttxml, 'member'=>$lang->type_member, 'sync'=>$lang->type_syncmember, 'message'=>$lang->type_message) } + +

    {$lang->importer} {$lang->cmd_management}

    + + +
    {nl2br($lang->about_importer)}
    + +
    + +
    + diff --git a/modules/importer/tpl/index.html b/modules/importer/tpl/index.html index c92a0a3ec..9e507c8b2 100644 --- a/modules/importer/tpl/index.html +++ b/modules/importer/tpl/index.html @@ -16,25 +16,25 @@ {$lang->import_step_title[1]} - {$lang->import_step_desc[1]} - + - - - - - - - - - + - + + + + + + + + + diff --git a/modules/importer/tpl/js/importer_admin.js b/modules/importer/tpl/js/importer_admin.js index 3da6d22c5..af81a6e97 100644 --- a/modules/importer/tpl/js/importer_admin.js +++ b/modules/importer/tpl/js/importer_admin.js @@ -3,7 +3,10 @@ * @author zero (zero@nzeo.com) * @brief importer에서 사용하는 javascript **/ -/* 회원정보와 게시물의 싱크 */ + +/** + * 회원정보와 게시글/댓글등의 동기화 요청 및 결과 처리 함수 + **/ function doSync(fo_obj) { exec_xml('importer','procImporterAdminSync', new Array(), completeSync); return false; @@ -15,203 +18,145 @@ function completeSync(ret_obj) { } -/* 회원정보 데이터 import */ -function doImportMember(fo_obj) { +/** + * xml파일을 DB입력전에 extract를 통해 분할 캐싱을 요청하는 함수 + **/ +var prepared = false; +function doPreProcessing(fo_obj) { var xml_file = fo_obj.xml_file.value; if(!xml_file) return false; + var type = fo_obj.type.value; + + xDisplay('importForm','none'); + xDisplay('process','block'); + xInnerHtml('status',''); + prepared = false; + setTimeout(doPrepareDot, 50); + var params = new Array(); params['xml_file'] = xml_file; - params['total_count'] = fo_obj.total_count.value; - params['success_count'] = fo_obj.success_count.value; - params['readed_line'] = fo_obj.readed_line.value; + params['type'] = type; - var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished"); - - exec_xml('importer','procImporterAdminMemberImport', params, completeImportMember, response_tags); + var response_tags = new Array('error','message','type','total','cur','key','status'); + exec_xml('importer','procImporterAdminPreProcessing', params, completePreProcessing, response_tags); return false; } -function completeImportMember(ret_obj) { - var total_count = ret_obj['total_count']; - var success_count = ret_obj['success_count']; - var readed_line = ret_obj['readed_line']; - var is_finished = ret_obj['is_finished']; +/* 준비중일때 .(dot) 찍어주는.. */ +function doPrepareDot() { + if(prepared) return; - if(is_finished == '1') { - var fo_obj = xGetElementById("fo_import"); - fo_obj.total_count.value = 0; - fo_obj.success_count.value = 0; - fo_obj.readed_line.value = 0; - fo_obj.xml_file.disabled = false; - xGetElementById("status").style.display = "none"; - xGetElementById("status_button_prev").style.display = "block"; - xGetElementById("status_button").style.display = "none"; - - - xInnerHtml("status", ret_obj['message']); - alert(ret_obj['message']); - } else { - var fo_obj = xGetElementById("fo_import"); - fo_obj.total_count.value = total_count; - fo_obj.success_count.value = success_count; - fo_obj.readed_line.value = readed_line; - fo_obj.xml_file.disabled = true; - xGetElementById("status").style.display = "block"; - xGetElementById("status_button_prev").style.display = "none"; - xGetElementById("status_button").style.display = "block"; - xInnerHtml("status", ret_obj['message']); - - doImportMember(fo_obj); - } + var str = xInnerHtml('status'); + if(str.length<1 || str.length - preProcessingMsg.length > 50) str = preProcessingMsg; + else str += "."; + xInnerHtml('status', str); + setTimeout(doPrepareDot, 50); } -/* 쪽지 데이터 import */ -function doImportMessage(fo_obj) { - var xml_file = fo_obj.xml_file.value; - if(!xml_file) return false; +/* 준비가 끝났을때 호출되는 함수 */ +function completePreProcessing(ret_obj, response_tags) { + prepared = true; + xInnerHtml('status',''); + + var status = ret_obj['status']; + var message = ret_obj['message']; + var type = ret_obj['type']; + var total = parseInt(ret_obj['total'],10); + var cur = parseInt(ret_obj['cur'],10); + var key = ret_obj['key']; + + if(status == -1) { + xDisplay('importForm','block'); + xDisplay('process','none'); + xDisplay('btn_reload','block'); + xDisplay('btn_continue','none'); + alert(message); + return; + } + + xDisplay('btn_reload','none'); + xDisplay('btn_continue','block'); + + var fo_obj = xGetElementById('fo_process'); + fo_obj.type.value = type; + fo_obj.total.value = total; + fo_obj.cur.value = cur; + fo_obj.key.value = key; + + var fo_import = xGetElementById('fo_import'); + if(fo_import && fo_import.target_module) fo_obj.target_module.value = fo_import.target_module.options[fo_import.target_module.selectedIndex].value; + if(fo_import && fo_import.user_id) fo_obj.user_id.value = fo_import.user_id.value; + + fo_obj.unit_count.value = fo_import.unit_count.options[fo_import.unit_count.selectedIndex].value; + + // extract된 파일을 이용해서 import + doImport(); +} + +/* @brief 임포트 시작 */ +function doImport() { + var fo_obj = xGetElementById('fo_process'); var params = new Array(); - params['xml_file'] = xml_file; - params['total_count'] = fo_obj.total_count.value; - params['success_count'] = fo_obj.success_count.value; - params['readed_line'] = fo_obj.readed_line.value; - - var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished"); - - exec_xml('importer','procImporterAdminMessageImport', params, completeImportMessage, response_tags); - - return false; -} - -function completeImportMessage(ret_obj) { - var total_count = ret_obj['total_count']; - var success_count = ret_obj['success_count']; - var readed_line = ret_obj['readed_line']; - var is_finished = ret_obj['is_finished']; - - if(is_finished == '1') { - var fo_obj = xGetElementById("fo_import"); - fo_obj.total_count.value = 0; - fo_obj.success_count.value = 0; - fo_obj.readed_line.value = 0; - fo_obj.xml_file.disabled = false; - xGetElementById("status").style.display = "none"; - xGetElementById("status_button_prev").style.display = "block"; - xGetElementById("status_button").style.display = "none"; - - - xInnerHtml("status", ret_obj['message']); - alert(ret_obj['message']); - } else { - var fo_obj = xGetElementById("fo_import"); - fo_obj.total_count.value = total_count; - fo_obj.success_count.value = success_count; - fo_obj.readed_line.value = readed_line; - fo_obj.xml_file.disabled = true; - xGetElementById("status").style.display = "block"; - xGetElementById("status_button_prev").style.display = "none"; - xGetElementById("status_button").style.display = "block"; - xInnerHtml("status", ret_obj['message']); - - doImportMessage(fo_obj); - } -} - -/* 모듈 데이터 import */ -function doImportModule(fo_obj) { - var target_module = fo_obj.target_module.options[fo_obj.target_module.selectedIndex].value; - if(!target_module) return false; - - var xml_file = fo_obj.xml_file.value; - if(!xml_file) return false; - - var params = new Array(); - params['xml_file'] = xml_file; - params['target_module'] = target_module; - params['total_count'] = fo_obj.total_count.value; - params['success_count'] = fo_obj.success_count.value; - params['readed_line'] = fo_obj.readed_line.value; - - var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished"); - - exec_xml('importer','procImporterAdminModuleImport', params, completeImportModule, response_tags); - - return false; -} - -function completeImportModule(ret_obj, response_tags) { - var total_count = ret_obj['total_count']; - var success_count = ret_obj['success_count']; - var readed_line = ret_obj['readed_line']; - var is_finished = ret_obj['is_finished']; - - if(is_finished == '1') { - var fo_obj = xGetElementById("fo_import"); - fo_obj.target_module.disabled = false; - fo_obj.xml_file.disabled = false; - fo_obj.total_count.value = 0; - fo_obj.success_count.value = 0; - fo_obj.readed_line.value = 0; - - xGetElementById("status").style.display = "none"; - xGetElementById("status_button_prev").style.display = "block"; - xGetElementById("status_button").style.display = "none"; - - - xInnerHtml("status", ret_obj['message']); - - alert(ret_obj['message']); - } else { - var fo_obj = xGetElementById("fo_import"); - fo_obj.target_module.disabled = true; - fo_obj.xml_file.disabled = true; - fo_obj.total_count.value = total_count; - fo_obj.success_count.value = success_count; - fo_obj.readed_line.value = readed_line; - - xGetElementById("status").style.display = "block"; - xGetElementById("status_button_prev").style.display = "none"; - xGetElementById("status_button").style.display = "block"; - - xInnerHtml("status", ret_obj['message']); - - doImportModule(fo_obj); - } -} - -/* TTXML 데이터 import */ -function doImportTTXML(fo_obj) { - var target_module = fo_obj.target_module.options[fo_obj.target_module.selectedIndex].value; - if(!target_module) return false; - - var xml_file = fo_obj.xml_file.value; - if(!xml_file) return false; - - var params = new Array(); - params['xml_file'] = xml_file; - params['target_module'] = target_module; - params['total_count'] = fo_obj.total_count.value; - params['success_count'] = fo_obj.success_count.value; - params['readed_line'] = fo_obj.readed_line.value; + params['type'] = fo_obj.type.value; + params['total'] = fo_obj.total.value; + params['cur'] = fo_obj.cur.value; + params['key'] = fo_obj.key.value; + params['target_module'] = fo_obj.target_module.value; + params['unit_count'] = fo_obj.unit_count.value; params['user_id'] = fo_obj.user_id.value; - var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished"); + displayProgress(params['total'], params['cur']); - exec_xml('importer','procImporterAdminTTXMLImport', params, completeImportTTXML, response_tags); + var response_tags = new Array('error','message','type','total','cur','key'); + + show_waiting_message = false; + exec_xml('importer','procImporterAdminImport', params, completeImport, response_tags); + show_waiting_message = true; return false; } -function completeImportTTXML(ret_obj, response_tags) { - var total_count = ret_obj['total_count']; - var success_count = ret_obj['success_count']; - var readed_line = ret_obj['readed_line']; - var is_finished = ret_obj['is_finished']; - xGetElementById("status").style.display = 'block'; - xInnerHtml("status", ret_obj['message']); +/* import중 표시 */ +function completeImport(ret_obj, response_tags) { + var message = ret_obj['message']; + var type = ret_obj['type']; + var total = parseInt(ret_obj['total'],10); + var cur = parseInt(ret_obj['cur'],10); + var key = ret_obj['key']; - alert(ret_obj['message']); + displayProgress(total, cur); + + var fo_obj = xGetElementById('fo_process'); + fo_obj.type.value = type; + fo_obj.total.value = total; + fo_obj.cur.value = cur; + fo_obj.key.value = key; + + // extract된 파일을 이용해서 import + if(total>cur) doImport(); + else { + alert(message); + fo_obj.reset(); + xDisplay('process','none'); + xDisplay('importForm','block'); + xGetElementById('fo_import').reset(); + } +} + +/* 상태 표시 함수 */ +function displayProgress(total, cur) { + // 진행률 구함 + var per = 0; + if(total > 0) per = Math.round(cur/total*100); + else per = 100; + if(!per) per = 1; + + var status = '
    '+per+'% 
    '; + status += '
    '+cur+'/'+total+'
    '; + status += '
    '; + xInnerHtml('status', status); } diff --git a/modules/importer/tpl/member.html b/modules/importer/tpl/member.html index f844605ad..72287416e 100644 --- a/modules/importer/tpl/member.html +++ b/modules/importer/tpl/member.html @@ -1,33 +1,34 @@ - - + -

    {$lang->importer} {$lang->cmd_management}

    - -
    {nl2br($lang->about_importer)}
    - -
    -
    - - - +
    + +
    {$lang->import_step_title[2]} - {$lang->import_step_desc[2]}
    - +

    ex1) ../member.xml

    ex2) http://...../member.xml

    -
    - + +
    - -
    + + diff --git a/modules/importer/tpl/message.html b/modules/importer/tpl/message.html index 928860723..f15be63d8 100644 --- a/modules/importer/tpl/message.html +++ b/modules/importer/tpl/message.html @@ -1,33 +1,34 @@ - - + -

    {$lang->importer} {$lang->cmd_management}

    - -
    {nl2br($lang->about_importer)}
    - -
    -
    - - - +
    + +
    {$lang->import_step_title[2]} - {$lang->import_step_desc[2]}
    - +

    ex1) ../message.xml

    ex2) http://...../message.xml

    -
    - + +
    - -
    + + diff --git a/modules/importer/tpl/module.html b/modules/importer/tpl/module.html index 097930a02..1d61448b8 100644 --- a/modules/importer/tpl/module.html +++ b/modules/importer/tpl/module.html @@ -1,23 +1,15 @@ - - - -

    {$lang->importer} {$lang->cmd_management}

    - - -
    {nl2br($lang->about_importer)}
    + -
    -
    - - - +
    + +
    {$lang->import_step_title[1]} - {$lang->import_step_desc[12]}
    - @@ -31,21 +23,31 @@
    {$lang->import_step_title[2]} - {$lang->import_step_desc[2]}
    - +

    ex1) ../module.xml

    ex2) http://...../module.xml

    -
    - + +
    - -
    + diff --git a/modules/importer/tpl/process.html b/modules/importer/tpl/process.html new file mode 100644 index 000000000..3f080939d --- /dev/null +++ b/modules/importer/tpl/process.html @@ -0,0 +1,30 @@ + + + diff --git a/modules/importer/tpl/sync.html b/modules/importer/tpl/sync.html index 6068c5b91..d493ef23a 100644 --- a/modules/importer/tpl/sync.html +++ b/modules/importer/tpl/sync.html @@ -1,16 +1,10 @@ - - + -

    {$lang->importer} {$lang->cmd_management}

    - - -
    {nl2br($lang->about_importer)}
    - -
    - - - - - -
    {$lang->import_step_title[3]} - {$lang->import_step_desc[3]}
    -
    +
    + + + + + +
    {$lang->import_step_title[3]} - {$lang->import_step_desc[3]}
    +
    diff --git a/modules/importer/tpl/ttxml.html b/modules/importer/tpl/ttxml.html index 8ee123b82..5a4247e4b 100644 --- a/modules/importer/tpl/ttxml.html +++ b/modules/importer/tpl/ttxml.html @@ -1,17 +1,9 @@ - - - -

    {$lang->importer} {$lang->cmd_management}

    - - -
    {nl2br($lang->about_importer)}
    + -
    -
    - - - +
    + + @@ -40,21 +32,30 @@
    {$lang->import_step_title[1]} - {$lang->import_step_desc[12]}{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}
    - +

    ex1) ../module.xml

    ex2) http://...../module.xml

    -
    - + +
    - - -
    + diff --git a/modules/importer/ttimport.class.php b/modules/importer/ttimport.class.php new file mode 100644 index 000000000..f3837b4eb --- /dev/null +++ b/modules/importer/ttimport.class.php @@ -0,0 +1,483 @@ +oXmlParser = new XmlParser(); + + // 타겟 모듈의 카테고리 정보 구함 + $oDocumentController = &getController('document'); + $oDocumentModel = &getModel('document'); + $category_list = $category_titles = array(); + $category_list = $oDocumentModel->getCategoryList($module_srl); + if(count($category_list)) foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; + + // 먼저 카테고리 정보를 입력함 + $category_file = preg_replace('/index$/i', 'category', $index_file); + if(file_exists($category_file)) { + $buff = FileHandler::readFile($category_file); + + // xmlParser객체 생성 + $xmlDoc = $this->oXmlParser->loadXmlFile($category_file); + + // 카테고리 정보를 정리 + if($xmlDoc->items->category) { + $categories = array(); + $idx = 0; + $this->arrangeCategory($xmlDoc->items, $categories, $idx, 0); + + $match_sequence = array(); + foreach($categories as $k => $v) { + $category = $v->name; + if(!$category || $category_titles[$category]) continue; + + $obj = null; + $obj->title = $category; + $obj->module_srl = $module_srl; + if($v->parent) $obj->parent_srl = $match_sequence[$v->parent]; + $output = $oDocumentController->insertCategory($obj); + + if($output->toBool()) $match_sequence[$v->sequence] = $output->get('category_srl'); + } + $oDocumentController->makeCategoryFile($module_srl); + } + @unlink($category_file); + } + $category_list = $category_titles = array(); + $category_list = $oDocumentModel->getCategoryList($module_srl); + if(count($category_list)) foreach($category_list as $key => $val) $category_titles[$val->title] = $val->category_srl; + + // 관리자 정보를 구함 + $oMemberModel = &getModel('member'); + $member_info = $oMemberModel->getMemberInfoByUserID($user_id); + + if(!$cur) $cur = 0; + + // index파일을 염 + $f = fopen($index_file,"r"); + + // 이미 읽혀진 것은 패스 + for($i=0;$i<$cur;$i++) fgets($f, 1024); + + // 라인단위로 읽어들이면서 $cur보다 커지고 $cur+$unit_count개보다 작으면 중지 + for($idx=$cur;$idx<$cur+$unit_count;$idx++) { + if(feof($f)) break; + + // 정해진 위치를 찾음 + $target_file = trim(fgets($f, 1024)); + + if(!file_exists($target_file)) continue; + + // 이제부터 데이터를 가져오면서 처리 + $fp = fopen($target_file,"r"); + if(!$fp) continue; + + $obj = null; + $obj->module_srl = $module_srl; + $obj->document_srl = getNextSequence(); + $obj->uploaded_count = 0; + + $files = array(); + + $started = false; + $buff = null; + + // 본문 데이터부터 처리 시작 + while(!feof($fp)) { + $str = fgets($fp, 1024); + + // 한 아이템 준비 시작 + if(substr($str,0,5) == 'importAttaches($fp, $module_srl, $obj->document_srl, $files, $str)) $obj->uploaded_count++; + continue; + } + + if($started) $buff .= $str; + } + + $xmlDoc = $this->oXmlParser->parse(''.$buff); + + if($xmlDoc->post->category->body) { + $tmp_arr = explode('/',$xmlDoc->post->category->body); + $category = trim($tmp_arr[count($tmp_arr)-1]); + if($category_titles[$category]) $obj->category_srl = $category_titles[$category]; + } + + $obj->is_notice = 'N'; + $obj->is_secret = in_array($xmlDoc->post->visibility->body, array('public','syndicated'))?'N':'Y'; + $obj->title = $xmlDoc->post->title->body; + $obj->content = $xmlDoc->post->content->body; + $obj->password = md5($xmlDoc->post->password->body); + //$obj->allow_comment = $xmlDoc->post->acceptComment->body==1?'Y':'N'; + $obj->allow_comment = 'Y'; + //$obj->allow_trackback = $xmlDoc->post->acceptTrackback->body==1?'Y':'N'; + $obj->allow_trackback = 'Y'; + $obj->regdate = date("YmdHis",$xmlDoc->post->published->body); + $obj->last_update = date("YmdHis", $xmlDoc->post->modified->body); + if(!$obj->last_update) $obj->last_update = $obj->regdate; + + $tag = null; + $tmp_tags = null; + $tag = $xmlDoc->post->tag; + if($tag) { + if(!is_array($tag)) $tag = array($tag); + foreach($tag as $key => $val) $tmp_tags[] = $val->body; + $obj->tags = implode(',',$tmp_tags); + } + + $obj->readed_count = 0; + $obj->voted_count = 0; + $obj->nick_name = $member_info->nick_name; + $obj->user_name = $member_info->user_name; + $obj->user_id = $member_info->user_id; + $obj->member_srl = $member_info->member_srl; + $obj->email_address = $member_info->email_address; + $obj->homepage = $member_info->homepage; + $obj->ipaddress = $_REMOTE['SERVER_ADDR']; + $obj->list_order = $obj->update_order = $obj->document_srl*-1; + $obj->lock_comment = 'N'; + $obj->notify_message = 'N'; + + // content 정보 변경 (첨부파일) + $obj->content = str_replace('[##_ATTACH_PATH_##]/','',$obj->content); + if(count($files)) { + foreach($files as $key => $val) { + $obj->content = preg_replace('/(src|href)\=(["\']?)'.preg_quote($key).'(["\']?)/i','$1="'.$val->url.'"',$obj->content); + } + } + + $obj->content = preg_replace_callback('!\[##_Movie\|([^\|]*)\|(.*?)_##\]!is', array($this, '_replaceTTMovie'), $obj->content); + + if(count($files)) { + $this->files = $files; + $obj->content = preg_replace_callback('!\[##_([a-z0-9]+)\|([^\|]*)\|([^\|]*)\|(.*?)_##\]!is', array($this, '_replaceTTAttach'), $obj->content); + } + + // 역인글 입력 + $obj->trackback_count = 0; + if($xmlDoc->post->trackback) { + $trackbacks = $xmlDoc->post->trackback; + if(!is_array($trackbacks)) $trackbacks = array($trackbacks); + if(count($trackbacks)) { + foreach($trackbacks as $key => $val) { + $tobj = null; + $tobj->trackback_srl = getNextSequence(); + $tobj->module_srl = $module_srl; + $tobj->document_srl = $obj->document_srl; + $tobj->url = $val->url->body; + $tobj->title = $val->title->body; + $tobj->blog_name = $val->site->body; + $tobj->excerpt = $val->excerpt->body; + $tobj->regdate = date("YmdHis",$val->received->body); + $tobj->ipaddress = $val->ip->body; + $tobj->list_order = -1*$tobj->trackback_srl; + $output = executeQuery('trackback.insertTrackback', $tobj); + if($output->toBool()) $obj->trackback_count++; + } + } + } + + // 댓글입력 + $obj->comment_count = 0; + if($xmlDoc->post->comment) { + $comment = $xmlDoc->post->comment; + if(!is_array($comment)) $comment = array($comment); + foreach($comment as $key => $val) { + $parent_srl = $this->insertComment($val, $module_srl, $obj->document_srl, 0); + if($parent_srl === false) continue; + + $obj->comment_count++; + if($val->comment) { + $child_comment = $val->comment; + if(!is_array($child_comment)) $child_comment = array($child_comment); + foreach($child_comment as $k => $v) { + $result = $this->insertComment($v, $module_srl, $obj->document_srl, $parent_srl); + if($result !== false) $obj->comment_count++; + } + } + } + } + + // 문서 입력 + $output = executeQuery('document.insertDocument', $obj); + + if($output->toBool()) { + // 태그 입력 + if($obj->tags) { + $tag_list = explode(',',$obj->tags); + $tag_count = count($tag_list); + for($i=0;$i<$tag_count;$i++) { + $args = null; + $args->tag_srl = getNextSequence(); + $args->module_srl = $module_srl; + $args->document_srl = $obj->document_srl; + $args->tag = trim($tag_list[$i]); + $args->regdate = $obj->regdate; + if(!$args->tag) continue; + $output = executeQuery('tag.insertTag', $args); + } + } + } + + fclose($fp); + @unlink($target_file); + } + + fclose($f); + + if(count($category_list)) foreach($category_list as $key => $val) $oDocumentController->updateCategoryCount($module_srl, $val->category_srl); + + return $idx-1; + } + + /** + * @brief 첨부파일 정리 + **/ + function importAttaches($fp, $module_srl, $upload_target_srl, &$files, $buff) { + $uploaded_count = 0; + + $file_obj = null; + $file_obj->file_srl = getNextSequence(); + $file_obj->upload_target_srl = $upload_target_srl; + $file_obj->module_srl = $module_srl; + + while(!feof($fp)) { + $str = fgets($fp, 1024); + + // 로 끝나면 중단 + if(trim($str) == '') break; + + // 로 시작하면 xml파일내의 첨부파일로 처리 + if(substr($str, 0, 9)=='') { + $file_obj->file = $this->saveTemporaryFile($fp, $str); + continue; + } + + $buff .= $str; + } + if(!file_exists($file_obj->file)) return false; + + $buff .= ''; + + $xmlDoc = $this->oXmlParser->parse($buff); + + $file_obj->source_filename = $xmlDoc->attachment->label->body; + $file_obj->download_count = $xmlDoc->attachment->downloads->body; + $name = $xmlDoc->attachment->name->body; + + // 이미지인지 기타 파일인지 체크하여 upload path 지정 + if(preg_match("/\.(jpg|jpeg|gif|png|wmv|wma|mpg|mpeg|avi|swf|flv|mp3|asaf|wav|asx|midi|asf)$/i", $file_obj->source_filename)) { + $path = sprintf("./files/attach/images/%s/%s/", $module_srl,$upload_target_srl); + $filename = $path.$file_obj->source_filename; + $file_obj->direct_download = 'Y'; + } else { + $path = sprintf("./files/attach/binaries/%s/%s/", $module_srl, $upload_target_srl); + $filename = $path.md5(crypt(rand(1000000,900000), rand(0,100))); + $file_obj->direct_download = 'N'; + } + + // 디렉토리 생성 + if(!FileHandler::makeDir($path)) continue; + + @rename($file_obj->file, $filename); + + // DB입력 + unset($file_obj->file); + $file_obj->uploaded_filename = $filename; + $file_obj->file_size = filesize($filename); + $file_obj->comment = NULL; + $file_obj->member_srl = 0; + $file_obj->sid = md5(rand(rand(1111111,4444444),rand(4444445,9999999))); + $file_obj->isvalid = 'Y'; + $output = executeQuery('file.insertFile', $file_obj); + + if($output->toBool()) { + $uploaded_count++; + $tmp_obj = null; + if($file_obj->direct_download == 'Y') $files[$name]->url = $file_obj->uploaded_filename; + else $files[$name]->url = getUrl('','module','file','act','procFileDownload','file_srl',$file_obj->file_srl,'sid',$file_obj->sid); + $files[$name]->direct_download = $file_obj->direct_download; + $files[$name]->source_filename = $file_obj->source_filename; + return true; + } + + return false; + } + + /** + * @biref 임의로 사용할 파일이름을 return + **/ + function getTmpFilename() { + $path = "./files/cache/tmp"; + if(!is_dir($path)) FileHandler::makeDir($path); + $filename = sprintf("%s/%d", $path, rand(11111111,99999999)); + if(file_exists($filename)) $filename .= rand(111,999); + return $filename; + } + + /** + * @brief 특정 파일포인트로부터 key에 해당하는 값이 나타날때까지 buff를 읽음 + **/ + function saveTemporaryFile($fp, $buff) { + $temp_filename = $this->getTmpFilename(); + $buff = substr($buff, 9); + + while(!feof($fp)) { + $str = trim(fgets($fp, 1024)); + $buff .= $str; + if(substr($str, -10) == '') break; + } + + $buff = substr($buff, 0, -10); + + $f = fopen($temp_filename, "w"); + fwrite($f, base64_decode($buff)); + fclose($f); + return $temp_filename; + } + + /** + * @brief ttxml의 자체 img 태그를 치환 + **/ + function _replaceTTAttach($matches) { + $name = $matches[2]; + if(!$name) return $matches[0]; + + $obj = $this->files[$name]; + + // 멀티미디어성 파일의 경우 + if($obj->direct_download == 'Y') { + // 이미지의 경우 + if(preg_match('/\.(jpg|gif|jpeg|png)$/i', $obj->source_filename)) { + return sprintf('%s', $obj->url, str_replace('"','\\"',$matches[4])); + // 이미지 외의 멀티미디어성 파일의 경우 + } else { + return sprintf('', $obj->url); + } + + // binary파일일 경우 + } else { + return sprintf('%s', $obj->url, $obj->source_filename); + } + } + + /** + * @brief ttxml의 동영상 변환 + **/ + function _replaceTTMovie($matches) { + $key = $matches[1]; + if(!$key) return $matches[0]; + + return + ''. + ''. + ''. + ''. + ''. + ''. + ''; + } + + /** + * @brief 댓글 입력 + **/ + function insertComment($val, $module_srl, $document_srl, $parent_srl = 0) { + $tobj = null; + $tobj->comment_srl = getNextSequence(); + $tobj->module_srl = $module_srl; + $tobj->document_srl = $document_srl; + $tobj->is_secret = $val->secret->body==1?'Y':'N'; + $tobj->notify_message = 'N'; + $tobj->content = nl2br($val->content->body); + $tobj->voted_count = 0; + $tobj->password = $val->password->body; + $tobj->nick_name = $val->commenter->name->body; + $tobj->member_srl = 0; + $tobj->homepage = $val->commenter->homepage->body; + $tobj->last_update = $tobj->regdate = date("YmdHis",$val->written->body); + $tobj->ipaddress = $val->commenter->ip->body; + $tobj->list_order = $tobj->comment_srl*-1; + $tobj->sequence = $sequence; + $tobj->parent_srl = $parent_srl; + + // 댓글 목록 부분을 먼저 입력 + $list_args = null; + $list_args->comment_srl = $tobj->comment_srl; + $list_args->document_srl = $tobj->document_srl; + $list_args->module_srl = $tobj->module_srl; + $list_args->regdate = $tobj->regdate; + + // 부모댓글이 없으면 바로 데이터를 설정 + if(!$tobj->parent_srl) { + $list_args->head = $list_args->arrange = $tobj->comment_srl; + $list_args->depth = 0; + + // 부모댓글이 있으면 부모글의 정보를 구해옴 + } else { + // 부모댓글의 정보를 구함 + $parent_args->comment_srl = $tobj->parent_srl; + $parent_output = executeQuery('comment.getCommentListItem', $parent_args); + + // 부모댓글이 존재하지 않으면 return + if(!$parent_output->toBool() || !$parent_output->data) continue; + $parent = $parent_output->data; + + $list_args->head = $parent->head; + $list_args->depth = $parent->depth+1; + if($list_args->depth<2) $list_args->arrange = $tobj->comment_srl; + else { + $list_args->arrange = $parent->arrange; + $output = executeQuery('comment.updateCommentListArrange', $list_args); + if(!$output->toBool()) return $output; + } + } + + $output = executeQuery('comment.insertCommentList', $list_args); + if($output->toBool()) { + $output = executeQuery('comment.insertComment', $tobj); + if($output->toBool()) return $tobj->comment_srl; + } + return false; + } + + // 카테고리 정리 + function arrangeCategory($obj, &$category, &$idx, $parent = 0) { + if(!$obj->category) return; + if(!is_array($obj->category)) $c = array($obj->category); + else $c = $obj->category; + foreach($c as $val) { + $idx++; + $priority = $val->priority->body; + $name = $val->name->body; + $obj = null; + $obj->priority = $priority; + $obj->name = $name; + $obj->sequence = $idx; + $obj->parent = $parent; + + $category[$priority] = $obj; + + $this->arrangeCategory($val, $category, $idx, $idx); + } + } + } +?> diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index da14386f7..a4f28e3f8 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -186,7 +186,7 @@ $buff = ' $val) { - $buff .= sprintf("\$db_info->%s = \"%s\";\n", $key, $val); + $buff .= sprintf("\$db_info->%s = '%s';\n", $key, str_replace("'","\\'",$val)); } $buff .= "?>"; diff --git a/modules/install/lang/fr.lang.php b/modules/install/lang/fr.lang.php index 707b5db59..69df79003 100644 --- a/modules/install/lang/fr.lang.php +++ b/modules/install/lang/fr.lang.php @@ -2,7 +2,7 @@ /** * @file fr.lang.php * @author zero (zero@nzeo.com) Traduit par Pierre Duvent (PierreDuvent@gmail.com) - * @brief Paquet de la langue franaise (Contenus fondamentals seulement sont list) + * @brief Paquet de la langue française (Contenus fondamentals seulement sont listé) **/ $lang->introduce_title = 'Installation du Zeroboard XE '; @@ -13,269 +13,146 @@ - Auteurr : zero (zero@zeroboard.com, http://www.zeroboard.com) Cette programme est un logiciel libre qui suit licence GPL. -Mais quand le thme ajout des lments de design est inclus, l\'Auteur du thme peut appliquer la licence individuelle de lui-mme. +Mais quand le thème ajouté des éléments de design est inclus, l\'Auteur du thème peut appliquer la licence individuelle de lui-même. -LICENCE PUBLIQUE GNRALE GNU +LICENCE PUBLIQUE GÉNÉRALE GNU Version 2, Juin 1991 -------------------------------------------------------------------------------- -Copyright Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307 -Etats-Unis, 1989, 1991. -La copie et la distribution de copies exactes de ce document sont -autorisees, mais aucune modification n\'est permise. -Preambule +Copyright © Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 +États-Unis, 1989, 1991. +La copie et la distribution de copies exactes de ce document sont autorisées, mais aucune modification n'est permise. +Préambule +Les licences d'utilisation de la plupart des programmes sont définies pour limiter ou supprimer toute liberté à l'utilisateur. À l'inverse, la Licence Publique Générale (General Public License) est destinée à vous garantir la liberté de partager et de modifier les logiciels libres, et de s'assurer que ces logiciels sont effectivement accessibles à tout utilisateur. +Cette Licence Publique Générale s'applique à la plupart des programmes de la Free Software Foundation, comme à tout autre programme dont l'auteur l'aura décidé (d'autres logiciels de la FSF sont couverts pour leur part par la Licence Publique Générale pour Bibliothèques GNU (LGPL)). Vous pouvez aussi appliquer les termes de cette Licence à vos propres programmes, si vous le désirez. + +Liberté des logiciels ne signifie pas nécessairement gratuité. Notre Licence est conçue pour vous assurer la liberté de distribuer des copies des programmes, gratuitement ou non, de recevoir le code source ou de pouvoir l'obtenir, de modifier les programmes ou d'en utiliser des éléments dans de nouveaux programmes libres, en sachant que vous y êtes autorisé. + +Afin de garantir ces droits, nous avons dû introduire des restrictions interdisant à quiconque de vous les refuser ou de vous demander d'y renoncer. Ces restrictions vous imposent en retour certaines obligations si vous distribuez ou modifiez des copies de programmes protégés par la Licence. En d'autre termes, il vous incombera en ce cas de : + +transmettre aux destinataires tous les droits que vous possédez, +expédier aux destinataires le code source ou bien tenir celui-ci à leur disposition, +leur remettre cette Licence afin qu'ils prennent connaissance de leurs droits. +Nous protégeons vos droits de deux façons : d'abord par le copyright du logiciel, ensuite par la remise de cette Licence qui vous autorise légalement à copier, distribuer et/ou modifier le logiciel. + +En outre, pour protéger chaque auteur ainsi que la FSF, nous affirmons solennellement que le programme concerné ne fait l'objet d'aucune garantie. Si un tiers le modifie puis le redistribue, tous ceux qui en recevront une copie doivent savoir qu'il ne s'agit pas de l'original afin qu'une copie défectueuse n'entache pas la réputation de l'auteur du logiciel. + +Enfin, tout programme libre est sans cesse menacé par des dépôts de brevets. Nous souhaitons à tout prix éviter que des distributeurs puissent déposer des brevets sur les Logiciels Libres pour leur propre compte. Pour éviter cela, nous stipulons bien que tout dépôt éventuel de brevet doit accorder expressément à tout un chacun le libre usage du produit. + +Les dispositions précises et les conditions de copie, de distribution et de modification de nos logiciels sont les suivantes : + +Stipulations et conditions relatives à la copie, la distribution et la modification + -------------------------------------------------------------------------------- -Les licences d\'utilisation de la plupart des programmes sont definies pour -limiter ou supprimer toute liberte a l\'utilisateur. A l\'inverse, la Licence -Publique Generale (General Public License) est destinee a vous garantir la -liberte de partager et de modifier les logiciels libres, et de s\'assurer que -ces logiciels sont effectivement accessibles a tout utilisateur. -Cette Licence Publique Generale s\'applique a la plupart des programmes de la -Free Software Foundation, comme a tout autre programme dont l\'auteur l\'aura -decide (d\'autres logiciels de la FSF sont couverts pour leur part par la -Licence Publique Generale pour Bibliotheques GNU (LGPL)). Vous pouvez aussi -appliquer les termes de cette Licence a vos propres programmes, si vous le -desirez. -Liberte des logiciels ne signifie pas necessairement gratuite. Notre Licence -est concue pour vous assurer la liberte de distribuer des copies des -programmes, gratuitement ou non, de recevoir le code source ou de pouvoir -l\'obtenir, de modifier les programmes ou d\'en utiliser des elements dans de -nouveaux programmes libres, en sachant que vous y etes autorise. -Afin de garantir ces droits, nous avons du introduire des restrictions -interdisant a quiconque de vous les refuser ou de vous demander d\'y -renoncer. Ces restrictions vous imposent en retour certaines obligations si -vous distribuez ou modifiez des copies de programmes proteges par la -Licence. En d\'autre termes, il vous incombera en ce cas de : - * transmettre aux destinataires tous les droits que vous possedez, - * expedier aux destinataires le code source ou bien tenir celui-ci a leur - disposition, - * leur remettre cette Licence afin qu\'ils prennent connaissance de leurs - droits. -Nous protegeons vos droits de deux facons : d\'abord par le copyright du -logiciel, ensuite par la remise de cette Licence qui vous autorise -legalement a copier, distribuer et/ou modifier le logiciel. -En outre, pour proteger chaque auteur ainsi que la FSF, nous affirmons -solennellement que le programme concerne ne fait l\'objet d\'aucune garantie. -Si un tiers le modifie puis le redistribue, tous ceux qui en recevront une -copie doivent savoir qu\'il ne s\'agit pas de l\'original afin qu\'une copie -defectueuse n\'entache pas la reputation de l\'auteur du logiciel. -Enfin, tout programme libre est sans cesse menace par des depots de brevets. -Nous souhaitons a tout prix eviter que des distributeurs puissent deposer -des brevets sur les Logiciels Libres pour leur propre compte. Pour eviter -cela, nous stipulons bien que tout depot eventuel de brevet doit accorder -expressement a tout un chacun le libre usage du produit. -Les dispositions precises et les conditions de copie, de distribution et de -modification de nos logiciels sont les suivantes : -Stipulations et conditions relatives a la copie, la distribution et la -modification - ------------------------------------------------------------------------ - * Article 0 - La presente Licence s\'applique a tout Programme (ou autre travail) ou - figure une note, placee par le detenteur des droits, stipulant que - ledit Programme ou travail peut etre distribue selon les termes de la - presente Licence. Le terme Programme designe aussi bien le Programme - lui-meme que tout travail qui en est derive selon la loi, c\'est-a-dire - tout ouvrage reproduisant le Programme ou une partie de celui-ci, a - l\'identique ou bien modifie, et/ou traduit dans une autre langue (la - traduction est consideree comme une modification). Chaque personne - concernee par la Licence Publique Generale sera designee par le terme - Vous. - Les activites autres que copie, distribution et modification ne sont - pas couvertes par la presente Licence et sortent de son cadre. Rien ne - restreint l\'utilisation du Programme et les donnees issues de celui-ci - ne sont couvertes que si leur contenu constitue un travail base sur le - logiciel (independemment du fait d\'avoir ete realise en lancant le - Programme). Tout depend de ce que le Programme est cense produire. - ----------------------------------------------------------------------- - * Article 1. - Vous pouvez copier et distribuer des copies conformes du code source du - Programme, tel que Vous l\'avez recu, sur n\'importe quel support, a - condition de placer sur chaque copie un copyright approprie et une - restriction de garantie, de ne pas modifier ou omettre toutes les - stipulations se referant a la presente Licence et a la limitation de - garantie, et de fournir avec toute copie du Programme un exemplaire de - la Licence. - Vous pouvez demander une retribution financiere pour la realisation de - la copie et demeurez libre de proposer une garantie assuree par vos - soins, moyennant finances. - ----------------------------------------------------------------------- - * Article 2. - Vous pouvez modifier votre copie ou vos copies du Programme ou partie - de celui-ci, ou d\'un travail base sur ce Programme, et copier et - distribuer ces modifications selon les termes de l\'article 1, a - condition de Vous conformer egalement aux conditions suivantes : - o a) Ajouter aux fichiers modifies l\'indication tres claire des - modifications effectuees, ainsi que la date de chaque changement. - o b) Distribuer sous les termes de la Licence Publique Generale - l\'ensemble de toute realisation contenant tout ou partie du - Programme, avec ou sans modifications. - o c) Si le Programme modifie lit des commandes de maniere - interactive lors de son execution, faire en sorte qu\'il affiche, - lors d\'une invocation ordinaire, le copyright approprie en - indiquant clairement la limitation de garantie (ou la garantie que - Vous Vous engagez a fournir Vous-meme), qu\'il stipule que tout - utilisateur peut librement redistribuer le Programme selon les - conditions de la Licence Publique Generale GNU, et qu\'il montre a - tout utilisateur comment lire une copie de celle-ci (exception : - si le Programme original est interactif mais n\'affiche pas un tel - message en temps normal, tout travail derive de ce Programme ne - sera pas non plus contraint de l\'afficher). - Toutes ces conditions s\'appliquent a l\'ensemble des modifications. Si - des elements identifiables de ce travail ne sont pas derives du - Programme et peuvent etre raisonnablement consideres comme - independants, la presente Licence ne s\'applique pas a ces elements - lorsque Vous les distribuez seuls. Mais, si Vous distribuez ces memes - elements comme partie d\'un ensemble coherent dont le reste est base sur - un Programme soumis a la Licence, ils lui sont egalement soumis, et la - Licence s\'etend ainsi a l\'ensemble du produit, quel qu\'en soit - l\'auteur. - Cet article n\'a pas pour but de s\'approprier ou de contester vos droits - sur un travail entierement realise par Vous, mais plutot d\'ouvrir droit - a un controle de la libre distribution de tout travail derive ou - collectif base sur le Programme. - En outre, toute fusion d\'un autre travail, non base sur le Programme, - avec le Programme (ou avec un travail derive de ce dernier), effectuee - sur un support de stockage ou de distribution, ne fait pas tomber cet - autre travail sous le controle de la Licence. - ----------------------------------------------------------------------- - * Article 3. - Vous pouvez copier et distribuer le Programme (ou tout travail derive - selon les conditions enoncees dans l\'article 1) sous forme de code - objet ou executable, selon les termes des articles 0 et 1, a condition - de respecter les clauses suivantes : - o a) Fournir le code source complet du Programme, sous une forme - lisible par un ordinateur et selon les termes des articles 0 et 1, - sur un support habituellement utilise pour l\'echange de donnees ; - ou, - o b) Faire une offre ecrite, valable pendant au moins trois ans, - prevoyant de donner a tout tiers qui en fera la demande une copie, - sous forme lisible par un ordinateur, du code source - correspondant, pour un tarif n\'excedant pas le cout de la copie, - selon les termes des articles 0 et 1, sur un support couramment - utilise pour l\'echange de donnees informatiques ; ou, - o c) Informer le destinataire de l\'endroit ou le code source peut - etre obtenu (cette solution n\'est recevable que dans le cas d\'une - distribution non commerciale, et uniquement si Vous avez recu le - Programme sous forme de code objet ou executable avec l\'offre - prevue a l\'alinea b ci-dessus). - Le code source d\'un travail designe la forme de cet ouvrage sous - laquelle les modifications sont les plus aisees. Sont ainsi designes la - totalite du code source de tous les modules composant un Programme - executable, de meme que tout fichier de definition associe, ainsi que - les scripts utilises pour effectuer la compilation et l\'installation du - Programme executable. Toutefois, l\'environnement standard de - developpement du systeme d\'exploitation mis en oeuvre (source ou - binaire) -- compilateurs, bibliotheques, noyau, etc. -- constitue une - exception, sauf si ces elements sont diffuses en meme temps que le - Programme executable. - Si la distribution de l\'executable ou du code objet consiste a offrir - un acces permettant de copier le Programme depuis un endroit - particulier, l\'offre d\'un acces equivalent pour se procurer le code - source au meme endroit est considere comme une distribution de ce code - source, meme si l\'utilisateur choisit de ne pas profiter de cette - offre. - ----------------------------------------------------------------------- - * Article 4. - Vous ne pouvez pas copier, modifier, ceder, deposer ou distribuer le - Programme d\'une autre maniere que l\'autorise la Licence Publique - Generale. Toute tentative de ce type annule immediatement vos droits - d\'utilisation du Programme sous cette Licence. Toutefois, les tiers - ayant recu de Vous des copies du Programme ou le droit d\'utiliser ces - copies continueront a beneficier de leur droit d\'utilisation tant - qu\'ils respecteront pleinement les conditions de la Licence. - ----------------------------------------------------------------------- - * Article 5. - Ne l\'ayant pas signee, Vous n\'etes pas oblige d\'accepter cette Licence. - Cependant, rien d\'autre ne Vous autorise a modifier ou distribuer le - Programme ou quelque travaux derives : la loi l\'interdit tant que Vous - n\'acceptez pas les termes de cette Licence. En consequence, en - modifiant ou en distribuant le Programme (ou tout travail base sur - lui), Vous acceptez implicitement tous les termes et conditions de - cette Licence. - ----------------------------------------------------------------------- - * Article 6. - La diffusion d\'un Programme (ou de tout travail derive) suppose l\'envoi - simultane d\'une licence autorisant la copie, la distribution ou la - modification du Programme, aux termes et conditions de la Licence. Vous - n\'avez pas le droit d\'imposer de restrictions supplementaires aux - droits transmis au destinataire. Vous n\'etes pas responsable du respect - de la Licence par un tiers. - ----------------------------------------------------------------------- - * Article 7. - Si, a la suite d\'une decision de Justice, d\'une plainte en contrefacon - ou pour toute autre raison (liee ou non a la contrefacon), des - conditions Vous sont imposees (que ce soit par ordonnance, accord - amiable ou autre) qui se revelent incompatibles avec les termes de la - presente Licence, Vous n\'etes pas pour autant degage des obligations - liees a celle-ci : si Vous ne pouvez concilier vos obligations legales - ou autres avec les conditions de cette Licence, Vous ne devez pas - distribuer le Programme. - Si une partie quelconque de cet article est invalidee ou inapplicable - pour quelque raison que ce soit, le reste de l\'article continue de - s\'appliquer et l\'integralite de l\'article s\'appliquera en toute autre - circonstance. - Le present article n\'a pas pour but de Vous pousser a enfreindre des - droits ou des dispositions legales ni en contester la validite ; son - seul objectif est de proteger l\'integrite du systeme de distribution du - Logiciel Libre. De nombreuses personnes ont genereusement contribue a - la large gamme de Programmes distribuee de cette facon en toute - confiance ; il appartient a chaque auteur/donateur de decider de - diffuser ses Programmes selon les criteres de son choix. - ----------------------------------------------------------------------- - * Article 8. - Si la distribution et/ou l\'utilisation du Programme est limitee dans - certains pays par des brevets ou des droits sur des interfaces, le - detenteur original des droits qui place le Programme sous la Licence - Publique Generale peut ajouter explicitement une clause de limitation - geographique excluant ces pays. Dans ce cas, cette clause devient une - partie integrante de la Licence. - ----------------------------------------------------------------------- - * Article 9. - La Free Software Foundation se reserve le droit de publier - periodiquement des mises a jour ou de nouvelles versions de la Licence. - Redigees dans le meme esprit que la presente version, elles seront - cependant susceptibles d\'en modifier certains details a mesure que de - nouveaux problemes se font jour. - Chaque version possede un numero distinct. Si le Programme precise un - numero de version de cette Licence et toute version ulterieure , - Vous avez le choix de suivre les termes et conditions de cette version - ou de toute autre version plus recente publiee par la Free Software - Foundation. Si le Programme ne specifie aucun numero de version, Vous - pouvez alors choisir l\'une quelconque des versions publiees par la Free - Software Foundation. - ----------------------------------------------------------------------- - * Article 10. - Si Vous desirez incorporer des elements du Programme dans d\'autres - Programmes libres dont les conditions de distribution different, Vous - devez ecrire a l\'auteur pour lui en demander la permission. Pour ce qui - est des Programmes directement deposes par la Free Software Foundation, - ecrivez-nous : une exception est toujours envisageable. Notre decision - sera basee sur notre volonte de preserver la liberte de notre Programme - ou de ses derives et celle de promouvoir le partage et la reutilisation - du logiciel en general. - LIMITATION DE GARANTIE - ----------------------------------------------------------------------- - * Article 11. - Parce que l\'utilisation de ce Programme est libre et gratuite, aucune - garantie n\'est fournie, comme le permet la loi. Sauf mention ecrite, - les detenteurs du copyright et/ou les tiers fournissent le Programme en - l\'etat, sans aucune sorte de garantie explicite ou implicite, y compris - les garanties de commercialisation ou d\'adaptation dans un but - particulier. Vous assumez tous les risques quant a la qualite et aux - effets du Programme. Si le Programme est defectueux, Vous assumez le - cout de tous les services, corrections ou reparations necessaires. - ----------------------------------------------------------------------- - * Article 12. - Sauf lorsqu\'explicitement prevu par la Loi ou accepte par ecrit, ni le - detenteur des droits, ni quiconque autorise a modifier et/ou - redistribuer le Programme comme il est permis ci-dessus ne pourra etre - tenu pour responsable de tout dommage direct, indirect, secondaire ou - accessoire (pertes financieres dues au manque a gagner, a - l\'interruption d\'activites ou a la perte de donnees, etc., decoulant de - l\'utilisation du Programme ou de l\'impossibilite d\'utiliser celui-ci). +Article 0 +La présente Licence s'applique à tout Programme (ou autre travail) où figure une note, placée par le détenteur des droits, stipulant que ledit Programme ou travail peut être distribué selon les termes de la présente Licence. Le terme Programme désigne aussi bien le Programme lui-même que tout travail qui en est dérivé selon la loi, c'est-à-dire tout ouvrage reproduisant le Programme ou une partie de celui-ci, à l'identique ou bien modifié, et/ou traduit dans une autre langue (la traduction est considérée comme une modification). Chaque personne concernée par la Licence Publique Générale sera désignée par le terme Vous. +Les activités autres que copie, distribution et modification ne sont pas couvertes par la présente Licence et sortent de son cadre. Rien ne restreint l'utilisation du Programme et les données issues de celui-ci ne sont couvertes que si leur contenu constitue un travail basé sur le logiciel (indépendemment du fait d'avoir été réalisé en lançant le Programme). Tout dépend de ce que le Programme est censé produire. + + + +-------------------------------------------------------------------------------- + +Article 1. +Vous pouvez copier et distribuer des copies conformes du code source du Programme, tel que Vous l'avez reçu, sur n'importe quel support, à condition de placer sur chaque copie un copyright approprié et une restriction de garantie, de ne pas modifier ou omettre toutes les stipulations se référant à la présente Licence et à la limitation de garantie, et de fournir avec toute copie du Programme un exemplaire de la Licence. +Vous pouvez demander une rétribution financière pour la réalisation de la copie et demeurez libre de proposer une garantie assurée par vos soins, moyennant finances. + + + +-------------------------------------------------------------------------------- + +Article 2. +Vous pouvez modifier votre copie ou vos copies du Programme ou partie de celui-ci, ou d'un travail basé sur ce Programme, et copier et distribuer ces modifications selon les termes de l'article 1, à condition de Vous conformer également aux conditions suivantes : +a) Ajouter aux fichiers modifiés l'indication très claire des modifications effectuées, ainsi que la date de chaque changement. +b) Distribuer sous les termes de la Licence Publique Générale l'ensemble de toute réalisation contenant tout ou partie du Programme, avec ou sans modifications. +c) Si le Programme modifié lit des commandes de manière interactive lors de son exécution, faire en sorte qu'il affiche, lors d'une invocation ordinaire, le copyright approprié en indiquant clairement la limitation de garantie (ou la garantie que Vous Vous engagez à fournir Vous-même), qu'il stipule que tout utilisateur peut librement redistribuer le Programme selon les conditions de la Licence Publique Générale GNU, et qu'il montre à tout utilisateur comment lire une copie de celle-ci (exception : si le Programme original est interactif mais n'affiche pas un tel message en temps normal, tout travail dérivé de ce Programme ne sera pas non plus contraint de l'afficher). +Toutes ces conditions s'appliquent à l'ensemble des modifications. Si des éléments identifiables de ce travail ne sont pas dérivés du Programme et peuvent être raisonnablement considérés comme indépendants, la présente Licence ne s'applique pas à ces éléments lorsque Vous les distribuez seuls. Mais, si Vous distribuez ces mêmes éléments comme partie d'un ensemble cohérent dont le reste est basé sur un Programme soumis à la Licence, ils lui sont également soumis, et la Licence s'étend ainsi à l'ensemble du produit, quel qu'en soit l'auteur. + +Cet article n'a pas pour but de s'approprier ou de contester vos droits sur un travail entièrement réalisé par Vous, mais plutôt d'ouvrir droit à un contrôle de la libre distribution de tout travail dérivé ou collectif basé sur le Programme. + +En outre, toute fusion d'un autre travail, non basé sur le Programme, avec le Programme (ou avec un travail dérivé de ce dernier), effectuée sur un support de stockage ou de distribution, ne fait pas tomber cet autre travail sous le contrôle de la Licence. + + + +-------------------------------------------------------------------------------- + +Article 3. +Vous pouvez copier et distribuer le Programme (ou tout travail dérivé selon les conditions énoncées dans l'article 1) sous forme de code objet ou exécutable, selon les termes des articles 0 et 1, à condition de respecter l'une des clauses suivantes : +a) Fournir le code source complet du Programme, sous une forme lisible par un ordinateur et selon les termes des articles 0 et 1, sur un support habituellement utilisé pour l'échange de données ; ou, +b) Faire une offre écrite, valable pendant au moins trois ans, prévoyant de donner à tout tiers qui en fera la demande une copie, sous forme lisible par un ordinateur, du code source correspondant, pour un tarif n'excédant pas le coût de la copie, selon les termes des articles 0 et 1, sur un support couramment utilisé pour l'échange de données informatiques ; ou, +c) Informer le destinataire de l'endroit où le code source peut être obtenu (cette solution n'est recevable que dans le cas d'une distribution non commerciale, et uniquement si Vous avez reçu le Programme sous forme de code objet ou exécutable avec l'offre prévue à l'alinéa b ci-dessus). +Le code source d'un travail désigne la forme de cet ouvrage sous laquelle les modifications sont les plus aisées. Sont ainsi désignés la totalité du code source de tous les modules composant un Programme exécutable, de même que tout fichier de définition associé, ainsi que les scripts utilisés pour effectuer la compilation et l'installation du Programme exécutable. Toutefois, l'environnement standard de développement du système d'exploitation mis en oeuvre (source ou binaire) -- compilateurs, bibliothèques, noyau, etc. -- constitue une exception, sauf si ces éléments sont diffusés en même temps que le Programme exécutable. + +Si la distribution de l'exécutable ou du code objet consiste à offrir un accès permettant de copier le Programme depuis un endroit particulier, l'offre d'un accès équivalent pour se procurer le code source au même endroit est considéré comme une distribution de ce code source, même si l'utilisateur choisit de ne pas profiter de cette offre. + + + +-------------------------------------------------------------------------------- + +Article 4. +Vous ne pouvez pas copier, modifier, céder, déposer ou distribuer le Programme d'une autre manière que l'autorise la Licence Publique Générale. Toute tentative de ce type annule immédiatement vos droits d'utilisation du Programme sous cette Licence. Toutefois, les tiers ayant reçu de Vous des copies du Programme ou le droit d'utiliser ces copies continueront à bénéficier de leur droit d'utilisation tant qu'ils respecteront pleinement les conditions de la Licence. + + +-------------------------------------------------------------------------------- + +Article 5. +Ne l'ayant pas signée, Vous n'êtes pas obligé d'accepter cette Licence. Cependant, rien d'autre ne Vous autorise à modifier ou distribuer le Programme ou quelque travaux dérivés : la loi l'interdit tant que Vous n'acceptez pas les termes de cette Licence. En conséquence, en modifiant ou en distribuant le Programme (ou tout travail basé sur lui), Vous acceptez implicitement tous les termes et conditions de cette Licence. + + +-------------------------------------------------------------------------------- + +Article 6. +La diffusion d'un Programme (ou de tout travail dérivé) suppose l'envoi simultané d'une licence autorisant la copie, la distribution ou la modification du Programme, aux termes et conditions de la Licence. Vous n'avez pas le droit d'imposer de restrictions supplémentaires aux droits transmis au destinataire. Vous n'êtes pas responsable du respect de la Licence par un tiers. + + +-------------------------------------------------------------------------------- + +Article 7. +Si, à la suite d'une décision de Justice, d'une plainte en contrefaçon ou pour toute autre raison (liée ou non à la contrefaçon), des conditions Vous sont imposées (que ce soit par ordonnance, accord amiable ou autre) qui se révèlent incompatibles avec les termes de la présente Licence, Vous n'êtes pas pour autant dégagé des obligations liées à celle-ci : si Vous ne pouvez concilier vos obligations légales ou autres avec les conditions de cette Licence, Vous ne devez pas distribuer le Programme. +Si une partie quelconque de cet article est invalidée ou inapplicable pour quelque raison que ce soit, le reste de l'article continue de s'appliquer et l'intégralité de l'article s'appliquera en toute autre circonstance. + +Le présent article n'a pas pour but de Vous pousser à enfreindre des droits ou des dispositions légales ni en contester la validité ; son seul objectif est de protéger l'intégrité du système de distribution du Logiciel Libre. De nombreuses personnes ont généreusement contribué à la large gamme de Programmes distribuée de cette façon en toute confiance ; il appartient à chaque auteur/donateur de décider de diffuser ses Programmes selon les critères de son choix. + + + +-------------------------------------------------------------------------------- + +Article 8. +Si la distribution et/ou l'utilisation du Programme est limitée dans certains pays par des brevets ou des droits sur des interfaces, le détenteur original des droits qui place le Programme sous la Licence Publique Générale peut ajouter explicitement une clause de limitation géographique excluant ces pays. Dans ce cas, cette clause devient une partie intégrante de la Licence. + + +-------------------------------------------------------------------------------- + +Article 9. +La Free Software Foundation se réserve le droit de publier périodiquement des mises à jour ou de nouvelles versions de la Licence. Rédigées dans le même esprit que la présente version, elles seront cependant susceptibles d'en modifier certains détails à mesure que de nouveaux problèmes se font jour. +Chaque version possède un numéro distinct. Si le Programme précise un numéro de version de cette Licence et « toute version ultérieure », Vous avez le choix de suivre les termes et conditions de cette version ou de toute autre version plus récente publiée par la Free Software Foundation. Si le Programme ne spécifie aucun numéro de version, Vous pouvez alors choisir l'une quelconque des versions publiées par la Free Software Foundation. + + + +-------------------------------------------------------------------------------- + +Article 10. +Si Vous désirez incorporer des éléments du Programme dans d'autres Programmes libres dont les conditions de distribution diffèrent, Vous devez écrire à l'auteur pour lui en demander la permission. Pour ce qui est des Programmes directement déposés par la Free Software Foundation, écrivez-nous : une exception est toujours envisageable. Notre décision sera basée sur notre volonté de préserver la liberté de notre Programme ou de ses dérivés et celle de promouvoir le partage et la réutilisation du logiciel en général. + +LIMITATION DE GARANTIE + +-------------------------------------------------------------------------------- + +Article 11. +Parce que l'utilisation de ce Programme est libre et gratuite, aucune garantie n'est fournie, comme le permet la loi. Sauf mention écrite, les détenteurs du copyright et/ou les tiers fournissent le Programme en l'état, sans aucune sorte de garantie explicite ou implicite, y compris les garanties de commercialisation ou d'adaptation dans un but particulier. Vous assumez tous les risques quant à la qualité et aux effets du Programme. Si le Programme est défectueux, Vous assumez le coût de tous les services, corrections ou réparations nécessaires. + + +-------------------------------------------------------------------------------- + +Article 12. +Sauf lorsqu'explicitement prévu par la Loi ou accepté par écrit, ni le détenteur des droits, ni quiconque autorisé à modifier et/ou redistribuer le Programme comme il est permis ci-dessus ne pourra être tenu pour responsable de tout dommage direct, indirect, secondaire ou accessoire (pertes financières dues au manque à gagner, à l'interruption d'activités ou à la perte de données, etc., découlant de l'utilisation du Programme ou de l'impossibilité d'utiliser celui-ci). + + +-------------------------------------------------------------------------------- + +FIN DES TERMES ET CONDITIONS @@ -283,79 +160,79 @@ modification EndOfLicense; - $lang->install_condition_title = "Vrifiez les condition requises pour l\'installation, SVP."; + $lang->install_condition_title = "Vérifiez les conditions obligatoires pour l'installation, SVP."; $lang->install_checklist_title = array( 'php_version' => 'Version de PHP', 'permission' => 'Autorisation', - 'xml' => 'Bibliothque de XML', - 'iconv' => 'Bibliothque de ICONV', - 'gd' => 'Bibliothque de GD', + 'xml' => 'Bibliothèque de XML', + 'iconv' => 'Bibliothèque de ICONV', + 'gd' => 'Bibliothèque de GD', 'session' => 'Configuration de Session.auto_start', ); $lang->install_checklist_desc = array( - 'php_version' => '[Required] If PHP version is 5.2.2, zeroboard will not be installed because of bug', - 'permission' => '[Required] Zeroboard installation path or ./files directory\'s permission must be 707', - 'xml' => '[Required] XML Library is needed for XML communication', - 'session' => '[Required] PHP setting file\'s (php.ini) \'Session.auto_start\' must equal to zero in order for zeroboard to use the session', - 'iconv' => 'Iconv should be installed in order to convert UTF-8 and other language set', - 'gd' => 'GD Library should be installed in order to use image convert function', + 'php_version' => '[Obligatoire] Si la version de PHP est 5.2.2, zeroboard ne sera pas installé à cause du bogue', + 'permission' => '[Obligatoire] Chemin de l\' installation de Zeroboard ou la permission de répertoire de ./files doit être 707', + 'xml' => '[Obligatoire] La bibliothèque de XML est nécessaire pour la communication de XML', + 'session' => '[Obligatoire] \'Session.auto_start\' dans la fichier de configuration pour PHP (php.ini) doit être égal à zéro car zeroboard utilise la session', + 'iconv' => 'Iconv doit être installé afin de convertir UTF-8 et des autres assortiments des langues', + 'gd' => 'La bibliothèque de GD doit être installé afin d\'utiliser la fonction à convertir des images', ); - $lang->install_checklist_xml = 'Install XML Library'; - $lang->install_without_xml = 'XML Library is not installed'; - $lang->install_checklist_gd = 'Install GD Library'; - $lang->install_without_gd = 'GD Library is not installed for image convertion'; - $lang->install_checklist_gd = 'Intall GD Library'; - $lang->install_without_iconv = 'Iconv Library is not installed for processing characters'; - $lang->install_session_auto_start = 'Possible problems might occur due to the php setting. session.auto_start is equal to 1'; - $lang->install_permission_denied = 'Installation path\'s permission doesn\'t equal to 707'; + $lang->install_checklist_xml = 'Installation la bibliothèque de XML'; + $lang->install_without_xml = 'La bibliothèque de XML n\'est pas installée'; + $lang->install_checklist_gd = 'Installation la bibliothèque de GD'; + $lang->install_without_gd = 'La bibliothèque de GD pour convertir des images n\'est pas installée'; + $lang->install_checklist_iconv = 'Installation la bibliothèque de Iconv'; + $lang->install_without_iconv = 'La bibliothèque d\'Iconv pour traiter les caractères n\'est pas installée'; + $lang->install_session_auto_start = 'Des problèmes possibles peuvent avoir lieu car session.auto_start est égale à 1 dans le la configuration de PHP'; + $lang->install_permission_denied = 'La permission du chemin d\'installation n\'est pas égale à 707'; - $lang->cmd_agree_license = 'I agree with the license'; - $lang->cmd_install_fix_checklist = 'I have fixed the required conditions.'; - $lang->cmd_install_next = 'Continue installation'; + $lang->cmd_agree_license = 'Je suis d\'accord avec la license'; + $lang->cmd_install_fix_checklist = 'J\'ai corrigé les conditions obligatoires.'; + $lang->cmd_install_next = 'Continuer à installer'; $lang->db_desc = array( - 'mysql' => 'Using mysql*() function to use mysql DB.
    Transaction is disabled because DB file is created by myisam.', - 'mysql_innodb' => 'Using innodb to use mysql DB.
    Transaction is enabled for innodb', - 'sqlite2' => 'Supporting sqlite2 which saves the data into the file.
    When installing, DB file should be created at unreachable place from web.
    (Never got tested on stabilization)', - 'sqlite3_pdo' => 'Suppots sqlite3 by PHP\'s PDO.
    When installing, DB file should be created at unreachable place from web.', - 'cubrid' => 'Use CUBRID DB.', - 'postgresql' => 'Use PostgreSql DB.', + 'mysql' => 'Utilisera mysql*() function pour utiliser mysql DB.
    La transaction sera invalidé parce que le fichier de DB est créé par myisam.', + 'mysql_innodb' => 'Utilisera innodb pour utiliser mysql DB.
    La transaction sera validé pour innodb', + 'sqlite2' => 'Surpporter sqlite2 qui conserve les données dans les fichiers.
    Quand vous installez, vous devez créer le fichier de DB dans une place que l\'on ne peut pas accéder par web.
    (Jamais testé sur stabilization)', + 'sqlite3_pdo' => 'Supporter sqlite3 PDO de PHP.
    Quand vous installez, vous devez cr?r le fichier de DB dans une place que l\'on ne peut pas accéder par web.', + 'cubrid' => 'Utiliser CUBRID DB.', + 'postgresql' => 'Utiliser PostgreSql DB.', ); - $lang->form_title = 'Please input DB & Admin information'; - $lang->db_title = 'Please input DB information'; - $lang->db_type = 'DB Type'; - $lang->select_db_type = 'Please select the DB you want to use.'; - $lang->db_hostname = 'DB Hostname'; - $lang->db_port = 'DB Port'; - $lang->db_userid = 'DB ID'; - $lang->db_password = 'DB Password'; - $lang->db_database = 'DB Database'; - $lang->db_database_file = 'DB Database file'; - $lang->db_table_prefix = 'Table header'; + $lang->form_title = 'Entrer des informations de DB(Base de données) et Administrateur'; + $lang->db_title = 'Entrez l\'information de DB, SVP.'; + $lang->db_type = 'Type de DB'; + $lang->select_db_type = 'Choisissez la DB que vous voulez utiliser.'; + $lang->db_hostname = 'Hostname(Nom de l\'ordinateur central) de DB (LOCALHOST généralement)'; + $lang->db_port = 'Port de DB'; + $lang->db_userid = 'ID(compte) pour le DB'; + $lang->db_password = 'Mot de passe pour le DB'; + $lang->db_database = 'Nom de DB'; + $lang->db_database_file = 'Fichier de DB'; + $lang->db_table_prefix = 'En-tête de la table'; - $lang->admin_title = 'Administrator Info'; + $lang->admin_title = 'Informations d\'Administrateur'; $lang->env_title = 'Configuration'; - $lang->use_optimizer = 'Enable Optimizer'; - $lang->about_optimizer = 'If optimizer is enabled, users can quickly access to this site, since multiple CSS / JS files are put together and compressed before transmission.
    Nevertheless, this optimization might be problematic according to CSS or JS. If you disable it, it would work properly though it would work slower.'; - $lang->use_rewrite = 'Use rewrite mod'; - $lang->about_rewrite = "If web server provides rewrite mod, long URL such as http://blah/?document_srl=123 can be shortened like http://blah/123"; - $lang->time_zone = 'Time zone'; - $lang->about_time_zone = "If the server time and the time on your location don't accord each other, you can set the time as same as your location by using time zone "; + $lang->use_optimizer = 'Valider Optimiseur'; + $lang->about_optimizer = 'Si l\' optimiseur est validé, utilisateur peut accéder rapidement ce site parce que plusieurs fichiers de CSS / JS sont reliés ensemble et comprimés avant transmission.
    Néanmoins, cette optimisation peut arriver problématique selong CSS ou JS. Si vous l\'invalider, ça marchera correctement pourtant il marchera plus lentement.'; + $lang->use_rewrite = 'Utiliser mode de récrire(rewrite mod)'; + $lang->about_rewrite = "Si le serveur de web est capable d'utiliser le mode de récrire, URL longue comme http://blah/?document_srl=123 peut être abrégé comme http://blah/123"; + $lang->time_zone = 'Fuseau horaire'; + $lang->about_time_zone = "Si l'heure de serveur et celle de votre emplacement ne s'accordent pas, vous pouvez remettre l'heure comme le même heure de votre lieu en configurant le fuseau horaire "; - $lang->about_database_file = 'Sqlite saves data in the file. Location of the database file should be unreachable by web
    Data file should be inside the permission of 707.'; + $lang->about_database_file = 'Sqlite conserve des données dans le fichier. Vous devez placer le fichier de la base de données où l\'on ne peut pas accéder par web.
    Le fichier des Donées doit être en dedans la permission 707.'; - $lang->success_installed = 'Installation has been completed'; - $lang->success_updated = 'Update has been completed'; + $lang->success_installed = 'Installation s\'est complété'; + $lang->success_updated = 'Mise à Jour s\'est complété'; - $lang->msg_cannot_proc = 'Installation environment is not proper to proceed.'; - $lang->msg_already_installed = 'Zeroboard is already installed'; - $lang->msg_dbconnect_failed = "Error has occurred while connecting DB.\nPlease check DB information again"; - $lang->msg_table_is_exists = "Table is already created in the DB.\nConfig file is recreated"; - $lang->msg_install_completed = "Installation has been completed.\nThank you for choosing Zeroboard XE"; - $lang->msg_install_failed = "An error has occurred while creating installation file."; + $lang->msg_cannot_proc = 'Environnement d\'Installation n\'est pas propre à procéder.'; + $lang->msg_already_installed = 'Zeroboard est déjà installé'; + $lang->msg_dbconnect_failed = "Erreur a lieu en essayant connecter DB.\nVérifiez encore une fois les informations sur DB, SVP."; + $lang->msg_table_is_exists = "La Table est déjà créée dans le DB.\nLe fichier de Configuration est recréé."; + $lang->msg_install_completed = "Installation a complété.\nMerci pour choisir Zeroboard XE"; + $lang->msg_install_failed = "Une erreur a lieu en créant le fichier d\'installation."; ?> diff --git a/modules/install/tpl/filter/cubrid.xml b/modules/install/tpl/filter/cubrid.xml index 68bd9a7f3..2ce3a6dab 100644 --- a/modules/install/tpl/filter/cubrid.xml +++ b/modules/install/tpl/filter/cubrid.xml @@ -7,7 +7,7 @@ - + diff --git a/modules/install/tpl/filter/mysql.xml b/modules/install/tpl/filter/mysql.xml index 68bd9a7f3..2ce3a6dab 100644 --- a/modules/install/tpl/filter/mysql.xml +++ b/modules/install/tpl/filter/mysql.xml @@ -7,7 +7,7 @@ - + diff --git a/modules/install/tpl/filter/postgresql.xml b/modules/install/tpl/filter/postgresql.xml index b768e65e0..5df9f3aca 100644 --- a/modules/install/tpl/filter/postgresql.xml +++ b/modules/install/tpl/filter/postgresql.xml @@ -6,7 +6,7 @@ - + diff --git a/modules/install/tpl/filter/sqlite2.xml b/modules/install/tpl/filter/sqlite2.xml index 616994ff0..df39ac33d 100644 --- a/modules/install/tpl/filter/sqlite2.xml +++ b/modules/install/tpl/filter/sqlite2.xml @@ -3,7 +3,7 @@ - + diff --git a/modules/install/tpl/introduce.html b/modules/install/tpl/introduce.html index 2769fb563..c39132d9d 100644 --- a/modules/install/tpl/introduce.html +++ b/modules/install/tpl/introduce.html @@ -6,7 +6,6 @@
    Select language : + + + + + + {$lang->after_login_url} @@ -139,5 +149,5 @@ diff --git a/modules/member/tpl/member_list.html b/modules/member/tpl/member_list.html index 54dc44d06..17b7a5c7f 100644 --- a/modules/member/tpl/member_list.html +++ b/modules/member/tpl/member_list.html @@ -7,91 +7,89 @@ ------++++-+---+------++++------++++------++++------++++ - + - + + + + + + {@ $val->group_list = implode(', ', $val->group_list)} - + + + + + + - diff --git a/modules/menu/lang/jp.lang.php b/modules/menu/lang/jp.lang.php index dd8c69c86..ace4fb13d 100644 --- a/modules/menu/lang/jp.lang.php +++ b/modules/menu/lang/jp.lang.php @@ -1,7 +1,7 @@ 翻訳:RisaPapa + * @author zero 翻訳:RisaPapa、liahona * @brief メニュー(menu)モジュールの基本言語パッケージ **/ @@ -49,5 +49,5 @@ $lang->about_menu = "メニューモジュルは、生成されたモジュールを、便利なメニュー管理機能で、整理したりレイアウトをリンクしたりして煩わしい作業なしでサイトを構築できるようにします。メニューは、サイトを管理するというより、モジュールとレイアウトをリンクして様々なメニューを表示させる情報のみ保持します。"; - $lang->alert_image_only = "이미지 파일만 등록가능합니다."; + $lang->alert_image_only = "イメージ(画像)ファイルのみ登録できます。"; ?> diff --git a/modules/menu/lang/zh-CN.lang.php b/modules/menu/lang/zh-CN.lang.php index 9fe9e51a2..8ac54f3cf 100644 --- a/modules/menu/lang/zh-CN.lang.php +++ b/modules/menu/lang/zh-CN.lang.php @@ -49,5 +49,5 @@ $lang->about_menu = "菜单模块可以通过菜单管理器整理已生成的模块并同布局相连接来轻松建设一个完整的网站。\n菜单模块虽然具有连接模块和布局并通过布局来显示多种形态菜单的信息,但它不具备管理网站的功能。"; - $lang->alert_image_only = "이미지 파일만 등록가능합니다."; + $lang->alert_image_only = "只允许图形文件。"; ?> diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index 8ebba16dd..0d928b989 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -397,8 +397,11 @@ $name_str = sprintf('$_names = array(%s); print $_names[$_SESSION["lang_type"]];', $name_arr_str); $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); - if(preg_match('/^([0-9a-zA-Z\_\-]+)$/', $node->url)) $href = getUrl('','mid',$node->url); - else $href = $url; + if(preg_match('/^([0-9a-zA-Z\_\-]+)$/', $node->url)) { + $href = getUrl('','mid',$node->url); + $pos = strpos($href, $_SERVER['HTTP_HOST']); + if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); + } else $href = $url; $open_window = $node->open_window; $expand = $node->expand; @@ -487,8 +490,11 @@ // 변수 정리 $href = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->href); $url = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->url); - if(preg_match('/^([0-9a-zA-Z\_\-]+)$/i', $node->url)) $href = getUrl('','mid',$node->url); - else $href = $url; + if(preg_match('/^([0-9a-zA-Z\_\-]+)$/i', $node->url)) { + $href = getUrl('','mid',$node->url); + $pos = strpos($href, $_SERVER['HTTP_HOST']); + if($pos !== false) $href = substr($href, $pos+strlen($_SERVER['HTTP_HOST'])); + } else $href = $url; $open_window = $node->open_window; $normal_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->normal_btn); $hover_btn = str_replace(array('&','"','<','>'),array('&','"','<','>'),$node->hover_btn); diff --git a/modules/module/lang/en.lang.php b/modules/module/lang/en.lang.php index dd5d48669..578267cd0 100644 --- a/modules/module/lang/en.lang.php +++ b/modules/module/lang/en.lang.php @@ -25,7 +25,7 @@ $lang->module_copy = "Duplicate Module"; $lang->header_script = "Header Script"; - $lang->about_header_script = "You can input the htmp script between <header> and </header> by yourself.
    You can use <script, <style or <meta tags"; + $lang->about_header_script = "You can input the html script between <header> and </header> by yourself.
    You can use <script, <style or <meta tag"; $lang->cmd_add_shortcut = "Add Shortcut"; $lang->cmd_install = "Install"; diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index 709bd2f53..ec36adb99 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -1,7 +1,7 @@ skin_maker_homepage = '作者ホームページ'; $lang->module_copy = "モジュールコピー"; - $lang->header_script = "헤더 스크립트"; - $lang->about_header_script = "html의 <header>와 </header> 사이에 들어가는 코드를 직접 입력할 수 있습니다.
    <script, <style 또는 <meta 태그등을 이용하실 수 있습니다"; + $lang->header_script = "ヘッダースクリプト"; + $lang->about_header_script = "HTMLの<header>と</header>の間に入れるコードを直接入力できます。
    <script、<styleまたは<metaタグなどが利用できます"; $lang->cmd_add_shortcut = "ショットカット追加"; $lang->cmd_install = "インストール"; diff --git a/modules/module/lang/zh-CN.lang.php b/modules/module/lang/zh-CN.lang.php index f7fec1e48..e2c46dea7 100644 --- a/modules/module/lang/zh-CN.lang.php +++ b/modules/module/lang/zh-CN.lang.php @@ -24,8 +24,8 @@ $lang->skin_maker_homepage = '作者主页'; $lang->module_copy = "Copy Module"; - $lang->header_script = "헤더 스크립트"; - $lang->about_header_script = "html의 <header>와 </header> 사이에 들어가는 코드를 직접 입력할 수 있습니다.
    <script, <style 또는 <meta 태그등을 이용하실 수 있습니다"; + $lang->header_script = "文件头部脚本"; + $lang->about_header_script = "可以直接输入插入到html中<head>区的代码。
    可使用<script, <style 或 <meta 等标签。"; $lang->cmd_add_shortcut = "添加到快捷菜单"; $lang->cmd_install = "安装"; @@ -55,9 +55,9 @@ $lang->about_skin = '可以选择模块皮肤。'; $lang->about_use_category = '选择此项可以使用分类功能。'; $lang->about_list_count = '可以指定每页显示的主题数。(默认为20个)'; - $lang->about_search_list_count = '검색 또는 카테고리 선택등을 할 경우 표시될 글의 수를 지정하실 수 있습니다. 기본(20개)'; - $lang->about_page_count = '可以指定显示在目录下方的页面数。 (默认为10个)'; - $lang->about_admin_id = '可以对该模块指定最高管理权限。
    有多名管理员时,可以用,(逗号)来分隔。 (不能访问管理页面)'; + $lang->about_search_list_count = '可以指定搜索或选择分类时每页要显示的帖子数(默认为20个)。'; + $lang->about_page_count = '可以指定显示在目录下方的页面数(默认为10个)。 '; + $lang->about_admin_id = '可以对该模块指定最高管理权限。
    有多名管理员时,可以用,(逗号)来分隔(不能访问管理页面)。 '; $lang->about_grant = '全部解除特定权限的对象时,没有登录的会员也将具有相关权限。'; $lang->about_module = "除基本library以外Zeroboard XE全部由模块组成。\n模块管理中列出所有已安装的模块,因此易于管理。\n常用模块可以通过『添加到快捷菜单』来方便管理。"; diff --git a/modules/module/queries/updateModule.xml b/modules/module/queries/updateModule.xml index a9c18747b..062deb48c 100644 --- a/modules/module/queries/updateModule.xml +++ b/modules/module/queries/updateModule.xml @@ -3,18 +3,17 @@
    {$lang->no}{$lang->no} {$lang->user_id} {$lang->user_name} {$lang->nick_name} {$lang->signup_date}{$lang->last_login}
    {$lang->cmd_delete}{$lang->group}{$lang->homepage}, {$lang->blog}{$lang->last_login}
    {$no}{$no} {htmlspecialchars($val->user_id)} - {$lang->denied} -
    {$lang->limit_date} : {zdate($val->limit_date,'Y.m.d')}
    {htmlspecialchars($val->user_name)}
    {htmlspecialchars($val->nick_name)}
    {zdate($val->regdate,"Y-m-d")}
    {$lang->cmd_delete}{$lang->is_admin}{$val->group_list} + {$lang->homepage} + {$lang->blog}   + {zdate($val->last_login,"Y-m-d H:i:s")}{$lang->cmd_delete} 
    - - + + + + - - - - + diff --git a/modules/point/lang/en.lang.php b/modules/point/lang/en.lang.php index 1c4c9223a..77c320830 100644 --- a/modules/point/lang/en.lang.php +++ b/modules/point/lang/en.lang.php @@ -31,8 +31,8 @@ $lang->cmd_exp_calc = 'Calculate'; $lang->cmd_exp_reset = 'Reset'; - $lang->cmd_point_recal = 'Recalculate Point'; - $lang->about_cmd_point_recal = "This will check articles/comments/attached files and reset all members' point to preset point."; + $lang->cmd_point_recal = '포인트 초기화'; + $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = 'Group Change by Level'; $lang->about_point_link_group = 'If you specify level for a specific group, users are assigned into the group when they adavnce to the level by getting points. When new group is assigned, the user is removed from the former assigned group.'; diff --git a/modules/point/lang/es.lang.php b/modules/point/lang/es.lang.php index d4b48381b..f0b9c7978 100644 --- a/modules/point/lang/es.lang.php +++ b/modules/point/lang/es.lang.php @@ -31,8 +31,8 @@ $lang->cmd_exp_calc = 'Calcular'; $lang->cmd_exp_reset = 'Restablecer'; - $lang->cmd_point_recal = 'Punto Recalcular'; - $lang->about_cmd_point_recal = 'Que se encargará de chequear los artículos / comentarios / archivos adjuntos y restablecer todos los miembros punto a punto preestablecido.'; + $lang->cmd_point_recal = '포인트 초기화'; + $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = 'Grupo de cambio de nivel'; $lang->about_point_link_group = 'Si especifica nivel para un grupo específico, a los usuarios se les asigna en el grupo cuando se adavnce al nivel por conseguir puntos. Al nuevo grupo se le asigna, el usuario se retira del ex grupo asignado.'; diff --git a/modules/point/lang/jp.lang.php b/modules/point/lang/jp.lang.php index 0e1b706f6..b16ba2c92 100644 --- a/modules/point/lang/jp.lang.php +++ b/modules/point/lang/jp.lang.php @@ -31,8 +31,8 @@ $lang->cmd_exp_calc = '計算'; $lang->cmd_exp_reset = '初期化'; - $lang->cmd_point_recal = 'ポイント再計算'; - $lang->about_cmd_point_recal = '掲示物/コメント/添付ファイル全てを調べ、ポイント設定に合わせて、全会員のポイントを再計算します。'; + $lang->cmd_point_recal = '포인트 초기화'; + $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = 'グループ連動'; $lang->about_point_link_group = 'グループにレベルを指定すると、該当レベルになったらグループが変更されます。 ただし、新しいグループに変更されると以前自動登録されたグループは消去されます。'; diff --git a/modules/point/lang/ko.lang.php b/modules/point/lang/ko.lang.php index d6652b705..c3c4d1785 100644 --- a/modules/point/lang/ko.lang.php +++ b/modules/point/lang/ko.lang.php @@ -31,8 +31,8 @@ $lang->cmd_exp_calc = '계산'; $lang->cmd_exp_reset = '초기화'; - $lang->cmd_point_recal = '포인트 재계산'; - $lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다'; + $lang->cmd_point_recal = '포인트 초기화'; + $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = '그룹 연동'; $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.'; diff --git a/modules/point/lang/ru.lang.php b/modules/point/lang/ru.lang.php index 2aa29b647..ad5e92199 100644 --- a/modules/point/lang/ru.lang.php +++ b/modules/point/lang/ru.lang.php @@ -31,8 +31,8 @@ $lang->cmd_exp_calc = '계산'; $lang->cmd_exp_reset = '초기화'; - $lang->cmd_point_recal = '포인트 재계산'; - $lang->about_cmd_point_recal = '게시글/댓글/첨부파일등을 모두 검사하여 설정된 포인트 설정에 맞게 모든 회원들의 포인트를 재계산합니다'; + $lang->cmd_point_recal = '포인트 초기화'; + $lang->about_cmd_point_recal = '게시글/댓글/첨부파일/회원가입 점수만 이용하여 모든 포인트 점수를 초기화 합니다.
    회원 가입 점수는 초기화 후 해당 회원이 활동을 하면 부여되고 그 전에는 부여되지 않습니다.
    데이터 이전등을 하여 포인트를 완전히 초기화 해야 할 경우에만 사용하세요.'; $lang->point_link_group = '그룹 연동'; $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.'; diff --git a/modules/point/lang/zh-CN.lang.php b/modules/point/lang/zh-CN.lang.php index e2793768c..f7d51e4de 100644 --- a/modules/point/lang/zh-CN.lang.php +++ b/modules/point/lang/zh-CN.lang.php @@ -31,11 +31,11 @@ $lang->cmd_exp_calc = '计算'; $lang->cmd_exp_reset = '初始化'; - $lang->cmd_point_recal = '重新计算积分'; - $lang->about_cmd_point_recal = '文章/评论/附件等从新检查后按相应设置从新计算积分。'; + $lang->cmd_point_recal = '积分初始化'; + $lang->about_cmd_point_recal = '积分初始化。即只保留文章/评论/附件/新会员注册的相关积分项。
    其中,初始化后的新会员注册积分项,将在会员有相关动作(发表主题/评论等)时,才付与其相应的积分。
    此项功能请务必慎用!此项功能只能在数据转移或真的需要初始化所有积分时才可以使用。'; - $lang->point_link_group = '그룹 연동'; - $lang->about_point_link_group = '그룹에 원하는 레벨을 지정하면 해당 레벨에 도달할때 그룹이 변경됩니다. 단 새로운 그룹으로 변경될때 이전에 자동 등록된 그룹은 제거됩니다.'; + $lang->point_link_group = '用户组绑定'; + $lang->about_point_link_group = '即级别绑定用户组。当级别达到指定级别时,会员所属用户组将自动更新为与其相对应的用户组。只是更新为新的用户组时,之前的默认用户组将自动被删除。'; $lang->about_module_point = '可以分别对各模块进行积分设置,没有被设置的模块将使用默认值。
    所有积分在相反动作下恢复原始值。即:发表新帖后再删除得到的积分为0分。'; @@ -47,7 +47,7 @@ $lang->point_upload_file = '上传文件'; $lang->point_delete_file = '删除文件'; $lang->point_download_file = '下载文件 (图片除外)'; - $lang->point_read_document = '게시글 조회'; + $lang->point_read_document = '查看主题'; $lang->cmd_point_config = '基本设置'; @@ -57,6 +57,6 @@ $lang->msg_cannot_download = '积分不足无法下载!'; - $lang->point_recal_message = '计算中. (%d / %d)'; - $lang->point_recal_finished = '所有会员积分从新计算完毕。'; + $lang->point_recal_message = '计算并应用中(%d / %d)。'; + $lang->point_recal_finished = '积分重新计算并应用完毕。'; ?> diff --git a/modules/referer/lang/zh-CN.lang.php b/modules/referer/lang/zh-CN.lang.php index 447c65280..bf7f849e6 100644 --- a/modules/referer/lang/zh-CN.lang.php +++ b/modules/referer/lang/zh-CN.lang.php @@ -1,10 +1,10 @@ * @brief Korean language pack */ - $lang->referer = "点击来源"; - $lang->ranking = "访问次数"; + $lang->referer = "用户来源"; + $lang->ranking = "排名"; ?> diff --git a/modules/referer/tpl/css/referer.css b/modules/referer/tpl/css/referer.css index 2f6f415a6..be09fc9e9 100644 --- a/modules/referer/tpl/css/referer.css +++ b/modules/referer/tpl/css/referer.css @@ -1,5 +1,5 @@ -.refererLeft { width:250px; float:left; margin-top:10px;} +.refererLeft { width:230px; float:left; margin-top:10px;} -.refererRight { width:580px; float:left; margin-left:20px;margin-top:10px; } +.refererRight { width:530px; float:left; margin-left:20px;margin-top:10px; } .refererRight .refererList { table-layout:fixed; } .refererRight .refererList .refererUrl { white-space:nowrap; overflow:hidden; } diff --git a/modules/rss/tpl/rss20.html b/modules/rss/tpl/rss20.html index c898bf758..9eb934917 100644 --- a/modules/rss/tpl/rss20.html +++ b/modules/rss/tpl/rss20.html @@ -14,7 +14,7 @@ getNickName()}]]> getPermanentUrl()}]]> - getContent(false,false)}]]> + getContent(false,false,true)}]]> getContentText(100)}]]> diff --git a/modules/springnote/lang/zh-CN.lang.php b/modules/springnote/lang/zh-CN.lang.php index 1156fd9e4..a955f0e71 100644 --- a/modules/springnote/lang/zh-CN.lang.php +++ b/modules/springnote/lang/zh-CN.lang.php @@ -1,30 +1,30 @@ springnote = "SpringNote"; - $lang->springnote_openid = "OpenID"; - $lang->springnote_userkey = "Key"; - $lang->springnote_pageid = "编号"; - $lang->springnote_pageid_setup = '设定编号'; - $lang->springnote_pageid_option_only = '显示指定页面(不显示目录)'; - $lang->springnote_pageid_option_list = '显示指定页面 (显示目录)'; - $lang->springnote_domain = "设定域名"; + $lang->springnote = "Springnote"; + $lang->springnote_openid = "Open ID"; + $lang->springnote_userkey = "用户Key"; + $lang->springnote_pageid = "页号"; + $lang->springnote_pageid_setup = '页号设置'; + $lang->springnote_pageid_option_only = '只显示指定页面(不显示目录)。'; + $lang->springnote_pageid_option_list = '从指定页面开始显示(显示目录)。'; + $lang->springnote_domain = "域名设置"; - $lang->page_url = "原本 URL"; - $lang->page_modified = "最终修改"; - $lang->page_modifier = "最终修改者"; + $lang->page_url = "原始URL"; + $lang->page_modified = "最新更新"; + $lang->page_modifier = "最新修改者"; - $lang->cmd_springnote_list = 'SpringNote目录'; - $lang->cmd_view_info = 'SpringNote信息'; + $lang->cmd_springnote_list = 'Springnote目录'; + $lang->cmd_view_info = 'Springnote信息'; - $lang->about_springnote = "SpringNote是Openmaru提供的WIKI服务。
    SpringNote zeroboardXE模块是特定页面显示成内部文件的模块。"; - $lang->about_springnote_openid = "请输入SpringNote作者的OpenID。"; - $lang->about_springnote_userkey = '请输入连接SpringNote的Key。
    点击[生成Key]后输入OpenID生成Key。'; - $lang->about_springnote_pageid = '显示指定SpringNote中的页面时输入编号。'; - $lang->about_springnote_pageid_setup = '设定显示指定页面部包括目录,或者不包括目录。'; - $lang->about_springnote_domain = '设定其他SpringNote. (http://域名.springnote.com 中输入《域名》值。)'; + $lang->about_springnote = "Springnote是由Openmaru提供的一种Wiki服务。
    Springnote模块是一种可以把Springnote的特定页面引用到Zeroboard XE的模块。"; + $lang->about_springnote_openid = "请输入Springnote网站的Open ID。"; + $lang->about_springnote_userkey = '请输入用户Key值。
    请输入点击[获取用户Key]获得的用户Key值。'; + $lang->about_springnote_pageid = '请输入要指定为默认页(即:首页)的页号(Springnote网站特定页面的页面号)。'; + $lang->about_springnote_pageid_setup = '指定页号时可以选择上述两项中的一种。'; + $lang->about_springnote_domain = '可以指定不属于自己的其他SpringNote域名。(注:只输入http://域名.springnote.com中的《域名》值。)'; ?> diff --git a/modules/springnote/skins/xe_official/css/common.css b/modules/springnote/skins/xe_official/css/common.css index d7e3c9632..949731e06 100644 --- a/modules/springnote/skins/xe_official/css/common.css +++ b/modules/springnote/skins/xe_official/css/common.css @@ -16,7 +16,7 @@ .accountNavigation li.admin { background:url(../images/common/iconAdmin.gif) no-repeat left top; padding-left:12px; } .accountNavigation li.loginAndLogout { background:url(../images/common/line_1x10_e0e0e0.gif) no-repeat left top; padding-left:8px; } -.pageSearch { text-align:right; margin-bottom:10px; } +.pageSearch { text-align:right; margin:10px 0 10px 0; } .pageList { border:1px solid #E3E3E2; } .pageList .page { border-top:1px dotted #EFEFEF; padding:10px; } .pageList .selected { background-color:#EFEFEF; } @@ -38,3 +38,10 @@ .pageView { border:1px solid #E3E3E2; padding:20px; margin-bottom:10px; } .pageView .xhtmlEditorBody ol, .pageView .xhtmlEditorBody ul { margin-left:20px; } .pageView .xhtmlEditorBody { border: 0; } + +ul.prevNext { margin:10px 0 10px 0; padding:5px; border:1px solid #EFEFEF; list-style:none; overflow:hidden; height:1.2em;} +ul.prevNext li.prev { float:left; } +ul.prevNext li.next { float:right; } +ul.prevNext li { color:#444444; } +ul.prevNext li a { text-decoration:none; color:#568942; } +ul.prevNext li a:hover { text-decoration:underline; } diff --git a/modules/springnote/skins/xe_official/list.html b/modules/springnote/skins/xe_official/list.html index f6b3dc666..0f6bd47e0 100644 --- a/modules/springnote/skins/xe_official/list.html +++ b/modules/springnote/skins/xe_official/list.html @@ -65,7 +65,8 @@ - + +
    @@ -91,6 +92,17 @@
    + + + +
    @@ -98,6 +110,18 @@
    + + + + + diff --git a/modules/springnote/springnote.model.php b/modules/springnote/springnote.model.php index 8f9112739..4dd0a3a24 100644 --- a/modules/springnote/springnote.model.php +++ b/modules/springnote/springnote.model.php @@ -160,7 +160,8 @@ if($p_pageid) $this->getNodes($root->child, $p_pageid, $root); $pages = array(); - $this->arrangePages($pages, $root->child, 0); + $prev_pageid = 0; + $this->arrangePages($pages, $root->child, 0, $prev_pageid); } @@ -185,7 +186,7 @@ /** * @brief 스프링노트 서버에서 보내준 페이지를 정렬 **/ - function arrangePages(&$pages, $list, $depth) { + function arrangePages(&$pages, $list, $depth, &$prev_pageid) { if(!count($list)) return; foreach($list as $key => $val) { @@ -196,7 +197,16 @@ $val->depth = $depth; $pages[$val->pageid] = $val; - if($child) $this->arrangePages($pages, $child,$depth+1); + if($prev_pageid) { + $pages[$prev_pageid]->next->pageid = $pages[$val->pageid]->pageid; + $pages[$prev_pageid]->next->title = $pages[$val->pageid]->title; + $pages[$val->pageid]->prev->pageid = $pages[$prev_pageid]->pageid; + $pages[$val->pageid]->prev->title = $pages[$prev_pageid]->title; + } + + $prev_pageid = $val->pageid; + + if($child) $this->arrangePages($pages, $child,$depth+1, $prev_pageid); } } diff --git a/modules/springnote/springnote.view.php b/modules/springnote/springnote.view.php index fb7d2db5d..ec94a8986 100644 --- a/modules/springnote/springnote.view.php +++ b/modules/springnote/springnote.view.php @@ -62,9 +62,15 @@ if($this->module_info->pageid && $this->module_info->pageid_option != 'list') $pages = null; else { if($this->module_info->pageid && $this->module_info->pageid_option == 'list') $pages = $oSpringnoteModel->getPages($q, true, $this->module_info->pageid); - else $pages = $oSpringnoteModel->getPages($q, true); + else { + $pages = $oSpringnoteModel->getPages($q, true); + } } + if($pageid) { + if($pages[$pageid]->prev) $page->prev = $pages[$pageid]->prev; + if($pages[$pageid]->next) $page->next = $pages[$pageid]->next; + } Context::set('page', $page); Context::set('pages', $pages); diff --git a/modules/widget/lang/zh-CN.lang.php b/modules/widget/lang/zh-CN.lang.php index 76f91fd91..c641c5aa4 100644 --- a/modules/widget/lang/zh-CN.lang.php +++ b/modules/widget/lang/zh-CN.lang.php @@ -38,7 +38,7 @@ $lang->msg_widget_proc_is_null = '不能执行%s控件的 proc()!'; $lang->about_widget_code = '输入被选控件所需要的下列各项后,按『代码生成』按钮,即可在页面下方获得可以用在布局模版代码片断。'; - $lang->about_widget_code_in_page = '输入下列各项必要值后,按『代码生成』按钮,即可把控件插入到页面当中。'; + $lang->about_widget_code_in_page = '输入下列各项必要值后,按『生成代码』按钮,即可把控件插入到页面当中。'; $lang->about_widget = "控件是在布局或页面模块中使用的一种小部件。\n不仅可以关联内部模块或外部open api,而且通过设置可以用在多种用途。\n即使不使用Zeroboard XE的页面模块或布局模块,也可以通过『代码生成』功能直接可以添加相应控件。"; $lang->cmd_content_insert = "添加内容"; diff --git a/modules/widget/tpl/css/widget.css b/modules/widget/tpl/css/widget.css index 0d3f04db0..c609c378d 100644 --- a/modules/widget/tpl/css/widget.css +++ b/modules/widget/tpl/css/widget.css @@ -39,7 +39,7 @@ #pageSizeLayer .input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:60px; } #pageSizeLayer .full_input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:90%; } #pageSizeLayer .small_input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:20px; } -#pageSizeLayer .color_input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:50px; } +#pageSizeLayer .color_input { background:#FFFFFF; border:1px solid #AAAAAA; padding:1px; font:8pt verdana; width:44px; } #pageSizeLayer .submit { width:90%; border:1px solid #DEDEDE; background-color:#FFFFFF;} div.editor { width:700px; } diff --git a/modules/widget/tpl/widget_layer.html b/modules/widget/tpl/widget_layer.html index 6437bbff2..7e5d913b5 100644 --- a/modules/widget/tpl/widget_layer.html +++ b/modules/widget/tpl/widget_layer.html @@ -19,25 +19,25 @@ {$lang->cmd_widget_margin} - + px - - + px + px - + px {$lang->cmd_widget_padding} - + px - - + px + px - + px {$lang->cmd_widget_border} @@ -47,7 +47,7 @@ - + # @@ -57,7 +57,7 @@ - + # px @@ -65,7 +65,7 @@ - + # @@ -75,7 +75,7 @@ - + # diff --git a/widgets/category/conf/info.xml b/widgets/category/conf/info.xml index ed9c0ba69..165dd7e4a 100644 --- a/widgets/category/conf/info.xml +++ b/widgets/category/conf/info.xml @@ -1,11 +1,11 @@ 게시글 분류 출력기 - Article Categories + Article Category 게시글 분류 출력기 게시글 분류 출력기 書き込みのカテゴリ表示 - 输出主题分类 + 博客样式主题分类 제로 zero @@ -14,11 +14,11 @@ Zero zero 게시판등 문서모듈의 분류를 사용하는 모듈에서 분류를 추출하여 블로그 카테고리와 같이 출력하는 기능입니다. - This widgets displays categories of documents from modules which use category function. + This widget displays categories of document from modules that enabled to use category function. 게시판등 문서모듈의 분류를 사용하는 모듈에서 분류를 추출하여 블로그 카테고리와 같이 출력하는 기능입니다. 게시판등 문서모듈의 분류를 사용하는 모듈에서 분류를 추출하여 블로그 카테고리와 같이 출력하는 기능입니다. 掲示板など、ドキュメントモジュールのカテゴリを使用するモジュールでカテゴリを抽出してブログのカテゴリのように表示する機能です。 - 把论坛等文本模块的分类在使用的模块里抽出分类后输出类似于博客分类的功能。 + 把版面模块中的分类显示为类似于博客分类样式的功能。 @@ -30,11 +30,11 @@ 对象模块 mid_list 선택하신 모듈을 대상으로 합니다. 꼭 한개의 모듈만 선택해 주세요. - Selected module will be target. Please select only 1 module. + Selected module will be target. Please select only 1 (one) module. 선택하신 모듈을 대상으로 합니다. 꼭 한개의 모듈만 선택해 주세요. 선택하신 모듈을 대상으로 합니다. 꼭 한개의 모듈만 선택해 주세요. 選択されたモジュールを対象とします。必ず一つのモジュールのみ選択してください。 - 将把被选模块当中的主题作为对象。请选择一个模块。 + 将把被选模块当中的主题作为对象。只能选一个模块。 diff --git a/widgets/category/skins/default/skin.xml b/widgets/category/skins/default/skin.xml index 3c2530e7c..8751151d4 100644 --- a/widgets/category/skins/default/skin.xml +++ b/widgets/category/skins/default/skin.xml @@ -3,7 +3,7 @@ 분류 출력 기본 스킨 カテゴリ表示デフォルトスキン Default Skin of Category Widget - 分类输出基本皮肤 + 博客样式分类默认皮肤 제로 Zero @@ -12,7 +12,7 @@ 게시글 분류를 출력하는 기본 스킨입니다 書き込みのカテゴリを表示表示させるデフォルトスキンです。 This is a widget that displays categories of articles. - 输出主题分类的基本皮肤 + 把主题分类显示为博客样式的默认皮肤。 diff --git a/widgets/forum/conf/info.xml b/widgets/forum/conf/info.xml index 0dbfd9eb9..5509cf4d2 100644 --- a/widgets/forum/conf/info.xml +++ b/widgets/forum/conf/info.xml @@ -1,7 +1,7 @@ 포럼형 최근 게시물 - 论坛型最新主题列表 + 论坛主界面样式列表 フォーラムスタイルの最新の記事を表示 Forum Style Newest Articles Pantalla Foro estilo más reciente de artículos @@ -18,8 +18,8 @@ 대상 게시판에 설정되어 있는 제목과 설명을 이용하여 설명을 출력합니다. - 把一个或多个版面输出类似于论坛形式的控件。 - 利用对象版面里设定的主题和说明显示。 + 把一个或多个版面显示为论坛主界面样式的控件。 + 论坛标题及说明参考各对象版面里设置的标题和说明。 このウィジェットの最新の記事を表示1つまたは複数の委員会からのフォーラムのスタイルです。説明が表示されるターゲットボードのタイトルと説明しています。 diff --git a/widgets/forum/skins/default/skin.xml b/widgets/forum/skins/default/skin.xml index 8c81ce100..32e6008b1 100644 --- a/widgets/forum/skins/default/skin.xml +++ b/widgets/forum/skins/default/skin.xml @@ -2,7 +2,7 @@ 기본 포럼형 위젯 스킨 기본 포럼형 위젯 스킨 - 基本论坛型控件皮肤 + 论坛主界面样式列表默认皮肤 기본 포럼형 위젯 스킨 제로 @@ -16,7 +16,7 @@ 포럼형 위젯의 기본 스킨입니다. - 论坛型控件的基本皮肤。 + 论坛主界面样式列表默认皮肤。 포럼형 위젯의 기본 스킨입니다. diff --git a/widgets/newest_document/skins/xe_official/skin.xml b/widgets/newest_document/skins/xe_official/skin.xml index f4d538b20..596596a87 100644 --- a/widgets/newest_document/skins/xe_official/skin.xml +++ b/widgets/newest_document/skins/xe_official/skin.xml @@ -2,7 +2,7 @@ XE 공식 레이아웃용 최신글 스킨 XE公式 レイアウト用の最新コンテンツ表示スキン - XE官方网站目录型皮肤 + XE官方网站最新主题列表皮肤 XE Official Layout's newest document skin 제로 @@ -22,7 +22,7 @@ レイアウト作成:Zero (http://blog.nzeo.com) - XE官方网站目录型主题列表皮肤。 + XE官方网站最新主题列表皮肤。 设计 : So-Ra Lee(http://ra-ra.pe.kr) HTML/CSS : Chan-Myung Jeong(http://naradesign.net) 布局: zero (http://blog.nzeo.com) diff --git a/widgets/rank_count/skins/sz_xe/css/default.css b/widgets/rank_count/skins/sz_xe/css/default.css index 558e4f3f2..5b3180d3c 100644 --- a/widgets/rank_count/skins/sz_xe/css/default.css +++ b/widgets/rank_count/skins/sz_xe/css/default.css @@ -1,10 +1,12 @@ -.szrank_count { width:100%; position:relative; } .szrank_count h2 { margin:0; height:21px; padding:9px 0 0 9px; font-size:1em;} -.szrank_count h5{ margin:0; height:21px; padding:0 0 0 9px; font-size:1em;} +.szrank_count h5 { margin:0; height:21px; padding:0 0 0 9px; font-size:1em;} -.szrank_count .left { cursor:pointer; height:20px; background:url(../images/default/bullet.gif) no-repeat left; padding-left:15px; overflow:hidden; } - -.szrank_count .center { text-align:right; padding-left:5px; } +.szrank_count ul { margin:0; padding:0; list-style:none; } +.szrank_count ul li { margin-bottom:5px; } +.szrank_count ul li div.title { background:url(../images/default/bullet.gif) no-repeat left top; padding-left:15px; } +.szrank_count ul li div.title { float:left; } +.szrank_count ul li div.count { float:right; white-space:nowrap;} +.szrank_count ul li div.link { float:right; white-space:nowrap; margin-left:10px;} .szrank_count .sz_Box_000{border:solid 0;padding:0;} .szrank_count .sz_Box_001{ margin:1px; border:solid 1px;border-color:#E7E7E7;padding:5px 5px 2px 5px;background-color:#F4F4F4;color:#696969;} @@ -17,7 +19,7 @@ .szrank_count .sz_Box_008{ margin:1px; border:solid 1px;border-color:#FFEC15;padding:5px 5px 2px 5px;background-color:#FFFCDF;color:#FF9900;} .szrank_count .sz_Box_009{ margin:1px; border:solid 1px;border-color:#9DD7E8;padding:5px 5px 2px 5px;background-color:#F8FDFF;color:#0A8DBD;} -.szrank_count a { text-decoration:none;} +.szrank_count a {text-decoration:none;} .szrank_count .sz_Box_001 a { color:#696969;} .szrank_count .sz_Box_002 a { color:#99B81A;} .szrank_count .sz_Box_003 a { color:#D98383;} diff --git a/widgets/rank_count/skins/sz_xe/list.html b/widgets/rank_count/skins/sz_xe/list.html index b8fbdc21c..ab64d0423 100644 --- a/widgets/rank_count/skins/sz_xe/list.html +++ b/widgets/rank_count/skins/sz_xe/list.html @@ -3,32 +3,35 @@
    -
    - -

    {$widget_info->title} Top {$widget_info->list_count}

    - - -
    (기간: {$widget_info->period}일, {$widget_info->date_from}~)
    - +
    + +

    {$widget_info->title} Top {$widget_info->list_count}

    + + +
    (기간: {$widget_info->period}일, {$widget_info->date_from}~)
    + - - {@ $no = 1} - - - - - - - {@ $no++} - -
    {$no}위. {$val->nick_name}{$val->count}회 - - - [작성글] - - [작성댓글] + +
    +
    +
    {$val->count}회
    +
    + + {@ $no++} + + + +
    -
    \ No newline at end of file diff --git a/widgets/rank_download/skins/sz_xe/css/default.css b/widgets/rank_download/skins/sz_xe/css/default.css index 996a7820a..66a1b2bcf 100644 --- a/widgets/rank_download/skins/sz_xe/css/default.css +++ b/widgets/rank_download/skins/sz_xe/css/default.css @@ -1,9 +1,11 @@ -.sz_download { width:100%; position:relative;} .sz_download h2 { margin:0; height:21px; padding:9px 0 0 9px; font-size:1em;} -.sz_download .left { cursor:pointer; height:20px; background:url(../images/default/bullet.gif) no-repeat left; padding-left:15px; overflow:hidden; } - -.sz_download .center { text-align:right; padding-left:5px; } +.sz_download ul { margin:0; padding:0; list-style:none; } +.sz_download ul li { margin-bottom:5px; } +.sz_download ul li div.title { background:url(../images/default/bullet.gif) no-repeat left top; padding-left:15px; } +.sz_download ul li div.title { float:left; } +.sz_download ul li div.count { float:right; white-space:nowrap;} +.sz_download ul li div.download { float:right; white-space:nowrap; margin-left:10px;} .sz_download .sz_Box_000{border:solid 0;padding:0;} .sz_download .sz_Box_001{ margin:1px; border:solid 1px;border-color:#E7E7E7;padding:5px 5px 2px 5px;background-color:#F4F4F4;color:#696969;} diff --git a/widgets/rank_download/skins/sz_xe/list.html b/widgets/rank_download/skins/sz_xe/list.html index 54ad828fb..ce40c9807 100644 --- a/widgets/rank_download/skins/sz_xe/list.html +++ b/widgets/rank_download/skins/sz_xe/list.html @@ -3,20 +3,24 @@
    -
    - -

    {$widget_info->title} Top {$widget_info->list_count}

    - - - {@ $no = 1} - - - - - - - {@ $no++} - -
    {$no}위. {$val->source_filename} ({FileHandler::filesize($val->file_size)}){$val->download_count}회[Download]
    -
    +
    + +

    {$widget_info->title} Top {$widget_info->list_count}

    + + + + + +
    diff --git a/widgets/rank_point/skins/sz_xe/css/default.css b/widgets/rank_point/skins/sz_xe/css/default.css index 538d20215..0645af6f7 100644 --- a/widgets/rank_point/skins/sz_xe/css/default.css +++ b/widgets/rank_point/skins/sz_xe/css/default.css @@ -1,9 +1,11 @@ -.sz_point { width:100%; position:relative;} .sz_point h2 { margin:0; height:21px; padding:9px 0 0 9px; font-size:1em;} -.sz_point .left { cursor:pointer; height:20px; background:url(../images/default/bullet.gif) no-repeat left; padding-left:15px; overflow:hidden; } - -.sz_point .center { text-align:right; padding-left:5px; } +.sz_point ul { margin:0; padding:0; list-style:none; } +.sz_point ul li { margin-bottom:5px; } +.sz_point ul li div.title { background:url(../images/default/bullet.gif) no-repeat left top; padding-left:15px; } +.sz_point ul li div.title { float:left; } +.sz_point ul li div.point { float:right; white-space:nowrap;} +.sz_point ul li div.link { float:right; white-space:nowrap; margin-left:10px;} .sz_point .sz_Box_000{border:solid 0;padding:0;} .sz_point .sz_Box_001{ margin:1px; border:solid 1px;border-color:#E7E7E7;padding:5px 5px 2px 5px;background-color:#F4F4F4;color:#696969;} @@ -16,6 +18,14 @@ .sz_point .sz_Box_008{ margin:1px; border:solid 1px;border-color:#FFEC15;padding:5px 5px 2px 5px;background-color:#FFFCDF;color:#FF9900;} .sz_point .sz_Box_009{ margin:1px; border:solid 1px;border-color:#9DD7E8;padding:5px 5px 2px 5px;background-color:#F8FDFF;color:#0A8DBD;} -.sz_point a {color: #3e81de; text-decoration:none;} -.sz_point a:hover {color: #3e81de;} -.sz_point a:visit {color: #3e81de;} +.sz_point a {text-decoration:none;} +.sz_point .sz_Box_001 a { color:#696969;} +.sz_point .sz_Box_002 a { color:#99B81A;} +.sz_point .sz_Box_003 a { color:#D98383;} +.sz_point .sz_Box_004 a { color:#AF69C0;} +.sz_point .sz_Box_005 a { color:#7381EA;} +.sz_point .sz_Box_006 a { color:#619DAC;} +.sz_point .sz_Box_007 a { color:#6FB587;} +.sz_point .sz_Box_008 a { color:#FF9900;} +.sz_point .sz_Box_009 a { color:#0A8DBD;} + diff --git a/widgets/rank_point/skins/sz_xe/list.html b/widgets/rank_point/skins/sz_xe/list.html index 4d18b6c23..07c2779bf 100644 --- a/widgets/rank_point/skins/sz_xe/list.html +++ b/widgets/rank_point/skins/sz_xe/list.html @@ -3,24 +3,28 @@
    -
    - -

    {$widget_info->title} Top {$widget_info->list_count}

    - - - {@ $no = 1} - - - - - - - {@ $no++} - -
    {$no}위.
    {$val->nick_name}
    {$val->point}점 - - [작성글] +
    + +

    {$widget_info->title} Top {$widget_info->list_count}

    + + + +
      + {@ $no = 1} + +
    • +
      {$no}위. {$val->nick_name}
      + +
      {$val->point}점
      +
      +
    • + {@ $no++} -
    + + +
    -
    \ No newline at end of file diff --git a/widgets/rss_reader/skins/sz_select/skin.xml b/widgets/rss_reader/skins/sz_select/skin.xml index 4fa38091b..4bca6c7a6 100644 --- a/widgets/rss_reader/skins/sz_select/skin.xml +++ b/widgets/rss_reader/skins/sz_select/skin.xml @@ -4,11 +4,13 @@ Simulz スキン (Select メニュー) Simulz样式Select菜单型皮肤 Simulz Skin (Select menu) + Simulz Cuidado de la Piel (menú Selección) Simulz Simulz Simulz Simulz + Simulz Simulz 스킨입니다. @@ -20,6 +22,9 @@ This is Simulz skin. + + + Esto es Simulz piel. @@ -28,59 +33,69 @@ デフォルト 默认 Default + Default 회색 灰色 Gray + Gray 연두 淡绿 Yellowish Green + Verde amarillento 분홍 ピンク 粉红 Pink + Pink 보라 淡青 Purple + Púrpura 밝은 파랑 浅蓝 Bright Blue + Bright Blue 청록 青緑 青绿 Bluish Green + Verde azulado 초록 草绿 Green + Verde 노랑 黄色 Yellow + Amarillo 파랑 蓝色 Blue + Azul diff --git a/widgets/rss_reader/skins/sz_xe/skin.xml b/widgets/rss_reader/skins/sz_xe/skin.xml index 075def9c4..eba270c1a 100644 --- a/widgets/rss_reader/skins/sz_xe/skin.xml +++ b/widgets/rss_reader/skins/sz_xe/skin.xml @@ -4,11 +4,13 @@ Simulz スキン (リストスタイル) Simulz样式目录型皮肤 Simulz Skin (List Style) + Simulz Cuidado de la Piel (Lista Estilo) Simulz Simulz Simulz Simulz + Simulz Simulz 스킨입니다. @@ -20,6 +22,9 @@ This is Simulz skin. + + + Esto es Simulz piel. @@ -28,59 +33,69 @@ デフォルト 默认 Default + Default 회색 灰色 Gray + Gray 연두 淡绿 Yellowish Green + Verde amarillento 분홍 ピンク 粉红 Pink + Pink 보라 淡青 Purple + Púrpura 밝은 파랑 浅蓝 Bright Blue + Bright Blue 청록 青緑 青绿 Bluish Green + Verde azulado 초록 草绿 Green + Verde 노랑 黄色 Yellow + Amarillo 파랑 蓝色 Blue + Azul diff --git a/widgets/rss_reader/skins/xe_official/skin.xml b/widgets/rss_reader/skins/xe_official/skin.xml index b1584d2d5..918969999 100644 --- a/widgets/rss_reader/skins/xe_official/skin.xml +++ b/widgets/rss_reader/skins/xe_official/skin.xml @@ -2,8 +2,9 @@ XE 최신글 스킨 (목록형) XEデフォルトレイアウト用の最新コンテンツ表示スキン - 官方网站目录型最新主题列表样式皮肤 + XE目录型最新主题列表样式皮肤 XE Official Layout's newest document skin + XE Oficial de diseño más nuevo documento de la piel 제로 zero @@ -32,6 +33,12 @@ Design : So-Ra Lee (http://ra-ra-.pe.kr) HTML/CSS : Chan-Myung Jeong(http://naradesign.net) Layout : zero (http://blog.nzeo.com) + + + Se trata de una piel adecuada para el diseño XE oficial. + Diseño: So-Ra Lee (http://ra-ra-.pe.kr) + HTML / CSS: Jeong Chan-Myung (http://naradesign.net) + Diseño: Zero (http://blog.nzeo.com) @@ -40,12 +47,14 @@ 白い背景用 白色背景 White Background + Fondo blanco 어두운 바탕용 暗い背景用 暗色背景 Dark Background + Dark Antecedentes diff --git a/widgets/webzine/skins/notice_style/css/normal.css b/widgets/webzine/skins/notice_style/css/normal.css index 307526fab..e67d2e2aa 100644 --- a/widgets/webzine/skins/notice_style/css/normal.css +++ b/widgets/webzine/skins/notice_style/css/normal.css @@ -1,6 +1,6 @@ .noticeBox { padding-bottom:5px; overflow:hidden; } -.noticeBox h2 { margin:0; font-size:1em; display:block; height:21px; padding:9px 0 0 9px; margin-bottom:5px; color:#000000; background:url(../images/normal/lineNotice.gif) no-repeat left bottom;} +.noticeBox h2 { margin:0; font-size:1em; display:block; height:21px; padding:9px 0 0 9px; margin-bottom:5px; color:#000000; } .noticeBox .listTable { width:100%; table-layout:fixed; border:none;} diff --git a/widgets/webzine/skins/notice_style/skin.xml b/widgets/webzine/skins/notice_style/skin.xml index 702319a59..e5af3f2ad 100644 --- a/widgets/webzine/skins/notice_style/skin.xml +++ b/widgets/webzine/skins/notice_style/skin.xml @@ -2,7 +2,7 @@ 공지사항 형태의 출력 공지사항 형태의 출력 - 输出公告类型的最新主题控件 + 公告列表皮肤 Output Result of Notice type 제로 @@ -11,7 +11,7 @@ Zero 글 목록과 이미지가 같이 출력되는 웹진형 스킨입니다. 이미지가 있는 글들만 노출이 됩니다. コンテンツリストとイメージが一緒に出力されるウェブジンスタイルスキンです。イメージを含むコンテンツのみ表示されます。 - 可以同时显示最新主题列表及缩略图的网络杂志型默认皮肤。只显示有图片的最新主题。 + 可同时显示内容及缩略图的网络杂志型默认皮肤。只显示有图片的最新主题。 This is a webzine style skin that displays article list and images. Articles with images will be exposed only.