diff --git a/.htaccess b/.htaccess index 3b31f0629..a17e471ff 100644 --- a/.htaccess +++ b/.htaccess @@ -13,6 +13,11 @@ RewriteRule ^(.+)/widgets/(.*) ./widgets/$2 [L] RewriteRule ^(.+)/layouts/(.*) ./layouts/$2 [L] RewriteRule ^(.+)/addons/(.*) ./addons/$2 [L] +# tools +RewriteRule ^tools/([a-zA-Z0-9_]+)$ ./tools/$1 [L] +RewriteRule ^tools/$ ./tools/index.php [L] +RewriteRule ^tools$ ./tools/index.php [L] + # page RewriteRule ^([a-zA-Z0-9_]+)/([[:digit:]]+)page$ ./index.php?mid=$1&page=$2 [L] diff --git a/addons/autolink/conf/info.xml b/addons/autolink/conf/info.xml index e800c35cc..9158cfeb1 100644 --- a/addons/autolink/conf/info.xml +++ b/addons/autolink/conf/info.xml @@ -1,35 +1,38 @@ - - - 자동 링크 애드온 - Auto Link - 自动链接插件 - auto vínculo addon - авто ссылка аддон - Auto-Link Addon - - zero - zero - zero - zero - zero - zero + + + 자동 링크 애드온 + Auto Link + 自动链接插件 + auto vínculo addon + авто ссылка аддон + Auto-Link Addon 게시글과 댓글의 내용중 http로 시작되는 일반 문자열에 자동으로 링크를 걸고 각 링크에 마우스 오버시 새창과 현재창 메뉴가 나타나도록 꾸미는 애드온입니다. - + This addon makes a link to a string that starts with http. - + 主题及评论中以http开始的字符串,自动转换为链接。并且鼠标移到链接上方时,将出现可选(新窗/本页面)提示框。 - + Los comentarios que comienzan con http naeyongjung tema común de la cadena para vincular automáticamente a colgar el puntero del ratón sobre cada uno de los vínculos y saechang Ciudad y aparecen en el menú de add-on de decoración. - + Комментарии, которые начинаются с http naeyongjung темой общей строки автоматически ссылку повесить мышь над каждой ссылке и saechang Сити и появляться на меню добавить-на украшения. - + Kommentare beginnen mit http naeyongjung Thema der gemeinsamen String automatisch Link zu hängen Sie mit der Maus über die einzelnen Links und saechang Stadt und auf dem Menü des Add-On Dekoration. - - + 0.1 + 2008-04-22 + + + zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/blogapi/conf/info.xml b/addons/blogapi/conf/info.xml index 65f4a9d20..3a76ed3f5 100644 --- a/addons/blogapi/conf/info.xml +++ b/addons/blogapi/conf/info.xml @@ -1,20 +1,12 @@ - - - BlogAPI 애드온 - BlogAPI アドオン - BlogAPI - Addon for BlogAPI - Addon für BlogAPI - Addon para BlogAPI - Аддон для BlogAPI - - 제로 - Zero - zero - zero - zero - zero - zero + + + BlogAPI 애드온 + BlogAPI アドオン + BlogAPI + Addon for BlogAPI + Addon für BlogAPI + Addon para BlogAPI + Аддон для BlogAPI metaWeblog를 지원하는 blogApi애드온입니다. 사용으로 설정하시면 각 모듈마다 RSD 태그를 노출합니다. @@ -37,9 +29,9 @@ This blogApi addon supports metaWeblog. 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. + 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. @@ -57,5 +49,16 @@ URL для api - http://setup_path/module_name/api. Только выбор опции использовать включает поведение RSD тега и api. - - + 0.1 + 2007-02-28 + + + 제로 + Zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/counter/conf/info.xml b/addons/counter/conf/info.xml index 4c95a6a91..862cb8e71 100644 --- a/addons/counter/conf/info.xml +++ b/addons/counter/conf/info.xml @@ -1,20 +1,12 @@ - - - 기본 카운터 애드온 - 接続カウンターアドオン - 网站访问统计 - Counter Addon - Counter Addon - Addon contador básico - Аддон для базового счетчика - - 제로 - Zero - zero - zero - zero - zero - zero + + + 기본 카운터 애드온 + 接続カウンターアドオン + 网站访问统计 + Counter Addon + Counter Addon + Addon contador básico + Аддон для базового счетчика 제로보드XE의 기본 카운터 모듈을 이용하여 접속 정보를 기록합니다. 이 애드온을 켜셔야 접속 정보 수집이 됩니다. @@ -24,24 +16,35 @@ このアドオンを「使用」に設定しておくと接続(アクセス)情報が記録されます。 - 利用ZeroboardXE的网站访问统计模块记录网站访问信息。 + 利用ZeroboardXE的网站访问统计模块记录网站访问信息。 把状态设置为"使用"时,才会记录网站访问信息. 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. + 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. - Es necesario activar este addon para agregar la información de acceso. + Es necesario activar este addon para agregar la información de acceso. Этот аддон пишет в лог информацию о доступе к сайту, основанную на базовом модуле счетчика в Zeroboard XE. Для сбора информации необходимо включить этот аддон. - - + 0.1 + 2007-02-28 + + + 제로 + Zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/lemonpen/conf/info.xml b/addons/lemonpen/conf/info.xml index 25a0cbf52..8da4835f6 100644 --- a/addons/lemonpen/conf/info.xml +++ b/addons/lemonpen/conf/info.xml @@ -1,44 +1,48 @@ - - + + LemonPen XE 애드온 LemonPen XE插件 - LemonPen XE Addon - LemonPen XE Addon - LemonPen XE addon - LemonPen XE Addon + LemonPen XE Addon + LemonPen XE Addon + LemonPen XE addon + LemonPen XE Addon LemonPen XE アドオン - + 활성화 하시면 레몬펜을 사이트에 달 수 있습니다. + 要想在网站使用LemonPen插件,请将此插件激活。 + Sie können LemonPen auf der Website, wenn Sie diese aktivieren. + You can insert LemonPen to the site when you enable this. + Puede insertar LemonPen al sitio cuando este se activa. + Вы можете вставить LemonPen к месту, когда вы позволили это. + 機能をオンにすると、レモンペンをサイト上で使うことが出来ます。 (LemonPen:Openmaru社提供) + 0.1 + 2007-12-10 + + zero zero - zero - zero - zero - zero + zero + zero + zero + zero zero - 활성화 하시면 레몬펜을 사이트에 달 수 있습니다. - 要想在网站使用LemonPen插件,请将此插件激活。 - Sie können LemonPen auf der Website, wenn Sie diese aktivieren. - You can insert LemonPen to the site when you enable this. - Puede insertar LemonPen al sitio cuando este se activa. - Вы можете вставить LemonPen к месту, когда вы позволили это. - 機能をオンにすると、レモンペンをサイト上で使うことが出来ます。 (LemonPen:Openmaru社提供) + sid sid - sid - sid - sid - sid + sid + sid + sid + sid sid - 레몬펜에서 사이트 등록시 발급받은 sid값을 입력해주세요. - 请输入注册LemonPen网站时,发放的sid值。 - Please input sid value that you got after registering at the LemonPen website. - Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen. - Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen. - Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen. - レモンペンのサイトで発行されたsidを入力してください。 (LemonPen:Openmaru社提供) - + 레몬펜에서 사이트 등록시 발급받은 sid값을 입력해주세요. + 请输入注册LemonPen网站时,发放的sid值。 + Please input sid value that you got after registering at the LemonPen website. + Bitte geben Sie Ihre SID-Wert ein, die Sie nach Registrierung auf der Website LemonPen. + Por favor, de entrada sid valor que había que hacer después de registrarse en el sitio web LemonPen. + Введите замороженный ценности, которые вы получили после регистрации на сайте LemonPen. + レモンペンのサイトで発行されたsidを入力してください。 (LemonPen:Openmaru社提供) + - + \ No newline at end of file diff --git a/addons/member_communication/conf/info.xml b/addons/member_communication/conf/info.xml index a6b50a3c3..951ce2cc9 100644 --- a/addons/member_communication/conf/info.xml +++ b/addons/member_communication/conf/info.xml @@ -1,20 +1,12 @@ - - - 커뮤니케이션 - 커뮤니케이션 - 会员交流 - Communication - 커뮤니케이션 - 커뮤니케이션 - 커뮤니케이션 - - 제로 - Zero - zero - zero - zero - zero - zero + + + 커뮤니케이션 + 커뮤니케이션 + 会员交流 + Communication + 커뮤니케이션 + 커뮤니케이션 + 커뮤니케이션 커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다. 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. @@ -30,7 +22,7 @@ This addon enables communication module in order to use message or friend function. Please enable this addon in case you want to use those functions. - + 커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다. 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. @@ -42,5 +34,16 @@ 커뮤니케이션 모듈의 기능을 활성화 시켜 쪽지나 친구기능을 사용할 수 있도록 해줍니다. 쪽지, 친구기능등을 사용하기 위해서는 이 애드온을 사용으로 해주시면 됩니다. - - + 0.1 + 2008-05-28 + + + 제로 + Zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/member_communication/member_communication.addon.php b/addons/member_communication/member_communication.addon.php index ca0bd2c21..26563ce0a 100644 --- a/addons/member_communication/member_communication.addon.php +++ b/addons/member_communication/member_communication.addon.php @@ -33,7 +33,7 @@ $flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl); if(file_exists($flag_file)) { - @unlink($flag_file); + FileHandler::removeFile($flag_file); Context::loadLang('./addons/member_communication/lang'); $script = sprintf('', Context::getLang('alert_new_message_arrived'), Context::getRequestUri().'?module=communication&act=dispCommunicationNewMessage'); diff --git a/addons/member_extra_info/conf/info.xml b/addons/member_extra_info/conf/info.xml index dc19e20db..a5bdfae58 100644 --- a/addons/member_extra_info/conf/info.xml +++ b/addons/member_extra_info/conf/info.xml @@ -1,20 +1,12 @@ - + - 회원 확장 정보 출력 - 회원 확장 정보 출력 - 用户扩展信息 - Extra Member Info - 회원 확장 정보 출력 - 회원 확장 정보 출력 - 회원 확장 정보 출력 - - 제로 - Zero - zero - zero - zero - zero - zero + 회원 확장 정보 출력 + 회원 확장 정보 출력 + 用户扩展信息 + Extra Member Info + 회원 확장 정보 출력 + 회원 확장 정보 출력 + 회원 확장 정보 출력 회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요. @@ -27,7 +19,7 @@ This addon displays a member's image name, image mark. - + 회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요. @@ -36,5 +28,16 @@ 회원이 등록한 이미지이름, 이미지마크를 사용하기 위해서는 이 애드온을 활성화 시키세요. - - + 0.2 + 2007-02-28 + + + 제로 + Zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/mobile/classes/hdml.class.php b/addons/mobile/classes/hdml.class.php new file mode 100644 index 000000000..827da8441 --- /dev/null +++ b/addons/mobile/classes/hdml.class.php @@ -0,0 +1,96 @@ + + **/ + class wap extends mobileXE { + + /** + * @brief hdml 헤더 출력 + **/ + function printHeader() { + header("Content-Type:text/x-hdml; charset=".$this->charset); + header("Cache-Control: no-store, no-cache, must-revalidate"); + header("Cache-Control: post-check=0, pre-check=0", false); + header("Pragma: no-cache"); + + print ''; + print "\n"; + print $this->hasChilds()?'':''; + print "\n"; + + if($this->upperUrl) { + $url = $this->upperUrl; + printf('%s', $url->url, $url->text, "\n"); + } + } + + /** + * @brief 제목을 출력 + **/ + function printTitle() { + if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); + printf('<%s%s>%s', $this->title,$titlePageStr,"\n"); + } + + /** + * @brief 내용을 출력 + * hasChilds()가 있으면 목록형을 그렇지 않으면 컨텐츠를 출력 + **/ + function printContent() { + if($this->hasChilds()) { + foreach($this->getChilds() as $key => $val) { + if(!$val['link']) continue; + printf('%s%s',Context::getLang('cmd_select'), $val['href'], $val['text'], "\n"); + } + } else { + printf('%s
%s', $this->getContent(),"\n"); + } + } + + /** + * @brief 버튼을 출력함 + **/ + function printBtn() { + // 메뉴 형식 + if($this->hasChilds()) { + if($this->prevUrl) { + $url = $this->prevUrl; + printf('%s%s', $url->text, $url->url, $url->text, "\n"); + } + if($this->nextUrl) { + $url = $this->nextUrl; + printf('%s%s', $url->text, $url->url, $url->text, "\n"); + } + if($this->homeUrl) { + $url = $this->homeUrl; + printf('%s%s', $url->text, $url->url, $url->text, "\n"); + } + // 컨텐츠 형식 + } else { + if($this->prevUrl) { + $url = $this->prevUrl; + printf('%s', $url->text, $url->url, $url->text); + } + if($this->nextUrl) { + $url = $this->nextUrl; + printf('%s', $url->text, $url->url, $url->text); + } + if($this->homeUrl) { + $url = $this->homeUrl; + printf('%s', $url->text, $url->url, $url->text); + } + } + } + + /** + * @brief 푸터 정보를 출력 + **/ + function printFooter() { + print $this->hasChilds()?'
':''; + print "\n"; + print("
"); + } + + } +?> diff --git a/addons/mobile/classes/mhtml.class.php b/addons/mobile/classes/mhtml.class.php new file mode 100644 index 000000000..b78174b62 --- /dev/null +++ b/addons/mobile/classes/mhtml.class.php @@ -0,0 +1,63 @@ + + **/ + class wap extends mobileXE { + + /** + * @brief hdml 헤더 출력 + **/ + function printHeader() { + print("\n"); + } + + // 제목을 출력 + function printTitle() { + if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); + printf('<%s%s>
%s', $this->title,$titlePageStr,"\n"); + } + + /** + * @brief 내용을 출력 + * hasChilds()가 있으면 목록형을 그렇지 않으면 컨텐츠를 출력 + **/ + function printContent() { + if($this->hasChilds()) { + foreach($this->getChilds() as $key => $val) { + if(!$val['link']) continue; + printf('%s
%s', $val['href'], $this->getNo(), $val['text'], "\n"); + } + } else { + print $this->getContent()."\n"; + } + } + + /** + * @brief 버튼을 출력함 + **/ + function printBtn() { + if($this->prevUrl) { + $url = $this->prevUrl; + printf('%s
%s', $url->url, $url->text, "\n"); + } + if($this->nextUrl) { + $url = $this->nextUrl; + printf('%s
%s', $url->url, $url->text, "\n"); + } + if($this->upperUrl) { + $url = $this->upperUrl; + printf('%s', $url->url, $url->text, "\n"); + } + if($this->homeUrl) { + $url = $this->homeUrl; + printf('%s%s', $url->text, $url->url, $url->text, "\n"); + } + } + + // 푸터 정보를 출력 + function printFooter() { + print("\n"); + } + } +?> diff --git a/addons/mobile/classes/mobile.class.php b/addons/mobile/classes/mobile.class.php new file mode 100644 index 000000000..2a1d59766 --- /dev/null +++ b/addons/mobile/classes/mobile.class.php @@ -0,0 +1,246 @@ + + * @brief WAP 태그 출력을 위한 라이브러리 + **/ + + class mobileXE { + + // 기본 url + var $homeUrl = NULL; + var $upperUrl = NULL; + var $nextUrl = NULL; + var $prevUrl = NULL; + + // 메뉴 네비게이션을 위한 변수 + var $childs = null; + + // 기본 변수 + var $title = NULL; + var $content = NULL; + var $mobilePage = 0; + var $totalPage = 1; + var $charset = 'euc-kr'; + var $no = 0; + + // Deck size + var $deckSize = 500; + + // getInstance + function &getInstance() { + static $instance = null; + + if(!$instance) { + + $browserType = mobileXE::getBrowserType(); + if(!$browserType) return; + + $class_file = sprintf('%saddons/mobile/classes/%s.class.php', _XE_PATH_, $browserType); + require_once($class_file); + + Context::loadLang(_XE_PATH_.'addons/mobile/lang'); + + $instance = new wap(); + + $mobilePage = (int)Context::get('mpage'); + if(!$mobilePage) $mobilePage = 1; + $instance->setMobilePage($mobilePage); + } + + return $instance; + } + + /** + * @brief 접속 브라우저의 헤더를 판단하여 브라우저 타입을 return + * 모바일 브라우저가 아닐 경우 null return + **/ + function getBrowserType() { + // 브라우저 타입을 판별 + $browserAccept = $_SERVER['HTTP_ACCEPT']; + $userAgent = $_SERVER['HTTP_USER_AGENT']; + $wap_sid = $_SERVER['HTTP_X_UP_SUBNO']; + + if(eregi("SKT11", $userAgent)) $browserType = "wml"; + elseif(eregi("skt", $browserAccept)) $browserType = "wml"; + elseif(eregi("hdml", $browserAccept)) $browserType = "hdml"; + elseif(eregi("CellPhone", $userAgent)) $browserType = "mhtml"; + else $browserType = "html"; + + // class 지정 (html일 경우 동작 하지 않도록 함) + if($browserType == 'html') return null; + + return $browserType; + } + + // charset 지정 + function setCharSet($charset = 'euc-kr') { + if(!$charset) $charset = 'euc-kr'; + $this->charset = $charset; + } + + // 모바일 기기의 용량 제한에 다른 가상 페이지 지정 + function setMobilePage($page=1) { + if(!$page) $page = 1; + $this->mobilePage = $page; + } + + // 목록형 데이터 설정을 위한 child menu지정 + function setChilds($childs) { + // menu개수가 9개 이상일 경우 자체 페이징 처리 + $menu_count = count($childs); + if($menu_count>9) { + $startNum = ($this->mobilePage-1)*9; + $idx = 0; + $new_childs = array(); + foreach($childs as $k => $v) { + if($idx >= $startNum && $idx < $startNum+9) { + $new_childs[$k] = $v; + } + $idx ++; + } + $childs = $new_childs; + + $this->totalPage = (int)(($menu_count-1)/9)+1; + + // next/prevUrl 지정 + if($this->mobilePage>1) { + $url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage-1); + $text = sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $this->mobilePage-1, $this->totalPage); + $this->setPrevUrl($url, $text); + } + + if($this->mobilePage<$this->totalPage) { + $url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage+1); + $text = sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $this->mobilePage+1, $this->totalPage); + $this->setNextUrl($url, $text); + } + } + $this->childs = $childs; + } + + // menu 출력대상이 있는지 확인 + function hasChilds() { + return count($this->childs)?true:0; + } + + // child menu반환 + function getChilds() { + return $this->childs; + } + + // title 지정 + function setTitle($title) { + $this->title = $title; + } + + // title 반환 + function getTitle() { + return $this->title; + } + + // 컨텐츠 지정 + function setContent($content) { + $content = str_replace(array('&','<','>','"','&nbsp;'), array('&','<','>','"',' '), strip_tags($content)); + + // 모바일의 경우 한 덱에 필요한 사이즈가 적어서 내용을 모두 페이지로 나눔 + $contents = array(); + while($content) { + $tmp = cut_str($content, $this->deckSize, ''); + $contents[] = $tmp; + $content = substr($content, strlen($tmp)); + } + + $this->totalPage = count($contents); + + // next/prevUrl 지정 + if($this->mobilePage>1) { + $url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage-1); + $text = sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $this->mobilePage-1, $this->totalPage); + $this->setPrevUrl($url, $text); + } + + if($this->mobilePage<$this->totalPage) { + $url = getUrl('mid',$_GET['mid'],'mpage',$this->mobilePage+1); + $text = sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $this->mobilePage+1, $this->totalPage); + $this->setNextUrl($url, $text); + } + + $this->content = $contents[$this->mobilePage-1]; + } + + // 컨텐츠 반환 + function getContent() { + return $this->content; + } + + // home url 지정 + function setHomeUrl($url, $text) { + if(!$url) $url = '#'; + $this->homeUrl->url = $url; + $this->homeUrl->text = $text; + } + + // upper url 지정 + function setUpperUrl($url, $text) { + if(!$url) $url = '#'; + $this->upperUrl->url = $url; + $this->upperUrl->text = $text; + } + + // prev url 지정 + function setPrevUrl($url, $text) { + if(!$url) $url = '#'; + $this->prevUrl->url = $url; + $this->prevUrl->text = $text; + } + + // next url 지정 + function setNextUrl($url, $text) { + if(!$url) $url = '#'; + $this->nextUrl->url = $url; + $this->nextUrl->text = $text; + } + + // display + function display() { + ob_start(); + + // 헤더를 출력 + $this->printHeader(); + + // 제목을 출력 + $this->printTitle(); + + // 내용 출력 + $this->printContent(); + + // 버튼 출력 + $this->printBtn(); + + // 푸터를 출력 + $this->printFooter(); + + $content = ob_get_clean(); + + // 변환 후 출력 + if(strtolower($this->charset) == 'utf-8') print $content; + else print iconv('UTF-8',$this->charset, $content); + + exit(); + } + + // 페이지 이동 + function movepage($url) { + header("location:$url"); + exit(); + } + + // 목록등에서 일련 번호를 리턴한다 + function getNo() { + $this->no++; + $str = $this->no; + return $str; + } + } +?> diff --git a/addons/mobile/classes/mobile.func.php b/addons/mobile/classes/mobile.func.php new file mode 100644 index 000000000..d286ac71c --- /dev/null +++ b/addons/mobile/classes/mobile.func.php @@ -0,0 +1,17 @@ + $item) { + if(preg_match('/^([a-zA-Z0-9\_\-]+)$/', $item['url'])) { + $mid = $item['mid'] = $item['url']; + $mid_list[$node_srl] = $mid; + } else { + $mid = $item['mid'] = null; + } + + $listed_items[$mid] = $item; + getListedItems($item['list'], $listed_items, $mid_list); + } + } + +?> diff --git a/addons/mobile/classes/wml.class.php b/addons/mobile/classes/wml.class.php new file mode 100644 index 000000000..6a1a5dbb6 --- /dev/null +++ b/addons/mobile/classes/wml.class.php @@ -0,0 +1,74 @@ + + **/ + class wap extends mobileXE { + + /** + * @brief wml 헤더 출력 + **/ + function printHeader() { + header("Content-Type: text/vnd.wap.wml"); + header("charset: ".$this->charset); + print("charset."\"?>\n"); + print("\n\n

\n"); + } + + /** + * @brief 제목을 출력 + **/ + function printTitle() { + if($this->totalPage > $this->mobilePage) $titlePageStr = sprintf("(%d/%d)",$this->mobilePage, $this->totalPage); + printf('<%s%s>
%s', $this->title,$titlePageStr,"\n"); + } + + /** + * @brief 내용을 출력 + * hasChilds()가 있으면 목록형을 그렇지 않으면 컨텐츠를 출력 + **/ + function printContent() { + if($this->hasChilds()) { + foreach($this->getChilds() as $key => $val) { + if(!$val['link']) continue; + printf('%s', $this->getNo(), $val['text'], $val['href'], "\n"); + } + } else { + printf('%s
%s', str_replace("
","
",$this->getContent()),"\n"); + } + } + + /** + * @brief 버튼을 출력함 + **/ + function printBtn() { + if($this->prevUrl) { + $url = $this->prevUrl; + printf('%s', $this->getNo(), $url->text, $url->url, "\n"); + } + if($this->nextUrl) { + $url = $this->nextUrl; + printf('%s', $this->getNo(), $url->text, $url->url, "\n"); + } + if($this->homeUrl) { + $url = $this->homeUrl; + printf('%s', $url->text, $url->url, "\n"); + } + if($this->upperUrl) { + $url = $this->upperUrl; + printf('%s', $url->text, $url->url, "\n"); + } + } + + // 푸터 정보를 출력 + function printFooter() { + print("

\n
\n
"); + } + + // 목록등에서 일련 번호를 리턴한다 + function getNo() { + return "vnd.skmn".parent::getNo(); + return $str; + } + } +?> diff --git a/addons/mobile/conf/info.xml b/addons/mobile/conf/info.xml new file mode 100644 index 000000000..8767ed857 --- /dev/null +++ b/addons/mobile/conf/info.xml @@ -0,0 +1,37 @@ + + + 모바일XE 애드온 + Mobile XE + + 모바일에서 접속시 헤더 정보를 분석하여 메뉴 - 모듈의 관계를 이용하여 WAP 태그로 출력하는 애드온입니다. + wml, hdml, mhtml를 지원하고 그 이외의 경우에는 동작하지 않습니다. + + + This addon displays WAP tag by analyzing header information on mobile connection. + Only wml, hdml, mhtml formats are provided. + + 0.1 + 2008-06-20 + + + 제로 + zero + + + + + 문자셋 + Charset + + 모바일 기기의 경우 utf-8 문자셋을 인식하지 못할 수 있습니다. + 문자셋에 원하시는 문자셋을 입력하면 자동으로 변환하여 출력하여 모바일에서 이상없이 출력하도록 합니다. + 기본값은 euc-kr입니다. + + + utf-8 cannot be read for mobile tools. + Mobile tools will display correct charset when you input charset you want. + Default charset is euc-kr. + + + + \ No newline at end of file diff --git a/addons/mobile/lang/en.lang.php b/addons/mobile/lang/en.lang.php new file mode 100644 index 000000000..1b27f09c6 --- /dev/null +++ b/addons/mobile/lang/en.lang.php @@ -0,0 +1,10 @@ +cmd_go_upper = 'Upper'; + $lang->cmd_go_home = 'Go Home'; +?> diff --git a/addons/mobile/lang/ko.lang.php b/addons/mobile/lang/ko.lang.php new file mode 100644 index 000000000..43d0b4504 --- /dev/null +++ b/addons/mobile/lang/ko.lang.php @@ -0,0 +1,10 @@ +cmd_go_upper = '상위'; + $lang->cmd_go_home = '홈으로'; +?> diff --git a/addons/mobile/mobile.addon.php b/addons/mobile/mobile.addon.php new file mode 100644 index 000000000..b597804c6 --- /dev/null +++ b/addons/mobile/mobile.addon.php @@ -0,0 +1,155 @@ +module == 'board') { + $this->list_count = $this->module_info->list_count = 9; + return; + } + + /** + * 동작 조건 + * 1. called_position == after_module_proc 일 경우에만 동작 + * 2. 관리자 페이지가 아닐 경우 + * 3. Context::getRequestMethod()!=='XMLRPC' 일 경우에만 + * 4. Context::getResponseMethod()!=='XMLRPC' 일 경우에만 + **/ + if($called_position != 'after_module_proc') return; + + $oMobile = &mobileXE::getInstance(); + if(!$oMobile) return; + + $oMobile->setCharSet($addon_info->charset); + + // 모듈의 정보를 구함 + $module_info = $this->module_info; + + // 메뉴 정보가 있는지 검사 + if($module_info->menu_srl) { + + // menu php cache 파일을 호출 + $menu_cache_file = sprintf(_XE_PATH_.'files/cache/menu/%d.php', $module_info->menu_srl); + if(file_exists($menu_cache_file)) { + include $menu_cache_file; + + // 정리된 menu들을 1차원으로 변경 + getListedItems($menu->list, $listed_items, $mid_list); + + // url request parameter에 mid값이 없을 경우, 즉 첫페이지 인경우 전체 목록을 구함 + if(!isset($_GET['mid'])) $childs = $menu->list; + // mid가 명시되어 있으면 해당 mid의 childs를 구함 + else $childs = $listed_items[$module_info->mid]['list']; + + // 현재 메뉴의 depth가 1이상이면 상위 버튼을 지정 + if($module_info->is_default != 'Y') { + $cur_menu_item = $listed_items[$module_info->mid]; + if($cur_menu_item['parent_srl']) { + $parent_srl = $cur_menu_item['parent_srl']; + if($parent_srl && $mid_list[$parent_srl]) { + $parent_item = $listed_items[$mid_list[$parent_srl]]; + if($parent_item) $oMobile->setUpperUrl(getUrl('','mid',$parent_item['mid']), Context::getLang('cmd_go_upper') ); + } + } else { + $oMobile->setUpperUrl(getUrl(), Context::getLang('cmd_go_upper')); + } + } + + // childs 메뉴들을 지정 + $oMobile->setChilds($childs); + } + } + + // 만약 childs가 없을 경우 컨텐츠 입력 + if(!$oMobile->hasChilds()) { + + // 현재 모듈이 게시판일 경우 (다른 모듈의 경우는 차후에..) + if($module_info->module == 'board') { + + // 선택된 게시글이 있으면 게시글의 내용을 출력 + $oDocument = Context::get('oDocument'); + if($oDocument && $oDocument->isExists()) { + // 내용 지정 (태그를 모두 제거한 내용을 설정) + $content = strip_tags($oDocument->getContent(false,false,false)); + $oMobile->setContent( $content ); + + // 상위 페이지를 목록으로 돌아가기로 지정 + $oMobile->setUpperUrl( getUrl('document_srl',''), Context::getLang('cmd_list') ); + + // 선택된 게시글이 없으면 목록을 출력 + } else { + $document_list = Context::get('document_list'); + $childs = array(); + if($document_list && count($document_list)) { + foreach($document_list as $key => $val) { + $href = getUrl('mid',$_GET['mid'],'document_srl',$val->document_srl); + $text = $val->getTitleText(10); + $obj = null; + $obj['href'] = $href; + $obj['link'] = $obj['text'] = $text; + $childs[] = $obj; + } + $oMobile->setChilds($childs); + } + + $page_navigation = Context::get('page_navigation'); + $totalPage = $page_navigation->last_page; + $page = (int)Context::get('page'); + if(!$page) $page = 1; + + // next/prevUrl 지정 + if($page>1) $oMobile->setPrevUrl(getUrl('mid',$_GET['mid'],'page',$page-1), sprintf('%s (%d/%d)', Context::getLang('cmd_prev'), $page-1, $totalPage)); + + if($page<$totalPage) $oMobile->setNextUrl(getUrl('mid',$_GET['mid'],'page',$page+1), sprintf('%s (%d/%d)', Context::getLang('cmd_next'), $page+1, $totalPage)); + + $oMobile->mobilePage = $page; + $oMobile->totalPage = $totalPage; + } + // 게시판 이외의 경우 + } else { + // 레이아웃은 사용하지 않도록 함 + Context::set('layout','none'); + + // 템플릿 컴파일 + $oTemplate = new TemplateHandler(); + $oContext = &Context::getInstance(); + + $content = $oTemplate->compile($this->getTemplatePath(), $this->getTemplateFile()); + $content = $oContext->transContent($content); + $oMobile->setContent( $content); + } + } + + // 홈버튼 지정 + $oMobile->setHomeUrl(getUrl(), Context::getLang('cmd_go_home')); + + // 제목 지정 + $oMobile->setTitle(Context::getBrowserTitle()); + + // 출력 + $oMobile->display(); +?> diff --git a/addons/openid_delegation_id/conf/info.xml b/addons/openid_delegation_id/conf/info.xml index 121a9cb3c..bedba16c7 100644 --- a/addons/openid_delegation_id/conf/info.xml +++ b/addons/openid_delegation_id/conf/info.xml @@ -1,62 +1,66 @@ - - + + OpenID delegation ID OpenID OpenID Delegation ID - OpenID Delegation ID + OpenID Delegation ID Delegación ID para OpenID OpenIDアドオン Аддон для делигирования доменного имени к OpenID - + + 본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다. + 꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요. + + + 可以把本人的域名当分散式身份验证系统(OpenID)来使用。 + 必须在设置中输入openid provider相关值后再使用。 + + + This addon enables you to use your own domain name as an OpenID. + Just be sure to set the values related with openid provider before using. + + + Dieses Addon ermöglicht es Ihnen, mit Ihrem eigenen Domain-Namen als OpenID. + Einfach sicher sein, dass die Werte im Zusammenhang mit OpenID-Provider, bevor Sie. + + + Utlizando su propio dominio puede usar como OpenID. + Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion. + + + 保有するドメインをオープンIDとして活用することができます。 + 必ず設定で、OpenIDのプロバイダー関連情報を入力してから使用してください。 + + + Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID. + Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid. + + 0.1 + 2007-02-28 + + 제로 zero zero - zero + zero zero Zero Zero - - 본인의 도메인을 사용하여 오픈아이디로 활용할 수 있도록 합니다. - 꼭 설정을 통해서 openid provider관련 값을 입력후 사용해주세요. - - - 可以把本人的域名当分散式身份验证系统(OpenID)来使用。 - 必须在设置中输入openid provider相关值后再使用。 - - - This addon enables you to use your own domain name as an OpenID. - Just be sure to set the values related with openid provider before using. - - - Dieses Addon ermöglicht es Ihnen, mit Ihrem eigenen Domain-Namen als OpenID. - Einfach sicher sein, dass die Werte im Zusammenhang mit OpenID-Provider, bevor Sie. - - - Utlizando su propio dominio puede usar como OpenID. - Debe utilizar luego de ingresar los valores relacionado con openid provider a través de la configuracion. - - - 保有するドメインをオープンIDとして活用することができます。 - 必ず設定で、OpenIDのプロバイダー関連情報を入力してから使用してください。 - - - Этот аддон позволяет Вам использовать Вашу доменное имя как OpenID. - Прежде, чем использовать, просто убедитесь, что установлены значения, имеющие отношение к провайдеру openid. - + server server server - server + server Servidor server server openid.server 값을 입력해 주세요. 请输入 openid.server 值。 Please input your openid.server value. - Bitte geben Sie Ihre openid.server Wert. + Bitte geben Sie Ihre openid.server Wert. Ingrese el valor del openid.server. openid.server の値を入力してください。 Пожалуйста, введите Ваше значение openid сервера. @@ -64,7 +68,7 @@ delegate delegate - delegate + delegate delegate delegado delegate @@ -72,7 +76,7 @@ openid.delegate값을 입력해주세요. 请输入 openid.delegate 值。 Please input your openid.delegate value. - Bitte geben Sie Ihre openid.delegate Wert. + Bitte geben Sie Ihre openid.delegate Wert. Ingresar el valor del openid.delegate openid.delegate の値を入力してください。 Пожалуйста, введите Ваше значение openid делегата. @@ -81,17 +85,17 @@ xrds xrds xrds - xrds + xrds xrds xrds xrds X-XRDS-Location값을 입력해주세요. 请输入 X-XRDS-Location 值。 Please input your X-XRDS-Location value. - Bitte geben Sie Ihre X-XRDS-Standort Wert. + Bitte geben Sie Ihre X-XRDS-Standort Wert. Ingresar el valor de X-XRDS-Location X-XRDS-Location の値を入力してください。 Пожалуйста, введите Ваше значение X-XRDS-Локации. - + \ No newline at end of file diff --git a/addons/point_level_icon/conf/info.xml b/addons/point_level_icon/conf/info.xml index 4ad8d6c69..d78ffba65 100644 --- a/addons/point_level_icon/conf/info.xml +++ b/addons/point_level_icon/conf/info.xml @@ -1,20 +1,12 @@ - - - 포인트 레벨 아이콘 표시 애드온 - 积分级别图标 - ポイントレベルアイコン表示アドオン - Point Level Icon - Point-Level-Symbol - Addon para mostar el nivel del ícono - Аддон для отображения иконки уровня - - 제로 - Zero - Zero - zero - zero - zero - zero + + + 포인트 레벨 아이콘 표시 애드온 + 积分级别图标 + ポイントレベルアイコン表示アドオン + Point Level Icon + Point-Level-Symbol + Addon para mostar el nivel del ícono + Аддон для отображения иконки уровня 포인트 시스템을 사용중일 경우 사용자 이름 앞에 레벨 아이콘을 표시하도록 합니다. 레벨 아이콘은 모듈 > 포인트시스템에서 선택 가능합니다. @@ -31,11 +23,11 @@ This addon displays level icon in front of the user name when you are using the point system. You can choose the level icon on Module > Point System. - + Dieses Addon zeigt Level Icon vor dem Benutzernamen, wenn Sie die Punkte-System. Sie können wählen, der Level Icon in Modul> Point-System. - + Este addon muestra el nivel del ícono delante del nombre del usuario cuando es usado el sistema de puntos. Tu puedes elegir los icono de cada nivel en el módulo > Sistema de Puntos. @@ -43,5 +35,16 @@ Этот аддон отображает иконку уровня напротив имени пользователя, когда используется система поинтов. Вы можете выбрать иконку уровня на Модуле Системы Поинтов. - - + 0.1 + 2007-07-26 + + + 제로 + Zero + Zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/rainbow_link/conf/info.xml b/addons/rainbow_link/conf/info.xml index 5f16a09cc..1afb115f2 100644 --- a/addons/rainbow_link/conf/info.xml +++ b/addons/rainbow_link/conf/info.xml @@ -1,20 +1,12 @@ - - - 레인보우 링크 애드온 - Rainbow链接 - Rainbow Link Addon - Rainbow Link Addon - Adición Enlace Arco Iris - レインボーリンクアドオン - Аддон для радужных ссылок - - dynamicdrive.com - dynamicdrive.com - dynamicdrive.com - dynamicdrive.com - dynamicdrive.com - dynamicdrive.com - dynamicdrive.com + + + 레인보우 링크 애드온 + Rainbow链接 + Rainbow Link Addon + Rainbow Link Addon + Adición Enlace Arco Iris + レインボーリンクアドオン + Аддон для радужных ссылок rainbow.js를 header에 추가하여 링크가 걸린 글의 색을 무지개색으로 나타냅니다. 이 애드온의 rainbow.js는 <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>에 저작권이 있습니다. @@ -27,13 +19,13 @@ This addon will insert the "rainbow.js" file to the header, which will make the linked text to get the chameleon(rainbow) color change effect. "rainbow.js" Copyrightⓒ2007 <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>. - + Dieses Addon wird ersetzt durch die "rainbow.js"-Datei auf den Kopf, wodurch der verlinkten Text, um das Chamäleon (Regenbogen) Farbwechsel-Effekt. "rainbow.js" Copyright ⓒ 2007 <a href="http://www.dynamicdrive.com" target="_blank"> Dynamicdrive.com </a>. incluye rainbow.js en header para mostrar enlaces en colores de arco iris. - <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a> tiene derecho de autor sobre rainbow.js + <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a> tiene derecho de autor sobre rainbow.js 「rainbow.js」をヘッダーに追加し、リンクされている文字列の色を虹色で表示します。この機能拡張の「 rainbow.js」は「<a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>」に著作権があります。 @@ -42,5 +34,16 @@ Этот аддон добавляет файл с именем "rainbow.js" в заголовки HTML, и тогда связанный текс приобретает эффект смены цвета, подобно радуге или хамелеону. "rainbow.js" Copyrightⓒ2007 <a href="http://www.dynamicdrive.com" target="_blank">Dynamicdrive.com</a>. - - + 0.1 + 2007-02-28 + + + dynamicdrive.com + dynamicdrive.com + dynamicdrive.com + dynamicdrive.com + dynamicdrive.com + dynamicdrive.com + dynamicdrive.com + + \ No newline at end of file diff --git a/addons/referer/conf/info.xml b/addons/referer/conf/info.xml index c1c540a40..7bb8c674a 100644 --- a/addons/referer/conf/info.xml +++ b/addons/referer/conf/info.xml @@ -1,40 +1,29 @@ - - - 리퍼러 수집기 - リファラー コレクター - 反向链接统计 - Referer Collector - Referer Collector - Referer Collector - Сборщик рефералов - - haneul - Haneul - haneul - haneul - haneul - haneul - haneul - - Referer log를 수집합니다. - - - リファラーログを収集します。 - - - 记录反向链接统计数据。 - - - Collect referer log and statistics. - - - Sammeln Sie Referer-Log und Statistik. - - - Recoger referer log y estadísticas. - - - Собирает лог рефералов и статистику. - - - + + + 리퍼러 수집기 + リファラー コレクター + 反向链接统计 + Referer Collector + Referer Collector + Referer Collector + Сборщик рефералов + Referer log를 수집합니다. + リファラーログを収集します。 + 记录反向链接统计数据。 + Collect referer log and statistics. + Sammeln Sie Referer-Log und Statistik. + Recoger referer log y estadísticas. + Собирает лог рефералов и статистику. + 0.1 + 2007-11-26 + + + haneul + Haneul + haneul + haneul + haneul + haneul + haneul + + \ No newline at end of file diff --git a/addons/resize_image/conf/info.xml b/addons/resize_image/conf/info.xml index 1ee0462ba..e5985dccf 100644 --- a/addons/resize_image/conf/info.xml +++ b/addons/resize_image/conf/info.xml @@ -1,37 +1,40 @@ - - - 본문내 이미지 조절 애드온 - 内容区图片缩放插件 - Image Resizer - Imagen de control add-on bonmunnae - Image контроля добавить-на bonmunnae - Image-Add-on bonmunnae - - zero - zero - zero - zero - zero - zero - zero - zero + + + 본문내 이미지 조절 애드온 + 内容区图片缩放插件 + Image Resizer + Imagen de control add-on bonmunnae + Image контроля добавить-на bonmunnae + Image-Add-on bonmunnae 본문내에 삽입된 이미지의 크기를 본문크기에 맞게 하고 클릭시 원본을 보여주는 애드온입니다. 自动调整主题内容区内的图片大小,点击将显示原始大小的插件。 - + This addon resizes images inserted in the article, and shows original image when you click on them. - + La imagen corporal se inserta dentro del cuerpo para que se adapte al tamaño de la muestra original cuando hago clic en los add-ons. - + Орган изображение вставляется внутрь тела с учетом размера первоначального шоу, когда я нажимаю на надстройки. - + Body Bild eingefügt im Inneren des Körpers zu passen die Größe des Originals zeigen, wenn ich darauf klicke auf das Add-ons. - - + 0.1 + 2008-04-22 + + + zero + zero + zero + zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/addons/tccommentnotify/conf/info.xml b/addons/tccommentnotify/conf/info.xml new file mode 100644 index 000000000..1444320d9 --- /dev/null +++ b/addons/tccommentnotify/conf/info.xml @@ -0,0 +1,14 @@ + + + 댓글알리미 애드온 + Comment Notifier Addon + 댓글알리미를 지원하는 애드온입니다. + This addon enables Comment Notifier module. + 0.2 + 2008-06-02 + + + haneul + haneul + + \ No newline at end of file diff --git a/addons/tccommentnotify/tccommentnotify.addon.php b/addons/tccommentnotify/tccommentnotify.addon.php new file mode 100644 index 000000000..ed178628b --- /dev/null +++ b/addons/tccommentnotify/tccommentnotify.addon.php @@ -0,0 +1,36 @@ +procNotifyReceived(); + return; + } + + if($called_position == "after_module_proc") + { + $oModel = &getModel('tccommentnotify'); + if($oModel->checkShouldNotify()) + { + $scriptCode = << + // + + +EndOfScript; + Context::addHtmlHeader($scriptCode); + } + } +?> diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 8acfff40c..989a3156b 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -185,6 +185,14 @@ if(is_object($oDB)&&method_exists($oDB, 'close')) $oDB->close(); } + /** + * @brief DB의 및 기타 정보 load + **/ + function loadDBInfo() { + $oContext = &Context::getInstance(); + return $oContext->_loadDBInfo(); + } + /** * @brief DB 정보를 설정하고 DB Type과 DB 정보를 return **/ @@ -478,10 +486,11 @@ foreach($_REQUEST as $key => $val) { if($key == "page" || $key == "cpage" || substr($key,-3)=="srl") $val = (int)$val; - if(is_array($val)) { - for($i=0;$i $v) { + if(get_magic_quotes_gpc()) $v = stripslashes($v); + $v = trim($v); + $val[$k] = $v; } } else { if(get_magic_quotes_gpc()) $val = stripslashes($val); @@ -1013,17 +1022,10 @@ /** * @brief 내용의 에디터 컴포넌트 코드를 변환 **/ - function _fixQuotation($matches) { - $key = $matches[1]; - $val = $matches[2]; - if(substr($val,0,1)!='"') $val = '"'.$val.'"'; - return sprintf('%s=%s', $key, $val); - } - function transEditorComponent($matches) { // IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌 $buff = $matches[0]; - $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, _fixQuotation), $buff); + $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff); $buff = str_replace("&","&",$buff); // 에디터 컴포넌트에서 생성된 코드 diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index e7cdb0e10..9e973a3b6 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -496,7 +496,7 @@ if(!is_array($tables)) $tables = array($tables); foreach($tables as $alias => $table) { $filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table); - @unlink($filename); + FileHandler::removeFile($filename); FileHandler::writeFile( $filename, '' ); } diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 5742b9963..72c65984a 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -9,10 +9,21 @@ class FileHandler extends Handler { + /** + * @brief 대상 파일, 디렉토리의 절대경로를 반환 + **/ + function getRealPath($source) { + $temp = explode('/', $source); + if($temp[0] == '.') $source = _XE_PATH_.substr($source, 2); + return $source; + } + /** * @brief 파일의 내용을 읽어서 return **/ function readFile($file_name) { + $file_name = FileHandler::getRealPath($file_name); + if(!file_exists($file_name)) return; $filesize = filesize($file_name); if($filesize<1) return; @@ -35,6 +46,8 @@ * @brief $buff의 내용을 파일에 쓰기 **/ function writeFile($file_name, $buff, $mode = "w") { + $file_name = FileHandler::getRealPath($file_name); + $pathinfo = pathinfo($file_name); $path = $pathinfo['dirname']; if(!is_dir($path)) FileHandler::makeDir($path); @@ -47,38 +60,58 @@ @chmod($file_name, 0644); } + /** + * @brief 파일 삭제 + **/ + function removeFile($file_name) { + $file_name = FileHandler::getRealPath($file_name); + if(file_exists($file_name)) @unlink($file_name); + } + + /** + * @brief 파일이름이나 디렉토리명이나 위치 변경 + **/ + function rename($source, $target) { + $source = FileHandler::getRealPath($source); + $target = FileHandler::getRealPath($target); + @rename($source, $target); + } + /** * @brief 특정 디렉토리를 이동 **/ function moveDir($source_dir, $target_dir) { - if(!is_dir($source_dir)) return; - - if(!is_dir($target_dir)) { - FileHandler::makeDir($target_dir); - @unlink($target_dir); - } - - @rename($source_dir, $target_dir); + FileHandler::rename($source_dir, $target_dir); } /** * @brief $path내의 파일들을 return ('.', '..', '.로 시작하는' 파일들은 제외) **/ function readDir($path, $filter = '', $to_lower = false, $concat_prefix = false) { + $path = FileHandler::getRealPath($path); + if(substr($path,-1)!='/') $path .= '/'; if(!is_dir($path)) return array(); + $oDir = dir($path); while($file = $oDir->read()) { if(substr($file,0,1)=='.') continue; + if($filter && !preg_match($filter, $file)) continue; + if($to_lower) $file = strtolower($file); + if($filter) $file = preg_replace($filter, '$1', $file); else $file = $file; - if($concat_prefix) $file = $path.$file; + if($concat_prefix) { + $file = sprintf('%s%s', str_replace(_XE_PATH_, '', $path), $file); + } + $output[] = $file; } if(!$output) return array(); + return $output; } @@ -108,6 +141,7 @@ * @brief 지정된 디렉토리 이하 모두 파일을 삭제 **/ function removeDir($path) { + $path = FileHandler::getRealPath($path); if(!is_dir($path)) return; $directory = dir($path); while($entry = $directory->read()) { @@ -123,6 +157,25 @@ @rmdir($path); } + /** + * @brief 지정된 디렉토리에 내용이 없으면 삭제 + **/ + function removeBlankDir($path) { + $item_cnt = 0; + + $path = FileHandler::getRealPath($path); + if(!is_dir($path)) return; + $directory = dir($path); + while($entry = $directory->read()) { + if ($entry == "." || $entry == "..") continue; + if (is_dir($path."/".$entry)) $item_cnt = FileHandler::removeBlankDir($path.'/'.$entry); + } + $directory->close(); + + if($item_cnt < 1) @rmdir($path); + } + + /** * @biref 지정된 디렉토리를 제외한 모든 파일을 삭제 **/ @@ -145,6 +198,8 @@ * @brief 원격파일을 다운받아서 특정 위치에 저장 **/ function getRemoteFile($url, $target_filename) { + $target_filename = FileHandler::getRealPath($target_filename); + $url_info = parse_url($url); if(!$url_info['port']) $url_info['port'] = 80; @@ -167,7 +222,7 @@ } */ - $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()); + $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); @@ -191,6 +246,9 @@ * @brief 특정 이미지 파일을 특정 위치로 옮김 (옮길때 이미지의 크기를 리사이징할 수 있음..) **/ function createImageFile($source_file, $target_file, $resize_width = 0, $resize_height = 0, $target_type = '', $thumbnail_type = 'crop') { + $source_file = FileHandler::getRealPath($source_file); + $target_file = FileHandler::getRealPath($target_file); + if(!file_exists($source_file)) return; if(!$resize_width) $resize_width = 100; if(!$resize_height) $resize_height = $resize_width; @@ -219,10 +277,10 @@ // 이미지 정보가 정해진 크기보다 크면 크기를 바꿈 (%를 구해서 처리) if($resize_width > 0 && $width >= $resize_width) $width_per = $resize_width / $width; - else $width_per = $width / $resize_width; + else $width_per = 1; if($resize_height>0 && $height >= $resize_height) $height_per = $resize_height / $height; - else $height_per = $height / $resize_height; + else $height_per = 1; if($thumbnail_type == 'ratio') { if($width_per>$height_per) $per = $height_per; @@ -249,31 +307,27 @@ // 원본 이미지의 타입으로 임시 이미지 생성 switch($type) { - case 'gif' : + case 'gif' : $source = @imagecreatefromgif($source_file); break; // jpg - case 'jpeg' : - case 'jpg' : + case 'jpeg' : + case 'jpg' : $source = @imagecreatefromjpeg($source_file); break; // png - case 'png' : + case 'png' : $source = @imagecreatefrompng($source_file); break; // bmp - case 'wbmp' : - case 'bmp' : + case 'wbmp' : + case 'bmp' : $source = @imagecreatefromwbmp($source_file); break; default : return; } - // 디렉토리 생성 - $path = preg_replace('/\/([^\.^\/]*)\.(gif|png|jpg|jpeg|bmp|wbmp)$/i','',$target_file); - FileHandler::makeDir($path); - // 원본 이미지의 크기를 조절해서 임시 이미지에 넣음 $new_width = (int)($width * $per); $new_height = (int)($height * $per); @@ -289,26 +343,37 @@ if($source) { if(function_exists('imagecopyresampled')) @imagecopyresampled($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); else @imagecopyresized($thumb, $source, $x, $y, 0, 0, $new_width, $new_height, $width, $height); - } + } else return false; + + // 디렉토리 생성 + $path = dirname($target_file); + if(!is_dir($path)) FileHandler::makeDir($path); // 파일을 쓰고 끝냄 switch($target_type) { case 'gif' : - @imagegif($thumb, $target_file, 100); + $output = @imagegif($thumb, $target_file); break; case 'jpeg' : case 'jpg' : - @imagejpeg($thumb, $target_file, 100); + $output = @imagejpeg($thumb, $target_file, 100); break; case 'png' : - @imagepng($thumb, $target_file, 9); + $output = @imagepng($thumb, $target_file, 9); break; case 'wbmp' : case 'bmp' : - @imagewbmp($thumb, $target_file, 100); + $output = @imagewbmp($thumb, $target_file, 100); break; } + + @imagedestroy($thumb); + @imagedestroy($source); + + if(!$output) return false; @chmod($target_file, 0644); + + return true; } } ?> diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 3a69da858..ec6ad652f 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -45,13 +45,13 @@ if(!$tpl_file) $tpl_file = $tpl_path.$tpl_filename; // tpl_file이 비어 있거나 해당 파일이 없으면 return - if(!$tpl_file || !file_exists($tpl_file)) return; + if(!$tpl_file || !file_exists(FileHandler::getRealPath($tpl_file))) return; $this->tpl_path = $tpl_path; $this->tpl_file = $tpl_file; // compiled된(or 될) 파일이름을 구함 - $compiled_tpl_file = $this->_getCompiledFileName($tpl_file); + $compiled_tpl_file = FileHandler::getRealPath($this->_getCompiledFileName($tpl_file)); // 일단 컴파일 $buff = $this->_compile($tpl_file, $compiled_tpl_file); @@ -61,7 +61,7 @@ if(__DEBUG__==3 ) $GLOBALS['__template_elapsed__'] += getMicroTime() - $start; - return $output; + return $output; } /** @@ -83,9 +83,9 @@ function _compile($tpl_file, $compiled_tpl_file) { if(!file_exists($compiled_tpl_file)) return $this->_compileTplFile($tpl_file, $compiled_tpl_file); - $source_ftime = filemtime($tpl_file); + $source_ftime = filemtime(FileHandler::getRealPath($tpl_file)); $target_ftime = filemtime($compiled_tpl_file); - if($source_ftime>$target_ftime || $target_ftime < filemtime('./classes/template/TemplateHandler.class.php') ) return $this->_compileTplFile($tpl_file, $compiled_tpl_file); + if($source_ftime>$target_ftime || $target_ftime < filemtime(_XE_PATH_.'classes/template/TemplateHandler.class.php') ) return $this->_compileTplFile($tpl_file, $compiled_tpl_file); } /** @@ -103,7 +103,7 @@ // include 변경 //$buff = preg_replace_callback('!<\!--#include\(([^\)]*?)\)-->!is', array($this, '_compileIncludeToCode'), $buff); - // 이미지 태그 img의 src의 값이 http:// 나 / 로 시작하지 않으면 제로보드의 root경로부터 시작하도록 변경 + // 이미지 태그 img의 src의 값이 http:// 나 / 로 시작하지 않으면 제로보드의 root경로부터 시작하도록 변경 $buff = preg_replace_callback('/(img|input)([^>]*)src=[\'"]{1}(?!http)(.*?)[\'"]{1}/is', array($this, '_compileImgPath'), $buff); // 변수를 변경 @@ -176,19 +176,39 @@ case 'endif' : case 'endfor' : case 'endforeach' : + case 'endswitch' : $output = '}'; break; + case 'break' : + $output = 'break;'; + break; + case 'default' : + $output = 'default :'; + break; + case 'break@default' : + $output = 'break; default :'; + break; default : - if(substr($code,0,4)=='else') { + $suffix = '{'; + + if(substr($code, 0, 4) == 'else') { $code = '}'.$code; - } elseif(substr($code,0,7)=='foreach') { - $tmp_str = substr($code,8); + } elseif(substr($code, 0, 7) == 'foreach') { + $tmp_str = substr($code, 8); $tmp_arr = explode(' ', $tmp_str); $var_name = $tmp_arr[0]; - if(substr($var_name,0,1)=='$') $prefix = sprintf('if(count($__Context->%s)) ', substr($var_name,1)); - else $prefix = sprintf('if(count(%s)) ', $var_name); - } - $output = preg_replace('/\$([a-zA-Z0-9\_\-]+)/i','$__Context->\\1', $code).'{'; + if(substr($var_name, 0, 1) == '$') { + $prefix = sprintf('if(count($__Context->%s)) ', substr($var_name, 1)); + } else { + $prefix = sprintf('if(count(%s)) ', $var_name); + } + } elseif(substr($code, 0, 4) == 'case') { + $suffix = ':'; + } elseif(substr($code, 0, 10) == 'break@case') { + $code = 'break; case'.substr($code, 10); + $suffix = ':'; + } + $output = preg_replace('/\$([a-zA-Z0-9\_\-]+)/i', '$__Context->\\1', $code.$suffix); break; } diff --git a/classes/widget/WidgetHandler.class.php b/classes/widget/WidgetHandler.class.php index bf05bd2f7..d1c2c0161 100644 --- a/classes/widget/WidgetHandler.class.php +++ b/classes/widget/WidgetHandler.class.php @@ -20,6 +20,15 @@ $widget_sequence = $args->widget_sequence; $widget_cache = $args->widget_cache; + // args값에서 urldecode를 해줌 + $object_vars = get_object_vars($args); + if(count($object_vars)) { + foreach($object_vars as $key => $val) { + if(in_array($key, array('body','class','style','widget_sequence','widget','widget_padding_left','widget_padding_top','widget_padding_bottom','widget_padding_right'))) continue; + $args->{$key} = utf8RawUrlDecode($val); + } + } + /** * 캐시 번호와 캐시 값이 아예 없으면 바로 데이터를 추출해서 리턴 **/ @@ -65,7 +74,7 @@ FileHandler::writeFile($cache_file, $widget_content); // lock 파일 제거 - @unlink($lock_file); + FileHandler::removeFile($lock_file); return $widget_content; } diff --git a/common/js/common.js b/common/js/common.js index d3ff24680..4788dee02 100644 --- a/common/js/common.js +++ b/common/js/common.js @@ -536,6 +536,7 @@ function doDocumentSave(obj) { var oFilter = new XmlJsFilter(obj.form, "member", "procMemberSaveDocument", completeDocumentSave); oFilter.addResponseItem("error"); oFilter.addResponseItem("message"); + oFilter.addResponseItem("document_srl"); oFilter.proc(); editorRelKeys[editor_sequence]['content'].value = prev_content; @@ -543,6 +544,7 @@ function doDocumentSave(obj) { } function completeDocumentSave(ret_obj) { + xGetElementsByAttribute('input', 'name', 'document_srl')[0].value = ret_obj['document_srl']; alert(ret_obj['message']); } @@ -562,7 +564,7 @@ function doDocumentSelect(document_srl) { } // 게시글을 가져와서 등록하기 - opener.location.href = opener.current_url.setQuery('document_srl', document_srl); + opener.location.href = opener.current_url.setQuery('document_srl', document_srl).setQuery('act', 'dispBoardWrite'); window.close(); } @@ -603,11 +605,19 @@ function clickCheckBoxAll(form, name) { } /* 관리자가 문서를 관리하기 위해서 선택시 세션에 넣음 */ +var addedDocument = new Array(); function doAddDocumentCart(obj) { var srl = obj.value; + addedDocument[addedDocument.length] = srl; + setTimeout(function() { callAddDocumentCart(addedDocument.length); }, 100); +} + +function callAddDocumentCart(document_length) { + if(addedDocument.length<1 || document_length != addedDocument.length) return; var params = new Array(); - params["srl"] = srl; + params["srls"] = addedDocument.join(","); exec_xml("document","procDocumentAdminAddCart", params, null); + addedDocument = new Array(); } /* ff의 rgb(a,b,c)를 #... 로 변경 */ diff --git a/common/js/xml_handler.js b/common/js/xml_handler.js index 28f08730d..4a5f24905 100644 --- a/common/js/xml_handler.js +++ b/common/js/xml_handler.js @@ -50,7 +50,7 @@ function xml_response_filter(oXml, callback_func, response_tags, callback_func_a // xml handler function xml_handler() { - this.obj_xmlHttp = null; + this.objXmlHttp = null; this.method_name = null; this.xml_path = request_uri+"index.php"; @@ -65,7 +65,7 @@ function xml_handler() { this.toZMsgObject = xml_handlerToZMsgObject; this.parseXMLDoc = xml_parseXmlDoc; - this.obj_xmlHttp = this.getXmlHttp(); + this.objXmlHttp = this.getXmlHttp(); } function zGetXmlHttp() { @@ -106,16 +106,16 @@ function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, } } - if(this.obj_xmlHttp.readyState!=0) { - this.obj_xmlHttp.abort(); - this.obj_xmlHttp = this.getXmlHttp(); + if(this.objXmlHttp.readyState!=0) { + this.objXmlHttp.abort(); + this.objXmlHttp = this.getXmlHttp(); } - this.obj_xmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)}; + this.objXmlHttp.onreadystatechange = function () {callBackFunc(xmlObj, callBackFunc2, response_tags, callback_func_arg, fo_obj)}; // 모든 xml데이터는 POST방식으로 전송. try-cacht문으로 오류 발생시 대처 try { - this.obj_xmlHttp.open("POST", this.xml_path, true); + this.objXmlHttp.open("POST", this.xml_path, true); } catch(e) { alert(e); @@ -132,7 +132,7 @@ function xml_handlerRequest(callBackFunc, xmlObj, callBackFunc2, response_tags, waiting_obj.style.visibility = "visible"; } - this.obj_xmlHttp.send(rd); + this.objXmlHttp.send(rd); } function xml_handlerSetPath(path) { @@ -141,7 +141,7 @@ function xml_handlerSetPath(path) { function xml_handlerReset() { - this.obj_xmlHttp = this.getXmlHttp(); + this.objXmlHttp = this.getXmlHttp(); this.params = new Array(); } @@ -150,8 +150,8 @@ function xml_handlerAddParam(key, val) { } function xml_handlerGetResponseXML() { - if(this.obj_xmlHttp && this.obj_xmlHttp.readyState == 4 && isDef(this.obj_xmlHttp.responseXML)) { - var xmlDoc = this.obj_xmlHttp.responseXML; + if(this.objXmlHttp && this.objXmlHttp.readyState == 4 && isDef(this.objXmlHttp.responseXML)) { + var xmlDoc = this.objXmlHttp.responseXML; this.reset(); return xmlDoc; } diff --git a/common/lang/fr.lang.php b/common/lang/fr.lang.php index c04fc4626..88611ec97 100644 --- a/common/lang/fr.lang.php +++ b/common/lang/fr.lang.php @@ -62,7 +62,7 @@ $lang->cmd_publish = "Publier"; $lang->cmd_layout_setup = 'Configurer la Mise en page'; $lang->cmd_layout_edit = 'Editer la Mise en page'; - $lang->cmd_search_by_ipaddress = 'IP주소로 검색'; + $lang->cmd_search_by_ipaddress = 'Recherce par l\'Address IP'; $lang->enable = 'Valide'; $lang->disable = 'Invalide'; @@ -83,7 +83,7 @@ $lang->writer = 'Auteur'; $lang->user_name = 'Nom d\'utilisateur'; $lang->nick_name = 'Surnom'; - $lang->email_address = 'Courriel'; + $lang->email_address = 'Mél'; $lang->homepage = 'Page d\'accueil'; $lang->blog = 'Blogue'; $lang->birthday = 'Anniversaire'; @@ -222,7 +222,7 @@ $lang->column_type = 'Types des colonnes'; $lang->column_type_list['text'] = 'Texte en une seul ligne'; $lang->column_type_list['homepage'] = 'URL'; - $lang->column_type_list['email_address'] = 'Courriel'; + $lang->column_type_list['email_address'] = 'Mél'; $lang->column_type_list['tel'] = 'Numéro de Telephone'; $lang->column_type_list['textarea'] = 'Texte en plusieurs lignes'; $lang->column_type_list['checkbox'] = 'Case à cocher (multichoix)'; diff --git a/config/config.inc.php b/config/config.inc.php index 357bbdd34..19177c439 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -14,7 +14,7 @@ * 이 내용은 제로보드XE의 버전을 관리자 페이지에 표시하기 위한 용도이며 * config.inc.php의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야 함 **/ - define('__ZBXE_VERSION__', '1.0.4'); + define('__ZBXE_VERSION__', '1.0.5'); /** * @brief 디버깅 메세지 출력 diff --git a/config/func.inc.php b/config/func.inc.php index 3044ac8d4..e3690d9d5 100644 --- a/config/func.inc.php +++ b/config/func.inc.php @@ -382,9 +382,6 @@ * @brief 주어진 숫자를 주어진 크기로 recursive하게 잘라줌 * @param no 주어진 숫자 * @param size 잘라낼 크기 - * - * ex) 12, 3 => 012/ - * ex) 1234, 3 => 123/004/ **/ function getNumberingPath($no, $size=3) { $mod = pow(10, $size); @@ -419,13 +416,58 @@ // XSS 사용을 위한 이벤트 제거 $content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeJSEvent, $content); + /** + * 이미지나 동영상등의 태그에서 src에 관리자 세션을 악용하는 코드를 제거 + * - 취약점 제보 : 김상원님 + **/ + $content = preg_replace_callback("!<([a-z]+)(.*?)>!is", removeSrcHack, $content); + return $content; } function removeJSEvent($matches) { $tag = strtolower($matches[1]); if($tag == "a" && preg_match('/href=("|\'?)javascript:/i',$matches[2])) $matches[0] = preg_replace('/href=("|\'?)javascript:/i','href=$1_javascript:', $matches[0]); - return preg_replace('/on([a-z]+)=/i','_on$1=',$matches[0]); + return preg_replace('/ on([a-z]+)=/i',' _on$1=',$matches[0]); + } + + function removeSrcHack($matches) { + $tag = $matches[1]; + + $buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0])); + $buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff); + + $oXmlParser = new XmlParser(); + $xml_doc = $oXmlParser->parse($buff); + + // src값에 module=admin이라는 값이 입력되어 있으면 이 값을 무효화 시킴 + $src = $xml_doc->{$tag}->attrs->src; + if($src) { + $url_info = parse_url($src); + $query = $url_info['query']; + $queries = explode('&', $query); + $cnt = count($queries); + for($i=0;$i<$cnt;$i++) { + $pos = strpos($queries[$i],'='); + if($pos === false) continue; + $key = strtolower(trim(substr($queries[$i], 0, $pos))); + $val = strtolower(trim(substr($queries[$i] ,$pos+1))); + if(($key == 'module' && $val == 'admin') || $key == 'act' && preg_match('/admin/i',$val)) return sprintf("<%s>",$tag); + } + } + + return $matches[0]; + + } + + /** + * @brief attribute의 value를 " 로 둘러싸도록 처리하는 함수 + **/ + function fixQuotation($matches) { + $key = $matches[1]; + $val = $matches[2]; + if(substr($val,0,1)!='"') $val = '"'.$val.'"'; + return sprintf('%s=%s', $key, $val); } // hexa값을 RGB로 변환 @@ -472,8 +514,9 @@ * 현재 요청받은 스크립트 경로를 return **/ function getScriptPath() { - $url = $_SERVER['PHP_SELF']?$_SERVER['PHP_SELF']:($_SERVER['REQUEST_URI']?$_SERVER['REQUEST_URI']:$_SERVER['URL']); - return preg_replace('/index.php/i','',$url); + static $url = null; + if($url == null) $url = preg_replace('/\/tools\//i','/',preg_replace('/index.php$/i','',str_replace('\\','/',$_SERVER['SCRIPT_NAME']))); + return $url; } /** diff --git a/layouts/xe_blog/conf/info.xml b/layouts/xe_blog/conf/info.xml index fc1f9ecfc..b162bffe1 100644 --- a/layouts/xe_blog/conf/info.xml +++ b/layouts/xe_blog/conf/info.xml @@ -1,78 +1,82 @@ - - + + 제로보드XE 블로그 기본 스킨 ZBXEブログのデフォルトスキン Zeroboard XE博客默认皮肤 Default Skin of Zeroboard XE blog - Standard-Skin von Zeroboard XE Blog - Cuidado de la Piel por defecto de Zeroboard XE blog - По умолчанию Кожа Zeroboard XE блоге - + Standard-Skin von Zeroboard XE Blog + Cuidado de la Piel por defecto de Zeroboard XE blog + По умолчанию Кожа Zeroboard XE блоге + + 제로보드XE 블로그 기본 스킨입니다. + 디자인 : 서기정 (http://blog.naver.com/addcozy) + HTML/CSS : 소지훈 + + + ゼロボードXEブログの基本スキンです。 + デザイン:ソギジョン (http://blog.naver.com/addcozy) + HTML/CSS : Ju-Hoon So + + + Zeroboard XE博客默认皮肤。 + 设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML/CSS : Ju-Hoon So + + + This is default skin of Zeroboard XE blog. + Design : Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML/CSS : Ju-Hoon So + + + Dies ist der Standard-Skin Zeroboard XE-Blog. + Design: Ki-Seo Jeong (http://blog.naver.com/addcozy) + HTML / CSS: Ju-Hoon Also + + + Esto es por defecto de la piel Zeroboard XE blog. + Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML/CSS : Ju-Hoon So + + + Это умолчанию кожи Zeroboard XE блоге. + Дизайн: Ki-Jeong Seo (http://blog.naver.com/addcozy) + HTML/CSS : Ju-Hoon So + + 0.1 + 2008-02-26 + + zero zero zero zero - zero - zero - zero - - 제로보드XE 블로그 기본 스킨입니다. - 디자인 : 서기정 (http://blog.naver.com/addcozy) - HTML/CSS : 소지훈 - - - ゼロボードXEブログの基本スキンです。 - デザイン:ソギジョン (http://blog.naver.com/addcozy) - HTML/CSS : Ju-Hoon So - - - Zeroboard XE博客默认皮肤。 - 设计 : Ki-Jeong Seo (http://blog.naver.com/addcozy) - HTML/CSS : Ju-Hoon So - - - This is default skin of Zeroboard XE blog. - Design : Ki-Jeong Seo (http://blog.naver.com/addcozy) - HTML/CSS : Ju-Hoon So - - - Dies ist der Standard-Skin Zeroboard XE-Blog. - Design: Ki-Seo Jeong (http://blog.naver.com/addcozy) - HTML / CSS: Ju-Hoon Also - - - Esto es por defecto de la piel Zeroboard XE blog. - Diseño: Ki-Jeong Seo (http://blog.naver.com/addcozy) - HTML/CSS : Ju-Hoon So - - - Это умолчанию кожи Zeroboard XE блоге. - Дизайн: Ki-Jeong Seo (http://blog.naver.com/addcozy) - HTML/CSS : Ju-Hoon So - + zero + zero + zero + 컬러셋 カラーセット 颜色 Colorset - Colorset + Colorset Set de Colores - Colorset + Colorset 원하시는 컬러셋을 선택해주세요. 希望するカラーセットを選択してください。 请选择颜色。 Please select a colorset you want. - Bitte wählen Sie ein colorset Sie wollen. - Выберите colorset хотите. + Bitte wählen Sie ein colorset Sie wollen. + Выберите colorset хотите. Seleccione set de colores que desea. 파란색 (기본) 青 (default) 蓝色 (default) Blue (default) - Blue (Standard) + Blue (Standard) Azul (default) Blue (default) blue @@ -82,7 +86,7 @@ 灰色背景 灰色背景 Gray - Gray + Gray Gray Gray gray @@ -92,9 +96,9 @@ Orange Orange Orange - Orange - Orange - Orange + Orange + Orange + Orange orange @@ -102,9 +106,9 @@ Violet Violet Violet - Violett - Violet - Violet + Violett + Violet + Violet violet @@ -112,9 +116,9 @@ 绿色 Green - Grün - Verde - Green + Grün + Verde + Green green @@ -123,75 +127,76 @@ 기본 모듈 默认模块 Basic module - Basismodul - Módulo Básico - Основной модуль + Basismodul + Módulo Básico + Основной модуль 기본 모듈을 지정해주시면 레이아웃에서 표시되는 위젯들이 정상적으로 동작을 하게 됩니다 기본 모듈을 지정해주시면 레이아웃에서 표시되는 위젯들이 정상적으로 동작을 하게 됩니다 为了让博客系统中的控件正常运作,在这里必须得指定默认版面模块名。 The widgets that are being displayed in the layout will work properly if you select the basic module - Die Widgets, die angezeigt werden im Layout wird ordnungsgemäß funktionieren, wenn Sie das Basismodul - Los reproductores que se muestran en el diseño funcionará correctamente si selecciona el módulo básico - В виджеты, которые отображаются в формате будет работать правильно, если вы выбираете основной модуль + Die Widgets, die angezeigt werden im Layout wird ordnungsgemäß funktionieren, wenn Sie das Basismodul + Los reproductores que se muestran en el diseño funcionará correctamente si selecciona el módulo básico + В виджеты, которые отображаются в формате будет работать правильно, если вы выбираете основной модуль 배경 이미지 背景イメージ 背景图片 Background Image - Imagen de fondo - Фоновое изображение + Imagen de fondo + Фоновое изображение 배경 이미지를 사용하시려면 등록해주세요. 背景イメージを使う場合は、登録してください。 要想使用背景图片请在这里上传。 Please input if you want to use background image. - Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild. - Entre, por favor, si desea utilizar la imagen de fondo. - Введите, если вы хотите использовать фоновое изображение. + Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild. + Entre, por favor, si desea utilizar la imagen de fondo. + Введите, если вы хотите использовать фоновое изображение. 프로필 이미지 プロフィールイメージ 博客头像 Profile Image - Profil Bilder - Perfil de Imagen - Профиль Изображение + Profil Bilder + Perfil de Imagen + Профиль Изображение 프로필 이미지를 입력해 주세요 (가로 사이즈는 160px이 가장 보기 좋습니다) プロフィールイメージを入力してください(横幅は「160px」が一番適しています)。 请上传博客个性头像(推荐宽度为160px)。 Please input profile image (It is recommended to set width as 160px) - itte geben Sie Ihre Image-Profil (Es wird empfohlen, Breite 160px) - Por favor, el perfil de entrada de imagen (Se recomienda configurar el ancho de 160px) - Введите профиля изображения (Рекомендуется устанавливать ширину, 160px) + itte geben Sie Ihre Image-Profil (Es wird empfohlen, Breite 160px) + Por favor, el perfil de entrada de imagen (Se recomienda configurar el ancho de 160px) + Введите профиля изображения (Рекомендуется устанавливать ширину, 160px) 프로필 プロフィール 简介 Profile - Profil - Perfil - Профиль + Profil + Perfil + Профиль 간단한 프로필을 입력해주세요 簡単なプロフィールを入力してください。 请输入简单介绍。 Please input your simple profile - Bitte geben Sie Ihre Simple Profile - Por favor, introduzca su perfil simple - Введите простое профиль + Bitte geben Sie Ihre Simple Profile + Por favor, introduzca su perfil simple + Введите простое профиль + 상단 메뉴 上段メニュー 菜单 Top Menu - Top-Menü - Menú superior - Главное меню + Top-Menü + Menú superior + Главное меню 1 - + \ No newline at end of file diff --git a/layouts/xe_official/conf/info.xml b/layouts/xe_official/conf/info.xml index cac06e112..5382f5ce9 100644 --- a/layouts/xe_official/conf/info.xml +++ b/layouts/xe_official/conf/info.xml @@ -1,85 +1,89 @@ - - + + ZBXE 공식 사이트 레이아웃 ZBXEオフィシャルレイアウト ZBXE Official website layout - ZBXE Offizielle Website-Layout - ZBXE Официальный сайт макет + ZBXE Offizielle Website-Layout + ZBXE Официальный сайт макет Diseño oficial de la página web de ZBXE ZBXE 官方网站布局 - + + 제로보드XE 공식 사이트 레이아웃입니다. + 디자인 : 이소라 + 퍼블리싱 : 정찬명 + 레이아웃 제작 : zero + + + ゼロボードXEのオフィシャルサイトのレイアウトです。 + デザイン:イ ソラ + パブリシング:ジョン チャンミョン + レイアウト作成:Zero + + + This layout is the Zeroboard XE Official website layout. + Designer : So-Ra Lee + HTML/CSS : Chan-Myung Jeong + Layout producer : zero + + + Dieses Layout ist das Zeroboard XE Offizielle Website-Layout. + Designer: So-Ra Lee + HTML / CSS: Chan-Myung Jeong + Layout Hersteller: Zero + + + Этот формат является Zeroboard XE Официальный сайт компоновку. + Дизайнер: So-Ra Lee + HTML / CSS: Chan-Myung Jeong + Макет производителя: ноль + + + Este diseño is el diseño oficial de la página web de Zerobard XE. + Deseñador : So-Ra Lee + HTML/CSS : Chan-Myung Jeong + Productor del diseño : zero + + + Zeroboard XE官方网站布局。 + 设计 : So-Ra Lee + HTML/CSS : Chan-Myung Jeong + 布局 : zero + + 0.1 + 2007-08-01 + + zero Zero zero - zero - zero + zero + zero zero zero - - 제로보드XE 공식 사이트 레이아웃입니다. - 디자인 : 이소라 - 퍼블리싱 : 정찬명 - 레이아웃 제작 : zero - - - ゼロボードXEのオフィシャルサイトのレイアウトです。 - デザイン:イ ソラ - パブリシング:ジョン チャンミョン - レイアウト作成:Zero - - - This layout is the Zeroboard XE Official website layout. - Designer : So-Ra Lee - HTML/CSS : Chan-Myung Jeong - Layout producer : zero - - - Dieses Layout ist das Zeroboard XE Offizielle Website-Layout. - Designer: So-Ra Lee - HTML / CSS: Chan-Myung Jeong - Layout Hersteller: Zero - - - Этот формат является Zeroboard XE Официальный сайт компоновку. - Дизайнер: So-Ra Lee - HTML / CSS: Chan-Myung Jeong - Макет производителя: ноль - - - Este diseño is el diseño oficial de la página web de Zerobard XE. - Deseñador : So-Ra Lee - HTML/CSS : Chan-Myung Jeong - Productor del diseño : zero - - - Zeroboard XE官方网站布局。 - 设计 : So-Ra Lee - HTML/CSS : Chan-Myung Jeong - 布局 : zero - + 컬러셋 カラーセット 颜色 Colorset - Colorset - Colorset + Colorset + Colorset Set de colores 원하시는 컬러셋을 선택해주세요. 希望するカラーセットを選択してください。 请选择颜色。 Please select a colorset you want. - Bitte wählen Sie ein colorset Sie wollen. - Выберите colorset хотите. + Bitte wählen Sie ein colorset Sie wollen. + Выберите colorset хотите. Seleccione set de colores que desea. 기본 デフォルト Basic - Basic - Базовые + Basic + Базовые Básico 默认 default @@ -88,8 +92,8 @@ 검은색 Black - Schwarz - Черного + Schwarz + Черного Negro 黑色 black @@ -98,8 +102,8 @@ 하얀색 white - weiß - белый + weiß + белый Blanco 白色 white @@ -110,15 +114,15 @@ ロゴイメージ LOGO图片 Logo image - Logobildes - Изображения логотипа + Logobildes + Изображения логотипа Imagen del logotipo 레이아웃의 상단에 표시될 로고이미지를 입력하세요. (세로길이가 23px인 투명이미지가 가장 어울립니다) レイアウトの上段に表示されるロゴイメージを入力してください。 (縦幅が23pxである透明イメージが最も合います。) 请输入显示在布局顶部的LOGO图片。(高度为23px的透明图片为适。) Please input a logo image which will be displayed on the top of layout. (Transparent image with height of 23px is recommended.) - Bitte geben Sie ein Logo das Bild wird auf dem oberen Layout. (Transparent Bild mit einer Höhe von 23px wird empfohlen). - Введите логотип изображение, которое будет отображаться в верхней части формы. (Прозрачный изображение с высотой 23px рекомендуется.) + Bitte geben Sie ein Logo das Bild wird auf dem oberen Layout. (Transparent Bild mit einer Höhe von 23px wird empfohlen). + Введите логотип изображение, которое будет отображаться в верхней части формы. (Прозрачный изображение с высотой 23px рекомендуется.) Ingresar una imagen para logotipo. ( Se recomienda una imagen de fondo transparente con una altura de 23px. @@ -126,15 +130,15 @@ ホームページURL 主页地址 Homepage URL - Homepage URL - Домашняя страница URL + Homepage URL + Домашняя страница URL URL de la página web 로고를 클릭시에 이동할 홈 페이지 URL을 입력해 주세요. ロゴをクリックした時に移動するホームページのURLを入力してください。 点击网站LOGO时要移动的页面URL。 Please input the URL to redirect when user clicks the logo - Bitte geben Sie die URL umzuleiten, wenn Benutzer klickt das Logo - Пожалуйста, введите URL для перенаправления, когда пользователь нажимает логотип + Bitte geben Sie die URL umzuleiten, wenn Benutzer klickt das Logo + Пожалуйста, введите URL для перенаправления, когда пользователь нажимает логотип Ingresar el URL de la página web para redireccionar al pulsar el logotipo @@ -142,26 +146,27 @@ 背景イメージ 背景图片 Background Image - Hintergrundbild - Фоновое изображение - Imagen de fondo + Hintergrundbild + Фоновое изображение + Imagen de fondo 배경 이미지를 사용하시려면 등록해주세요. 背景イメージを使う場合は、登録してください。 要想使用背景图片请在这里上传。 Please input if you want to use background image. - Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild. - Введите, если вы хотите использовать фоновое изображение. + Bitte geben Sie, wenn Sie verwenden wollen Hintergrundbild. + Введите, если вы хотите использовать фоновое изображение. Ingresar imagen de fondo si desea usar. + 상단 메뉴 上段メニュー 主菜单 Top menu - Top Menü - Верхнее меню + Top Menü + Верхнее меню Menú Principal 3 @@ -170,10 +175,10 @@ 下段メニュー 底部菜单 Bottom menu - Bottom-Menü - Внизу меню + Bottom-Menü + Внизу меню Menú Inferior 1 - + \ No newline at end of file diff --git a/modules/addon/addon.admin.controller.php b/modules/addon/addon.admin.controller.php index e4c3ec1f0..506f25da7 100644 --- a/modules/addon/addon.admin.controller.php +++ b/modules/addon/addon.admin.controller.php @@ -57,7 +57,7 @@ $oAddonModel = &getAdminModel('addon'); $addon_list = $oAddonModel->getInsertedAddons(); foreach($addon_list as $addon => $val) { - if($val->is_used != 'Y' || !is_dir('./addons/'.$addon) ) continue; + if($val->is_used != 'Y' || !is_dir(_XE_PATH_.'addons/'.$addon) ) continue; $extra_vars = unserialize($val->extra_vars); $mid_list = $extra_vars->mid_list; @@ -69,7 +69,7 @@ $extra_vars = base64_encode($val->extra_vars); } - $buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("./addons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "./addons/%s/"; @include("./addons/%s/%s.addon.php"); }', $mid_list, $addon, $addon, $extra_vars, $addon, $addon, $addon); + $buff .= sprintf(' $_ml = unserialize(base64_decode("%s")); if(file_exists("%saddons/%s/%s.addon.php") && (!is_array($_ml) || in_array($_m, $_ml))) { unset($addon_info); $addon_info = unserialize(base64_decode("%s")); $addon_path = "%saddons/%s/"; @include("%saddons/%s/%s.addon.php"); }', $mid_list, _XE_PATH_, $addon, $addon, $extra_vars, _XE_PATH_, $addon, _XE_PATH_, $addon, $addon); } $buff = sprintf('', $buff); diff --git a/modules/addon/addon.admin.model.php b/modules/addon/addon.admin.model.php index 760c1c071..99d695e17 100644 --- a/modules/addon/addon.admin.model.php +++ b/modules/addon/addon.admin.model.php @@ -84,30 +84,82 @@ if(!$xml_obj) return; - $info->title = $xml_obj->title->body; - // 작성자 정보 - $addon_info->addon_name = $addon; - $addon_info->title = $xml_obj->title->body; - $addon_info->version = $xml_obj->attrs->version; - $addon_info->author->name = $xml_obj->author->name->body; - $addon_info->author->email_address = $xml_obj->author->attrs->email_address; - $addon_info->author->homepage = $xml_obj->author->attrs->link; - $addon_info->author->date = $xml_obj->author->attrs->date; - $addon_info->author->description = trim($xml_obj->author->description->body); + // 애드온 정보 + if($xml_obj->version && $xml_obj->attrs->version == '0.2') { + // addon format 0.2 + $addon_info->title = $xml_obj->title->body; + $addon_info->description = trim($xml_obj->description->body); + $addon_info->version = $xml_obj->version->body; + $addon_info->homepage = $xml_obj->link->body; + sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $addon_info->license = $xml_obj->license->body; + $addon_info->license_link = $xml_obj->license->attrs->link; + + if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author; + else $author_list = $xml_obj->author; + + foreach($author_list as $author) { + unset($author_obj); + $author_obj->name = $author->name->body; + $author_obj->email_address = $author->attrs->email_address; + $author_obj->homepage = $author->attrs->link; + $addon_info->author[] = $author_obj; + } + + } else { + // addon format 0.1 + $addon_info->addon_name = $addon; + $addon_info->title = $xml_obj->title->body; + $addon_info->description = trim($xml_obj->author->description->body); + $addon_info->version = $xml_obj->attrs->version; + sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); + $addon_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $author_obj->name = $xml_obj->author->name->body; + $author_obj->email_address = $xml_obj->author->attrs->email_address; + $author_obj->homepage = $xml_obj->author->attrs->link; + $addon_info->author[] = $author_obj; + + } // history - if(!is_array($xml_obj->history->author)) $history[] = $xml_obj->history->author; - else $history = $xml_obj->history->author; + if($xml_obj->history) { + if(!is_array($xml_obj->history)) $history[] = $xml_obj->history; + else $history = $xml_obj->history; - foreach($history as $item) { - unset($obj); - $obj->name = $item->name->body; - $obj->email_address = $item->attrs->email_address; - $obj->homepage = $item->attrs->link; - $obj->date = $item->attrs->date; - $obj->description = $item->description->body; - $addon_info->history[] = $obj; + foreach($history as $item) { + unset($obj); + + if($item->author) { + (!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author; + + foreach($obj->author_list as $author) { + unset($author_obj); + $author_obj->name = $author->name->body; + $author_obj->email_address = $author->attrs->email_address; + $author_obj->homepage = $author->attrs->link; + $obj->author[] = $author_obj; + } + } + + $obj->name = $item->name->body; + $obj->email_address = $item->attrs->email_address; + $obj->homepage = $item->attrs->link; + $obj->version = $item->attrs->version; + $obj->date = $item->attrs->date; + $obj->description = $item->description->body; + + if($item->log) { + (!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log; + + foreach($obj->log as $log) { + $obj->logs[] = $log->body; + } + } + + $addon_info->history[] = $obj; + } } // DB에 설정된 내역을 가져온다 diff --git a/modules/addon/conf/info.xml b/modules/addon/conf/info.xml index 5626239e4..bbe4c58b6 100644 --- a/modules/addon/conf/info.xml +++ b/modules/addon/conf/info.xml @@ -1,26 +1,30 @@ - - - 애드온 - Addon - Addon - 插件 - アドオン - Additions - Аддоны - - 제로 - zero - zero - zero - Zero - Zero - Zero + + + 애드온 + Addon + Addon + 插件 + アドオン + Additions + Аддоны 애드온을 등록하거나 사용/미사용을 설정하는 애드온 관리 모듈입니다. This module is for maintaining addons which can toggle use and disuse states. Este Módulo es para agregar Addons, como también el manejo de ellos. 登录插件或设置启用/禁用插件的管理模块。 アドオンの「登録、使用、未使用」などを設定する管理モジュールです。 - Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. + Ce module est pour les Additions de maintien qui peuvent basculer des états d'utilisation et de désuétude. Этот модуль служит для управления аддонами, использование которых Вы можете включать и выключать. - - + 0.1 + 2007-02-28 + manager + + + 제로 + zero + zero + zero + Zero + Zero + Zero + + \ No newline at end of file diff --git a/modules/addon/lang/en.lang.php b/modules/addon/lang/en.lang.php index 10cb2ab68..4029e1bcc 100644 --- a/modules/addon/lang/en.lang.php +++ b/modules/addon/lang/en.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = 'Summary of this Addon'; $lang->addon_maker = 'Author of this Addon'; + $lang->addon_license = 'License'; $lang->addon_history = 'Addon History'; $lang->about_addon_mid = "Addons can select targets.
(All targets will be selected when nothing is selected)"; diff --git a/modules/addon/lang/es.lang.php b/modules/addon/lang/es.lang.php index b814f6398..ffa27627f 100644 --- a/modules/addon/lang/es.lang.php +++ b/modules/addon/lang/es.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = 'Información de Addon'; $lang->addon_maker = 'Autor de Addon'; + $lang->addon_license = 'License'; $lang->addon_history = 'Historia de Addon '; $lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.
(모두 해제시 모든 대상에서 사용 가능합니다)"; diff --git a/modules/addon/lang/fr.lang.php b/modules/addon/lang/fr.lang.php index 148b4a59d..7feae3b77 100644 --- a/modules/addon/lang/fr.lang.php +++ b/modules/addon/lang/fr.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = 'Le résumé de la Compagnon'; $lang->addon_maker = 'L\'Auteur de la Compagnon'; + $lang->addon_license = 'License'; $lang->addon_history = 'L\'Histoire de la Compagnon'; $lang->about_addon_mid = "On peut choisir des objets dans lesquels la Compagnon soit utilisé.
(Tout sera choisi quand rien n'est choisi.)"; diff --git a/modules/addon/lang/jp.lang.php b/modules/addon/lang/jp.lang.php index 081305285..1cd5e1719 100644 --- a/modules/addon/lang/jp.lang.php +++ b/modules/addon/lang/jp.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = 'アドオン情報'; $lang->addon_maker = 'アドオン作者'; + $lang->addon_license = 'License'; $lang->addon_history = '変更内容'; $lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.
(모두 해제시 모든 대상에서 사용 가능합니다)"; diff --git a/modules/addon/lang/ko.lang.php b/modules/addon/lang/ko.lang.php index 5ec6e43f1..0b471e5fa 100644 --- a/modules/addon/lang/ko.lang.php +++ b/modules/addon/lang/ko.lang.php @@ -2,14 +2,15 @@ /** * @file ko.lang.php * @author zero (zero@nzeo.com) - * @brief 한국어 언어팩 + * @brief 한국어 언어팩 **/ - $lang->addon = "애드온"; + $lang->addon = '애드온'; $lang->addon_info = '애드온정보'; $lang->addon_maker = '애드온 제작자'; - $lang->addon_history = '변경 사항 '; + $lang->addon_license = '라이센스'; + $lang->addon_history = '변경 이력'; $lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.
(모두 해제시 모든 대상에서 사용 가능합니다)"; $lang->about_addon = '애드온은 html결과물을 출력하기 보다 동작을 제어하는 역할을 합니다.
원하시는 애드온을 on/ off하시는 것만으로 사이트 운영에 유용한 기능을 연동할 수 있습니다.'; diff --git a/modules/addon/lang/ru.lang.php b/modules/addon/lang/ru.lang.php index c87c767b7..8c1c02f78 100644 --- a/modules/addon/lang/ru.lang.php +++ b/modules/addon/lang/ru.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = 'Информация об аддоне'; $lang->addon_maker = 'Автор аддона'; + $lang->addon_license = 'License'; $lang->addon_history = 'История аддона'; $lang->about_addon_mid = "애드온이 사용될 대상을 지정할 수 있습니다.
(모두 해제시 모든 대상에서 사용 가능합니다)"; diff --git a/modules/addon/lang/zh-CN.lang.php b/modules/addon/lang/zh-CN.lang.php index acd4f2a73..f7f6fc7d5 100644 --- a/modules/addon/lang/zh-CN.lang.php +++ b/modules/addon/lang/zh-CN.lang.php @@ -9,6 +9,7 @@ $lang->addon_info = '插件信息'; $lang->addon_maker = '插件作者'; + $lang->addon_license = 'License'; $lang->addon_history = '更新纪录 '; $lang->about_addon_mid = "可以指定使用插件的对象。
(全部解除表示可用在所有对象。)"; diff --git a/modules/addon/tpl/addon_info.html b/modules/addon/tpl/addon_info.html index ac66289d9..d4553c6a7 100644 --- a/modules/addon/tpl/addon_info.html +++ b/modules/addon/tpl/addon_info.html @@ -13,24 +13,72 @@ {$lang->author} - {$addon_info->author->name} + + + {$author->name} ({$author->homepage}, {$author->email_address})
+ + {$lang->homepage} - {$addon_info->author->homepage} + {$addon_info->homepage} {$lang->regdate} - {$addon_info->author->date} + {zdate($addon_info->date, 'Y-m-d')} + + + {$lang->addon_license} + + {nl2br(trim($addon_info->license))} + +

{$addon_info->license_link}

+ + {$lang->description} - {nl2br(trim($addon_info->author->description))} + {nl2br(trim($addon_info->description))} + +
+

{$lang->addon_history}

+
+ +
+ + + + + + + + + + +
+ {$history->version}
+ {$history->date} +
+ +

{$author->name} ({$author->homepage} / {$author->email_address})

+ + +

{nl2br(trim($history->description))}

+ + +
    +
  • {$log}
  • +
+ +
+
+ + diff --git a/modules/addon/tpl/addon_list.html b/modules/addon/tpl/addon_list.html index 92915285f..409a26a50 100644 --- a/modules/addon/tpl/addon_list.html +++ b/modules/addon/tpl/addon_list.html @@ -50,8 +50,12 @@ ({$val->addon}) {$val->version} - {$val->author->name} - {$val->author->date} + + + {$author->name} + + + {zdate($val->date, 'Y-m-d')} {$val->path} {$lang->cmd_setup} @@ -64,7 +68,7 @@ - {nl2br($val->author->description)} + {nl2br($val->description)} diff --git a/modules/addon/tpl/setup_addon.html b/modules/addon/tpl/setup_addon.html index af0c7f410..cb9b8eb95 100644 --- a/modules/addon/tpl/setup_addon.html +++ b/modules/addon/tpl/setup_addon.html @@ -15,15 +15,19 @@ - {$addon_info->title} ver. {$addon_info->version} + {$addon_info->title} ver. {$addon_info->version} ({zdate($addon_info->date, 'Y-m-d')}) - - {$addon_info->author->name} + {$lang->author} + + + {$author->name} ({$author->homepage}, {$author->email_address})
+ + - {$addon_info->author->homepage} + {$addon_info->homepage} diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 90dea6c00..dd95887ce 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -54,7 +54,7 @@ function dispAdminIndex() { // 공식사이트에서 최신 뉴스를 가져옴 $newest_news_url = sprintf("http://news.zeroboard.com/%s/news.php", Context::getLangType()); - $cache_file = sprintf("./files/cache/newest_news.%s.cache.php", Context::getLangType()); + $cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_,Context::getLangType()); // 1시간 단위로 캐싱 체크 if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) { diff --git a/modules/admin/admin.class.php b/modules/admin/admin.class.php index a373b8db2..003c0585f 100644 --- a/modules/admin/admin.class.php +++ b/modules/admin/admin.class.php @@ -46,9 +46,9 @@ FileHandler::removeFilesInDir("./files/cache/queries"); // ./files/cache/news* 파일 삭제 - $directory = dir("./files/cache/"); + $directory = dir(_XE_PATH_."files/cache/"); while($entry = $directory->read()) { - if(substr($entry,0,11)=='newest_news') @unlink("./files/cache/".$entry); + if(substr($entry,0,11)=='newest_news') FileHandler::removeFile("./files/cache/".$entry); } $directory->close(); } diff --git a/modules/admin/conf/info.xml b/modules/admin/conf/info.xml index 51667c631..c75bd3b0b 100644 --- a/modules/admin/conf/info.xml +++ b/modules/admin/conf/info.xml @@ -1,23 +1,27 @@ - - + + 관리자 모듈 Administrator Module Módulo del administrador 管理员模块 管理者用モジュール Модуль администратора - + 각 모듈들의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다. + This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator. + Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador. + 列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。 + 各モジュールの機能を羅列し、管理者用のレイアウトを適用させ、管理機能が使用できるようにするモジュールです。 + Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора. + 0.1 + 2007-02-28 + base + + 제로 zero zero zero Zero zero - 각 모듈들의 기능을 나열하고 관리자용 레이아웃을 적용하여 관리 기능을 사용할 수 있도록 하는 모듈입니다. - This module shows a list of features of each module, and enables you to use a quite few of managers by applying layout for administrator. - Este módulo muestra una lista de características de cada módulo, en donde puede activar la función de la administracion aplicando el diseño del administrador. - 列出各模块的功能并使用管理员布局,可以让其使用管理功能的模块。 - 各モジュールの機能を羅列し、管理者用のレイアウトを適用させ、管理機能が使用できるようにするモジュールです。 - Этот модуль показывает список возможностей каждого модуля, и позволяет Вам использовать несколько менеджеров, применяя лейаут для администратора. - + \ No newline at end of file diff --git a/modules/admin/tpl/css/admin.css b/modules/admin/tpl/css/admin.css index bc70ad913..8b97208d4 100644 --- a/modules/admin/tpl/css/admin.css +++ b/modules/admin/tpl/css/admin.css @@ -125,9 +125,10 @@ h4 .view { color:#158692; padding-right:.6em; font:bold .9em Tahoma; background: .buttonTypeGo { border:none; cursor:pointer; width:24px; height:20px; position:relative; top:-1px; font:.75em Tahoma; text-align:center; background:url(../images/buttonTypeInput24.gif) no-repeat; } -#popHeadder { height:40px; background:url(../images/popupTopBg.png) repeat-x left top; padding:10px;} -#popHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; margin:0; } -#popBody { width:600px; padding:10px; background:#ffffff;} +#popHeadder, #popHistoryHeadder { height:40px; background:url(../images/popupTopBg.png) repeat-x left top; padding:10px;} +#popHeadder h1, #popHistoryHeadder h1 { background:url("../images/top_head_title_bg.gif") repeat-x left top; font-size:1em; border:1px solid #E3E3E2; padding:9px; color:#555555; margin:0; } +#popBody, #popHistoryBody { width:600px; padding:10px; background:#ffffff;} +#popHistoryBody { height: 200px; overflow: auto; padding-right:0; } #popFooter { width:620px; background:#f7f7f6; border-top:1px solid #e8e8e7; padding:.5em 0 .5em 0; overflow:hidden; } #popFooter .close { position:relative; left:50%; margin-left:-1em; float:left;} diff --git a/modules/admin/tpl/layout.html b/modules/admin/tpl/layout.html index e919d609f..50a94b785 100644 --- a/modules/admin/tpl/layout.html +++ b/modules/admin/tpl/layout.html @@ -33,7 +33,7 @@
  • actions))-->class="on" onclick="location.href='{getUrl('','module','admin','act',$v->admin_index_act)}'; return false;"> - {$v->title} + {$v->title}
  • diff --git a/modules/board/board.admin.controller.php b/modules/board/board.admin.controller.php index 5022e7237..cb31848ec 100644 --- a/modules/board/board.admin.controller.php +++ b/modules/board/board.admin.controller.php @@ -67,7 +67,7 @@ $del_var = $obj->{"del_".$vars->name}; unset($obj->{"del_".$vars->name}); if($del_var == 'Y') { - @unlink($module_info->{$vars->name}); + FileHandler::removeFile($module_info->{$vars->name}); continue; } diff --git a/modules/board/conf/info.xml b/modules/board/conf/info.xml index 36c7c5d92..17a77d529 100644 --- a/modules/board/conf/info.xml +++ b/modules/board/conf/info.xml @@ -1,23 +1,27 @@ - - + + 게시판 版面 Board Tablero 掲示板 Форум - + 게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다. + 给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。 + 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. + 掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。 + Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами. + 0.1 + 2007-02-28 + service + + 제로 zero zero zero Zero zero - 게시판의 기능을 담당하는 모듈. 게시판의 생성/추가 관리등의 관리자 기능도 포함합니다. - 给用户提供相应版面功能,将包含版面的生成/添加及版面管理等管理员功能。 - 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. - 掲示板の機能を担うモジュールです。掲示板の生成・追加・管理などの管理者機能も含まれています。 - Модуль для функционирования форума. Также включает в себя функции администратора такие как создание/управление форумами. - + \ No newline at end of file diff --git a/modules/board/lang/fr.lang.php b/modules/board/lang/fr.lang.php index 344c52e93..10efb30e2 100644 --- a/modules/board/lang/fr.lang.php +++ b/modules/board/lang/fr.lang.php @@ -20,7 +20,7 @@ $lang->category_group_srls = 'Groupe Accessible'; $lang->search_result = 'Résultat de la Recherche'; $lang->consultation = 'Consultation'; - $lang->admin_mail = '관리자 메일'; + $lang->admin_mail = 'Mél de l\'administrateur'; // Mots utiliss en bouton $lang->cmd_board_list = 'Liste des Panneaux'; @@ -30,11 +30,11 @@ // blah blah.. $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 = '선택하신 그룹만 현재 카테고리를 지정할 수 있도록 합니다'; + $lang->about_category_group_srls = 'Le groupe choisi seulement pourront utiliser la catégorie courrante'; $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é."; - $lang->about_admin_mail = '글이나 댓글이 등록될때 등록된 메일주소로 메일이 발송됩니다
    ,(콤마)로 연결시 다수의 메일주소로 발송할 수 있습니다.'; + $lang->about_admin_mail = 'Un message eletronique sera envoyé pour l\'address inscrite quand un article ou commentaire se soumet
    On peut inscrire multiple addresses délimité par les virgules.'; ?> diff --git a/modules/board/skins/xe_board/css/common.css b/modules/board/skins/xe_board/css/common.css index 6eca0b181..ca3d9527a 100644 --- a/modules/board/skins/xe_board/css/common.css +++ b/modules/board/skins/xe_board/css/common.css @@ -277,7 +277,7 @@ html:not([lang*=""]) .boardList th { height:33px; } .boardWrite .tag { margin-top:10px; margin-left:10px; } .boardWrite .tag .inputTypeText { width:90%; background:#FFFFFF url(../images/common/iconTag.gif) no-repeat 5px 5px; padding-left:30px;} .boardWrite .tag .help { vertical-align:middle;} -.boardWrite .tag .info { font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat left center; margin-top:5px;} +.boardWrite .tag .info { font-size:.9em; color:#999999; background:url(../images/common/iconArrowD8.gif) no-repeat 0% 40%; margin-top:5px; padding-left:5px;} .boardWrite .extraVarsList { width:100%; border-top:1px solid #e0e1db; border-bottom:none; margin:10px 0 10px 0; table-layout:fixed;} .boardWrite .extraVarsList th { font-weight:normal; color:#555555; text-align:left; padding:4px 0 4px 10px; border-bottom:1px solid #e0e1db; border-right:1px solid #e0e1db;} diff --git a/modules/board/skins/xe_board/tag_list.html b/modules/board/skins/xe_board/tag_list.html index 3f8df1795..66206c6bb 100644 --- a/modules/board/skins/xe_board/tag_list.html +++ b/modules/board/skins/xe_board/tag_list.html @@ -22,9 +22,9 @@
    class="{$tag_class}" > - {htmlspecialchars($val->tag)} + {htmlspecialchars($val->tag)} - {htmlspecialchars($val->tag)} + {htmlspecialchars($val->tag)}
    diff --git a/modules/board/skins/xe_board/view_document.html b/modules/board/skins/xe_board/view_document.html index 925f45fb5..f1df6cde3 100644 --- a/modules/board/skins/xe_board/view_document.html +++ b/modules/board/skins/xe_board/view_document.html @@ -25,7 +25,7 @@
    - +
    @@ -123,7 +123,7 @@
    @@ -142,7 +142,7 @@ - +
    {$lang->cmd_list} diff --git a/modules/board/skins/xe_guestbook/tag_list.html b/modules/board/skins/xe_guestbook/tag_list.html index 3f8df1795..66206c6bb 100644 --- a/modules/board/skins/xe_guestbook/tag_list.html +++ b/modules/board/skins/xe_guestbook/tag_list.html @@ -22,9 +22,9 @@ diff --git a/modules/comment/comment.class.php b/modules/comment/comment.class.php index a59119792..a91565427 100644 --- a/modules/comment/comment.class.php +++ b/modules/comment/comment.class.php @@ -5,7 +5,7 @@ * @brief comment 모듈의 high class **/ - require_once('./modules/comment/comment.item.php'); + require_once(_XE_PATH_.'modules/comment/comment.item.php'); class comment extends ModuleObject { diff --git a/modules/comment/comment.item.php b/modules/comment/comment.item.php index bd7389ff8..ad667ba07 100644 --- a/modules/comment/comment.item.php +++ b/modules/comment/comment.item.php @@ -127,7 +127,7 @@ function getIpaddress() { if($this->isGranted()) return $this->get('ipaddress'); - return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$1.$2.$3', $this->get('ipaddress')); + return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$2.$3.$4', $this->get('ipaddress')); } function isExistsHomepage() { diff --git a/modules/comment/comment.model.php b/modules/comment/comment.model.php index 13cf50051..d396142ce 100644 --- a/modules/comment/comment.model.php +++ b/modules/comment/comment.model.php @@ -285,7 +285,7 @@ } // 성공시 lock파일 제거 - @unlink($lock_file); + FileHandler::removeFile($lock_file); } /** diff --git a/modules/comment/conf/info.xml b/modules/comment/conf/info.xml index 082db878a..fed10ca33 100644 --- a/modules/comment/conf/info.xml +++ b/modules/comment/conf/info.xml @@ -1,23 +1,27 @@ - - - 댓글 - コメント - 评论 - Comment - Commentarios - Комментарии - - 제로 - Zero - zero - zero - zero - zero - 게시판이나 블로그등의 댓글을 관리하는 모듈입니다. - 掲示板やブログなどのコメントを管理するモジュールです。 - 管理版面或博客评论的模块。 - Module for managing board/blog's comments - Es el módulo para manejar commentarios en blog o boletínes. - Модуль для управления комментариями форума/блога. - - + + + 댓글 + コメント + 评论 + Comment + Commentarios + Комментарии + 게시판이나 블로그등의 댓글을 관리하는 모듈입니다. + 掲示板やブログなどのコメントを管理するモジュールです。 + 管理版面或博客评论的模块。 + Module for managing board/blog's comments + Es el módulo para manejar commentarios en blog o boletínes. + Модуль для управления комментариями форума/блога. + 0.1 + 2007-02-28 + utility + + + 제로 + Zero + zero + zero + zero + zero + + \ No newline at end of file diff --git a/modules/comment/lang/fr.lang.php b/modules/comment/lang/fr.lang.php index 351105280..a6d326e84 100644 --- a/modules/comment/lang/fr.lang.php +++ b/modules/comment/lang/fr.lang.php @@ -23,7 +23,7 @@ 'user_name' => 'Nom', 'nick_name' => 'Surnom', 'member_srl' => 'Member Serial', - 'email_address' => 'Courriel', + 'email_address' => 'Mél', 'homepage' => 'Page d\'Accueil', 'regdate' => 'Jour', 'last_update' => 'Mise à Jour', diff --git a/modules/communication/communication.controller.php b/modules/communication/communication.controller.php index a2f4ce821..4343a8883 100644 --- a/modules/communication/communication.controller.php +++ b/modules/communication/communication.controller.php @@ -53,6 +53,7 @@ // 받을 회원이 있는지에 대한 검사 $oMemberModel = &getModel('member'); + $oCommunicationModel = &getModel('communication'); $receiver_member_info = $oMemberModel->getMemberInfoByMemberSrl($receiver_srl); if($receiver_member_info->member_srl != $receiver_srl) return new Object(-1, 'msg_not_exists_member'); diff --git a/modules/communication/communication.view.php b/modules/communication/communication.view.php index bfb8a0d9b..58ea86774 100644 --- a/modules/communication/communication.view.php +++ b/modules/communication/communication.view.php @@ -78,7 +78,7 @@ // 플래그 삭제 $flag_path = './files/communication_extra_info/new_message_flags/'.getNumberingPath($logged_info->member_srl); $flag_file = sprintf('%s%s', $flag_path, $logged_info->member_srl); - @unlink($flag_file); + FileHandler::removeFile($flag_file); $this->setTemplateFile('new_message'); } diff --git a/modules/communication/conf/info.xml b/modules/communication/conf/info.xml index 868621ed2..c4f26bb7b 100644 --- a/modules/communication/conf/info.xml +++ b/modules/communication/conf/info.xml @@ -1,14 +1,18 @@ - - - 커뮤니케이션 - 会员交流 + + + 커뮤니케이션 + 会员交流 Communication - - 제로 + 회원들간의 쪽지, 친구기능을 담당하는 모듈입니다. + 管理在线会员间短信息及好友功能的模块。 + This module is for managing message, friend functions. + 0.1 + 2008-05-30 + utility + + + 제로 Zero Zero - 회원들간의 쪽지, 친구기능을 담당하는 모듈입니다. - 管理在线会员间短信息及好友功能的模块。 - This module is for managing message, friend functions. - - + + \ No newline at end of file diff --git a/modules/communication/lang/fr.lang.php b/modules/communication/lang/fr.lang.php new file mode 100644 index 000000000..a6788867c --- /dev/null +++ b/modules/communication/lang/fr.lang.php @@ -0,0 +1,48 @@ +communication = 'Communication'; + $lang->about_communication = 'Ce module exécute fonctions communicatives comme les messages ou les amis'; + + $lang->allow_message = 'Recevoir les Messages'; + $lang->allow_message_type = array( + 'Y' => 'Recevoir tout', + 'N' => 'Refuser tout', + 'F' => 'Amis seulement', + ); + + $lang->message_box = array( + 'R' => 'Reçu', + 'S' => 'Envoyé', + 'T' => 'Boîte aux Lettres', + ); + $lang->readed_date = "Jour"; + + $lang->sender = 'Envoyeur'; + $lang->receiver = 'Receveur'; + $lang->friend_group = 'Groupe des Amis'; + $lang->default_friend_group = 'Groupe pas assigné '; + + $lang->cmd_send_message = 'Envoyer un Message'; + $lang->cmd_reply_message = 'Répondre à un Message'; + $lang->cmd_view_friend = 'Amis'; + $lang->cmd_add_friend = 'Inscrire des Amis'; + $lang->cmd_view_message_box = 'Lire des Messages'; + $lang->cmd_store = "Conserver"; + $lang->cmd_add_friend_group = 'Ajouter Groupe des Amis'; + $lang->cmd_rename_friend_group = 'Modifier le Nom du Groupe des Amis'; + + $lang->msg_no_message = 'Aucun Message'; + $lang->message_received = 'Nouveau message'; + + $lang->msg_title_is_null = 'Entrez le titre du message, S.V.P.'; + $lang->msg_content_is_null = 'Entrez le contenu, S.V.P.'; + $lang->msg_allow_message_to_friend = "Echoué à envoyer parce que le receveur permet seulement les messages des amis."; + $lang->msg_disallow_message = 'Echoué à envoyer parce que le receveur refuse la réception des messages'; + + $lang->about_allow_message = 'Vous pouvez décider la réception des messages'; +?> diff --git a/modules/communication/skins/default/common_header.html b/modules/communication/skins/default/common_header.html index e00686ee9..622f194bf 100644 --- a/modules/communication/skins/default/common_header.html +++ b/modules/communication/skins/default/common_header.html @@ -18,19 +18,18 @@
    -
    -

    {$member_title}

    +
    +

    {$member_title}

    -
    - - - -
    + +
    -
    +
    diff --git a/modules/communication/skins/default/css/common.css b/modules/communication/skins/default/css/common.css index d683fe0c1..a4fedcaf8 100644 --- a/modules/communication/skins/default/css/common.css +++ b/modules/communication/skins/default/css/common.css @@ -17,7 +17,7 @@ .boardInformation strong { font:bold 11px Tahoma; color:#ff6600;} .boardHeader { position:relative; _width:100%; border-top:1px solid #e1e1dd; border-bottom:none; background:#ffffff url(../images/common/bgH3.gif) no-repeat right bottom; overflow:hidden;} -.boardHeader .member_option { float:right; position:relative; top:1em; right:1em; } +.boardHeader .member_option { float:right; position:relative; top:0.5em; right:1em; } .boardHeader select { vertical-align:bottom; } .boardHeader input { vertical-align:bottom; _padding-bottom:1px;} .boardHeader .essential { position:absolute; top:1.5em; right:1em; color:#54564b; font-size:.9em;} diff --git a/modules/counter/conf/info.xml b/modules/counter/conf/info.xml index 6fc070104..01dbb31f3 100644 --- a/modules/counter/conf/info.xml +++ b/modules/counter/conf/info.xml @@ -1,23 +1,27 @@ - - + + 기본 카운터 访问统计 Basic Counter Contador Básico デフォルト接続カウンター Базовый счетчик - + 기본 접속 통계 프로그램입니다. + 默认访问统计程序。 + Basic connection statistics program. + Programa básico para la estadística de la conección. + デフォルト接続統計のプログラムです。 + Базовая программа статистики подключений. + 0.1 + 2007-02-28 + accessory + + 제로 Zero Zero zero Zero zero - 기본 접속 통계 프로그램입니다. - 默认访问统计程序。 - Basic connection statistics program. - Programa básico para la estadística de la conección. - デフォルト接続統計のプログラムです。 - Базовая программа статистики подключений. diff --git a/modules/document/conf/info.xml b/modules/document/conf/info.xml index 1f5eeb249..a4ae58316 100644 --- a/modules/document/conf/info.xml +++ b/modules/document/conf/info.xml @@ -1,23 +1,27 @@ - - + + 문서 Document Documento 主题 ドキュメント Документы - + 게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. + Module for managing documents used in board, blog, etc. + Módulo para manejar los documentos en blog y en los tableros. + 管理版面,博客等处主题的模块。 + 掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理するモジュルです。 + Модуль для управления документами в форуме, блоге и прочее. + 0.1 + 2007-02-28 + utility + + 제로 Zero zero zero Zero zero - 게시판, 블로그등의 모듈에서 사용되는 문서를 관리하는 모듈입니다. - Module for managing documents used in board, blog, etc. - Módulo para manejar los documentos en blog y en los tableros. - 管理版面,博客等处主题的模块。 - 掲示板、ブログなどのモジュールで使用されるドキュメント(書き込み)を管理するモジュルです。 - Модуль для управления документами в форуме, блоге и прочее. - + \ No newline at end of file diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php index 016250d3d..e60f79191 100644 --- a/modules/document/document.admin.controller.php +++ b/modules/document/document.admin.controller.php @@ -40,13 +40,14 @@ * @brief 관리자가 글 선택시 세션에 담음 **/ function procDocumentAdminAddCart() { - $document_srl = Context::get('srl'); - - $oDocumentModel = &getModel('document'); - $oDocument = $oDocumentModel->getDocument($document_srl); - if(!$oDocument->isExists()) return; - - $oDocument->doCart(); + $document_srls = explode(',',Context::get('srls')); + $cnt = count($document_srls); + for($i=0;$i<$cnt;$i++) { + $document_srl = (int)trim($document_srls[$i]); + if(!$document_srls) continue; + if($_SESSION['document_management'][$document_srl]) unset($_SESSION['document_management'][$document_srl]); + else $_SESSION['document_management'][$document_srl] = true; + } } /** @@ -383,9 +384,12 @@ **/ function procDocumentAdminDeleteAllThumbnail() { - // files/attaches/images/ 디렉토리를 순환하면서 thumbnail_*.jpg 파일을 모두 삭제 + // files/attaches/images/ 디렉토리를 순환하면서 thumbnail_*.jpg 파일을 모두 삭제 (1.0.4 이전까지) $this->deleteThumbnailFile('./files/attach/images'); + // files/cache/thumbnails 디렉토리 자체를 삭제 (1.0.5 이후 변경된 썸네일 정책) + FileHandler::removeFilesInDir('./files/cache/thumbnails'); + $this->setMessage('success_deleted'); } @@ -397,7 +401,7 @@ $this->deleteThumbnailFile($path."/".$entry); } else { if(!preg_match('/^thumbnail_([^\.]*)\.jpg$/i',$entry)) continue; - @unlink($path.'/'.$entry); + FileHandler::removeFile($path.'/'.$entry); } } } diff --git a/modules/document/document.class.php b/modules/document/document.class.php index 6339c4632..671577d46 100644 --- a/modules/document/document.class.php +++ b/modules/document/document.class.php @@ -5,7 +5,7 @@ * @brief document 모듈의 high 클래스 **/ - require_once('./modules/document/document.item.php'); + require_once(_XE_PATH_.'modules/document/document.item.php'); class document extends ModuleObject { @@ -31,7 +31,7 @@ $oDB->addIndex("documents","idx_module_voted_count", array("module_srl","voted_count")); $oDB->addIndex("documents","idx_module_notice", array("module_srl","is_notice")); $oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl")); - $oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count")); + $oDB->addIndex("documents","idx_module_blamed_count", array("module_srl","blamed_count")); // 2007. 10. 17 모듈이 삭제될때 등록된 글도 모두 삭제하는 트리거 추가 $oModuleController->insertTrigger('module.deleteModule', 'document', 'controller', 'triggerDeleteModuleDocuments', 'after'); @@ -182,30 +182,27 @@ **/ if(!$oDB->isIndexExists("documents","idx_module_document_srl")) $oDB->addIndex("documents","idx_module_document_srl", array("module_srl","document_srl")); - // 2008. 04. 23 blamed count 컬럼 추가 - if(!$oDB->isColumnExists("documents", "blamed_count")) - { - $oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true); - $oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count')); - } + // 2008. 04. 23 blamed count 컬럼 추가 + if(!$oDB->isColumnExists("documents", "blamed_count")) { + $oDB->addColumn('documents', 'blamed_count', 'number', 11, 0, true); + $oDB->addIndex('documents', 'idx_blamed_count', array('blamed_count')); + } - if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) - { - $oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count')); - } + if(!$oDB->isIndexExists("documents","idx_module_blamed_count")) { + $oDB->addIndex('documents', 'idx_module_blamed_count', array('module_srl', 'blamed_count')); + } - if(!$oDB->isColumnExists("document_voted_log", "point")) - $oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true); - - return new Object(0,'success_updated'); - } + if(!$oDB->isColumnExists("document_voted_log", "point")) + $oDB->addColumn('document_voted_log', 'point', 'number', 11, 0, true); + return new Object(0,'success_updated'); + } /** * @brief 캐시 파일 재생성 **/ function recompileCache() { // 게시글 분류 캐시 파일 삭제 - FileHandler::removeFilesInDir("./files/cache/document_category"); + FileHandler::removeFilesInDir(_XE_PATH_."files/cache/document_category"); } /** diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index 089f3757c..8eebfa227 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -265,6 +265,9 @@ // commit $oDB->commit(); + // 썸네일 파일 제거 + FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($obj->document_srl, 3))); + $output->add('document_srl',$obj->document_srl); return $output; } @@ -316,6 +319,9 @@ } } + // 썸네일 파일 제거 + FileHandler::removeDir(sprintf('files/cache/thumbnails/%s',getNumberingPath($document_srl, 3))); + // commit $oDB->commit(); @@ -762,8 +768,8 @@ $category_list = $output->data; if(!$category_list) { - @unlink($xml_file); - @unlink($php_file); + FileHandler::removeFile($xml_file); + FileHandler::removeFile($php_file); return false; } if(!is_array($category_list)) $category_list = array($category_list); diff --git a/modules/document/document.item.php b/modules/document/document.item.php index d572e2dcf..3d7c66913 100644 --- a/modules/document/document.item.php +++ b/modules/document/document.item.php @@ -173,7 +173,7 @@ function getIpaddress() { if($this->isGranted()) return $this->get('ipaddress'); - return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$1.$2.$3', $this->get('ipaddress')); + return preg_replace('/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/','*.$2.$3.$4', $this->get('ipaddress')); } @@ -428,10 +428,15 @@ } function getThumbnail($width = 80, $height = 0, $thumbnail_type = '') { + // 존재하지 않는 문서일 경우 return false if(!$this->document_srl) return; + // 높이 지정이 별도로 없으면 정사각형으로 생성 if(!$height) $height = $width; - + + // 첨부파일이 없거나 내용중 이미지가 없으면 return false; + if(!$this->hasUploadedFiles() && !preg_match("!get('content'))) return; + // 문서 모듈의 기본 설정에서 Thumbnail의 생성 방법을 구함 if(!in_array($thumbnail_type, array('crop','ratio'))) { $config = $GLOBALS['__document_config__']; @@ -443,68 +448,72 @@ $thumbnail_type = $config->thumbnail_type; } - // 문서의 이미지 첨부파일 위치를 구함 - $document_path = sprintf('./files/attach/images/%d/%d/',$this->get('module_srl'), $this->get('document_srl')); - if(!is_dir($document_path)) FileHandler::makeDir($document_path); + // 썸네일 정보 정의 + $thumbnail_path = sprintf('files/cache/thumbnails/%s',getNumberingPath($this->document_srl, 3)); + $thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height, $thumbnail_type); + $thumbnail_url = Context::getRequestUri().$thumbnail_file; - // 썸네일 임시 파일명을 구함 - if($width != $height) $thumbnail_file = sprintf('%sthumbnail_%dx%d_%s.jpg', $document_path, $width, $height, $thumbnail_type); - else $thumbnail_file = sprintf('%sthumbnail_%d_%s.jpg', $document_path, $width, $thumbnail_type); - - // 썸네일이 있더라도 글의 수정시간과 비교해서 다르면 다시 생성함 + // 썸네일 파일이 있을 경우 파일의 크기가 0 이면 return false 아니면 경로 return if(file_exists($thumbnail_file)) { - $file_created_time = date("YmdHis",filemtime($thumbnail_file)); - $modified_time = $this->get('last_update'); - if($modified_time > $file_created_time) @unlink($thumbnail_file); + if(filesize($thumbnail_file)<1) return false; + else return $thumbnail_url; } - if(file_exists($thumbnail_file)&&filesize($thumbnail_file)<1) return; + // 대상 파일 + $source_file = null; + $is_tmp_file = false; - // 썸네일 파일이 있으면 url return - if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file; + // 첨부된 파일중 이미지 파일이 있으면 찾음 + if($this->hasUploadedFiles()) { + $file_list = $this->getUploadedFiles(); + if(count($file_list)) { + foreach($file_list as $file) { + if($file->direct_download!='Y') continue; + if(!preg_match("/\.(jpg|png|jpeg|gif|bmp)$/i",$file->source_filename)) continue; - // 생성 시작 - FileHandler::writeFile($thumbnail_file, '', 'w'); - - // 첨부파일이 있는지 확인하고 있으면 썸네일 만듬 - $oFile = &getModel('file'); - $file_list = $oFile->getFiles($this->document_srl); - if(count($file_list)) { - foreach($file_list as $file) { - if($file->direct_download!='Y') continue; - if(!preg_match("/(jpg|png|jpeg|gif)$/i",$file->source_filename)) continue; - - $filename = $file->uploaded_filename; - if(!file_exists($filename)) continue; - - FileHandler::createImageFile($filename, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type); - if(file_exists($thumbnail_file)) return Context::getRequestUri().$thumbnail_file; + $source_file = $file->uploaded_filename; + if(!file_exists($source_file)) $source_file = null; + else break; + } } } - // 첨부파일이 없으면 내용에서 추출 - $content = $this->get('content'); + // 첨부된 파일이 없으면 내용중 이미지 파일을 구함 + if(!$source_file) { + $content = $this->get('content'); + $target_src = null; + preg_match_all("!src=(\"|')([^\"' ]*?)(\"|')!is", $content, $matches, PREG_SET_ORDER); + $cnt = count($matches); + for($i=0;$i<$cnt;$i++) { + $target_src = $matches[$i][2]; + if(preg_match('/\/(common|modules|widgets|addons|layouts)\//i', $target_src)) continue; + else { + if(!preg_match('/^(http|https):\/\//i',$target_src)) $target_src = Context::getRequestUri().$target_src; + $tmp_file = sprintf('./files/cache/tmp/%d', md5(rand(111111,999999).$this->document_srl)); + FileHandler::getRemoteFile($target_src, $tmp_file); + if(!file_exists($tmp_file)) continue; + else { + list($_w, $_h, $_t, $_a) = @getimagesize($tmp_file); + if($_w<$width || $_h<$height) continue; - $target_src = null; - preg_match_all("!http:\/\/([^ ^\"^']*?)\.(jpg|png|gif|jpeg)!is", $content, $matches, PREG_SET_ORDER); - for($i=0;$ithumbnail_type); - @unlink($tmp_file); - return Context::getRequestUri().$thumbnail_file; - } + $output = FileHandler::createImageFile($source_file, $thumbnail_file, $width, $height, 'jpg', $thumbnail_type); + + if($is_tmp_file) FileHandler::removeFile($source_file); + + // 썸네일 생성 성공시 경로 return + if($output) return $thumbnail_url; + + // 차후 다시 썸네일 생성을 시도하지 않기 위해 빈 파일을 생성 + else FileHandler::writeFile($thumbnail_file, '','w'); - FileHandler::writeFile($thumbnail_file,''); return; } @@ -536,7 +545,7 @@ preg_match_all('!]*?)>!is', $content, $matches); $cnt = count($matches[0]); for($i=0;$i<$cnt;$i++) { - if(preg_match('/src=("|\'|\.|\/)*(common|modules|widgets|layouts)/i', $matches[0][$i])) continue; + if(preg_match('/src=("|\'|\.|\/)*(common|modules|widgets|addons|layouts)/i', $matches[0][$i])) continue; $buffs[] = "image"; $check_files = true; break; @@ -549,8 +558,7 @@ } // 첨부파일 체크 - if(!$check_files && $this->hasUploadedFiles()) $buffs[] = "file"; - + if($this->hasUploadedFiles()) $buffs[] = "file"; return $buffs; } diff --git a/modules/document/lang/fr.lang.php b/modules/document/lang/fr.lang.php index 14b685e0b..b12331d05 100644 --- a/modules/document/lang/fr.lang.php +++ b/modules/document/lang/fr.lang.php @@ -35,7 +35,7 @@ 'member_srl' => 'Nombre Sériel du Membre', 'user_name' => 'Nom', 'nick_name' => 'Surnom', - 'email_address' => 'Courriel', + 'email_address' => 'Mél', 'homepage' => 'Page d\'accueil', 'is_notice' => 'Notice', 'is_secret' => 'Secret', diff --git a/modules/editor/components/cc_license/info.xml b/modules/editor/components/cc_license/info.xml index 9d638c541..c612a9bd9 100755 --- a/modules/editor/components/cc_license/info.xml +++ b/modules/editor/components/cc_license/info.xml @@ -1,23 +1,26 @@ - - + + Creative Commons Licenses - Licencias Creative Commons - Creative Commons Licenses - クリエイティブコモンズライセンス - 知识共享许可协议 - Creative Commons Licenses - + Licencias Creative Commons + Creative Commons Licenses + クリエイティブコモンズライセンス + 知识共享许可协议 + Creative Commons Licenses + CCL 라이센스를 출력합니다. + CCL licencia de producto + CCL 라이센스를 출력합니다. + CCLライセンスを表示します。 + 显示知识共享许可协议。 + Output CCL license + 0.1 + 2008-01-07 + + zero - zero - zero - Zero - zero - zero - CCL 라이센스를 출력합니다. - CCL licencia de producto - CCL 라이센스를 출력합니다. - CCLライセンスを表示します。 - 显示知识共享许可协议。 - Output CCL license + zero + zero + Zero + zero + zero - + \ No newline at end of file diff --git a/modules/editor/components/colorpicker_bg/info.xml b/modules/editor/components/colorpicker_bg/info.xml index 33851f099..6ae19f25f 100644 --- a/modules/editor/components/colorpicker_bg/info.xml +++ b/modules/editor/components/colorpicker_bg/info.xml @@ -1,23 +1,26 @@ - - + + 글의 배경색 변경 文字の背景色変更 背景颜色 Change the background color of article - Cambiar el color de fondo del artículo + Cambiar el color de fondo del artículo Изменение цвета фона статьи - + 글의 배경색을 변경합니다. + 文字の背景色を変更します。 + 可修改字体背景颜色。 + It will change the background color of article. + Se cambiará el color de fondo del artículo. + Позволяет изменение цвета фона статьи. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 글의 배경색을 변경합니다. - 文字の背景色を変更します。 - 可修改字体背景颜色。 - It will change the background color of article. - Se cambiará el color de fondo del artículo. - Позволяет изменение цвета фона статьи. - + \ No newline at end of file diff --git a/modules/editor/components/colorpicker_text/info.xml b/modules/editor/components/colorpicker_text/info.xml index 0f8493883..6f46a6b56 100644 --- a/modules/editor/components/colorpicker_text/info.xml +++ b/modules/editor/components/colorpicker_text/info.xml @@ -1,23 +1,26 @@ - - + + 글자색 변경 文字色変更 字体颜色 Change the color of text - Cambiar el color de texto + Cambiar el color de texto Изменение цвета текста - + 글자색을 변경합니다. + 文字色を変更します。 + 可修改字体颜色。 + It will change the color of text. + Se va a cambiar el color del texto. + Позволяет изменение цвета текста. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 글자색을 변경합니다. - 文字色を変更します。 - 可修改字体颜色。 - It will change the color of text. - Se va a cambiar el color del texto. - Позволяет изменение цвета текста. - + \ No newline at end of file diff --git a/modules/editor/components/emoticon/info.xml b/modules/editor/components/emoticon/info.xml index dd8eb546f..c2c4bb72c 100644 --- a/modules/editor/components/emoticon/info.xml +++ b/modules/editor/components/emoticon/info.xml @@ -1,23 +1,26 @@ - - + + 이모티콘 출력 顔文字(イモティコン) 表情图标 Display Emoticons - Mostrar iconos gestuales + Mostrar iconos gestuales Отображение смайлов - + 이모티콘을 에디터에 삽입할 수 있습니다. + 顔文字(イモティコン)をエディターに追加することができます。 + 可以插入表情图标到编辑器。 + You may insert emoticons to editor. + Usted puede insertar emoticonos para el editor. + Вы можете вставить смыйлы в редактор. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero - zero - 이모티콘을 에디터에 삽입할 수 있습니다. - 顔文字(イモティコン)をエディターに追加することができます。 - 可以插入表情图标到编辑器。 - You may insert emoticons to editor. - Usted puede insertar emoticonos para el editor. - Вы можете вставить смыйлы в редактор. + zero + zero - + \ No newline at end of file diff --git a/modules/editor/components/image_gallery/info.xml b/modules/editor/components/image_gallery/info.xml index 175088971..a1302d874 100644 --- a/modules/editor/components/image_gallery/info.xml +++ b/modules/editor/components/image_gallery/info.xml @@ -1,23 +1,26 @@ - - + + 기본 이미지 갤러리 デフォルトイメージギャラリー 图片相册 Basic Image Gallery - Galería de imágenes básicos + Galería de imágenes básicos Базовая галлерея изображений - + 첨부된 이미지파일을 이용하여 슬라이드/목록형 이미지 갤러리를 만들 수 있습니다. + 添付されたイメージファイルを利用して、スライド型・リスト型のイメージギャラリーが作成できます。 + 利用上传的图片文件实现幻灯片式或目录型相册图片。 + It can create image gallery of slide/list style by using attached image file. + It can create image gallery of slide/list style by using attached image file. + Это может создать гллерею изображений в стиле слайдов/списка, используя вложенный файл изображения. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 첨부된 이미지파일을 이용하여 슬라이드/목록형 이미지 갤러리를 만들 수 있습니다. - 添付されたイメージファイルを利用して、スライド型・リスト型のイメージギャラリーが作成できます。 - 利用上传的图片文件实现幻灯片式或目录型相册图片。 - It can create image gallery of slide/list style by using attached image file. - It can create image gallery of slide/list style by using attached image file. - Это может создать гллерею изображений в стиле слайдов/списка, используя вложенный файл изображения. - + \ No newline at end of file diff --git a/modules/editor/components/image_link/info.xml b/modules/editor/components/image_link/info.xml index 1bf14dcae..4fd2c62be 100644 --- a/modules/editor/components/image_link/info.xml +++ b/modules/editor/components/image_link/info.xml @@ -1,23 +1,26 @@ - - + + 이미지 추가 イメージ追加 插入图像 Add Images - Añadir imágenes + Añadir imágenes Добавление изображений - + 에디터에 이미지를 추가하거나 속성을 변경할 수 있습니다. + エディターでイメージの追加、属性の変更ができます。 + 可以插入图像或编辑其相应属性。 + It can add an image to editor or change the attribution of image. + Se puede añadir una imagen a editor o cambiar la atribución de la imagen. + Это может добавить изображение в редактор или изменить параметры изображения. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 에디터에 이미지를 추가하거나 속성을 변경할 수 있습니다. - エディターでイメージの追加、属性の変更ができます。 - 可以插入图像或编辑其相应属性。 - It can add an image to editor or change the attribution of image. - Se puede añadir una imagen a editor o cambiar la atribución de la imagen. - Это может добавить изображение в редактор или изменить параметры изображения. - + \ No newline at end of file diff --git a/modules/editor/components/multimedia_link/info.xml b/modules/editor/components/multimedia_link/info.xml index c4b11db55..68ed22857 100644 --- a/modules/editor/components/multimedia_link/info.xml +++ b/modules/editor/components/multimedia_link/info.xml @@ -1,23 +1,26 @@ - - + + 멀티미디어 자료 관리 マルチメディア管理 多媒体 Manage Multimedia Data - Administrar datos multimedia + Administrar datos multimedia Управление мультимедиа данными - + 에디터에 wmv,avi,flv등의 멀티미디어 자료를 추가하거나 속성을 수정할 수 있습니다. + エディターに拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加、または属性の修正ができます。 + 插入wmv,avi,flv等多媒体文件或修改其相应属性 。 + It can add multimedia data like wmv,avi,flv to editor or change the attribution of multimedia data. + Se pueden agregar datos multimedia como wmv, avi, flv al editor o cambiar la atribución de datos multimedia. + Это может добавить мультимедиа данные как wmv,avi,flv в редактор или изменить параметры данных мультимедиа. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 에디터에 wmv,avi,flv등의 멀티미디어 자료를 추가하거나 속성을 수정할 수 있습니다. - エディターに拡張子が「wmv,avi,flv」などのマルチメディアコンテンツを追加、または属性の修正ができます。 - 插入wmv,avi,flv等多媒体文件或修改其相应属性 。 - It can add multimedia data like wmv,avi,flv to editor or change the attribution of multimedia data. - Se pueden agregar datos multimedia como wmv, avi, flv al editor o cambiar la atribución de datos multimedia. - Это может добавить мультимедиа данные как wmv,avi,flv в редактор или изменить параметры данных мультимедиа. - + \ No newline at end of file diff --git a/modules/editor/components/naver_map/info.xml b/modules/editor/components/naver_map/info.xml index 96776ad46..1f3e47003 100644 --- a/modules/editor/components/naver_map/info.xml +++ b/modules/editor/components/naver_map/info.xml @@ -1,39 +1,43 @@ - - + + 네이버맵 연동 ネイバーマップ NAVER 地图 Naver Map Open Api - Naver mapa abierto api + Naver mapa abierto api Открытые API карт Naver - + 네이버에서 제공하는 네이버 지도 open api를 이용하여 에디터에 원하는 곳의 지도를 추가하거나 수정할 수 있습니다.\n네이버 지도 open api키를 발급 받아서 등록을 해주셔야 정상적인 사용이 가능합니다. + ネイバーから提供されるネイバーマップのOpenAPIを利用してエディターに表示したい地図を追加したり、修正したりすることができます。ネイバーマップは、OpenAPIキーを取得して登録すれば使用することができます。 + naver提供的naver地图,利用open api在编辑器里添加或修改您所需要的地图。\n为了使用naver地图首先要取得open api key,然后登录此key才可正常使用。 + You can add a map to the editor or modify it by using Naver Map open api provided by Naver.\nYou would be able to use it when you register Naver Map api key after you get it from http://www.naver.com. + Puede poner un mapa para el editor o modificarlo utilizando Naver Mapa abierta api proporcionada por Naver. \ NSe se podrá hacer uso del mismo cuando se registra Naver Mapa api clave se obtiene después de http://www.naver.com . + Вы можете добавить карту в редактор или изменить ее, используя Naver Map open api, предлагаемые Naver.\nВы сможете использовать это после регистрации ключа Naver Map API, полученного с http://www.naver.com. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 네이버에서 제공하는 네이버 지도 open api를 이용하여 에디터에 원하는 곳의 지도를 추가하거나 수정할 수 있습니다.\n네이버 지도 open api키를 발급 받아서 등록을 해주셔야 정상적인 사용이 가능합니다. - ネイバーから提供されるネイバーマップのOpenAPIを利用してエディターに表示したい地図を追加したり、修正したりすることができます。ネイバーマップは、OpenAPIキーを取得して登録すれば使用することができます。 - naver提供的naver地图,利用open api在编辑器里添加或修改您所需要的地图。\n为了使用naver地图首先要取得open api key,然后登录此key才可正常使用。 - You can add a map to the editor or modify it by using Naver Map open api provided by Naver.\nYou would be able to use it when you register Naver Map api key after you get it from http://www.naver.com. - Puede poner un mapa para el editor o modificarlo utilizando Naver Mapa abierta api proporcionada por Naver. \ NSe se podrá hacer uso del mismo cuando se registra Naver Mapa api clave se obtiene después de http://www.naver.com . - Вы можете добавить карту в редактор или изменить ее, используя Naver Map open api, предлагаемые Naver.\nВы сможете использовать это после регистрации ключа Naver Map API, полученного с http://www.naver.com. + 네이버지도 api key ネイバーマップAPIキー naver地图 api key Naver Map api key - Naver Map api key + Naver Map api key Naver Map API Ключ http://www.naver.com/ 에서 네이버 지도 API key를 발급 받으신 후 입력해주세요. http://www.naver.com/ からネイバーマップのAPIキーを取得してから入力してください。 在http://www.naver.com/ 取得naver地图 API key后输入。 Please get Naver Map API key from http://www.naver.com first and then input the key. - Por favor Naver Mapa clave de la API de http://www.naver.com primero y luego ingrese la clave. + Por favor Naver Mapa clave de la API de http://www.naver.com primero y luego ingrese la clave. Пожалуйста, получите ключ Naver Map API с http://www.naver.com и введите его. - + \ No newline at end of file diff --git a/modules/editor/components/poll_maker/info.xml b/modules/editor/components/poll_maker/info.xml index 9103daa93..31507e7cf 100644 --- a/modules/editor/components/poll_maker/info.xml +++ b/modules/editor/components/poll_maker/info.xml @@ -1,23 +1,26 @@ - - + + 설문조사 컴포넌트 アンケート調査 投票调查 Poll Component - Componente Poll + Componente Poll Компонент опросов - + 글 작성시에 설문조사를 첨부하실 수 있습니다. 설문조사 컴포넌트는 설문조사 모듈의 설정에 영향을 받습니다. + 書き込みの時、アンケート機能の追加ができます。アンケートモジュールの影響を受けます。 + 发表主题时可以附加投票调查。投票调查组件受投票调查模块设置的影响。 + You can attach a poll on writing articles. Poll component is affected by setting of poll module. + Puede adjuntar una encuesta sobre la redacción de artículos. Encuesta componente se ve afectada por la configuración de módulo de encuesta. + Вы можете присоединить опрос при написании статей. Компонент опросов зависит от настроек модуля отпросов. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 글 작성시에 설문조사를 첨부하실 수 있습니다. 설문조사 컴포넌트는 설문조사 모듈의 설정에 영향을 받습니다. - 書き込みの時、アンケート機能の追加ができます。アンケートモジュールの影響を受けます。 - 发表主题时可以附加投票调查。投票调查组件受投票调查模块设置的影响。 - You can attach a poll on writing articles. Poll component is affected by setting of poll module. - Puede adjuntar una encuesta sobre la redacción de artículos. Encuesta componente se ve afectada por la configuración de módulo de encuesta. - Вы можете присоединить опрос при написании статей. Компонент опросов зависит от настроек модуля отпросов. - + \ No newline at end of file diff --git a/modules/editor/components/quotation/info.xml b/modules/editor/components/quotation/info.xml index a1fc12438..b137ead82 100644 --- a/modules/editor/components/quotation/info.xml +++ b/modules/editor/components/quotation/info.xml @@ -1,23 +1,26 @@ - - + + 인용구 작성 引用文作成 引用 Citas célebres - Quotations + Quotations Цитаты - + 특정 범위를 인용문으로 꾸밀 수 있습니다. 외곽선의 종류나 색상, 굵기를 수정할 수 있으며 열기/닫기 기능을 가진 폴더기능을 만들 수 있습니다. + 特定範囲を引用文として表示できます。ボーダーの種類、色、太さを修正することができ、「展開・折りたたみ」の機能も可能です。 + 可以把要发表的主题特定范围用引用布置。可以修改外围线的种类或粗细,还支持展开/折叠功能。 + You can decorate specific range as quotation. The style, color or thickness of outline can be modified and folder system which has open/close function can be made. + Puedes decorar rango específico como cita. El estilo, el color o el grosor de esquema puede ser modificado y carpeta de sistema que tiene abrir / cerrar la función se puede hacer. + Вы можете украсить определенную область цитаты. Стиль, цвет или толщина внешней линии может быть изменена, и система папок, которая имеет функцию открыть/закрыть может быть создана. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 특정 범위를 인용문으로 꾸밀 수 있습니다. 외곽선의 종류나 색상, 굵기를 수정할 수 있으며 열기/닫기 기능을 가진 폴더기능을 만들 수 있습니다. - 特定範囲を引用文として表示できます。ボーダーの種類、色、太さを修正することができ、「展開・折りたたみ」の機能も可能です。 - 可以把要发表的主题特定范围用引用布置。可以修改外围线的种类或粗细,还支持展开/折叠功能。 - You can decorate specific range as quotation. The style, color or thickness of outline can be modified and folder system which has open/close function can be made. - Puedes decorar rango específico como cita. El estilo, el color o el grosor de esquema puede ser modificado y carpeta de sistema que tiene abrir / cerrar la función se puede hacer. - Вы можете украсить определенную область цитаты. Стиль, цвет или толщина внешней линии может быть изменена, и система папок, которая имеет функцию открыть/закрыть может быть создана. - + \ No newline at end of file diff --git a/modules/editor/components/table_maker/info.xml b/modules/editor/components/table_maker/info.xml index 98725ee7a..a2fb98623 100644 --- a/modules/editor/components/table_maker/info.xml +++ b/modules/editor/components/table_maker/info.xml @@ -1,23 +1,26 @@ - - + + 표(table) 생성 テーブル作成 表格 Create Table - Crear Tabla + Crear Tabla Создание таблиц - + 에디터에 표(table)을 생성하거나 표(table) 또는 칸(td)의 속성을 변경할 수 있습니다. + エディターでテーブル(table)の作成、テーブル(table)またはセル(td)の属性の変更ができます。 + 插入表格(table)或编辑表格属性。 + It can create a table on editor or modify the attribution of table or td. + Se puede crear una tabla en editor o modificar la atribución de la mesa o td. + Это может создать таблицу в редакторе или изменить ее параметры или ячейки. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 에디터에 표(table)을 생성하거나 표(table) 또는 칸(td)의 속성을 변경할 수 있습니다. - エディターでテーブル(table)の作成、テーブル(table)またはセル(td)の属性の変更ができます。 - 插入表格(table)或编辑表格属性。 - It can create a table on editor or modify the attribution of table or td. - Se puede crear una tabla en editor o modificar la atribución de la mesa o td. - Это может создать таблицу в редакторе или изменить ее параметры или ячейки. - + \ No newline at end of file diff --git a/modules/editor/components/url_link/info.xml b/modules/editor/components/url_link/info.xml index df681109c..12d3028d6 100644 --- a/modules/editor/components/url_link/info.xml +++ b/modules/editor/components/url_link/info.xml @@ -1,23 +1,26 @@ - - + + 링크 생성 リンク生成 链接 Create Link - Crear Link + Crear Link Создание ссылок - + 에디터에 링크를 추가하거나 링크의 속성을 변경할 수 있습니다. + エディターでリンクの追加、属性の変更ができます。 + 插入链接或编辑链接属性。 + It can add a link to editor or modify the attribution of link. + Puede añadir un enlace al editor o modificar la atribución de enlace. + Это может добавить ссылку в редактор или изменить ее параметры. + 0.1 + 2007-02-28 + + 제로 Zero zero zero - zero + zero zero - 에디터에 링크를 추가하거나 링크의 속성을 변경할 수 있습니다. - エディターでリンクの追加、属性の変更ができます。 - 插入链接或编辑链接属性。 - It can add a link to editor or modify the attribution of link. - Puede añadir un enlace al editor o modificar la atribución de enlace. - Это может добавить ссылку в редактор или изменить ее параметры. - + \ No newline at end of file diff --git a/modules/editor/conf/info.xml b/modules/editor/conf/info.xml index 163eaed58..0e9574302 100644 --- a/modules/editor/conf/info.xml +++ b/modules/editor/conf/info.xml @@ -1,23 +1,27 @@ - - + + 위지윅 에디터 WYSIWYG Editor Editor WYSIWYG 网页编辑器 ウイジウイグエディター WYSIWYG-редактор - + 위지윅 에디터를 출력하거나 에디터 컴포넌트들을 관리/중계하는 모듈입니다. + Module for displaying WYSIWYG editor and managing/relaying editor components. + Módulo para mostrar en la pantalla el editor de WYSIWYG y para el manejo/relato de los componentes del editor. + 显示网页编辑器或管理/传递编辑器组件的模块。 + ウイジウイグエディター を出力したり、エディターのコンポーネントを管理・中継するモジュールです。 + Модуль для отображения WYSIWYG-редактора и управления/смены комментариев редактора. + 0.1 + 2007-02-28 + utility + + 제로 Zero zero zero Zero zero - 위지윅 에디터를 출력하거나 에디터 컴포넌트들을 관리/중계하는 모듈입니다. - Module for displaying WYSIWYG editor and managing/relaying editor components. - Módulo para mostrar en la pantalla el editor de WYSIWYG y para el manejo/relato de los componentes del editor. - 显示网页编辑器或管理/传递编辑器组件的模块。 - ウイジウイグエディター を出力したり、エディターのコンポーネントを管理・中継するモジュールです。 - Модуль для отображения WYSIWYG-редактора и управления/смены комментариев редактора. - + \ No newline at end of file diff --git a/modules/editor/editor.model.php b/modules/editor/editor.model.php index 9250aa6ab..af218ab1d 100644 --- a/modules/editor/editor.model.php +++ b/modules/editor/editor.model.php @@ -15,7 +15,7 @@ * 에디터의 경우 내부적으로 1~30까지의 임시 editor_seuqnece를 생성한다. * 즉 한페이지에 30개 이상의 에디터를 출력하지는 못하도록 제한되어 있다. * - * 단, 수정하는 경우 또는 파일업로드를 한 자동저장본의 경우는 getNextSequence() 값으로 저장된 editor_seqnece가 + * 단, 수정하는 경우 또는 파일업로드를 한 자동저장본의 경우는 getNextSequence() 값으로 저장된 editor_seqnece가 * 설정된다. **/ @@ -64,7 +64,7 @@ if(!$option->allow_fileupload) $allow_fileupload = false; else $allow_fileupload = true; - // 자동 저장 유무 옵션 설정 + // 자동 저장 유무 옵션 설정 if(!$option->enable_autosave) $enable_autosave = false; else $enable_autosave = true; @@ -146,16 +146,16 @@ // 에디터 동작을 위한 editor_sequence값 설정 Context::set('editor_sequence', $editor_sequence); - // 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정 + // 파일 첨부 관련 행동을 하기 위해 문서 번호를 upload_target_srl로 설정 // 신규문서일 경우 upload_target_srl=0 이고 첨부파일 관련 동작이 요청될때 이 값이 변경됨 - Context::set('upload_target_srl', $upload_target_srl); + Context::set('upload_target_srl', $upload_target_srl); // 문서 혹은 댓글의 primary key값을 세팅한다. Context::set('editor_primary_key_name', $option->primary_key_name); // 내용을 sync 맞추기 위한 content column name을 세팅한다 Context::set('editor_content_key_name', $option->content_key_name); - + /** * 에디터 컴포넌트 체크 @@ -238,7 +238,7 @@ } else { $group_list = array(); } - + // 에디터 옵션 변수를 미리 설정 $option->skin = $config->editor_skin; @@ -247,18 +247,18 @@ if(count($config->upload_file_grant)) { foreach($group_list as $group_srl => $group_info) { if(in_array($group_srl, $config->upload_file_grant)) { - $option->allow_fileupload = true; + $option->allow_fileupload = true; break; } } } else $option->allow_fileupload = true; - // 기본 컴포넌트 사용 권한 + // 기본 컴포넌트 사용 권한 $option->enable_default_component = false; if(count($config->enable_default_component_grant)) { foreach($group_list as $group_srl => $group_info) { if(in_array($group_srl, $config->enable_default_component_grant)) { - $option->enable_default_component = true; + $option->enable_default_component = true; break; } } @@ -269,18 +269,18 @@ if(count($config->enable_component_grant)) { foreach($group_list as $group_srl => $group_info) { if(in_array($group_srl, $config->enable_component_grant)) { - $option->enable_component = true; + $option->enable_component = true; break; } } } else $option->enable_component = true; - // HTML 편집 권한 + // HTML 편집 권한 $enable_html = false; if(count($config->enable_html_grant)) { foreach($group_list as $group_srl => $group_info) { if(in_array($group_srl, $config->enable_html_grant)) { - $enable_html = true; + $enable_html = true; break; } } @@ -295,7 +295,7 @@ // 높이 조절 옵션 설정 $option->resizable = $config->enable_height_resizable=='Y'?true:false; - // 자동 저장 유무 옵션 설정 + // 자동 저장 유무 옵션 설정 $option->enable_autosave = $config->enable_autosave=='Y'?true:false; // 기타 설정 @@ -422,7 +422,7 @@ $is_granted = false; foreach($group_list as $group_srl) { if(in_array($group_srl, $target_group)) { - $is_granted = true; + $is_granted = true; break; } } @@ -537,24 +537,86 @@ $xml_doc = $oParser->loadXmlFile($xml_file); // 정보 정리 - $xml_info->component_name = $component; - $xml_info->version = $xml_doc->component->attrs->version; - $xml_info->title = $xml_doc->component->title->body; - $xml_info->author->name = $xml_doc->component->author->name->body; - $xml_info->author->email_address = $xml_doc->component->author->attrs->email_address; - $xml_info->author->link = $xml_doc->component->author->attrs->link; - $xml_info->author->date = $xml_doc->component->author->attrs->date; - $xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body); + if($xml_doc->component->version && $xml_doc->component->attrs->version == '0.2') { + $component_info->component_name = $component; + $component_info->title = $xml_doc->component->title->body; + $component_info->description = str_replace('\n', "\n", $xml_doc->component->description->body); + $component_info->version = $xml_doc->component->version->body; + $component_info->date = $xml_doc->component->date->body; - $buff = 'component_name = "%s";', $component); - $buff .= sprintf('$xml_info->version = "%s";', $xml_info->version); - $buff .= sprintf('$xml_info->title = "%s";', $xml_info->title); - $buff .= sprintf('$xml_info->author->name = "%s";', $xml_info->author->name); - $buff .= sprintf('$xml_info->author->email_address = "%s";', $xml_info->author->email_address); - $buff .= sprintf('$xml_info->author->link = "%s";', $xml_info->author->link); - $buff .= sprintf('$xml_info->author->date = "%s";', $xml_info->author->date); - $buff .= sprintf('$xml_info->description = "%s";', $xml_info->description); + $buff = 'component_name = "%s";', $component_info->component_name); + $buff .= sprintf('$xml_info->title = "%s";', $component_info->title); + $buff .= sprintf('$xml_info->description = "%s";', $component_info->description); + $buff .= sprintf('$xml_info->version = "%s";', $component_info->version); + $buff .= sprintf('$xml_info->date = "%s";', $component_info->date); + + // 작성자 정보 + if(!is_array($xml_doc->component->author)) $author_list[] = $xml_doc->component->author; + else $author_list = $xml_doc->component->author; + + for($i=0; $i < count($author_list); $i++) { + $buff .= sprintf('$xml_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body); + $buff .= sprintf('$xml_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address); + $buff .= sprintf('$xml_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link); + } + + // history + if($xml_doc->component->history) { + if(!is_array($xml_doc->component->history)) $history_list[] = $xml_doc->component->history; + else $history_list = $xml_doc->component->history; + + for($i=0; $i < count($history_list); $i++) { + sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $buff .= sprintf('$xml_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body); + $buff .= sprintf('$xml_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version); + $buff .= sprintf('$xml_info->history['.$i.']->date = "%s";', $date); + + if($history_list[$i]->author) { + (!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author; + + for($j=0; $j < count($obj->author_list); $j++) { + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body); + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address); + $buff .= sprintf('$xml_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link); + } + } + + if($history_list[$i]->log) { + (!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log; + + for($j=0; $j < count($obj->log_list); $j++) { + $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body); + $buff .= sprintf('$xml_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link); + } + } + } + } + + + } else { + sscanf($xml_doc->component->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $xml_info->component_name = $component; + $xml_info->title = $xml_doc->component->title->body; + $xml_info->description = str_replace('\n', "\n", $xml_doc->component->author->description->body); + $xml_info->version = $xml_doc->component->attrs->version; + $xml_info->date = $date; + $xml_info->author->name = $xml_doc->component->author->name->body; + $xml_info->author->email_address = $xml_doc->component->author->attrs->email_address; + $xml_info->author->homepage = $xml_doc->component->author->attrs->link; + + $buff = 'component_name = "%s";', $xml_info->component_name); + $buff .= sprintf('$xml_info->title = "%s";', $xml_info->title); + $buff .= sprintf('$xml_info->description = "%s";', $xml_info->description); + $buff .= sprintf('$xml_info->version = "%s";', $xml_info->version); + $buff .= sprintf('$xml_info->date = "%s";', $xml_info->date); + $buff .= sprintf('$xml_info->author[0]->name = "%s";', $xml_info->author->name); + $buff .= sprintf('$xml_info->author[0]->email_address = "%s";', $xml_info->author->email_address); + $buff .= sprintf('$xml_info->author[0]->homepage = "%s";', $xml_info->author->homepage); + } // 추가 변수 정리 (에디터 컴포넌트에서는 text형만 가능) $extra_vars = $xml_doc->component->extra_vars->var; diff --git a/modules/editor/lang/en.lang.php b/modules/editor/lang/en.lang.php index b068b1ef7..b46a911f9 100644 --- a/modules/editor/lang/en.lang.php +++ b/modules/editor/lang/en.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "Developer"; $lang->component_link = "Link"; $lang->component_date = "Date"; + $lang->component_license = 'License'; + $lang->component_history = 'Updates'; $lang->component_description = "Description"; $lang->component_extra_vars = "Option Variable"; $lang->component_grant = "Permission Setting"; diff --git a/modules/editor/lang/es.lang.php b/modules/editor/lang/es.lang.php index 20b209619..29a251679 100644 --- a/modules/editor/lang/es.lang.php +++ b/modules/editor/lang/es.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "Autor"; $lang->component_link = "Enlace"; $lang->component_date = "Fecha"; + $lang->component_license = 'License'; + $lang->component_history = "History"; $lang->component_description = "Descripción"; $lang->component_extra_vars = "Varibles Extras"; $lang->component_grant = "Ajuste de las atribuciones"; diff --git a/modules/editor/lang/fr.lang.php b/modules/editor/lang/fr.lang.php index da42d1378..9630a2fa0 100644 --- a/modules/editor/lang/fr.lang.php +++ b/modules/editor/lang/fr.lang.php @@ -11,13 +11,15 @@ $lang->component_author = "Développeur"; $lang->component_link = "Lien"; $lang->component_date = "Jour de Création"; + $lang->component_license = 'License'; + $lang->component_history = "History"; $lang->component_description = "Description"; $lang->component_extra_vars = "Variables d'Option"; $lang->component_grant = "Configuration de l'Autorisation"; $lang->about_component = "Sur le Composant"; $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_component_mid = "에디터 컴포넌트가 사용될 대상을 지정할 수 있습니다.
    (모두 해제시 모든 대상에서 사용 가능합니다)"; + $lang->about_component_mid = "Vous pouvez indiquer les objectifs que les composants s'appliquer
    (Tous les objectifs seront choisis quand rien est choisi.)"; $lang->msg_component_is_not_founded = 'Ne peut pas trouver Composant %s'; $lang->msg_component_is_inserted = 'Composant choisi est déjà inséré'; diff --git a/modules/editor/lang/jp.lang.php b/modules/editor/lang/jp.lang.php index e4794928f..241516005 100644 --- a/modules/editor/lang/jp.lang.php +++ b/modules/editor/lang/jp.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "作者"; $lang->component_link = "リンク"; $lang->component_date = "作成日"; + $lang->component_license = 'License'; + $lang->component_history = "History"; $lang->component_description = "説明"; $lang->component_extra_vars = "設定変数"; $lang->component_grant = "権限設定"; diff --git a/modules/editor/lang/ko.lang.php b/modules/editor/lang/ko.lang.php index 24d9c1572..b66e81e4e 100644 --- a/modules/editor/lang/ko.lang.php +++ b/modules/editor/lang/ko.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "제작자 "; $lang->component_link = "링크"; $lang->component_date = "제작일"; + $lang->component_license = '라이센스'; + $lang->component_history = '변경 이력'; $lang->component_description = "설명"; $lang->component_extra_vars = "설정 변수"; $lang->component_grant = "권한설정"; diff --git a/modules/editor/lang/ru.lang.php b/modules/editor/lang/ru.lang.php index 6f1dab729..844ec247b 100644 --- a/modules/editor/lang/ru.lang.php +++ b/modules/editor/lang/ru.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "Разработчик"; $lang->component_link = "Ссылка"; $lang->component_date = "Дата"; + $lang->component_license = 'License'; + $lang->component_history = "History"; $lang->component_description = "Описание"; $lang->component_extra_vars = "Экстра перем."; $lang->component_grant = "Настройки прав доступа"; diff --git a/modules/editor/lang/zh-CN.lang.php b/modules/editor/lang/zh-CN.lang.php index 66cdfd8ca..fa38d1f03 100644 --- a/modules/editor/lang/zh-CN.lang.php +++ b/modules/editor/lang/zh-CN.lang.php @@ -11,6 +11,8 @@ $lang->component_author = "作者"; $lang->component_link = "链接"; $lang->component_date = "编写日期"; + $lang->component_license = 'License'; + $lang->component_history = "History"; $lang->component_description = "说明"; $lang->component_extra_vars = "变数设置"; $lang->component_grant = "权限设置"; diff --git a/modules/editor/skins/default/editor.html b/modules/editor/skins/default/editor.html index 92f0ea4ae..154dcec80 100644 --- a/modules/editor/skins/default/editor.html +++ b/modules/editor/skins/default/editor.html @@ -73,8 +73,8 @@
    - {$lang->edit->help_list_number} {$lang->edit->help_list_bullet} + {$lang->edit->help_list_number}
    + {$author->name} + + + {zdate($xml_info->date, 'Y-m-d')} {$lang->cmd_setup} diff --git a/modules/editor/tpl/setup_component.html b/modules/editor/tpl/setup_component.html index a10773e30..0d1f117a2 100644 --- a/modules/editor/tpl/setup_component.html +++ b/modules/editor/tpl/setup_component.html @@ -20,12 +20,18 @@ {$lang->component_author} - {$component->author->name} + + + {$author->name} ({$author->homepage}, {$author->email_address})
    + + + {$lang->component_link} - {$component->author->link} + {$component->link} + diff --git a/modules/editor/tpl/view_component.html b/modules/editor/tpl/view_component.html index f1898e826..9b4946c19 100644 --- a/modules/editor/tpl/view_component.html +++ b/modules/editor/tpl/view_component.html @@ -11,12 +11,32 @@ {$lang->component_author} - {$component->author->name} + + + {$author->name} ({$author->homepage}, {$author->email_address})
    + + - {$lang->component_link} - {$component->author->link} + {$lang->homepage} + {$component->homepage} + + + {$lang->regdate} + {zdate($component->date, 'Y-m-d')} + + + + {$lang->layout_license} + + {nl2br(trim($component->license))} + +

    {$component->license_link}

    + + + + {$lang->component_description} {nl2br(trim($component->description))} @@ -24,6 +44,47 @@ + +
    +

    {$lang->component_history}

    +
    + +
    + + + + + + + + + + +
    + {$history->version}
    + {zdate($history->date, 'Y-m-d')} +
    + +

    {$author->name} ({$author->homepage} / {$author->email_address})

    + + +

    {nl2br(trim($history->description))}

    + + + + +
    +
    + + diff --git a/modules/file/conf/info.xml b/modules/file/conf/info.xml index 97f1a9c31..ee1b44c6f 100644 --- a/modules/file/conf/info.xml +++ b/modules/file/conf/info.xml @@ -1,23 +1,27 @@ - - + + 첨부파일 上传附件 Attachment Adjuntar archivos 添付ファイル Вложения - + 첨부 파일 관리하는 모듈입니다. + 管理附件的模块。 + Module for managing attachments. + Módulo para manejar los archivos adjuntos. + 添付ファイルを管理するモジュールです。 + Модуль для управления вложениями. + 0.1 + 2007-02-28 + utility + + 제로 zero Zero zero Zero zero - 첨부 파일 관리하는 모듈입니다. - 管理附件的模块。 - Module for managing attachments. - Módulo para manejar los archivos adjuntos. - 添付ファイルを管理するモジュールです。 - Модуль для управления вложениями. - + \ No newline at end of file diff --git a/modules/file/file.admin.controller.php b/modules/file/file.admin.controller.php index 48c1709e9..cc984d708 100644 --- a/modules/file/file.admin.controller.php +++ b/modules/file/file.admin.controller.php @@ -17,15 +17,34 @@ * @brief 특정 모두의 첨부파일 모두 삭제 **/ function deleteModuleFiles($module_srl) { + // 전체 첨부파일 목록을 구함 + $args->module_srl = $module_srl; + $output = executeQuery('file.getModuleFiles',$args); + if(!$output) return $output; + $files = $output->data; + + // DB에서 삭제 $args->module_srl = $module_srl; $output = executeQuery('file.deleteModuleFiles', $args); if(!$output->toBool()) return $output; - // 실제 파일 삭제 - $path[0] = sprintf("./files/attach/images/%s/", $module_srl); - $path[1] = sprintf("./files/attach/binaries/%s/", $module_srl); - FileHandler::removeDir($path[0]); - FileHandler::removeDir($path[1]); + // 실제 파일 삭제 (일단 약속에 따라서 한번에 삭제) + FileHandler::removeDir( sprintf("./files/attach/images/%s/", $module_srl) ) ; + FileHandler::removeDir( sprintf("./files/attach/binaries/%s/", $module_srl) ); + + // DB에서 구한 파일 목록을 삭제 + $path = array(); + $cnt = count($files); + for($i=0;$i<$cnt;$i++) { + $uploaded_filename = $files[$i]->uploaded_filename; + FileHandler::removeFile($uploaded_filename); + + $path_info = pathinfo($uploaded_filename); + if(!in_array($path_info['dirname'], $path)) $path[] = $path_info['dirname']; + } + + // 해당 글의 첨부파일 디렉토리 삭제 + for($i=0;$itoBool()) return $trigger_output; // 삭제 성공하면 파일 삭제 - @unlink($uploaded_filename); + FileHandler::removeFile($uploaded_filename); return $output; } @@ -368,16 +380,20 @@ if(!$output->toBool()) return $output; // 실제 파일 삭제 + $path = array(); $file_count = count($file_list); - for($i=0;$iuploaded_filename; + FileHandler::removeFile($uploaded_filename); $module_srl = $file_list[$i]->module_srl; - $path[0] = sprintf("./files/attach/images/%s/%s/", $module_srl, $upload_target_srl); - $path[1] = sprintf("./files/attach/binaries/%s/%s/", $module_srl, $upload_target_srl); - FileHandler::removeDir($path[0]); - FileHandler::removeDir($path[1]); + $path_info = pathinfo($uploaded_filename); + if(!in_array($path_info['dirname'], $path)) $path[] = $path_info['dirname']; } + // 해당 글의 첨부파일 디렉토리 삭제 + for($i=0;$i + + + + + + + diff --git a/modules/importer/conf/info.xml b/modules/importer/conf/info.xml index 5c005e528..68f68d456 100644 --- a/modules/importer/conf/info.xml +++ b/modules/importer/conf/info.xml @@ -1,23 +1,27 @@ - - + + 제로보드 데이터 이전 Zeroboard data transferation 数据导入 ZBデータ移転 Transferencia de los datos de ZeroBoard Трансферинг данных Zeroboard - + XML파일을 이용하여 회원정보 또는 게시판등의 데이터를 입력합니다. + Inputting member information or board's data using XML file. + 利用XML文件导入会员信息或版面数据。 + XMLファイルを用いて会員情報または掲示板などの情報を入力します。 + Ingresa la información del usuario o los datos del tablero utilizando el archivo XML. + Запись информации пользователей или форума, используя XML-файл. + 0.2 + 2007-12-13 + accessory + + 제로 Zero zero Zero Zero zero - XML파일을 이용하여 회원정보 또는 게시판등의 데이터를 입력합니다. - Inputting member information or board's data using XML file. - 利用XML文件导入会员信息或版面数据。 - XMLファイルを用いて会員情報または掲示板などの情報を入力します。 - Ingresa la información del usuario o los datos del tablero utilizando el archivo XML. - Запись информации пользователей или форума, используя XML-файл. - + \ No newline at end of file diff --git a/modules/importer/extract.class.php b/modules/importer/extract.class.php index 9d43b75fd..8f16060fc 100644 --- a/modules/importer/extract.class.php +++ b/modules/importer/extract.class.php @@ -50,7 +50,7 @@ * @brief 지정된 파일의 지시자를 염 **/ function openFile() { - @unlink($this->cache_index_file); + FileHandler::removeFile($this->cache_index_file); $this->index_fd = fopen($this->cache_index_file,"a"); // local 파일일 경우 @@ -140,7 +140,7 @@ $buff = FileHandler::readFile($target_file); fwrite($fd, FileHandler::readFile($target_file)); - @unlink($target_file); + FileHandler::removeFile($target_file); } fwrite($fd, ''); fclose($fd); diff --git a/modules/importer/importer.admin.controller.php b/modules/importer/importer.admin.controller.php index 5789f5563..170458fcb 100644 --- a/modules/importer/importer.admin.controller.php +++ b/modules/importer/importer.admin.controller.php @@ -190,7 +190,7 @@ // 대상 파일을 읽여서 파싱후 입력 $xmlObj = $oXmlParser->loadXmlFile($target_file); - @unlink($target_file); + FileHandler::removeFile($target_file); if(!$xmlObj) continue; // 객체 정리 @@ -326,7 +326,7 @@ // 대상 파일을 읽여서 파싱후 입력 $xmlObj = $oXmlParser->loadXmlFile($target_file); - @unlink($target_file); + FileHandler::removeFile($target_file); if(!$xmlObj) continue; // 객체 정리 @@ -433,7 +433,7 @@ $oDocumentController = &getController('document'); $oDocumentController->makeCategoryFile($module_srl); } - @unlink($category_file); + FileHandler::removeFile($category_file); } $category_list = $category_titles = array(); @@ -558,7 +558,7 @@ } fclose($fp); - @unlink($target_file); + FileHandler::removeFile($target_file); } fclose($f); @@ -793,7 +793,7 @@ // 디렉토리 생성 if(!FileHandler::makeDir($path)) continue; - if(preg_match('/^\.\/files\/cache\/tmp/i',$file_obj->file)) @rename($file_obj->file, $filename); + if(preg_match('/^\.\/files\/cache\/tmp/i',$file_obj->file)) FileHandler::rename($file_obj->file, $filename); else @copy($file_obj->file, $filename); // DB입력 diff --git a/modules/importer/lang/fr.lang.php b/modules/importer/lang/fr.lang.php index ae27da5a3..c482f14be 100644 --- a/modules/importer/lang/fr.lang.php +++ b/modules/importer/lang/fr.lang.php @@ -54,5 +54,5 @@ $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 = "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\'"; + $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/ttimport.class.php b/modules/importer/ttimport.class.php index d8f6c5319..8d3b14881 100644 --- a/modules/importer/ttimport.class.php +++ b/modules/importer/ttimport.class.php @@ -55,7 +55,7 @@ } $oDocumentController->makeCategoryFile($module_srl); } - @unlink($category_file); + FileHandler::removeFile($category_file); } $category_list = $category_titles = array(); $category_list = $oDocumentModel->getCategoryList($module_srl); @@ -239,7 +239,7 @@ } fclose($fp); - @unlink($target_file); + FileHandler::removeFile($target_file); } fclose($f); @@ -298,7 +298,7 @@ // 디렉토리 생성 if(!FileHandler::makeDir($path)) continue; - @rename($file_obj->file, $filename); + FileHandler::rename($file_obj->file, $filename); // DB입력 unset($file_obj->file); diff --git a/modules/install/conf/info.xml b/modules/install/conf/info.xml index e32c55f3a..e0f2fb6ed 100644 --- a/modules/install/conf/info.xml +++ b/modules/install/conf/info.xml @@ -1,23 +1,27 @@ - - + + 설치관리 Manage installation 安装管理 インストール管理 Manajo de la Instalación Управление установкой - + 설치 관리 모듈 + Module for managing installation + 安装管理模块。 + インストール管理モジュール + Módulo para el manejo de la instalación + Модуль для управления установкой + 0.1 + 2007-02-28 + base + + 제로 Zero Zero Zero Zero zero - 설치 관리 모듈 - Module for managing installation - 安装管理模块。 - インストール管理モジュール - Módulo para el manejo de la instalación - Модуль для управления установкой - + \ No newline at end of file diff --git a/modules/install/lang/fr.lang.php b/modules/install/lang/fr.lang.php index ed24c4448..9e9f85685 100644 --- a/modules/install/lang/fr.lang.php +++ b/modules/install/lang/fr.lang.php @@ -224,8 +224,8 @@ EndOfLicense; $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->qmail_compatibility = 'Qmail 호환'; - $lang->about_qmail_compatibility = 'Qmail등 CRLF를 줄 구분자로 인식하지 못하는 MTA에서 메일이 발송되도록 합니다.'; + $lang->qmail_compatibility = 'Compatible avec Qmail'; + $lang->about_qmail_compatibility = 'Le mél sera envoyer en MTA qui ne peut pas reconnaître le CRLF comme délimiteur des lignes comme le Qmail.'; $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.'; diff --git a/modules/integration_search/conf/info.xml b/modules/integration_search/conf/info.xml index c265ab9f3..2d436c52f 100644 --- a/modules/integration_search/conf/info.xml +++ b/modules/integration_search/conf/info.xml @@ -1,41 +1,45 @@ - - + + 통합검색 - 搜索 + 搜索 統合検索 Integrated Search - Búsqueda Integrada + Búsqueda Integrada Интегрируемый поиск + + 선택한 모듈들을 대상으로 통합검색을 지원합니다. + 선택된 모듈의 글중 비밀글만 검색을 하지 않고 나머지는 모두 검색을 하기에 공개되지 않은 모듈은 대상에 포함하지 않도록 하셔야 합니다. + + + 把被选模块作为搜索对象进行搜索。 + 被选模块当中只有密帖不会被搜索,因此请注意选择您不想搜索的模块。 + + + 選択されたモジュールを対象に統合検索を行う機能をサポートします。 + 選択されたモジュールのコンテンツ(書き込み)の中で、非公開コンテンツのみ検索から除外されますので、未公開のモジュールは対象にしないようにしてください。 + + + It supports integration search for chosen modules. + All articles except secret articles will be searched, so you need to be careful not to include secret module to target. + + + Soporta la búsqueda integrada de los módulos elegidos. + Todo los documentos excepto los secretos serán buscados, y es necesario tener cuidado de no incluir módulo secreto como objetivo. + + + Поддерживает интеграцию поиска в выбранные модули. + Все статьи, за исключением секретных, будут подлежать поиску, поэтому Вам нужно быть осторожным с тем, чтобы не включить модуль секретов в назначение. + + 0.1 + 2007-07-24 + service + 제로 - Zero + Zero Zero zero - zero + zero zero - - 선택한 모듈들을 대상으로 통합검색을 지원합니다. - 선택된 모듈의 글중 비밀글만 검색을 하지 않고 나머지는 모두 검색을 하기에 공개되지 않은 모듈은 대상에 포함하지 않도록 하셔야 합니다. - - - 把被选模块作为搜索对象进行搜索。 - 被选模块当中只有密帖不会被搜索,因此请注意选择您不想搜索的模块。 - - - 選択されたモジュールを対象に統合検索を行う機能をサポートします。 - 選択されたモジュールのコンテンツ(書き込み)の中で、非公開コンテンツのみ検索から除外されますので、未公開のモジュールは対象にしないようにしてください。 - - - It supports integration search for chosen modules. - All articles except secret articles will be searched, so you need to be careful not to include secret module to target. - - - Soporta la búsqueda integrada de los módulos elegidos. - Todo los documentos excepto los secretos serán buscados, y es necesario tener cuidado de no incluir módulo secreto como objetivo. - - - Поддерживает интеграцию поиска в выбранные модули. - Все статьи, за исключением секретных, будут подлежать поиску, поэтому Вам нужно быть осторожным с тем, чтобы не включить модуль секретов в назначение. - - + \ No newline at end of file diff --git a/modules/integration_search/integration_search.admin.controller.php b/modules/integration_search/integration_search.admin.controller.php index e536ba756..1e03bdb3a 100644 --- a/modules/integration_search/integration_search.admin.controller.php +++ b/modules/integration_search/integration_search.admin.controller.php @@ -61,7 +61,7 @@ $del_var = $obj->{"del_".$vars->name}; unset($obj->{"del_".$vars->name}); if($del_var == 'Y') { - @unlink($module_info->{$vars->name}); + FileHandler::removeFile($module_info->{$vars->name}); continue; } diff --git a/modules/krzip/conf/info.xml b/modules/krzip/conf/info.xml index 6e9d9773a..9457bdb3d 100644 --- a/modules/krzip/conf/info.xml +++ b/modules/krzip/conf/info.xml @@ -1,41 +1,45 @@ - - + + 한국 우편번호 Korean Zip Code - Código postal de Corea + Código postal de Corea 韩国邮编 韓国郵便番号 Корейский почтовый индекс - + + 제로보드에서 운영하는 우편번호서버를 이용하여 우편번호 검색을 합니다. + 우편번호 검색 서버는 설정을 통해 변경하실 수 있습니다. + + + Searching the zip code via zip code server operated by zeroboard. + You can change the zip code server by setting. + + + Busca el código postal a través del servidor operado por Zeroboard. + Usted puede cambiar la configuración del servidor de código postal. + + + 利用zeroboard运营的邮编服务器搜索邮编。 + 通过设置可以修改邮编搜索服务器。 + + + ゼロボードで運用している郵便番号サーバを利用して韓国の郵便番号を検索します。 + 郵便番号検索サーバは設定によって変更することができます。 + + + Поиск индекса через сервер почтовый индексов, оперируемый zeroboard. + Вы можете изменить сервер почтовых индексов в настройках. + + 0.1 + 2007-02-28 + accessory + + 제로 Zero - Zero + Zero Zero Zero zero - - 제로보드에서 운영하는 우편번호서버를 이용하여 우편번호 검색을 합니다. - 우편번호 검색 서버는 설정을 통해 변경하실 수 있습니다. - - - Searching the zip code via zip code server operated by zeroboard. - You can change the zip code server by setting. - - - Busca el código postal a través del servidor operado por Zeroboard. - Usted puede cambiar la configuración del servidor de código postal. - - - 利用zeroboard运营的邮编服务器搜索邮编。 - 通过设置可以修改邮编搜索服务器。 - - - ゼロボードで運用している郵便番号サーバを利用して韓国の郵便番号を検索します。 - 郵便番号検索サーバは設定によって変更することができます。 - - - Поиск индекса через сервер почтовый индексов, оперируемый zeroboard. - Вы можете изменить сервер почтовых индексов в настройках. - - + \ No newline at end of file diff --git a/modules/layout/conf/info.xml b/modules/layout/conf/info.xml index f79f79b33..11d79f945 100644 --- a/modules/layout/conf/info.xml +++ b/modules/layout/conf/info.xml @@ -1,23 +1,27 @@ - - + + 레이아웃 布局 レイアウト Layout Diseño Лейаут - + 레이아웃을 생성/관리하는 모듈입니다. + 生成/管理布局的模块。 + レイアウトを生成・管理するモジュールです。 + This module is for creating/managing of layouts. + Este módulo es para crear y manejar el diseño. + Этот модуль служит для создания/управления лейаутами. + 0.1 + 2007-02-28 + manager + + 제로 Zero Zero zero - zero + zero zero - 레이아웃을 생성/관리하는 모듈입니다. - 生成/管理布局的模块。 - レイアウトを生成・管理するモジュールです。 - This module is for creating/managing of layouts. - Este módulo es para crear y manejar el diseño. - Этот модуль служит для создания/управления лейаутами. - + \ No newline at end of file diff --git a/modules/layout/lang/en.lang.php b/modules/layout/lang/en.lang.php index 6502eec08..d543116b2 100644 --- a/modules/layout/lang/en.lang.php +++ b/modules/layout/lang/en.lang.php @@ -10,6 +10,7 @@ $lang->layout_name = 'Layout Name'; $lang->layout_maker = "Layout Developer"; + $lang->layout_license = 'License'; $lang->layout_history = "Updates"; $lang->layout_info = "Layout Info"; $lang->layout_list = 'Layout List'; diff --git a/modules/layout/lang/es.lang.php b/modules/layout/lang/es.lang.php index e738c7bc0..8a0e4aeeb 100644 --- a/modules/layout/lang/es.lang.php +++ b/modules/layout/lang/es.lang.php @@ -10,6 +10,7 @@ $lang->layout_name = 'Nombre del Diseño'; $lang->layout_maker = "Desarrollador del Diseño"; + $lang->layout_license = 'License'; $lang->layout_history = "Actualización"; $lang->layout_info = "Información del Diseño"; $lang->layout_list = 'Lista de los Diseños'; diff --git a/modules/layout/lang/fr.lang.php b/modules/layout/lang/fr.lang.php index dbc05a351..7676f1f71 100644 --- a/modules/layout/lang/fr.lang.php +++ b/modules/layout/lang/fr.lang.php @@ -10,6 +10,7 @@ $lang->layout_name = 'Nom du Mise en Page'; $lang->layout_maker = "Développeur du Mise en Page"; + $lang->layout_license = 'License'; $lang->layout_history = "Mise à Jour"; $lang->layout_info = "Informations du Mise en Page"; $lang->layout_list = 'Liste des Mises en Page'; diff --git a/modules/layout/lang/jp.lang.php b/modules/layout/lang/jp.lang.php index 003137a7a..fbc4d6dca 100644 --- a/modules/layout/lang/jp.lang.php +++ b/modules/layout/lang/jp.lang.php @@ -10,6 +10,7 @@ $lang->layout_name = 'レイアウト名'; $lang->layout_maker = "レイアウト作者"; + $lang->layout_license = 'License'; $lang->layout_history = "変更内容 "; $lang->layout_info = "レイアウト情報"; $lang->layout_list = 'レイアウトリスト'; diff --git a/modules/layout/lang/ko.lang.php b/modules/layout/lang/ko.lang.php index 1fba3d8e9..2bd20c936 100644 --- a/modules/layout/lang/ko.lang.php +++ b/modules/layout/lang/ko.lang.php @@ -10,7 +10,8 @@ $lang->layout_name = '레이아웃 이름'; $lang->layout_maker = "레이아웃 제작자"; - $lang->layout_history = "변경 사항 "; + $lang->layout_license = '라이센스'; + $lang->layout_history = '변경 이력'; $lang->layout_info = "레이아웃 정보"; $lang->layout_list = '레이아웃 목록'; $lang->menu_count = '메뉴수'; diff --git a/modules/layout/lang/ru.lang.php b/modules/layout/lang/ru.lang.php index 20a59c2a7..45deeb30a 100644 --- a/modules/layout/lang/ru.lang.php +++ b/modules/layout/lang/ru.lang.php @@ -10,6 +10,7 @@ $lang->layout_name = 'Имя лейаута'; $lang->layout_maker = "Разработчик лейаута"; + $lang->layout_license = 'License'; $lang->layout_history = "Обновления"; $lang->layout_info = "Информация лейаута"; $lang->layout_list = 'Список лейаутов'; diff --git a/modules/layout/lang/zh-CN.lang.php b/modules/layout/lang/zh-CN.lang.php index 6f81d7372..d8b62d824 100644 --- a/modules/layout/lang/zh-CN.lang.php +++ b/modules/layout/lang/zh-CN.lang.php @@ -12,6 +12,7 @@ $lang->layout_name = '布局名'; $lang->layout_maker = "布局作者"; + $lang->layout_license = 'License'; $lang->layout_history = "更新记录 "; $lang->layout_info = "布局信息"; $lang->layout_list = '布局目录'; diff --git a/modules/layout/layout.admin.controller.php b/modules/layout/layout.admin.controller.php index 4ae95fcb0..6cddda824 100644 --- a/modules/layout/layout.admin.controller.php +++ b/modules/layout/layout.admin.controller.php @@ -92,7 +92,7 @@ unset($extra_vars->{"del_".$name}); if($del_var == 'Y') { $extra_vars->{$name} = ''; - @unlink($extra_vars->{$name}); + FileHandler::removeFile($extra_vars->{$name}); continue; } @@ -140,7 +140,7 @@ $output = executeQuery('layout.updateLayout', $args); if($output->toBool()) { $cache_file = sprintf('./files/cache/layout/%s.%s.cache.php', $args->layout_srl, Context::getLangType()); - @unlink($cache_file); + FileHandler::removeFile($cache_file); } return $output; } @@ -157,12 +157,12 @@ if(count($cache_list)) { foreach($cache_list as $cache_file) { $pos = strpos($cache_file, $layout_srl.'_'); - if($pos>0) unlink($cache_file); + if($pos>0)FileHandler::removeFile($cache_file); } } $layout_file = sprintf('./files/cache/layout/%d.html', $layout_srl); - if(file_exists($layout_file)) @unlink($layout_file); + if(file_exists($layout_file)) FileHandler::removeFile($layout_file); // 레이아웃 삭제 $args->layout_srl = $layout_srl; @@ -200,7 +200,7 @@ if(!$layout_srl) return new Object(-1, 'msg_invalid_request'); $layout_file = sprintf('./files/cache/layout/%d.html', $layout_srl); - @unlink($layout_file); + FileHandler::removeFile($layout_file); $this->setMessage('success_reset'); } diff --git a/modules/layout/layout.admin.view.php b/modules/layout/layout.admin.view.php index f29142a7e..10bc47936 100644 --- a/modules/layout/layout.admin.view.php +++ b/modules/layout/layout.admin.view.php @@ -155,7 +155,7 @@ Context::set('layout_tpl', $layout_tpl); // 임시 파일 삭제 - @unlink($edited_layout_file); + FileHandler::removeFile($edited_layout_file); $this->setTemplateFile('layout_preview'); } diff --git a/modules/layout/layout.class.php b/modules/layout/layout.class.php index cff9e0c72..93def1d09 100644 --- a/modules/layout/layout.class.php +++ b/modules/layout/layout.class.php @@ -53,7 +53,7 @@ $directory = dir($path); while($entry = $directory->read()) { if ($entry == "." || $entry == ".." || preg_match('/\.html$/i',$entry) ) continue; - @unlink($path."/".$entry); + FileHandler::removeFile($path."/".$entry); } $directory->close(); } diff --git a/modules/layout/layout.model.php b/modules/layout/layout.model.php index a1d87caf6..daf6d7a01 100644 --- a/modules/layout/layout.model.php +++ b/modules/layout/layout.model.php @@ -16,7 +16,7 @@ /** * @brief DB 에 생성된 레이아웃의 목록을 구함 - * 생성되었다는 것은 DB에 등록이 되었다는 것을 의미 + * 생성되었다는 것은 DB에 등록이 되었다는 것을 의미 **/ function getLayoutList() { $output = executeQuery('layout.getLayoutList'); @@ -46,7 +46,7 @@ **/ function getLayoutPath($layout_name) { $class_path = sprintf('./layouts/%s/', $layout_name); - if(is_dir($class_path)) return $class_path; + if(is_dir($class_path)) return $class_path; return ""; } @@ -76,7 +76,7 @@ /** * @brief 모듈의 conf/info.xml 을 읽어서 정보를 구함 - * 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다.. + * 이것 역시 캐싱을 통해서 xml parsing 시간을 줄인다.. **/ function getLayoutInfo($layout, $info = null) { if($info) { @@ -89,7 +89,7 @@ $layout_path = preg_replace('/([a-zA-Z0-9\_\.]+)(\.html)$/','',$info->layout_path); $xml_file = sprintf('%sskin.xml', $layout_path); } - } + } // 요청된 모듈의 경로를 구한다. 없으면 return if(!$layout_path) $layout_path = $this->getLayoutPath($layout); @@ -131,20 +131,85 @@ $buff = ''; - // 레이아웃의 제목, 버전 - $buff .= sprintf('$layout_info->layout = "%s";', $layout); - $buff .= sprintf('$layout_info->path = "%s";', $layout_path); - $buff .= sprintf('$layout_info->title = "%s";', $xml_obj->title->body); - $buff .= sprintf('$layout_info->version = "%s";', $xml_obj->attrs->version); - $buff .= sprintf('$layout_info->layout_srl = $layout_srl;'); - $buff .= sprintf('$layout_info->layout_title = $layout_title;'); + if($xml_obj->version && $xml_obj->attrs->version == '0.2') { + // 레이아웃의 제목, 버전 + sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $buff .= sprintf('$layout_info->layout = "%s";', $layout); + $buff .= sprintf('$layout_info->path = "%s";', $layout_path); + $buff .= sprintf('$layout_info->title = "%s";', $xml_obj->title->body); + $buff .= sprintf('$layout_info->description = "%s";', $xml_obj->description->body); + $buff .= sprintf('$layout_info->version = "%s";', $xml_obj->version->body); + $buff .= sprintf('$layout_info->date = "%s";', $date); + $buff .= sprintf('$layout_info->layout_srl = $layout_srl;'); + $buff .= sprintf('$layout_info->layout_title = $layout_title;'); + $buff .= sprintf('$layout_info->license = "%s";', $xml_obj->license->body); + $buff .= sprintf('$layout_info->license_link = "%S";', $xml_obj->license->attrs->link); - // 작성자 정보 - $buff .= sprintf('$layout_info->author->name = "%s";', $xml_obj->author->name->body); - $buff .= sprintf('$layout_info->author->email_address = "%s";', $xml_obj->author->attrs->email_address); - $buff .= sprintf('$layout_info->author->homepage = "%s";', $xml_obj->author->attrs->link); - $buff .= sprintf('$layout_info->author->date = "%s";', $xml_obj->author->attrs->date); - $buff .= sprintf('$layout_info->author->description = "%s";', $xml_obj->author->description->body); + // 작성자 정보 + if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author; + else $author_list = $xml_obj->author; + + for($i=0; $i < count($author_list); $i++) { + $buff .= sprintf('$layout_info->author['.$i.']->name = "%s";', $author_list[$i]->name->body); + $buff .= sprintf('$layout_info->author['.$i.']->email_address = "%s";', $author_list[$i]->attrs->email_address); + $buff .= sprintf('$layout_info->author['.$i.']->homepage = "%s";', $author_list[$i]->attrs->link); + } + + // history + if($xml_obj->history) { + if(!is_array($xml_obj->history)) $history_list[] = $xml_obj->history; + else $history_list = $xml_obj->history; + + for($i=0; $i < count($history_list); $i++) { + sscanf($history_list[$i]->attrs->date, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $buff .= sprintf('$layout_info->history['.$i.']->description = "%s";', $history_list[$i]->description->body); + $buff .= sprintf('$layout_info->history['.$i.']->version = "%s";', $history_list[$i]->attrs->version); + $buff .= sprintf('$layout_info->history['.$i.']->date = "%s";', $date); + + if($history_list[$i]->author) { + (!is_array($history_list[$i]->author)) ? $obj->author_list[] = $history_list[$i]->author : $obj->author_list = $history_list[$i]->author; + + for($j=0; $j < count($obj->author_list); $j++) { + $buff .= sprintf('$layout_info->history['.$i.']->author['.$j.']->name = "%s";', $obj->author_list[$j]->name->body); + $buff .= sprintf('$layout_info->history['.$i.']->author['.$j.']->email_address = "%s";', $obj->author_list[$j]->attrs->email_address); + $buff .= sprintf('$layout_info->history['.$i.']->author['.$j.']->homepage = "%s";', $obj->author_list[$j]->attrs->link); + } + } + + if($history_list[$i]->log) { + (!is_array($history_list[$i]->log)) ? $obj->log_list[] = $history_list[$i]->log : $obj->log_list = $history_list[$i]->log; + + for($j=0; $j < count($obj->log_list); $j++) { + $buff .= sprintf('$layout_info->history['.$i.']->logs['.$j.']->text = "%s";', $obj->log_list[$j]->body); + $buff .= sprintf('$layout_info->history['.$i.']->logs['.$j.']->link = "%s";', $obj->log_list[$j]->attrs->link); + } + } + } + } + + + + } else { + + // 레이아웃의 제목, 버전 + sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); + $date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $buff .= sprintf('$layout_info->layout = "%s";', $layout); + $buff .= sprintf('$layout_info->path = "%s";', $layout_path); + $buff .= sprintf('$layout_info->title = "%s";', $xml_obj->title->body); + $buff .= sprintf('$layout_info->description = "%s";', $xml_obj->author->description->body); + $buff .= sprintf('$layout_info->version = "%s";', $xml_obj->attrs->version); + $buff .= sprintf('$layout_info->date = "%s";', $date); + $buff .= sprintf('$layout_info->layout_srl = $layout_srl;'); + $buff .= sprintf('$layout_info->layout_title = $layout_title;'); + + // 작성자 정보 + $buff .= sprintf('$layout_info->author[0]->name = "%s";', $xml_obj->author->name->body); + $buff .= sprintf('$layout_info->author[0]->email_address = "%s";', $xml_obj->author->attrs->email_address); + $buff .= sprintf('$layout_info->author[0]->homepage = "%s";', $xml_obj->author->attrs->link); + } // 추가 변수 (템플릿에서 사용할 제작자 정의 변수) $extra_var_groups = $xml_obj->extra_vars->group; diff --git a/modules/layout/tpl/downloaded_layout_list.html b/modules/layout/tpl/downloaded_layout_list.html index 563b74cbb..be28f4344 100644 --- a/modules/layout/tpl/downloaded_layout_list.html +++ b/modules/layout/tpl/downloaded_layout_list.html @@ -43,15 +43,19 @@ ({$val->layout}) - + - + diff --git a/modules/layout/tpl/layout_detail_info.html b/modules/layout/tpl/layout_detail_info.html index a785e83b6..661c12df3 100644 --- a/modules/layout/tpl/layout_detail_info.html +++ b/modules/layout/tpl/layout_detail_info.html @@ -12,23 +12,81 @@ - + + - + + - + + + + + + + - +
    {$val->version}{$val->author->name} + + {$author->name} + + {$val->menu_count}{$val->author->date}{zdate($val->date, 'Y-m-d')} {$val->path} {$lang->cmd_make}
    - {nl2br(trim($val->author->description))} + {nl2br(trim($val->description))}
    {$lang->author}{$layout_info->author->name} + + {$author->name} ({$author->homepage}, {$author->email_address})
    + +
    {$lang->homepage}{$layout_info->author->homepage}{$layout_info->homepage}
    {$lang->regdate}{$layout_info->author->date}{zdate($layout_info->date, 'Y-m-d')}
    {$lang->layout_license} + {nl2br(trim($layout_info->license))} + +

    {$layout_info->license_link}

    + +
    {$lang->description}{nl2br(trim($layout_info->author->description))}{nl2br(trim($layout_info->description))}
    + +
    +

    {$lang->layout_history}

    +
    + +
    + + + + + + + + + + +
    + {$history->version}
    + {zdate($history->date, 'Y-m-d')} +
    + +

    {$author->name} ({$author->homepage} / {$author->email_address})

    + + +

    {nl2br(trim($history->description))}

    + + + + +
    +
    + +
    {$lang->cmd_close} diff --git a/modules/lifepod/conf/info.xml b/modules/lifepod/conf/info.xml index 4d25da8e5..f0c4d3f63 100644 --- a/modules/lifepod/conf/info.xml +++ b/modules/lifepod/conf/info.xml @@ -1,22 +1,25 @@ - - + + 라이프팟 연동 Lifepod Lifepod連動 - Лайфпод - Lifepod - Lifepod API + Лайфпод + Lifepod + Lifepod API + 라이프팟의 calendar를 제로보드XE에서 연동하여 출력하는 기능을 가지고 있는 모듈입니다. + Este módulo muestra calendario de lifepod. + 把Lifepod日历连接到zbXE的模块。 + This module displays calendar from lifepod. + (Openmaru社提供の)LifepodサービスのカレンダーをゼロボードXEに連動して出力するモジュールです。 + Этот модуль отображает календать с lifepod'а. + 0.12 + 2007-12-10 + service - + haneul haneul haneul haneul - 라이프팟의 calendar를 제로보드XE에서 연동하여 출력하는 기능을 가지고 있는 모듈입니다. - Este módulo muestra calendario de lifepod. - 把Lifepod日历连接到zbXE的模块。 - This module displays calendar from lifepod. - (Openmaru社提供の)LifepodサービスのカレンダーをゼロボードXEに連動して出力するモジュールです。 - Этот модуль отображает календать с lifepod'а. - + \ No newline at end of file diff --git a/modules/lifepod/lifepod.admin.controller.php b/modules/lifepod/lifepod.admin.controller.php index 40b9d2434..46f55c901 100644 --- a/modules/lifepod/lifepod.admin.controller.php +++ b/modules/lifepod/lifepod.admin.controller.php @@ -183,7 +183,7 @@ $del_var = $obj->{"del_".$vars->name}; unset($obj->{"del_".$vars->name}); if($del_var == 'Y') { - @unlink($module_info->{$vars->name}); + FileHandler::removeFile($module_info->{$vars->name}); continue; } diff --git a/modules/lifepod/skins/xe_official/.temp.swp b/modules/lifepod/skins/xe_official/.temp.swp deleted file mode 100644 index c6e28cb67..000000000 Binary files a/modules/lifepod/skins/xe_official/.temp.swp and /dev/null differ diff --git a/modules/member/conf/info.xml b/modules/member/conf/info.xml index 8c7d341e3..957486bac 100644 --- a/modules/member/conf/info.xml +++ b/modules/member/conf/info.xml @@ -1,23 +1,27 @@ - - + + 회원 会员 会員 Member - Usuario + Usuario Пользователи + 회원 관리 및 회원 관련 설정등을 하는 모듈입니다. + 对会员进行管理及相关设置的模块。 + 会員管理及び会員関連設定などを行うモジュールです。 + This module is for managing or configuring members. + Este módulo es para el manejo y la configuración de los usuarios. + Этот модуль служит для управления и конфигурирования пользователей. + 0.1 + 2007-02-28 + service + 제로 Zero Zero zero - zero + zero zero - 회원 관리 및 회원 관련 설정등을 하는 모듈입니다. - 对会员进行管理及相关设置的模块。 - 会員管理及び会員関連設定などを行うモジュールです。 - This module is for managing or configuring members. - Este módulo es para el manejo y la configuración de los usuarios. - Этот модуль служит для управления и конфигурирования пользователей. - + \ No newline at end of file diff --git a/modules/member/lang/fr.lang.php b/modules/member/lang/fr.lang.php new file mode 100644 index 000000000..90c189b0c --- /dev/null +++ b/modules/member/lang/fr.lang.php @@ -0,0 +1,185 @@ +member = 'Membre'; + $lang->member_default_info = 'Informations fondamentales'; + $lang->member_extend_info = 'Informations additionnelles'; + $lang->default_group_1 = "Membre Associé"; + $lang->default_group_2 = "Membre Régulier"; + $lang->admin_group = "Groupe des administrateurs"; + $lang->keep_signed = 'Gardez la session ouverte'; + $lang->remember_user_id = 'Mémorisez mon Compte'; + $lang->already_logged = "Vous avez déjà ouvert une session"; + $lang->denied_user_id = 'Vous avez entré un comte interdit.'; + $lang->null_user_id = 'Entrez votre compte'; + $lang->null_password = 'Entrez le mot de passe'; + $lang->invalid_authorization = 'Votre compte n\'est pas certifié.'; + $lang->invalid_user_id= "Vous avez entré un compte invalide"; + $lang->invalid_password = 'Vous avez entré un mot de passe invalide'; + $lang->allow_mailing = 'Joindre au Mailing'; + $lang->denied = 'Interdit'; + $lang->is_admin = 'Permission Superadministrative'; + $lang->group = 'Groupe assigné'; + $lang->group_title = 'Nom du Groupe'; + $lang->group_srl = 'Numéro du Groupe'; + $lang->signature = 'Signature'; + $lang->profile_image = 'Image du profil'; + $lang->profile_image_max_width = 'Largeur Maximum'; + $lang->profile_image_max_height = 'Hauteur Maximum'; + $lang->image_name = 'Nom en Image'; + $lang->image_name_max_width = 'Largeur Maximum'; + $lang->image_name_max_height = 'Hauteur Maximum'; + $lang->image_mark = 'Marque en Image'; + $lang->image_mark_max_width = 'Largeur Maximum'; + $lang->image_mark_max_height = 'Hauteur Maximum'; + $lang->signature_max_height = 'Hauteur Maximum de la Signature'; + $lang->enable_openid = 'Permettre OpenID'; + $lang->enable_join = 'Permettre à s\'inscrire'; + $lang->enable_confirm = 'Utiliser Authentification par mél'; + $lang->enable_ssl = 'Utiliser SSL'; + $lang->security_sign_in = 'Ouvrir une Session en utilisant sécurité rehaussé'; + $lang->limit_day = 'Jour de Limite Temporaire'; + $lang->limit_date = 'Jour de Limite'; + $lang->after_login_url = 'URL après la connexion'; + $lang->after_logout_url = 'URL après la déconnexion '; + $lang->redirect_url = 'URL après Inscription'; + $lang->agreement = 'Accord d\'Inscription comme Membre'; + $lang->accept_agreement = 'D\'accord'; + $lang->member_info = 'Informations du Membre'; + $lang->current_password = 'Mot de Passe courrant'; + $lang->openid = 'OpenID'; + + $lang->webmaster_name = "Nom de Webmestre"; + $lang->webmaster_email = "Mél de Webmestre"; + + $lang->about_keep_signed = 'Malgré que le navigateur est fermé, votre session peut être ouverte. \n\nSi vous utilisez cette fonction sur l\'ordinateur commun, vos informations privé peut être exposé. Nous vous recommandons de ne pas utiliser cette fonctions sur l\'ordinateur commun.'; + $lang->about_webmaster_name = "Entrez le nom de webmestre qui va être utilisé pour le mél de certification ou l\'autre administration du site. (défaut : webmestre)"; + $lang->about_webmaster_email = "Entrez l\'address du mél de webmestre, S.V.P."; + + $lang->search_target_list = array( + 'user_id' => 'Compte', + 'user_name' => 'Nom', + 'nick_name' => 'Surnom', + 'email_address' => 'Mél', + 'regdate' => 'Jour d\'enregistrer', + 'last_login' => 'Jour de la connexion dernière', + 'extra_vars' => 'Variables extra ', + ); + + $lang->cmd_login = 'Login'; + $lang->cmd_logout = 'Logout'; + $lang->cmd_signup = 'Join'; + $lang->cmd_modify_member_info = 'Modify Member Info'; + $lang->cmd_modify_member_password = 'Modify Password'; + $lang->cmd_view_member_info = 'Member Info'; + $lang->cmd_leave = 'Leave'; + $lang->cmd_find_member_account = 'Find Account Info'; + + $lang->cmd_member_list = 'Member List'; + $lang->cmd_module_config = 'Default Setting'; + $lang->cmd_member_group = 'Manage Groups'; + $lang->cmd_send_mail = 'Send Mail'; + $lang->cmd_manage_id = 'Manage Prohibited IDs'; + $lang->cmd_manage_form = 'Manage Join Form'; + $lang->cmd_view_own_document = 'Written Articles'; + $lang->cmd_trace_document = 'Trace Written Articles'; + $lang->cmd_trace_comment = 'Trace Written Comments'; + $lang->cmd_view_scrapped_document = 'Scraps'; + $lang->cmd_view_saved_document = 'Saved Articles'; + $lang->cmd_send_email = 'Send Mail'; + + $lang->msg_email_not_exists = "You have entered an invalid email address"; + + $lang->msg_alreay_scrapped = 'This article is already scrapped'; + + $lang->msg_cart_is_null = 'Please select the target'; + $lang->msg_checked_file_is_deleted = '%d attached file(s) is(are) deleted'; + + $lang->msg_find_account_title = 'Account Info'; + $lang->msg_find_account_info = 'This is requested account info.'; + $lang->msg_find_account_comment = 'The password will be modified as above one as you click below link.
    Please modify the password after login.'; + $lang->msg_confirm_account_title = 'Authentication confirmation mail'; + $lang->msg_confirm_account_info = 'This is the registered account information:'; + $lang->msg_confirm_account_comment = 'Click the following confirmation link to complete your sign up.'; + $lang->msg_auth_mail_sent = 'The certification mail has been sent to %s. Please check your mail.'; + $lang->msg_confirm_mail_sent = 'We just sent you a confirmation email to %s. Click on the confirmation link in the email to complete your sign up.'; + $lang->msg_invalid_auth_key = 'This is an invalid request of certification.
    Please retry finding account info or contact to administrator.'; + $lang->msg_success_authed = 'Your account has been successfully certificated and logged on.\n Please modify the password to your own one with the password in the mail.'; + $lang->msg_success_confirmed = 'The autentication completed successfully.'; + + $lang->msg_new_member = 'Add Member'; + $lang->msg_update_member = 'Modify Member Info'; + $lang->msg_leave_member = 'Leave'; + $lang->msg_group_is_null = 'There is no registered group'; + $lang->msg_not_delete_default = 'Default items cannot be deleted'; + $lang->msg_not_exists_member = "Invalid member"; + $lang->msg_cannot_delete_admin = 'Admin ID cannot be deleted. Please remove the ID from administration and try again.'; + $lang->msg_exists_user_id = 'This ID already exists. Please try with another one.'; + $lang->msg_exists_email_address = 'This email address already exists. Please try with another one.'; + $lang->msg_exists_nick_name = 'This nickname already exists. Please try with another one.'; + $lang->msg_signup_disabled = 'You are not able to sign up'; + $lang->msg_already_logged = 'You have already signed up'; + $lang->msg_not_logged = 'Please login first'; + $lang->msg_insert_group_name = 'Please input the name of group'; + $lang->msg_check_group = 'Please select the group'; + + $lang->msg_not_uploaded_profile_image = 'Profile image could not be registered'; + $lang->msg_not_uploaded_image_name = 'Image name could not be registered'; + $lang->msg_not_uploaded_image_mark = 'Image mark could not be registered'; + + $lang->msg_accept_agreement = 'You have to agree the agreement'; + + $lang->msg_user_denied = 'You have entered a prohibited ID'; + $lang->msg_user_not_confirmed = 'You are not authenticated yet. Please check your email.'; + $lang->msg_user_limited = 'You have entered an ID that can be used after %s'; + + $lang->about_user_id = 'User ID should be 3~20 letters long and consist of alphabet+number with alphabet as first letter.'; + $lang->about_password = 'Password should be 6~20 letters long'; + $lang->about_user_name = 'Name should be 2~20 letters long'; + $lang->about_nick_name = 'Nickname should be 2~20 letters long'; + $lang->about_email_address = 'Email address will be used to modify/find password after email certification'; + $lang->about_homepage = 'Please input if you have your websites'; + $lang->about_blog_url = 'Please input if you have your blogs'; + $lang->about_birthday = 'Please input your birth date'; + $lang->about_allow_mailing = "If you don't join mailing, you will not able to receive group mail"; + $lang->about_denied = 'Check to prohibit the ID'; + $lang->about_is_admin = 'Check to give Superadmin permission'; + $lang->about_description = "Administrator's memo about members"; + $lang->about_group = 'An ID can belong to many groups'; + + $lang->about_column_type = 'Please set the format of additional sign up form'; + $lang->about_column_name = 'Please input English name that can be used in template (name as variable)'; + $lang->about_column_title = 'This will be displayed on sign up or modifying/viewing member info form'; + $lang->about_default_value = 'You can set default values'; + $lang->about_active = 'You have to check on active items to show on sign up form'; + $lang->about_form_description = 'If you input in description form, it will be displayed on sign up form'; + $lang->about_required = 'If you check, it will be essential item for sign up'; + + $lang->about_enable_openid = 'Allow users to sign up as OpenID'; + $lang->about_enable_join = 'Allow users to sign up'; + $lang->about_enable_confirm = 'Send confirmation email to complete signup.'; + $lang->about_enable_ssl = 'Personal information from Join/Modify Member Info/Login can be sent as SSL(https) mode if server provides SSL service.'; + $lang->about_limit_day = 'You can limit certification date after sign up'; + $lang->about_limit_date = 'User cannot login until assigned date'; + $lang->about_after_login_url = 'You can set URL after login. Blank means current page.'; + $lang->about_after_logout_url = 'You can set URL after logout. Blank means current page.'; + $lang->about_redirect_url = 'Please input URL where users will go after sign up. When this is empty, it will be set as the previous page of sign up page.'; + $lang->about_agreement = "Sign up agreement will only be displayed when it's not empty"; + + $lang->about_image_name = "Allow users to use image name instead of text name"; + $lang->about_image_mark = "Allow users to use mark in front of their names"; + $lang->about_profile_image = 'Allow users to use profile images'; + $lang->about_accept_agreement = "I have read the agreement and agree"; + + $lang->about_member_default = 'It will be set as default group on sign up'; + + $lang->about_openid = 'When you join as OpenID, basic info like ID or email address will be saved on this site, process for password and certification management will be done on current OpenID offering service'; + $lang->about_openid_leave = 'The secession of OpenID means deletion of your member info from this site.
    If you login after secession, it will be recognized as a new member, so you will no longer have the permission for your ex-written articles.'; + + $lang->about_member = "This is a module for creating/modifying/deleting members and managing group or join form.\nYou can manage members by creating new groups, and get additional information by managing join form"; + $lang->about_find_member_account = 'Your account info will be noticed by registered email address.
    Please input email address which you have input on registration, and press "Find Account Info" button.
    '; +?> diff --git a/modules/member/member.controller.php b/modules/member/member.controller.php index 2eff8ac47..40c228def 100644 --- a/modules/member/member.controller.php +++ b/modules/member/member.controller.php @@ -221,6 +221,11 @@ // 글의 대상 모듈을 회원 정보로 변경 $obj->module_srl = $logged_info->member_srl; + // 제목을 사용하지 않는 방명록 등에서 내용 앞 부분을 제목 가져오기 + if(!$obj->title) { + $obj->title = cut_str(strip_tags($obj->content), 20, '...'); + } + $oDocumentModel = &getModel('document'); $oDocumentController = &getController('document'); @@ -248,6 +253,7 @@ } $this->setMessage('success_saved'); + $this->add('document_srl', $obj->document_srl); } /** @@ -617,7 +623,7 @@ if($logged_info->is_admin == 'Y' || $logged_info->member_srl == $member_srl) { $oMemberModel = &getModel('member'); $profile_image = $oMemberModel->getProfileImage($member_srl); - @unlink($profile_image->file); + FileHandler::removeFile($profile_image->file); } return new Object(0,'success'); } @@ -640,7 +646,7 @@ if($logged_info->is_admin == 'Y' || $logged_info->member_srl == $member_srl) { $oMemberModel = &getModel('member'); $image_name = $oMemberModel->getImageName($member_srl); - @unlink($image_name->file); + FileHandler::removeFile($image_name->file); } return new Object(0,'success'); } @@ -705,7 +711,7 @@ if($logged_info->is_admin == 'Y' || $logged_info->member_srl == $member_srl) { $oMemberModel = &getModel('member'); $image_mark = $oMemberModel->getImageMark($member_srl); - @unlink($image_mark->file); + FileHandler::removeFile($image_mark->file); } return new Object(0,'success'); } @@ -830,7 +836,7 @@ $path = sprintf('files/member_extra_info/signature/%s/', getNumberingPath($member_srl)); $filename = sprintf('%s%d.signature.php', $path, $member_srl); - if(!$check_signature) return @unlink($filename); + if(!$check_signature) return FileHandler::removeFile($filename); $buff = sprintf('%s', $signature); FileHandler::makeDir($path); @@ -842,7 +848,7 @@ **/ function delSignature($member_srl) { $filename = sprintf('files/member_extra_info/signature/%s%d.gif', getNumberingPath($member_srl), $member_srl); - @unlink($filename); + FileHandler::removeFile($filename); } /** @@ -972,7 +978,7 @@ } // 오픈아이디인지 체크 (일단 아이디 형식으로만 결정) - if(preg_match("/^([0-9a-z]+)$/is", $member_info->user_id)) $member_info->is_openid = false; + if(preg_match("/^([_0-9a-zA-Z]+)$/is", $member_info->user_id)) $member_info->is_openid = false; else $member_info->is_openid = true; // 로그인 처리를 위한 세션 설정 diff --git a/modules/member/openid_lib/class_HTTPRetriever.php b/modules/member/openid_lib/class_HTTPRetriever.php index 58f841bd7..5f5d79434 100755 --- a/modules/member/openid_lib/class_HTTPRetriever.php +++ b/modules/member/openid_lib/class_HTTPRetriever.php @@ -443,7 +443,7 @@ class HTTPRetriever { if (time()-filemtime($filename)>$this->caching) { $this->progress(HRP_DEBUG,"Page in cache is expired"); - @unlink($filename); + FileHandler::removeFile($filename); return false; } diff --git a/modules/member/openid_lib/libcurlexternal.inc.php b/modules/member/openid_lib/libcurlexternal.inc.php index f0e8d23ad..96ad7caee 100755 --- a/modules/member/openid_lib/libcurlexternal.inc.php +++ b/modules/member/openid_lib/libcurlexternal.inc.php @@ -341,7 +341,7 @@ function curl_setopt($ch,$option,$value) { } fclose($fp); // if a temporary file was previously created, unlink it - if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"]))FileHandler::removeFile($settings["upload-file"]["value"]); // set the new upload-file filename $settings["upload-file"]["value"] = $tmpfilename; @@ -581,7 +581,7 @@ function curl_close($ch) { $settings = &$opt["settings"]; // if the user used CURLOPT_INFILE to specify a file to upload, remove the // temporary file created for the CURL binary - if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"]))FileHandler::removeFile($settings["upload-file"]["value"]); } unset($GLOBALS["_CURLEXT_OPT"][$ch]); @@ -634,4 +634,4 @@ function curl_version() { } } -?> \ No newline at end of file +?> diff --git a/modules/member/openid_lib/libcurlnative.inc.php b/modules/member/openid_lib/libcurlnative.inc.php index d1c3884a3..445ab3faf 100755 --- a/modules/member/openid_lib/libcurlnative.inc.php +++ b/modules/member/openid_lib/libcurlnative.inc.php @@ -399,7 +399,7 @@ function curl_close($ch) { $settings = &$opt["settings"]; // if the user used CURLOPT_INFILE to specify a file to upload, remove the // temporary file created for the CURL binary - if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"]))FileHandler::removeFile($settings["upload-file"]["value"]); } unset($GLOBALS["_CURLNAT_OPT"][$ch]); diff --git a/modules/member/skins/default/common_header.html b/modules/member/skins/default/common_header.html index 5154adb27..9479fa329 100644 --- a/modules/member/skins/default/common_header.html +++ b/modules/member/skins/default/common_header.html @@ -18,19 +18,18 @@
    -
    -

    {$member_title}

    +
    +

    {$member_title}

    -
    - - - -
    + +
    -
    - +
    + \ No newline at end of file diff --git a/modules/member/skins/default/css/common.css b/modules/member/skins/default/css/common.css index d683fe0c1..a4fedcaf8 100644 --- a/modules/member/skins/default/css/common.css +++ b/modules/member/skins/default/css/common.css @@ -17,7 +17,7 @@ .boardInformation strong { font:bold 11px Tahoma; color:#ff6600;} .boardHeader { position:relative; _width:100%; border-top:1px solid #e1e1dd; border-bottom:none; background:#ffffff url(../images/common/bgH3.gif) no-repeat right bottom; overflow:hidden;} -.boardHeader .member_option { float:right; position:relative; top:1em; right:1em; } +.boardHeader .member_option { float:right; position:relative; top:0.5em; right:1em; } .boardHeader select { vertical-align:bottom; } .boardHeader input { vertical-align:bottom; _padding-bottom:1px;} .boardHeader .essential { position:absolute; top:1.5em; right:1em; color:#54564b; font-size:.9em;} diff --git a/modules/menu/conf/info.xml b/modules/menu/conf/info.xml index 33eaca4d5..abde57a47 100644 --- a/modules/menu/conf/info.xml +++ b/modules/menu/conf/info.xml @@ -1,23 +1,27 @@ - - + + 메뉴 菜单 メニュー Menu - Menú + Menú Меню - + 레이아웃, 모듈을 연결하는 메뉴를 생성/관리하는 모듈입니다. + 此模块将生成并管理连接布局,模块的菜单。 + レイアウト、モジュールを連動させるメニューを作成・管理するモジュールです。 + This module is for creating/managering menues that linking layouts or modules. + Este módulo es para crear/manejar los menús que que son conectados con los diseños o módulos. + Этот модуль служит создания/управления меню, которые соединяют лейауты и модули. + 0.1 + 2007-02-28 + manager + + 제로 Zero Zero zero - zero + zero zero - 레이아웃, 모듈을 연결하는 메뉴를 생성/관리하는 모듈입니다. - 此模块将生成并管理连接布局,模块的菜单。 - レイアウト、モジュールを連動させるメニューを作成・管理するモジュールです。 - This module is for creating/managering menues that linking layouts or modules. - Este módulo es para crear/manejar los menús que que son conectados con los diseños o módulos. - Этот модуль служит создания/управления меню, которые соединяют лейауты и модули. - + \ No newline at end of file diff --git a/modules/menu/menu.admin.controller.php b/modules/menu/menu.admin.controller.php index 0d215d10e..7d4713fd0 100644 --- a/modules/menu/menu.admin.controller.php +++ b/modules/menu/menu.admin.controller.php @@ -55,7 +55,7 @@ if(count($cache_list)) { foreach($cache_list as $cache_file) { $pos = strpos($cache_file, $menu_srl.'_'); - if($pos>0) unlink($cache_file); + if($pos>0)FileHandler::removeFile($cache_file); } } @@ -196,9 +196,9 @@ $xml_file = $this->makeXmlFile($args->menu_srl); // 이미지 버튼 모두 삭제 - if($item_info->normal_btn) @unlink($item_info->normal_btn); - if($item_info->hover_btn) @unlink($item_info->hover_btn); - if($item_info->active_btn) @unlink($item_info->active_btn); + if($item_info->normal_btn) FileHandler::removeFile($item_info->normal_btn); + if($item_info->hover_btn) FileHandler::removeFile($item_info->hover_btn); + if($item_info->active_btn) FileHandler::removeFile($item_info->active_btn); $this->add('xml_file', $xml_file); $this->add('menu_title', $menu_title); @@ -305,7 +305,7 @@ $menu_item_srl = Context::get('menu_item_srl'); $target = Context::get('target'); $filename = Context::get('filename'); - @unlink($filename); + FileHandler::removeFile($filename); $this->add('target', $target); } @@ -422,7 +422,7 @@ // 변수 정리 $names = $oMenuAdminModel->getMenuItemNames($node->name); foreach($names as $key => $val) { - $name_arr_str .= sprintf('"%s"=>"%s",',$key, htmlspecialchars($val)); + $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); } $name_str = sprintf('$_names = array(%s); print $_names[$lang_type];', $name_arr_str); @@ -505,7 +505,7 @@ // 변수 정리 $names = $oMenuAdminModel->getMenuItemNames($node->name); foreach($names as $key => $val) { - $name_arr_str .= sprintf('"%s"=>"%s",',$key, htmlspecialchars($val)); + $name_arr_str .= sprintf('"%s"=>"%s",',$key, str_replace('\\','\\\\',htmlspecialchars($val))); } $name_str = sprintf('$_menu_names[%d] = array(%s); %s', $node->menu_item_srl, $name_arr_str, $child_output['name']); diff --git a/modules/message/conf/info.xml b/modules/message/conf/info.xml index c23f52631..312b702d6 100644 --- a/modules/message/conf/info.xml +++ b/modules/message/conf/info.xml @@ -1,23 +1,27 @@ - - + + 오류 표시 エラー表示 错误信息 Display Errors - Mostrar el error + Mostrar el error Отображение ошибок - + 오류 및 각종 시스템 메세지 관리 모듈 + エラー及びシステムメッセージ管理モジュール + 管理错误信息及各种系统信息的模块。 + This module managers erros and system messages. + Este módulo es para manejar los errores y mensajes del sistema. + Этот модуль управляет ошибками и системными сообщениями. + 0.1 + 2007-02-28 + base + + 제로 Zero zero zero - zero + zero zero - 오류 및 각종 시스템 메세지 관리 모듈 - エラー及びシステムメッセージ管理モジュール - 管理错误信息及各种系统信息的模块。 - This module managers erros and system messages. - Este módulo es para manejar los errores y mensajes del sistema. - Этот модуль управляет ошибками и системными сообщениями. - + \ No newline at end of file diff --git a/modules/module/conf/info.xml b/modules/module/conf/info.xml index 3f637ef1d..ccddd9976 100644 --- a/modules/module/conf/info.xml +++ b/modules/module/conf/info.xml @@ -1,23 +1,27 @@ - - - 모듈 - 模块 - モジュール - Module - Módulo - Модули - - 제로 - Zero - Zero - zero - zero - zero + + + 모듈 + 模块 + モジュール + Module + Módulo + Модули 모듈 생성 및 관리하는 모듈입니다. 生成及管理模块的模块。 モジュールの生成、管理するモジュールです。 This module is for creating/managering the other modules. - Este módulo is para crear y manejar los otros módulos. + Este módulo is para crear y manejar los otros módulos. Этот модуль служит для создания/управления другими модулями. - - + 0.1 + 2007-02-28 + base + + + 제로 + Zero + Zero + zero + zero + zero + + \ No newline at end of file diff --git a/modules/module/lang/en.lang.php b/modules/module/lang/en.lang.php index 578267cd0..cb32ff66c 100644 --- a/modules/module/lang/en.lang.php +++ b/modules/module/lang/en.lang.php @@ -12,6 +12,7 @@ $lang->add_shortcut = "Add Shortcuts"; $lang->module_action = "Actions"; $lang->module_maker = "Module Developer"; + $lang->module_license = 'License'; $lang->module_history = "Update history"; $lang->category_title = "Category Title"; $lang->header_text = 'Header Text'; @@ -59,7 +60,7 @@ $lang->about_page_count = 'You can set the number of page link to move pages in a bottom of page.(default is 10)'; $lang->about_admin_id = 'You can grant a manager to have all permissions to the module.\n You can enter multiple IDs using
    ,(comma) \n(but the module manager cannot access the site admin page.)'; $lang->about_grant = 'If you disable all permissions for a specific object, members who has not logged in would get permission.'; - $lang->about_module = "Zeroboard XE consists of modules except basic library.\n [Module Manage] module will show all installed modules and help you to manage them.\nThrough [Add Shortcuts] feature, you can manage frequently used modules easily."; + $lang->about_module = "Zeroboard XE consists of modules except basic library.\n [Module Manage] module will show all installed modules and help you to manage them."; $lang->about_extra_vars_default_value = 'If multiple default values are needed, you can link them with comma(,).'; ?> diff --git a/modules/module/lang/es.lang.php b/modules/module/lang/es.lang.php index dbb3fefe9..dffe52186 100644 --- a/modules/module/lang/es.lang.php +++ b/modules/module/lang/es.lang.php @@ -12,6 +12,7 @@ $lang->add_shortcut = "Añadir en el menú del administrador"; $lang->module_action = "Acción"; $lang->module_maker = "Módulo del desarrollador"; + $lang->module_license = 'License'; $lang->module_history = "Historia de actualización"; $lang->category_title = "Título de categoría"; $lang->header_text = 'Encabezado'; @@ -59,7 +60,7 @@ $lang->about_page_count = 'Usted puede definir el número de página enlazada para mover páginas en un botón de la página.(Predefinido es 10)'; $lang->about_admin_id = 'Usted puede definir el administrador de atribuciones superiores al módulo.\n Usted puede asignar múltiples IDs,
    utilizando una ","(coma) \n(pero el administrador del módulo no puede acceder al sitio de la pógina del administrador.)'; $lang->about_grant = 'Si usted desea desactivar a todos los objetos teniendo atribuciones especificas, incluso el usuario no conectado pueden tener atribuciones.'; - $lang->about_module = "Zeroboard XE consiste de módulos excepto la librería básica.\n Módulo del Manejo del Módulo muestra todos los módulos instalados y ayuda el manejo de ellos.\nLos módulos usados frecuentemente puede manejar fácilmente a través de función de [Añadir acceso directo]."; + $lang->about_module = "Zeroboard XE consiste de módulos excepto la librería básica.\n Módulo del Manejo del Módulo muestra todos los módulos instalados y ayuda el manejo de ellos."; $lang->about_extra_vars_default_value = 'Si múltiples valores predefinidos son requeridos, usted puede enlazar con la coma(,).'; ?> diff --git a/modules/module/lang/jp.lang.php b/modules/module/lang/jp.lang.php index ec36adb99..fbead5517 100644 --- a/modules/module/lang/jp.lang.php +++ b/modules/module/lang/jp.lang.php @@ -12,6 +12,7 @@ $lang->add_shortcut = "管理者メニューに追加する"; $lang->module_action = "動作"; $lang->module_maker = "モジュール作者"; + $lang->module_license = 'License'; $lang->module_history = "変更内容 "; $lang->category_title = "カテゴリ名"; $lang->header_text = 'ヘッダー内容'; @@ -59,7 +60,7 @@ $lang->about_page_count = 'リストの下段に移動できるページのリンク数が指定できます(デフォルト10個)。'; $lang->about_admin_id = '該当するモジュールに対して最高権限を持つ管理者を指定することができます。「,(コンマ)」で区切って多数のIDが指定できます(管理者ページへのアクセスはできません)。'; $lang->about_grant = '特定権限の対象をすべて解除するとログインしていない会員ユーザまで権限が与えられます。'; - $lang->about_module = "ゼロボードXEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。頻繁に使うモジュールは、【ショットカット追加】で行うと管理しやすなります。"; + $lang->about_module = "ゼロボードXEは、基本ライブラリの他は、すべてモジュールで構成されています。モジュール管理用のモジュールはインストールされたすべてを表示し、管理できるようにします。"; $lang->about_extra_vars_default_value = '多重・単一選択などのデフォルト値が、複数必要な場合は、「, (コンマ)」で区切って追加することができます。'; ?> diff --git a/modules/module/lang/ko.lang.php b/modules/module/lang/ko.lang.php index 0e82d98b2..b4502dd91 100644 --- a/modules/module/lang/ko.lang.php +++ b/modules/module/lang/ko.lang.php @@ -12,7 +12,8 @@ $lang->add_shortcut = "관리자 메뉴에 추가"; $lang->module_action = "동작"; $lang->module_maker = "모듈 제작자"; - $lang->module_history = "변경 사항 "; + $lang->module_license = '라이센스'; + $lang->module_history = '변경 이력 '; $lang->category_title = "분류 이름"; $lang->header_text = '상단 내용'; $lang->footer_text = '하단 내용'; @@ -59,7 +60,7 @@ $lang->about_page_count = '목록 하단 페이지 이동 하는 링크의 수를 지정하실 수 있습니다. (기본 10개)'; $lang->about_admin_id = '해당 모듈에 대해 최고 권한을 가지는 관리자를 지정할 수 있습니다.
    ,(콤마)로 다수 아이디 지정이 가능합니다. (관리자페이지 접근은 불가능)'; $lang->about_grant = '특정 권한의 대상을 모두 해제하시면 로그인하지 않은 회원까지 권한을 가질 수 있습니다'; - $lang->about_module = "제로보드XE는 기본 라이브러리를 제외한 나머지는 모두 모듈로 구성되어 있습니다.\n모듈관리 모듈은 설치된 모든 모듈을 보여주고 관리를 도와줍니다.\n자주 쓰는 모듈은 [바로가기 추가]를 통해서 편하게 관리하실 수 있습니다."; + $lang->about_module = "제로보드XE는 기본 라이브러리를 제외한 나머지는 모두 모듈로 구성되어 있습니다.\n모듈관리 모듈은 설치된 모든 모듈을 보여주고 관리를 도와줍니다."; $lang->about_extra_vars_default_value = '다중/단일 선택등 기본값이 여러개가 필요한 경우 , (콤마)로 연결하시면 됩니다'; ?> diff --git a/modules/module/lang/ru.lang.php b/modules/module/lang/ru.lang.php index 58da44d84..39870fa44 100644 --- a/modules/module/lang/ru.lang.php +++ b/modules/module/lang/ru.lang.php @@ -12,6 +12,7 @@ $lang->add_shortcut = "Добавить ярлыки"; $lang->module_action = "Действия"; $lang->module_maker = "Разработчик модуля"; + $lang->module_license = 'License'; $lang->module_history = "История обновлений"; $lang->category_title = "Название категории"; $lang->header_text = 'Верхний колонтитул'; @@ -59,7 +60,7 @@ $lang->about_page_count = 'Вы можете установить число страниц внизу. (по умолчанию: 10)'; $lang->about_admin_id = 'Вы можете разрешить менеджеру иметь полные права доступа к этому модулю.\nВы можете ввести несколько ID, используя
    запятую \n(но менеджер модуля не имеет права доступа к странице администрирования сайта.)'; $lang->about_grant = 'Если Вы отключите все права доступа для отдельного объекта, не прошедшие процедуру входа на сайт пользователи получат доступ.'; - $lang->about_module = "Zeroboard XE состоит из модулей, за исключением базовой библиотеки.\n Управление модулем покажет все установленные модули и поможет управлять ими.\nПосредством функции добавления ярлыка, Вы можете легче управлять часто используемыми модулями."; + $lang->about_module = "Zeroboard XE состоит из модулей, за исключением базовой библиотеки.\n Управление модулем покажет все установленные модули и поможет управлять ими."; $lang->about_extra_vars_default_value = 'Если нужно несколько значений по умолчанию, разделите их запятыми(,).'; ?> diff --git a/modules/module/lang/zh-CN.lang.php b/modules/module/lang/zh-CN.lang.php index e2c46dea7..6bae1a39c 100644 --- a/modules/module/lang/zh-CN.lang.php +++ b/modules/module/lang/zh-CN.lang.php @@ -12,6 +12,7 @@ $lang->add_shortcut = "添加到快捷菜单"; $lang->module_action = "动作"; $lang->module_maker = "模块作者"; + $lang->module_license = 'License'; $lang->module_history = "更新事项 "; $lang->category_title = "分类名称"; $lang->header_text = '上端内容'; @@ -59,7 +60,7 @@ $lang->about_page_count = '可以指定显示在目录下方的页面数(默认为10个)。 '; $lang->about_admin_id = '可以对该模块指定最高管理权限。
    有多名管理员时,可以用,(逗号)来分隔(不能访问管理页面)。 '; $lang->about_grant = '全部解除特定权限的对象时,没有登录的会员也将具有相关权限。'; - $lang->about_module = "除基本library以外Zeroboard XE全部由模块组成。\n模块管理中列出所有已安装的模块,因此易于管理。\n常用模块可以通过『添加到快捷菜单』来方便管理。"; + $lang->about_module = "除基本library以外Zeroboard XE全部由模块组成。\n模块管理中列出所有已安装的模块,因此易于管理。"; $lang->about_extra_vars_default_value = '复选/单选缺省值需要多个时,用,(逗号)来分隔。'; ?> diff --git a/modules/module/module.controller.php b/modules/module/module.controller.php index 5181ec57d..c1ff3a0ab 100644 --- a/modules/module/module.controller.php +++ b/modules/module/module.controller.php @@ -61,7 +61,7 @@ $output = executeQuery('module.deleteModuleConfig', $args); if(!$output->toBool()) return $output; - @unlink( sprintf('./files/cache/module_info/%s.config.php',$module) ); + FileHandler::removeFile( sprintf('./files/cache/module_info/%s.config.php',$module) ); // 변수 정리후 query 실행 $output = executeQuery('module.insertModuleConfig', $args); diff --git a/modules/module/module.model.php b/modules/module/module.model.php index 30f5f6767..d3e75a860 100644 --- a/modules/module/module.model.php +++ b/modules/module/module.model.php @@ -196,7 +196,7 @@ } /** - * @brief 주어진 곳의 스킨 목록을 구함 + * @brief 주어진 곳의 스킨 목록을 구함 * 스킨과 skin.xml 파일을 분석 정리한 결과를 return **/ function getSkins($path) { @@ -445,7 +445,7 @@ return $info; } - @include($cache_file); + @include($cache_file); return $info; } @@ -495,31 +495,83 @@ if(!$xml_obj) return; - $info->title = $xml_obj->title->body; + // 모듈 정보 + if($xml_obj->version && $xml_obj->attrs->version == '0.2') { + // module format 0.2 + $module_info->title = $xml_obj->title->body; + $module_info->description = $xml_obj->description->body; + $module_info->version = $xml_obj->version->body; + $module_info->homepage = $xml_obj->link->body; + $module_info->category = $xml_obj->category->body; + if(!$module_info->category) $module_info->category = 'service'; + sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $module_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $module_info->license = $xml_obj->license->body; + $module_info->license_link = $xml_obj->license->attrs->link; - // 작성자 정보 - $module_info->title = $xml_obj->title->body; - $module_info->version = $xml_obj->attrs->version; - $module_info->category = $xml_obj->attrs->category; - if(!$module_info->category) $module_info->category = 'service'; - $module_info->author->name = $xml_obj->author->name->body; - $module_info->author->email_address = $xml_obj->author->attrs->email_address; - $module_info->author->homepage = $xml_obj->author->attrs->link; - $module_info->author->date = $xml_obj->author->attrs->date; - $module_info->author->description = $xml_obj->author->description->body; + if(!is_array($xml_obj->author)) $author_list[] = $xml_obj->author; + else $author_list = $xml_obj->author; - // history - if(!is_array($xml_obj->history->author)) $history[] = $xml_obj->history->author; - else $history = $xml_obj->history->author; + foreach($author_list as $author) { + unset($author_obj); + $author_obj->name = $author->name->body; + $author_obj->email_address = $author->attrs->email_address; + $author_obj->homepage = $author->attrs->link; + $module_info->author[] = $author_obj; + } - foreach($history as $item) { - unset($obj); - $obj->name = $item->name->body; - $obj->email_address = $item->attrs->email_address; - $obj->homepage = $item->attrs->link; - $obj->date = $item->attrs->date; - $obj->description = $item->description->body; - $module_info->history[] = $obj; + } else { + // module format 0.1 + $module_info->title = $xml_obj->title->body; + $module_info->description = $xml_obj->author->description->body; + $module_info->version = $xml_obj->attrs->version; + $module_info->category = $xml_obj->attrs->category; + if(!$module_info->category) $module_info->category = 'service'; + sscanf($xml_obj->author->attrs->date, '%d. %d. %d', $date_obj->y, $date_obj->m, $date_obj->d); + $module_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $author_obj->name = $xml_obj->author->name->body; + $author_obj->email_address = $xml_obj->author->attrs->email_address; + $author_obj->homepage = $xml_obj->author->attrs->link; + $module_info->author[] = $author_obj; + } + + // history + if($xml_obj->history) { + if(!is_array($xml_obj->history)) $history[] = $xml_obj->history; + else $history = $xml_obj->history; + + foreach($history as $item) { + unset($obj); + + if($item->author) { + (!is_array($item->author)) ? $obj->author_list[] = $item->author : $obj->author_list = $item->author; + + foreach($obj->author_list as $author) { + unset($author_obj); + $author_obj->name = $author->name->body; + $author_obj->email_address = $author->attrs->email_address; + $author_obj->homepage = $author->attrs->link; + $obj->author[] = $author_obj; + } + } + + $obj->name = $item->name->body; + $obj->email_address = $item->attrs->email_address; + $obj->homepage = $item->attrs->link; + $obj->version = $item->attrs->version; + $obj->date = $item->attrs->date; + $obj->description = $item->description->body; + + if($item->log) { + (!is_array($item->log)) ? $obj->log[] = $item->log : $obj->log = $item->log; + + foreach($obj->log as $log) { + $obj->logs[] = $log->body; + } + } + + $module_info->history[] = $obj; + } } // action 정보를 얻어서 admin_index를 추가 diff --git a/modules/module/tpl/module_info.html b/modules/module/tpl/module_info.html index 86384a94a..8301904a9 100644 --- a/modules/module/tpl/module_info.html +++ b/modules/module/tpl/module_info.html @@ -13,24 +13,76 @@ {$lang->author} - {$module_info->author->name} + + + {$author->name} ({$author->homepage}, {$author->email_address})
    + + + {$lang->homepage} - {$module_info->author->homepage} + {$module_info->homepage} + {$lang->regdate} - {$module_info->author->date} + {zdate($module_info->date, 'Y-m-d')} + + + {$lang->module_license} + + {nl2br(trim($module_info->license))} + +

    {$module_info->license_link}

    + + + + {$lang->description} - {nl2br(trim($module_info->author->description))} + {nl2br(trim($module_info->description))}
    + +
    +

    {$lang->module_history}

    +
    + +
    + + + + + + + + + + +
    + {$history->version}
    + {$history->date} +
    + +

    {$author->name} ({$author->homepage} / {$author->email_address})

    + + +

    {nl2br(trim($history->description))}

    + + +
      +
    • {$log}
    • +
    + +
    +
    + + +
    \ No newline at end of file diff --git a/modules/module/tpl/module_list.html b/modules/module/tpl/module_list.html index 382a30373..464210ce4 100644 --- a/modules/module/tpl/module_list.html +++ b/modules/module/tpl/module_list.html @@ -43,14 +43,18 @@ - {$val->title} ({$val->module}) + {$val->title} ({$val->module}) - {$val->title} ({$val->module}) + {$val->title} ({$val->module}) {$val->version} - {$val->author->name} - {$val->author->date} + + + {$author->name} + + + {zdate($val->date, 'Y-m-d')} {$val->created_table_count}/{$val->table_count} diff --git a/modules/opage/conf/info.xml b/modules/opage/conf/info.xml index 63998abe5..5053ceb21 100644 --- a/modules/opage/conf/info.xml +++ b/modules/opage/conf/info.xml @@ -1,23 +1,27 @@ - - + + 외부 페이지 外部页面 外部ページ External Page - Afuera Página + Afuera Página Внешние страницы - + 외부페이지를 제로보드XE내부로 삽입시키는 모듈 + 可以把外部页面插入到 Zeroboard XE内部的模块。 + 外部ページをゼロボードXE内部に挿入させるモジュール + Module for inserting external pages into inside of Zeroboard XE. + 외부페이지를 제로보드XE내부로 삽입시키는 모듈 + Модуль для вставки внешних страниц внутрь Zeroboard XE. + 0.1 + 2007-09-17 + service + + 제로 zero Zero Zero - zero + zero zero - 외부페이지를 제로보드XE내부로 삽입시키는 모듈 - 可以把外部页面插入到 Zeroboard XE内部的模块。 - 外部ページをゼロボードXE内部に挿入させるモジュール - Module for inserting external pages into inside of Zeroboard XE. - 외부페이지를 제로보드XE내부로 삽입시키는 모듈 - Модуль для вставки внешних страниц внутрь Zeroboard XE. - + \ No newline at end of file diff --git a/modules/opage/lang/en.lang.php b/modules/opage/lang/en.lang.php index a1aae74a7..7ff45e629 100644 --- a/modules/opage/lang/en.lang.php +++ b/modules/opage/lang/en.lang.php @@ -7,7 +7,7 @@ $lang->opage = "External Page"; $lang->opage_path = "Location of External Document"; - $lang->opage_caching_interval = "Set Caching Time"; + $lang->opage_caching_interval = "Caching Time"; $lang->about_opage = "This module enables usage of external html or php files in Zeroboard XE.
    It allows absolute or relative path, and if the url starts with 'http://' , it can display the external page of the server."; $lang->about_opage_path= "Please input the location of external document.
    Both absolute path such as '/path1/path2/sample.php' or relative path such as '../path2/sample.php' can be used.
    If you input the path like 'http://url/sample.php' , the result will be received and then displayed.
    This is current Zeroboard Xe's absolute path.
    "; diff --git a/modules/opage/opage.admin.controller.php b/modules/opage/opage.admin.controller.php index 1bf5ad0bb..d809425e0 100644 --- a/modules/opage/opage.admin.controller.php +++ b/modules/opage/opage.admin.controller.php @@ -71,7 +71,7 @@ // 캐시 파일 삭제 $cache_file = sprintf("./files/cache/opage/%d.cache.php", $module_info->module_srl); - if(file_exists($cache_file)) @unlink($cache_file); + if(file_exists($cache_file)) FileHandler::removeFile($cache_file); // 등록 성공후 return될 메세지 정리 $this->add("module_srl", $module_args->module_srl); diff --git a/modules/opage/opage.controller.php b/modules/opage/opage.controller.php index d23bb1528..177b663fb 100644 --- a/modules/opage/opage.controller.php +++ b/modules/opage/opage.controller.php @@ -72,7 +72,7 @@ $this->target_path = $path; // element의 속성중 value에 " 로 안 묶여 있는 것을 검사하여 묶어줌 - $content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', array($this, '_fixQuotation'), $content); + $content = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $content); // img, input, a, link등의 href, src값 변경 $content = preg_replace_callback('!(script|link|a|img|input)([^>]*)(href|src)=[\'"](.*?)[\'"]!is', array($this, '_replaceSrc'), $content); @@ -104,16 +104,5 @@ $buff = sprintf('url(%s)', $href); return $buff; } - - /** - * @brief 태그의 속성에 " 를 추가 - **/ - function _fixQuotation($matches) { - $key = $matches[1]; - $val = $matches[2]; - if(substr($val,0,1)!='"') $val = '"'.$val.'"'; - return sprintf('%s=%s', $key, $val); - } - } ?> diff --git a/modules/opage/opage.view.php b/modules/opage/opage.view.php index 3b700edfb..72114bcaa 100644 --- a/modules/opage/opage.view.php +++ b/modules/opage/opage.view.php @@ -101,7 +101,7 @@ // 캐시 검사 if($caching_interval <1 || !file_exists($cache_file) || filemtime($cache_file) + $caching_interval*60 <= time() || filemtime($cache_file) - + + 페이지 页面 ページ Page - Página + Página Страницы - + 페이지를 제작하여 컨텐츠로 연결할 수 있는 모듈 + 制作页面并能连接到内容区的模块。 + ページを作成してコンテンツとしてリンクできるようにするモジュールです。 + This module is for creating pages to link with contents. + Este módulo is para crear página para enlazar con contenidos. + Этот модуль служит для создания страниц, чтобы связать их с содержимым. + 0.1 + 2007-02-28 + service + + 제로 Zero Zero zero - zero + zero zero - 페이지를 제작하여 컨텐츠로 연결할 수 있는 모듈 - 制作页面并能连接到内容区的模块。 - ページを作成してコンテンツとしてリンクできるようにするモジュールです。 - This module is for creating pages to link with contents. - Este módulo is para crear página para enlazar con contenidos. - Этот модуль служит для создания страниц, чтобы связать их с содержимым. - + \ No newline at end of file diff --git a/modules/point/conf/info.xml b/modules/point/conf/info.xml index f95d39975..0f800330b 100644 --- a/modules/point/conf/info.xml +++ b/modules/point/conf/info.xml @@ -1,47 +1,51 @@ - - + + 포인트 시스템 积分系统 ポイントシステム Point System - Sistema de Punto + Sistema de Punto Система поитов - + + 글작성/삭제/댓글작성/삭제시에 포인트를 부여할 수 있습니다. + 포인트마다 레벨을 지정하여 사용자 이름 앞에 아이콘을 표시할 수도 있습니다. + 단 포인트 관련 애드온을 활성화 시키셔야 됩니다. + + + 可以在发表/删除新帖,发表/删除评论时,付与相应积分。 + 也可以以积分设置级别,并在用户名前显示级别图标。 + 必须是先激活积分系统才可以使用。 + + + 書き込み作成・削除/コメント作成・削除の活動に対するポイントを計算するシステムです。 + ポイントごとレベルを指定してユーザ名の前にアイコンを表示させることができます。 + 但し、ポイントシステムアドオンを「使用」に設定しないと作動しません。 + + + You can grant point on writing/deleting/adding comments/deleting comments. + You can also display point icon in front of user name by selecting level on each point. + But to enable these functions, you need to activate point related addons. + + + Usted puede entregar puntos a las acciones de escribir/eliminar/agregar comentarios/eliminar comentarios. + Usted también puede mostrar el ícono de punto delande del nombre del usuario seleccionando el nivel sobre cada puntos. + Pero para activar esas funciones, Usted necesita activar addon relacionado a los puntos. + + + Вы можете назначать поинты за написание/удаление/добавление комментариев/удаление комментариев. + Вы также можете отображать икнку поинтов напротив имени пользователя, установив уровени для поинтов. + Но чтобы включить эти функции, Вам надо активировать аддоны, относящиеся к поинтам. + + 0.1 + 2007-07-26 + accessory + + 제로 Zero Zero zero - zero + zero zero - - 글작성/삭제/댓글작성/삭제시에 포인트를 부여할 수 있습니다. - 포인트마다 레벨을 지정하여 사용자 이름 앞에 아이콘을 표시할 수도 있습니다. - 단 포인트 관련 애드온을 활성화 시키셔야 됩니다. - - - 可以在发表/删除新帖,发表/删除评论时,付与相应积分。 - 也可以以积分设置级别,并在用户名前显示级别图标。 - 必须是先激活积分系统才可以使用。 - - - 書き込み作成・削除/コメント作成・削除の活動に対するポイントを計算するシステムです。 - ポイントごとレベルを指定してユーザ名の前にアイコンを表示させることができます。 - 但し、ポイントシステムアドオンを「使用」に設定しないと作動しません。 - - - You can grant point on writing/deleting/adding comments/deleting comments. - You can also display point icon in front of user name by selecting level on each point. - But to enable these functions, you need to activate point related addons. - - - Usted puede entregar puntos a las acciones de escribir/eliminar/agregar comentarios/eliminar comentarios. - Usted también puede mostrar el ícono de punto delande del nombre del usuario seleccionando el nivel sobre cada puntos. - Pero para activar esas funciones, Usted necesita activar addon relacionado a los puntos. - - - Вы можете назначать поинты за написание/удаление/добавление комментариев/удаление комментариев. - Вы также можете отображать икнку поинтов напротив имени пользователя, установив уровени для поинтов. - Но чтобы включить эти функции, Вам надо активировать аддоны, относящиеся к поинтам. - - + \ No newline at end of file diff --git a/modules/point/point.admin.controller.php b/modules/point/point.admin.controller.php index 964a840e8..4f8eb866b 100644 --- a/modules/point/point.admin.controller.php +++ b/modules/point/point.admin.controller.php @@ -286,10 +286,11 @@ } if(feof($f)) { - @unlink('./files/cache/pointRecal.txt'); + FileHandler::removeFile('./files/cache/pointRecal.txt'); $idx = $total; - @rename('./files/member_extra_info/point','./files/member_extra_info/point.old'); + FileHandler::rename('./files/member_extra_info/point','./files/member_extra_info/point.old'); + FileHandler::removeDir('./files/member_extra_info/point.old'); } fclose($f); diff --git a/modules/point/tpl/.action_config.html.swp b/modules/point/tpl/.action_config.html.swp deleted file mode 100644 index 156b9fe58..000000000 Binary files a/modules/point/tpl/.action_config.html.swp and /dev/null differ diff --git a/modules/poll/conf/info.xml b/modules/poll/conf/info.xml index 73622ddf8..9e3938fe5 100644 --- a/modules/poll/conf/info.xml +++ b/modules/poll/conf/info.xml @@ -1,23 +1,27 @@ - - + + 설문조사 投票调查 アンケート Poll - Encuesta + Encuesta Опрос - + 설문조사 관리 모듈 + 管理投票调查的模块。 + アンケート管理モジュール + This module is for managering polls. + Este módulo es para manejar las encuestas. + Этот модуль служит для управления опросами. + 0.1 + 2007-02-28 + accessory + + 제로 Zero Zero zero - zero + zero zero - 설문조사 관리 모듈 - 管理投票调查的模块。 - アンケート管理モジュール - This module is for managering polls. - Este módulo es para manejar las encuestas. - Этот модуль служит для управления опросами. - + \ No newline at end of file diff --git a/modules/referer/conf/info.xml b/modules/referer/conf/info.xml index da4ee8c5b..31e6a9070 100644 --- a/modules/referer/conf/info.xml +++ b/modules/referer/conf/info.xml @@ -1,20 +1,24 @@ - - + + 리퍼러 통계 リファラー統計 反向链接统计 Referer Statistics Статистика рефералов - + 기본 리퍼러 통계 프로그램입니다. + デフォルトのリファラー統計プログラムです。 + 反向链接统计模块。 + Basic referer statistics program. + Базовая программа статистики рефералов. + 0.15 + 2007-11-29 + accessory + + haneul haneul haneul haneul haneul - 기본 리퍼러 통계 프로그램입니다. - デフォルトのリファラー統計プログラムです。 - 反向链接统计模块。 - Basic referer statistics program. - Базовая программа статистики рефералов. - + \ No newline at end of file diff --git a/modules/rss/conf/info.xml b/modules/rss/conf/info.xml index 784bf95b2..17fc45e4b 100644 --- a/modules/rss/conf/info.xml +++ b/modules/rss/conf/info.xml @@ -1,23 +1,27 @@ - - + + RSS RSS RSS RSS - RSS + RSS RSS - + RSS 출력을 담당하는 모듈 + 负责输出RSS的模块。 + RSS出力を担うモジュールです。 + This modules is for printing RSS. + Este módulo es para imprimir RSS. + Этот модуль служит для печати RSS. + 0.1 + 2007-02-28 + utility + + 제로 Zero Zero zero - zero + zero zero - RSS 출력을 담당하는 모듈 - 负责输出RSS的模块。 - RSS出力を担うモジュールです。 - This modules is for printing RSS. - Este módulo es para imprimir RSS. - Этот модуль служит для печати RSS. - + \ No newline at end of file diff --git a/modules/session/conf/info.xml b/modules/session/conf/info.xml index 40dd67cbe..8c5a4f3bb 100644 --- a/modules/session/conf/info.xml +++ b/modules/session/conf/info.xml @@ -1,17 +1,27 @@ - - + + 세션 관리자 + Session 会话管理 - + + 접속자의 세션을 관리하는 모듈입니다. + 기본적인 세션 설정과 사용뿐 아니라 세션 정보를 이용하여 접속자등의 세션 기반의 정보를 제공하는 기능도 있습니다. + + + This module manages session data. + You will get not only session setting or using but also session-level data such as visitors by using session data. + + + 管理在线会员会话(session)功能的模块。 + 提供最基本的会话设置及使用,并且还可以获得基于会话功能的在线会员信息。 + + 0.1 + 2008-06-18 + base + + zero + zero zero - - 접속자의 세션을 관리하는 모듈입니다. - 기본적인 세션 설정과 사용뿐 아니라 세션 정보를 이용하여 접속자등의 세션 기반의 정보를 제공하는 기능도 있습니다. - - - 管理在线会员会话(session)功能的模块。 - 提供最基本的会话设置及使用,并且还可以获得基于会话功能的在线会员信息。 - - + \ No newline at end of file diff --git a/modules/session/lang/en.lang.php b/modules/session/lang/en.lang.php new file mode 100644 index 000000000..f357ee2b2 --- /dev/null +++ b/modules/session/lang/en.lang.php @@ -0,0 +1,13 @@ + + * @brief Korean Language Pack (Basic Contents Only) + **/ + + $lang->session = 'Session'; + $lang->about_session = "This module manages sessions\nFrequent session arrangement will provide better environment for your site."; + + $lang->cmd_clear_session = 'Arrange Session'; + $lang->session_cleared = 'Session data have been arranged succesfully'; +?> diff --git a/modules/spamfilter/conf/info.xml b/modules/spamfilter/conf/info.xml index 49d1da8e8..c69f43b70 100644 --- a/modules/spamfilter/conf/info.xml +++ b/modules/spamfilter/conf/info.xml @@ -1,23 +1,27 @@ - - + + 스팸필터 垃圾过滤 Spam Filter - Filtro de Spam + Filtro de Spam スパムフィルター Фильтр спама - + 제로보드 XE의 기본 스팸필터입니다. + Zeroboard XE的基本垃圾过滤模块。 + A default spam filter of Zeroboard XE. + Filtro de Span predefinido de Zeroboard XE. + ゼロボードXEのスパムフィルターです。 + Стандартный фильтр спама Zeroboard XE. + 0.1 + 2007-02-28 + accessory + + 제로 Zero zero - zero + zero Zero zero - 제로보드 XE의 기본 스팸필터입니다. - Zeroboard XE的基本垃圾过滤模块。 - A default spam filter of Zeroboard XE. - Filtro de Span predefinido de Zeroboard XE. - ゼロボードXEのスパムフィルターです。 - Стандартный фильтр спама Zeroboard XE. - + \ No newline at end of file diff --git a/modules/springnote/conf/info.xml b/modules/springnote/conf/info.xml index 01397eada..9cac8a273 100644 --- a/modules/springnote/conf/info.xml +++ b/modules/springnote/conf/info.xml @@ -1,23 +1,27 @@ - - + + 스프링노트 연동 スプリングノート連動 Springnote API - Springnote - Springnote - Спрингноут - + Springnote + Springnote + Спрингноут + 스프링노트의 페이지를 제로보드XE에서 연동하여 출력하는 기능을 가지고 있는 모듈입니다. + スプリングノートのページをゼロボードXEと連動させて出力する機能のモジュールです。 + 把Springnote网站页面整合到Zeroboard XE的模块。 + This modules links pages of Springnote with ZeroboardXE, and display them. + Esta módulos de enlaces de páginas Springnote con ZeroboardXE, y lo muestra. + Этот модуль связывает страницы Springnote с ZeroboardXE, и отображает их. + 0.1 + 2007-11-30 + service + + 제로 Zero - Zero - Zero - Zero - Zero - 스프링노트의 페이지를 제로보드XE에서 연동하여 출력하는 기능을 가지고 있는 모듈입니다. - スプリングノートのページをゼロボードXEと連動させて出力する機能のモジュールです。 - 把Springnote网站页面整合到Zeroboard XE的模块。 - This modules links pages of Springnote with ZeroboardXE, and display them. - Esta módulos de enlaces de páginas Springnote con ZeroboardXE, y lo muestra. - Этот модуль связывает страницы Springnote с ZeroboardXE, и отображает их. + Zero + Zero + Zero + Zero - + \ No newline at end of file diff --git a/modules/springnote/springnote.admin.controller.php b/modules/springnote/springnote.admin.controller.php index f16764b5d..4c6c9fb1e 100644 --- a/modules/springnote/springnote.admin.controller.php +++ b/modules/springnote/springnote.admin.controller.php @@ -183,7 +183,7 @@ $del_var = $obj->{"del_".$vars->name}; unset($obj->{"del_".$vars->name}); if($del_var == 'Y') { - @unlink($module_info->{$vars->name}); + FileHandler::removeFile($module_info->{$vars->name}); continue; } diff --git a/modules/tag/conf/info.xml b/modules/tag/conf/info.xml index b717eb113..41e6bcdf0 100644 --- a/modules/tag/conf/info.xml +++ b/modules/tag/conf/info.xml @@ -1,23 +1,27 @@ - - + + 꼬리표 标签 タグ Tag - Etiqueta + Etiqueta Теги - + 꼬리표 관리 모듈 + 标签管理模块。 + タグ管理用のモジュールです。 + Module for managing tags. + Módulo para manejar etiquetas. + Модуль для управления тегами. + 0.1 + 2007-02-28 + utility + + 제로 Zero Zero Zero - Zero + Zero zero - 꼬리표 관리 모듈 - 标签管理模块。 - タグ管理用のモジュールです。 - Module for managing tags. - Módulo para manejar etiquetas. - Модуль для управления тегами. - + \ No newline at end of file diff --git a/modules/tccommentnotify/ReleaseNote b/modules/tccommentnotify/ReleaseNote new file mode 100644 index 000000000..c82be839d --- /dev/null +++ b/modules/tccommentnotify/ReleaseNote @@ -0,0 +1,4 @@ +2008.06.26 v0.2.0 본문에 대한 댓글알림 추가- 기본패키지에 추가 +2008.06.18 v0.1.3 queue에서 잘 안 빠지는 문제 수정 +2008.06.18 v0.1.2 page module로 들어오는 noti가 반영이 안되는 문제 수정 +2008.06.17 v0.1.1 tag strip안되는 문제 수정 diff --git a/modules/tccommentnotify/conf/info.xml b/modules/tccommentnotify/conf/info.xml new file mode 100644 index 000000000..02d27b7e0 --- /dev/null +++ b/modules/tccommentnotify/conf/info.xml @@ -0,0 +1,15 @@ + + + 댓글알리미 + Comment Notifier + 댓글알리미 모듈입니다. + Comment Notifier will tell you when there's a new comment + 0.2 + 2008-06-02 + accessory + + + haneul + haneul + + \ No newline at end of file diff --git a/modules/tccommentnotify/conf/module.xml b/modules/tccommentnotify/conf/module.xml new file mode 100644 index 000000000..ddc60d5af --- /dev/null +++ b/modules/tccommentnotify/conf/module.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/modules/tccommentnotify/lang/en.lang.php b/modules/tccommentnotify/lang/en.lang.php new file mode 100644 index 000000000..117219e7c --- /dev/null +++ b/modules/tccommentnotify/lang/en.lang.php @@ -0,0 +1,5 @@ +commentnotify = 'Comment Notifier'; + $lang->msg_checked_comment_is_deleted = '%d comment(s) has(have) been deleted'; + $lang->cmd_delete_checked_comment = 'Delete Selected Items'; +?> diff --git a/modules/tccommentnotify/lang/ko.lang.php b/modules/tccommentnotify/lang/ko.lang.php new file mode 100644 index 000000000..9d4913abe --- /dev/null +++ b/modules/tccommentnotify/lang/ko.lang.php @@ -0,0 +1,5 @@ +commentnotify = '댓글알리미'; + $lang->msg_checked_comment_is_deleted = '%d개의 알림글이 삭제되었습니다'; + $lang->cmd_delete_checked_comment = '선택삭제'; +?> diff --git a/modules/tccommentnotify/queries/deleteChild.xml b/modules/tccommentnotify/queries/deleteChild.xml new file mode 100644 index 000000000..18618e3be --- /dev/null +++ b/modules/tccommentnotify/queries/deleteChild.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/modules/tccommentnotify/queries/deleteChildren.xml b/modules/tccommentnotify/queries/deleteChildren.xml new file mode 100644 index 000000000..ed56920f3 --- /dev/null +++ b/modules/tccommentnotify/queries/deleteChildren.xml @@ -0,0 +1,8 @@ + + +
    + + + + + diff --git a/modules/tccommentnotify/queries/deleteFromQueue.xml b/modules/tccommentnotify/queries/deleteFromQueue.xml new file mode 100644 index 000000000..c41446480 --- /dev/null +++ b/modules/tccommentnotify/queries/deleteFromQueue.xml @@ -0,0 +1,8 @@ + + +
    + + + + + diff --git a/modules/tccommentnotify/queries/deleteParent.xml b/modules/tccommentnotify/queries/deleteParent.xml new file mode 100644 index 000000000..d671dcc0a --- /dev/null +++ b/modules/tccommentnotify/queries/deleteParent.xml @@ -0,0 +1,8 @@ + + +
    + + + + + diff --git a/modules/tccommentnotify/queries/getChild.xml b/modules/tccommentnotify/queries/getChild.xml new file mode 100644 index 000000000..4686dcf79 --- /dev/null +++ b/modules/tccommentnotify/queries/getChild.xml @@ -0,0 +1,11 @@ + + +
    + + + + + + + + diff --git a/modules/tccommentnotify/queries/getChildren.xml b/modules/tccommentnotify/queries/getChildren.xml new file mode 100644 index 000000000..3e3171257 --- /dev/null +++ b/modules/tccommentnotify/queries/getChildren.xml @@ -0,0 +1,11 @@ + + +
    + + + + + + + + diff --git a/modules/tccommentnotify/queries/getFromQueue.xml b/modules/tccommentnotify/queries/getFromQueue.xml new file mode 100644 index 000000000..dd156c565 --- /dev/null +++ b/modules/tccommentnotify/queries/getFromQueue.xml @@ -0,0 +1,10 @@ + + +
    + + + + + + + diff --git a/modules/tccommentnotify/queries/getNotifiedList.xml b/modules/tccommentnotify/queries/getNotifiedList.xml new file mode 100644 index 000000000..70cc2dd87 --- /dev/null +++ b/modules/tccommentnotify/queries/getNotifiedList.xml @@ -0,0 +1,27 @@ + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/tccommentnotify/queries/getParentId.xml b/modules/tccommentnotify/queries/getParentId.xml new file mode 100644 index 000000000..fe27ee479 --- /dev/null +++ b/modules/tccommentnotify/queries/getParentId.xml @@ -0,0 +1,14 @@ + + +
    + + + + + + + + + + + diff --git a/modules/tccommentnotify/queries/getSite.xml b/modules/tccommentnotify/queries/getSite.xml new file mode 100644 index 000000000..0821081bd --- /dev/null +++ b/modules/tccommentnotify/queries/getSite.xml @@ -0,0 +1,11 @@ + + +
    + + + + + + + + diff --git a/modules/tccommentnotify/queries/insertCommentNotified.xml b/modules/tccommentnotify/queries/insertCommentNotified.xml new file mode 100644 index 000000000..e73c39d95 --- /dev/null +++ b/modules/tccommentnotify/queries/insertCommentNotified.xml @@ -0,0 +1,25 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/tccommentnotify/queries/insertCommentNotifiedChild.xml b/modules/tccommentnotify/queries/insertCommentNotifiedChild.xml new file mode 100644 index 000000000..df1a26ce2 --- /dev/null +++ b/modules/tccommentnotify/queries/insertCommentNotifiedChild.xml @@ -0,0 +1,22 @@ + + +
    + + + + + + + + + + + + + + + + + + + diff --git a/modules/tccommentnotify/queries/insertQueue.xml b/modules/tccommentnotify/queries/insertQueue.xml new file mode 100644 index 000000000..e4593389b --- /dev/null +++ b/modules/tccommentnotify/queries/insertQueue.xml @@ -0,0 +1,8 @@ + + +
    + + + + + diff --git a/modules/tccommentnotify/queries/insertSite.xml b/modules/tccommentnotify/queries/insertSite.xml new file mode 100644 index 000000000..2bf165598 --- /dev/null +++ b/modules/tccommentnotify/queries/insertSite.xml @@ -0,0 +1,12 @@ + + +
    + + + + + + + + + diff --git a/modules/tccommentnotify/queries/updateParent.xml b/modules/tccommentnotify/queries/updateParent.xml new file mode 100644 index 000000000..98598ef62 --- /dev/null +++ b/modules/tccommentnotify/queries/updateParent.xml @@ -0,0 +1,12 @@ + + +
    + + + + + + + + + diff --git a/modules/tccommentnotify/schemas/tcnotified.xml b/modules/tccommentnotify/schemas/tcnotified.xml new file mode 100644 index 000000000..db5d8a4cd --- /dev/null +++ b/modules/tccommentnotify/schemas/tcnotified.xml @@ -0,0 +1,20 @@ +
    + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/tccommentnotify/schemas/tcnotifiedchildren.xml b/modules/tccommentnotify/schemas/tcnotifiedchildren.xml new file mode 100644 index 000000000..864cba50e --- /dev/null +++ b/modules/tccommentnotify/schemas/tcnotifiedchildren.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + +
    diff --git a/modules/tccommentnotify/schemas/tcnotifiedsites.xml b/modules/tccommentnotify/schemas/tcnotifiedsites.xml new file mode 100644 index 000000000..0276988bb --- /dev/null +++ b/modules/tccommentnotify/schemas/tcnotifiedsites.xml @@ -0,0 +1,7 @@ + + + + + + +
    diff --git a/modules/tccommentnotify/schemas/tcnotifyqueue.xml b/modules/tccommentnotify/schemas/tcnotifyqueue.xml new file mode 100644 index 000000000..434f0598d --- /dev/null +++ b/modules/tccommentnotify/schemas/tcnotifyqueue.xml @@ -0,0 +1,3 @@ + + +
    diff --git a/modules/tccommentnotify/tccommentnotify.admin.controller.php b/modules/tccommentnotify/tccommentnotify.admin.controller.php new file mode 100644 index 000000000..8081cd636 --- /dev/null +++ b/modules/tccommentnotify/tccommentnotify.admin.controller.php @@ -0,0 +1,68 @@ +stop('msg_cart_is_null'); + $comment_srl_list= explode('|@|', $cart); + $comment_count = count($comment_srl_list); + if(!$comment_count) return $this->stop('msg_cart_is_null'); + + for($i=0;$i<$comment_count;$i++) { + $notified_srl = trim($comment_srl_list[$i]); + if(!$notified_srl) continue; + + $output = $this->deleteParent($notified_srl); + if(!$output->toBool()) continue; + + $deleted_count ++; + } + + $this->setMessage( sprintf(Context::getLang('msg_checked_comment_is_deleted'), $deleted_count) ); + } + + function deleteParent($parent_srl) + { + $args->notified_srl = $parent_srl; + executeQuery('tccommentnotify.deleteParent', $args); + $newargs->parent_srl = $args->notified_srl; + return executeQuery('tccommentnotify.deleteChildren', $newargs); + } + + function procCommentNotifyAdminDeleteParent() + { + $notified_srl = Context::get('notified_srl'); + $this->deleteParent($notified_srl); + } + + function procCommentNotifyAdminDeleteChild() + { + $args->notified_srl = Context::get('notified_srl'); + $oModel = &getModel('tccommentnotify'); + $output = $oModel->GetChild($args->notified_srl); + if(!$output->toBool()) + { + return; + } + $parent_srl = $output->data->parent_srl; + executeQuery('tccommentnotify.deleteChild', $args); + if(!$oModel->GetChildren($parent_srl)) + { + $newarg->notified_srl = $parent_srl; + executeQuery('tccommentnotify.deleteParent', $newarg); + } + } + } +?> diff --git a/modules/tccommentnotify/tccommentnotify.admin.view.php b/modules/tccommentnotify/tccommentnotify.admin.view.php new file mode 100644 index 000000000..ecc66b2c0 --- /dev/null +++ b/modules/tccommentnotify/tccommentnotify.admin.view.php @@ -0,0 +1,64 @@ +setTemplatePath($this->module_path.'tpl'); + } + + /** + * @brief 관리자 페이지 초기화면 + **/ + function dispCommentNotifyAdminIndex() { + $this->dispCommentNotifyAdminList(); + } + + function dispCommentNotifyAdminList() { + + // 목록을 구하기 위한 옵션 + $args->page = Context::get('page'); ///< 페이지 + + $args->sort_index = 'list_order'; ///< 소팅 값 + + $oCommentNotifyModel = &getModel('tccommentnotify'); + $output = $oCommentNotifyModel->GetNotifiedList($args); + + Context::set('total_count', $output->total_count); + Context::set('total_page', $output->total_page); + Context::set('page', $output->page); + $notify_list = array(); + if(!$output->data) + { + $output->data = array(); + } + foreach($output->data as $notifyparent) + { + $item = null; + $item->parent = $notifyparent; + $item->children = $oCommentNotifyModel->GetChildren($notifyparent->notified_srl); + $notify_list[] = $item; + } + Context::set('notify_list', $notify_list); + Context::set('page_navigation', $output->page_navigation); + + // 템플릿 지정 + $this->setTemplatePath($this->module_path.'tpl'); + $this->setTemplateFile('commentnotify_list'); + } + + function dispCommentNotifyAdminDeleteChild() + { + $notified_srl = Context::get('notified_srl'); + $this->setTemplateFile('delete_child'); + } + } +?> diff --git a/modules/tccommentnotify/tccommentnotify.class.php b/modules/tccommentnotify/tccommentnotify.class.php new file mode 100644 index 000000000..dba1bb393 --- /dev/null +++ b/modules/tccommentnotify/tccommentnotify.class.php @@ -0,0 +1,61 @@ +insertActionForward('tccommentnotify', 'view', 'dispCommentNotifyAdminIndex'); + + // notify를 위한 트리거 추가 + $oModuleController->insertTrigger('comment.insertComment', 'tccommentnotify', 'controller', 'triggerInsertComment', 'after'); + + return new Object(); + } + + /** + * @brief 설치가 이상이 없는지 체크하는 method + **/ + function checkUpdate() { + $oModuleModel = &getModel('module'); + if(!$oModuleModel->getTrigger('comment.insertComment', 'tccommentnotify', 'controller', 'triggerInsertComment', 'after')) + { + return true; + } + + return false; + } + + /** + * @brief 업데이트 실행 + **/ + function moduleUpdate() { + $oModuleModel = &getModel('module'); + $oModuleController = &getController('module'); + if(!$oModuleModel->getTrigger('comment.insertComment', 'tccommentnotify', 'controller', 'triggerInsertComment', 'after')) + { + $oModuleController->insertTrigger('comment.insertComment', 'tccommentnotify', 'controller', 'triggerInsertComment', 'after'); + } + + return new Object(0, 'success_updated'); + } + + /** + * @brief 캐시 파일 재생성 + **/ + function recompileCache() { + } + } +?> diff --git a/modules/tccommentnotify/tccommentnotify.controller.php b/modules/tccommentnotify/tccommentnotify.controller.php new file mode 100644 index 000000000..dd6c47f39 --- /dev/null +++ b/modules/tccommentnotify/tccommentnotify.controller.php @@ -0,0 +1,349 @@ +id = $id; + $args->title = $title; + $args->name = $name; + $args->url = $url; + $output = executeQuery("tccommentnotify.insertSite", $args); + if(!$output->toBool()) + { + return -1; + } + else + { + return $id; + } + } + + function insertParent($obj, $siteid, $module_srl) + { + $parentid = getNextSequence(); + $args->notified_srl = $parentid; + $args->module_srl = $module_srl; + $args->name = $obj->r1_name; + $args->homepage = $obj->r1_homepage; + $args->written = date('YmdHis', $obj->r1_regdate); + $args->comment = $obj->r1_body; + $args->entry = $obj->s_no; + $args->siteid = $siteid; + $args->url = $obj->r1_url; + $args->remoteid = $obj->r1_no; + $args->entrytitle = $obj->s_post_title; + $args->entryurl = $obj->s_url; + $args->list_order = $parentid * -1; + $output = executeQuery("tccommentnotify.insertCommentNotified", $args); + if(!$output->toBool()) + { + return -1; + } + return $parentid; + } + + function procDoNotify() + { + $lockFilePath = $this->cachedir.$this->lockfile; + if(file_exists($lockFilePath)) + { + return; + } + + $fp = null; + if(version_compare(PHP_VERSION, "4.3.2", '<')) + { + $fp = fopen($lockFilePath, "a"); + } + else + { + $fp = fopen($lockFilePath, "x"); + if(!$fp) + { + return; + } + } + + fwrite($fp, "lock"); + fclose($fp); + + if( file_exists($this->cachedir.$this->cachefile) ) + { + FileHandler::removeFile($this->cachedir.$this->cachefile); + } + + $oModel = &getModel('tccommentnotify'); + $output = $oModel->GetCommentsFromNotifyQueue(); + if(!$output->toBool()) + { + debugPrint("Error"); + debugPrint($output); + } + if($output->data) + { + foreach($output->data as $data) + { + $this->deleteFromQueue($data->comment_srl); + $this->sendCommentNotify($data->comment_srl); + } + } + FileHandler::removeFile($lockFilePath); + } + + function deleteFromQueue($comment_srl) + { + $args->comment_srl = $comment_srl; + executeQuery("tccommentnotify.deleteFromQueue", $args); + } + + function triggerInsertComment($obj) + { + $oCommentModel = &getModel('comment'); + $oComment = $oCommentModel->getComment($obj->comment_srl); + $output = $this->insertCommentNotifyQueue($obj->comment_srl); + if($output->toBool()) + { + if(!file_exists($this->cachedir.$this->cachefile)) + { + if(!file_exists($this->cachedir)) + { + mkdir($this->cachedir); + } + $fp = fopen($this->cachedir.$this->cachefile, "w"); + fwrite($fp, "aa"); + fclose($fp); + } + } + return new Object(); + } + + function insertCommentNotifyQueue($comment_srl) + { + $args->comment_srl = $comment_srl; + return executeQuery("tccommentnotify.insertQueue", $args); + } + + function sendCommentNotify($comment_srl) + { + set_include_path("./libs/PEAR"); + require_once('PEAR.php'); + require_once('HTTP/Request.php'); + + $oCommentModel = &getModel('comment'); + $oChild = $oCommentModel->getComment($comment_srl); + + if(!$oChild->isExists()) + { + return; + } + + $document_srl = $oChild->get('document_srl'); + + $oDocumentModel = &getModel('document'); + $oDocument = $oDocumentModel->getDocument($document_srl); + + $oParent = null; + $parent_srl = $oChild->get('parent_srl'); + if(!$parent_srl) + { + $oParent = $oDocumentModel->getDocument($document_srl); + } + else + { + $oParent = $oCommentModel->getComment($parent_srl); + } + + if(!$oParent->isExists()) + { + return; + } + + + $parentHomepage = $oParent->getHomepageUrl(); + $oMemberModel = &getModel('member'); + if(!$parentHomepage) + { + $parent_member = $oParent->getMemberSrl(); + if(!$parent_member) + return; + $member_info = $oMemberModel->getMemberInfoByMemberSrl($parent_member); + $parentHomepage = $member_info->homepage; + if(!$parentHomepage) + return; + } + + + $childHomepage = $oChild->getHomepageUrl(); + if(!$childHomepage) + { + $child_member = $oChild->getMemberSrl(); + if($child_member) + { + $child_info = $oMemberModel->getMemberInfoByMemberSrl($child_member); + $childHomepage = $member_info->homepage; + } + } + + $oModuleModel = &getModel('module'); + $module_info = $oModuleModel->getModuleInfoByDocumentSrl($document_srl); + if($this->SendNotifyRequest($parentHomepage, &$module_info, &$oDocument, &$oParent, $parentHomepage, &$oChild, $childHomepage) != 200) + { + $indexedPage = rtrim($parentHomepage, '/').'/index.php'; + $this->SendNotifyRequest($indexedPage, &$module_info, &$oDocument, &$oParent, $parentHomepage, &$oChild, $childHomepage); + } + } + + function SendNotifyRequest($target, $module_info, $oDocument, $oParent, $parentHomepage, $oChild, $childHomepage) + { + $oReq = new HTTP_Request(); + $oReq->setURL($target); + $oReq->setMethod("POST"); + $oReq->addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); + $oReq->addPostData('mode', 'fb'); + $oReq->addPostData('url', getUrl('mid', $module_info->mid,'act','','module','')); + $oReq->addPostData('s_home_title', $module_info->browser_title); + $oReq->addPostData('s_post_title', $oDocument->getTitleText()); + $oReq->addPostData('s_name', $oDocument->getNickName()); + $oReq->addPostData('s_url', $oDocument->getPermanentUrl()); + $oReq->addPostData('s_no', $oDocument->document_srl); + + $oReq->addPostData('r1_name', $oParent->getNickName()); + if($oChild->get('parent_srl')) + { + $oReq->addPostData('r1_no', $oParent->comment_srl); + $oReq->addPostData('r1_url', sprintf("%s#comment_%s", $oDocument->getPermanentUrl(), $oParent->comment_srl)); + $oReq->addPostData('r2_rno', $oParent->comment_srl); + } + else + { + $oReq->addPostData('r1_no', '-1'); + $oReq->addPostData('r1_url', $oParent->getPermanentUrl()); + $oReq->addPostData('r2_rno', '-1'); + } + + $oReq->addPostData('r1_pno', $oDocument->document_srl); + $oReq->addPostData('r1_rno', '0'); + $oReq->addPostData('r1_homepage', $parentHomepage); + $oReq->addPostData('r1_regdate', ztime($oParent->get('regdate'))); + $oReq->addPostData('r2_name', $oChild->getNickName()); + $oReq->addPostData('r2_no', $oChild->comment_srl); + $oReq->addPostData('r2_pno', $oDocument->document_srl); + $oReq->addPostData('r2_homepage', $childHomepage); + $oReq->addPostData('r2_regdate', ztime($oChild->get('regdate'))); + $oReq->addPostData('r2_url', sprintf("%s#comment_%s", $oDocument->getPermanentUrl(), $oChild->comment_srl)); + + if($oChild->get('parent_srl')) + { + $oReq->addPostData('r1_body', strip_tags($oParent->get('content'))); + } + else + { + $oReq->addPostData('r1_body', $oParent->getContentText(250)); + } + + $oReq->addPostData('r2_body', strip_tags($oChild->get('content'))); + + $oReq->sendRequest(false); + $code = $oReq->getResponseCode(); + return $code; + } + + function insertCommentNotify($obj, $siteid, $parentid, $module_srl) + { + $myid = getNextSequence(); + $args->notified_srl = $myid; + $args->module_srl = $module_srl; + $args->parent_srl = $parentid; + $args->name = $obj->r2_name; + $args->homepage = $obj->r2_homepage; + $args->written = date('YmdHis', $obj->r2_regdate); + $args->comment = $obj->r2_body; + $args->url = $obj->r2_url; + $args->remoteid = $obj->r2_no; + $args->list_order = $myid * -1; + $output = executeQuery("tccommentnotify.insertCommentNotifiedChild", $args); + $bRet = $output->toBool(); + return $bRet; + } + + function updateParent($parentid) + { + $args->notified_srl = $parentid; + $args->list_order = -1 * getNextSequence(); + $output = executeQuery("tccommentnotify.updateParent", $args); + } + + function procNotifyReceived() { + + $obj = Context::getRequestVars(); + $oModel = &getModel('tccommentnotify'); + + $oDB = &DB::getInstance(); + $oDB -> begin(); + $siteid = $oModel->GetSite( $obj->url ); + $module_info = Context::get('current_module_info'); + $module_srl = $module_info->module_srl; + if(!$obj->r1_no) + { + $obj->r1_no = 0; + } + + if( $siteid == -2 ) + { + $oDB->rollback(); + return; + } + else if( $siteid == -1 ) + { + $siteid = $this->insertSite($obj->s_home_title, $obj->s_name, $obj->url); + if($siteid == -1) + { + $oDB->rollback(); + return; + } + } + + $parentid = $oModel->GetParentID( $obj->s_no, $siteid, $module_srl, $obj->r1_no ); + if( $parentid == -2 ) + { + $oDB->rollback(); + return; + } + else if ( $parentid == -1 ) + { + $parentid = $this->insertParent( &$obj, $siteid, $module_srl ); + if($parentid == -1) + { + $oDB->rollback(); + return; + } + } + else + { + $this->updateParent($parentid); + } + + if(!$this->insertCommentNotify(&$obj, $siteid, $parentid, $module_srl)) + { + $oDB->rollback(); + return; + } + + $oDB->commit(); + } + } +?> diff --git a/modules/tccommentnotify/tccommentnotify.model.php b/modules/tccommentnotify/tccommentnotify.model.php new file mode 100644 index 000000000..44b0871eb --- /dev/null +++ b/modules/tccommentnotify/tccommentnotify.model.php @@ -0,0 +1,102 @@ +cachedir.$this->cachefile) ) + { + return true; + } + else + { + return false; + } + } + + function GetSite($url) + { + if(!$url) return new Object(-1, "parameter error"); + + $args->url = $url; + $output = executeQuery('tccommentnotify.getSite', $args); + if(!$output->toBool()) + { + return -2; + } + if(!$output->data) + { + return -1; + } + + $siteid = $output->data->id; + + if( is_array($siteid) ) + { + $siteid = array_shift($siteid); + } + + return $siteid; + } + + function GetParentID( $entry, $siteid, $module_srl, $remoteid ) + { + $args->entry = $entry; + $args->siteid = $siteid; + $args->module_srl = $module_srl; + $args->remoteid = $remoteid; + $output = executeQuery('tccommentnotify.getParentId', $args); + + if(!$output->toBool()) + { + return -2; + } + if(!$output->data) + { + return -1; + } + + $parentid = $output->data->notified_srl; + + if( is_array($parentid) ) + { + $parentid = array_shift($parentid); + } + return $parentid; + } + + function GetNotifiedList($args) + { + $args->parent_srl = 0; + return executeQuery("tccommentnotify.getNotifiedList", $args); + } + + function GetChildren($parentid) + { + $args->parent_srl = $parentid; + $output = executeQueryArray("tccommentnotify.getChildren", $args); + return $output->data; + } + + function GetChild($notified_srl) + { + $args->notified_srl = $notified_srl; + $output = executeQuery("tccommentnotify.getChild", $args); + return $output; + } + + function GetCommentsFromNotifyQueue() + { + $output = executeQueryArray("tccommentnotify.getFromQueue"); + return $output; + } + } +?> diff --git a/modules/tccommentnotify/tpl/commentnotify_list.html b/modules/tccommentnotify/tpl/commentnotify_list.html new file mode 100644 index 000000000..ee6bd17f2 --- /dev/null +++ b/modules/tccommentnotify/tpl/commentnotify_list.html @@ -0,0 +1,82 @@ + + + + + + + +
    + Total {number_format($total_count)}, Page {number_format($page)}/{number_format($total_page)} +
    + +
    + + + + +{@ $col_width = array(40,85, 150,65,0,45)} + + +width="{$width}" /> + + + + + + + + + + + + + + {@ $parent = $val->parent; } + remoteid == -1)--> class="parentDocument" class="parent" > + + + + + + + + + + + + + + + + + + + + +
    등록일자사이트명이름내용삭제
    {zdate($parent->written, "Y/m/d")}{$parent->title?$parent->title:"[No title]"}{$parent->name}{$parent->entrytitle} {$parent->comment}
    {zdate($child->written, "Y/m/d")}{$parent->title?$parent->title:"[No title]"}{$child->name} {$child->comment}
    + + + + +
    +
    + +
    + + + + diff --git a/modules/tccommentnotify/tpl/css/commentnotify.css b/modules/tccommentnotify/tpl/css/commentnotify.css new file mode 100644 index 000000000..02d6a67c1 --- /dev/null +++ b/modules/tccommentnotify/tpl/css/commentnotify.css @@ -0,0 +1,3 @@ +.parent td { background-color : #fff0ff; } +.parentDocument td { background-color : #f0ffff; } +.date { font-size : 0.9em; } diff --git a/modules/tccommentnotify/tpl/filter/delete_checked.xml b/modules/tccommentnotify/tpl/filter/delete_checked.xml new file mode 100644 index 000000000..db9f95dd4 --- /dev/null +++ b/modules/tccommentnotify/tpl/filter/delete_checked.xml @@ -0,0 +1,12 @@ + +
    + + + + + + + + + +
    diff --git a/modules/tccommentnotify/tpl/filter/delete_child.xml b/modules/tccommentnotify/tpl/filter/delete_child.xml new file mode 100644 index 000000000..953a0693b --- /dev/null +++ b/modules/tccommentnotify/tpl/filter/delete_child.xml @@ -0,0 +1,13 @@ + +
    + + + + + + + + + + +
    diff --git a/modules/tccommentnotify/tpl/filter/delete_parent.xml b/modules/tccommentnotify/tpl/filter/delete_parent.xml new file mode 100644 index 000000000..9483684ee --- /dev/null +++ b/modules/tccommentnotify/tpl/filter/delete_parent.xml @@ -0,0 +1,13 @@ + +
    + + + + + + + + + + +
    diff --git a/modules/tccommentnotify/tpl/header.html b/modules/tccommentnotify/tpl/header.html new file mode 100644 index 000000000..df63b4b22 --- /dev/null +++ b/modules/tccommentnotify/tpl/header.html @@ -0,0 +1,7 @@ + +

    {$lang->commentnotify} {$lang->cmd_management}

    + +
    +
      +
    +
    diff --git a/modules/tccommentnotify/tpl/images/buttonDeleteX.gif b/modules/tccommentnotify/tpl/images/buttonDeleteX.gif new file mode 100644 index 000000000..c066e49be Binary files /dev/null and b/modules/tccommentnotify/tpl/images/buttonDeleteX.gif differ diff --git a/modules/tccommentnotify/tpl/images/iconReplyArrow.gif b/modules/tccommentnotify/tpl/images/iconReplyArrow.gif new file mode 100644 index 000000000..d1a21a040 Binary files /dev/null and b/modules/tccommentnotify/tpl/images/iconReplyArrow.gif differ diff --git a/modules/tccommentnotify/tpl/js/commentnotify.js b/modules/tccommentnotify/tpl/js/commentnotify.js new file mode 100644 index 000000000..6bee927d7 --- /dev/null +++ b/modules/tccommentnotify/tpl/js/commentnotify.js @@ -0,0 +1,25 @@ +function deleteChild(notified_srl) +{ + var e = xGetElementById('notified'); + e.value=notified_srl; + var hF = xGetElementById("deleteChildForm"); + procFilter(hF, delete_child); +} + +function deleteParent(notified_srl) +{ + var e = xGetElementById('notified'); + e.value=notified_srl; + var hF = xGetElementById("deleteChildForm"); + procFilter(hF, delete_parent); +} + +function completeDelete(ret_obj) +{ + var error = ret_obj['error']; + var message = ret_obj['message']; + alert(message); + + var url = current_url.setQuery('act','dispCommentNotifyAdminIndex'); + location.href = url; +} diff --git a/modules/trackback/conf/info.xml b/modules/trackback/conf/info.xml index b89c6c468..9c08aed8d 100644 --- a/modules/trackback/conf/info.xml +++ b/modules/trackback/conf/info.xml @@ -1,23 +1,27 @@ - - + + 엮인글 引用 トラックバック - Trackback + Trackback Trackback Трекбек - + 엮인글 관리 모듈 + 管理引用模块。 + トラックバック管理モジュール + Module for managing trackbacks. + Módulo para el manejo de trackbacks. + Модуль для управления трекбеками. + 0.1 + 2007-02-28 + utility + + 제로 zero Zero Zero - Zero + Zero zero - 엮인글 관리 모듈 - 管理引用模块。 - トラックバック管理モジュール - Module for managing trackbacks. - Módulo para el manejo de trackbacks. - Модуль для управления трекбеками. - + \ No newline at end of file diff --git a/modules/trackback/trackback.model.php b/modules/trackback/trackback.model.php index 81fc3376e..e9b49ec78 100644 --- a/modules/trackback/trackback.model.php +++ b/modules/trackback/trackback.model.php @@ -77,7 +77,7 @@ else $args->module_srl = $obj->module_srl; $args->list_count = $obj->list_count; - $output = executeQuery('trackback.getNewestTrackbackList', $args); + $output = executeQueryArray('trackback.getNewestTrackbackList', $args); return $output; } diff --git a/modules/widget/conf/info.xml b/modules/widget/conf/info.xml index 8f1e4cd53..a9b427af9 100644 --- a/modules/widget/conf/info.xml +++ b/modules/widget/conf/info.xml @@ -1,23 +1,27 @@ - - + + 위젯 控件 ウィジェット Widget - Widget + Widget Виджеты - + 위젯 관리 모듈 + 控件管理模块。 + ウィジェット管理モジュール + Module for managing widgets. + Módulo para el manejo de widgets. + Модуль для управления виджетами. + 0.1 + 2007-02-28 + manager + + 제로 zero Zero Zero - Zero + Zero zero - 위젯 관리 모듈 - 控件管理模块。 - ウィジェット管理モジュール - Module for managing widgets. - Módulo para el manejo de widgets. - Модуль для управления виджетами. - + \ No newline at end of file diff --git a/modules/widget/widget.controller.php b/modules/widget/widget.controller.php index 3b843971e..33383e2e9 100644 --- a/modules/widget/widget.controller.php +++ b/modules/widget/widget.controller.php @@ -31,7 +31,7 @@ if($vars->widget_sequence) { $cache_path = './files/cache/widget_cache/'; $cache_file = sprintf('%s%d.%s.cache', $cache_path, $vars->widget_sequence, Context::getLangType()); - @unlink($cache_file); + FileHandler::removeFile($cache_file); } if($vars->widget_cache>0) $vars->widget_sequence = getNextSequence(); @@ -50,7 +50,7 @@ $cache_path = './files/cache/widget_cache/'; $cache_file = sprintf('%s%d.%s.cache', $cache_path, $vars->widget_sequence, Context::getLangType()); - @unlink($cache_file); + FileHandler::removeFile($cache_file); // 코드 출력 $this->add('widget_code', $widget_code); @@ -75,7 +75,7 @@ if($vars->widget_sequence) { $cache_path = './files/cache/widget_cache/'; $cache_file = sprintf('%s%d.%s.cache', $cache_path, $vars->widget_sequence, Context::getLangType()); - @unlink($cache_file); + FileHandler::removeFile($cache_file); } if($vars->widget_cache>0) $vars->widget_sequence = getNextSequence(); @@ -190,8 +190,9 @@ $oWidget = new WidgetHandler(); $oXmlParser = new XmlParser(); - for($i=0;$iparse(trim($buff)); $args = $xml_doc->img->attrs; @@ -203,6 +204,10 @@ $cache = $args->widget_cache; if(!$sequence || !$cache) continue; + if(count($args)) { + foreach($args as $k => $v) $args->{$k} = urldecode($v); + } + // 언어별로 위젯 캐시 파일이 있을 경우 재생성 foreach($lang_list as $lang_type => $val) { $cache_file = sprintf('%s%d.%s.cache', $cache_path, $sequence, $lang_type); diff --git a/tools/blank_cleaner/blank_cleaner.php b/tools/blank_cleaner/blank_cleaner.php new file mode 100644 index 000000000..8b39a6034 --- /dev/null +++ b/tools/blank_cleaner/blank_cleaner.php @@ -0,0 +1,16 @@ + + * @brief 첨부파일 디렉토리의 빈 디렉토리 삭제 + **/ + + // 인증이 되지 않은 접근이면 종료 + if(!defined('__XE_TOOL_AUTH__') || !__XE_TOOL_AUTH__) exit(); + + // 캐시 파일 제거 + FileHandler::removeBlankDir(_XE_PATH_.'files'); + $output = Context::getLang('success_deleted'); + + Context::set('output', $output); +?> diff --git a/tools/blank_cleaner/lang/ko.lang.php b/tools/blank_cleaner/lang/ko.lang.php new file mode 100644 index 000000000..ba0cdd512 --- /dev/null +++ b/tools/blank_cleaner/lang/ko.lang.php @@ -0,0 +1,3 @@ +blank_cleaner = '빈디렉토리 삭제'; +?> diff --git a/tools/cache_cleaner/cache_cleaner.php b/tools/cache_cleaner/cache_cleaner.php new file mode 100644 index 000000000..e6fba631a --- /dev/null +++ b/tools/cache_cleaner/cache_cleaner.php @@ -0,0 +1,17 @@ + + * @brief XE 캐시파일 및 불필요한 파일 정리 + **/ + + // 인증이 되지 않은 접근이면 종료 + if(!defined('__XE_TOOL_AUTH__') || !__XE_TOOL_AUTH__) exit(); + + // 캐시 파일 제거 + $oAdminController = &getAdminController('admin'); + $oAdminController->procAdminRecompileCacheFile(); + $output = Context::getLang('success_reset'); + + Context::set('output', $output); +?> diff --git a/tools/cache_cleaner/lang/ko.lang.php b/tools/cache_cleaner/lang/ko.lang.php new file mode 100644 index 000000000..562e4167d --- /dev/null +++ b/tools/cache_cleaner/lang/ko.lang.php @@ -0,0 +1,3 @@ +cache_cleaner = '캐시파일 재생성'; +?> diff --git a/tools/form.html b/tools/form.html new file mode 100644 index 000000000..da25f6c9a --- /dev/null +++ b/tools/form.html @@ -0,0 +1,65 @@ + + + + + + XE Tools + +{@ $js_files = Context::getJsFile() } + + + + + + + + + +{@ $css_files = Context::getCssFile() } + + + + + + + + + + + + +

    XE Tools

    +
    + + +
    {$msg}
    + + +
    +
    + + + + + +
    +
    + + + + + + + + + +
    +
    + + +
    {$output}
    + + + diff --git a/tools/index.php b/tools/index.php new file mode 100644 index 000000000..407a8212e --- /dev/null +++ b/tools/index.php @@ -0,0 +1,66 @@ + + * @brief 각종 tools 목록을 보여주기 인증 시도 + **/ + + /** + * @brief 기본적인 상수 선언, 웹에서 직접 호출되는 것을 막기 위해 체크하는 상수 선언 + **/ + define('__ZBXE__', true); + + /** + * @brief 필요한 설정 파일들을 include + **/ + require_once('../config/config.inc.php'); + + // id/ password/ tool 구함 + $id = $_POST['id']; + $pw = $_POST['pw']; + $tool = $_POST['tool']; + + // 저장되어 있는 비밀번호와 비교 + $oContext = &Context::getInstance(); + $oContext->init(); + $db_info = $oContext->getDBInfo(); + + // 툴 목록을 구하고 언어파일 로그, 변수 설정 + Context::loadLang(_XE_PATH_.'modules/install/lang'); + $list = FileHandler::readDir(_XE_PATH_.'tools/'); + $filters = array('index.php','style.css','form.html'); + for($i=0;$idb_userid || $pw !== $db_info->db_password) { + + if(!$tool) $msg = Context::getLang('msg_not_founded'); + elseif($id !== $db_info->db_userid) $msg = sprintf($lang->filter->equalto, Context::getLang('user_id')); + else $msg = sprintf($lang->filter->equalto, Context::getLang('password')); + + // tool 실행 + } else if($id === $db_info->db_userid && $pw === $db_info->db_password) { + + define('__XE_TOOL_AUTH__', true); + include(_XE_PATH_.'tools/'.$tool.'/'.$tool.'.php'); + } + + Context::set('msg', $msg); + + $oTemplate = &TemplateHandler::getInstance(); + print $oTemplate->compile('./tools','form'); +?> diff --git a/tools/style.css b/tools/style.css new file mode 100644 index 000000000..73d85fbee --- /dev/null +++ b/tools/style.css @@ -0,0 +1,27 @@ +body { margin:10px !important; } +h1 { font-size:1.5em; font-family:tahoma; margin:0; padding:0; } +hr { border:none; border-top:1px solid #555555; border-bottom:1px solid #888888; margin:0; margin-bottom:10px; padding:0; } +blockquote.message { border:2px solid red; color:red; margin:0 0 10px 0; padding:10px; font-size:9pt; font-weight:bold; clear:both; } +blockquote.output { border:2px solid blue; margin:10px 0 0 0; padding:10px; font-size:9pt; font-weight:bold; clear:both; } + +form { margin:0; padding:0; clear:both; overflow:hidden; } + +div.tools { float:left; margin-right:20px; padding-right:20px; border-right:1px dotted #AAAAAA; } +div.tools code label { display:block; white-space:nowrap; margin-bottom:5px; font-size:9pt; } +div.tools code label input { display:inline; } + +div.auth { float:left; } +div.auth code label { font-size:9pt; } +div.auth code { display:block; clear:both; margin-bottom:10px;} +div.auth code label { float:left; display:block; width:100px; } +div.auth code input { display:block; width:150px; border:1px solid #AAAAAA; } +div.auth input.submit { width:252px; border:1px solid #AAAAAA;} + +div.back { font-size:9pt; text-align:right; margin-bottom:10px; } +div.back a { text-decoration:none; color:#888888; } + +table { width:100%; border:none; font-size:9pt; background-color:#CCCCCC; } +table thead th { background-color:#EFEFEF; padding:3px 0 3px 0; } +table tbody th { background-color:#F3F3F3; vertical-align:top; color:#888888; padding:3px 0 3px 0; } +table tbody td { background-color:#FFFFFF; font-family:verdana; padding:3px; } + diff --git a/tools/validator/lang/ko.lang.php b/tools/validator/lang/ko.lang.php new file mode 100644 index 000000000..68d57576f --- /dev/null +++ b/tools/validator/lang/ko.lang.php @@ -0,0 +1,14 @@ +validator = '설치파일 검증'; + + $lang->msg_cannot_get_source_files = '원본 파일을 다운로드 하지 못했습니다'; + $lang->msg_cannot_get_target_files = '설치된 대상 파일의 목록을 구하지 못했습니다'; + + $lang->files_count = '파일 수'; + $lang->source_files = '원본 파일'; + $lang->target_files = '대상 파일'; + + $lang->leaveout_files = '누락된 파일'; + $lang->modified_files = '수정된 파일'; + $lang->additional_files = '추가된 파일'; +?> diff --git a/tools/validator/style.css b/tools/validator/style.css new file mode 100644 index 000000000..1c6cfc00a --- /dev/null +++ b/tools/validator/style.css @@ -0,0 +1,5 @@ +table { width:100%; border:none; font-size:9pt; background-color:#CCCCCC; } +table thead th { background-color:#EFEFEF; padding:3px 0 3px 0; } +table tbody th { background-color:#F3F3F3; vertical-align:top; color:#888888; padding:3px 0 3px 0; } +table tbody td { font-weight:normal; background-color:#FFFFFF; font-family:verdana; padding:3px; } + diff --git a/tools/validator/validator.html b/tools/validator/validator.html new file mode 100644 index 000000000..2bc97beb2 --- /dev/null +++ b/tools/validator/validator.html @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     {$lang->source_files}{$lang->target_files}
    {$lang->current_version}{__ZBXE_VERSION__}
    {$lang->released_version}{$released_version}
    {$lang->current_path}{_XE_PATH_}
    {$lang->files_count}{$source_cnt}{$target_cnt}
    {$lang->leaveout_files} ({count($leaveouts)}) + + {$val}
    + +
    {$lang->modified_files} ({count($modified)})  + + {$val}
    + +
    {$lang->additional_files} ({count($added)})  + + {$val}
    + +
    diff --git a/tools/validator/validator.php b/tools/validator/validator.php new file mode 100644 index 000000000..64463b10c --- /dev/null +++ b/tools/validator/validator.php @@ -0,0 +1,100 @@ + + * @brief 현재 설치된 버전에 해당하는 XE 파일 비교 + **/ + + // 인증이 되지 않은 접근이면 종료 + if(!defined('__XE_TOOL_AUTH__') || !__XE_TOOL_AUTH__) exit(); + + // 언어파일을 로드 + Context::loadLang(_XE_PATH_.'modules/admin/lang'); + + // 현재 버전을 구함 + $ver = __ZBXE_VERSION__; + + // 현재 버전에 맞는 배포 정보를 구함 + $header = "GET /validatorLogs/{$ver}.log HTTP/1.0\r\nHost: news.zeroboard.com\r\n\r\n"; + $is_started = false; + $f = fsockopen('news.zeroboard.com', 80); + fputs($f, $header); + while($buff = fgets($f, 1024)) { + if(!trim($buff)) $is_started = true; + if($is_started && trim($buff)) { + $buff = trim($buff); + $pos = strpos($buff,','); + $size = (int)substr($buff,0,$pos); + $filename = substr($buff,$pos+1); + if($filename && $size) $source[$filename] = $size; + } + } + fclose($f); + + if(!count($source)) $output = Context::getLang('msg_cannot_get_source_files'); + else { + // 현재 설치된 디렉토리와 비교 + $avoid_path = array(_XE_PATH_.'files'); + getFiles(_XE_PATH_, _XE_PATH_, $avoid_path, $target); + if(!count($target)) $output = Context::getLang('msg_cannot_get_target_files'); + else { + // 파일 수를 지정 + Context::set('source_cnt', count($source)); + Context::set('target_cnt', count($target)); + + // 최신 버전 정보 구함 + $oAdminView = &getAdminView('admin'); + $oAdminView->dispAdminIndex(); + + // 누락된 파일 구함 + $leaveouts = array(); + foreach($source as $key => $val) { + if(!isset($target[$key])) $leaveouts[] = $key; + } + Context::set('leaveouts', $leaveouts); + + // 수정된 파일 구함 + $modified = array(); + foreach($source as $key => $val) { + if(isset($target[$key]) && $val!=$target[$key]) $modified[] = $key; + } + Context::set('modified', $modified); + + // 추가된 파일 구함 + $added = array(); + foreach($target as $key => $val) { + if(!isset($source[$key])) $added[] = $key; + } + Context::set('added', $added); + + // CSS 지정 + Context::addCssFile('./validator/style.css', false); + + // 결과물을 구함 + $oTemplate = &TemplateHandler::getInstance(); + $output = $oTemplate->compile('./tools/validator/','validator'); + } + } + Context::set('output', $output); + + // recursive하게 돌면서 파일 정보 수집 + function getFiles($path, $base_path, $avoid_path, &$buff) { + if(substr($path,-1)=='/') $path = substr($path,0,-1); + if(substr($base_path,-1)=='/') $base_path = substr($base_path,0,-1); + if(in_array($path, $avoid_path)) return; + + $oDir = dir($path); + while($item = $oDir->read()) { + if(substr($item,0,1)=='.' && $item != '.htaccess' ) continue; + $new_path = $path.'/'.$item; + if(!is_dir($new_path)) { + $filesize = filesize($new_path); + $filename = substr($new_path, strlen($base_path)+1); + $buff[$filename] = $filesize; + } else { + getFiles($new_path, $base_path, $avoid_path, $buff); + } + } + $oDir->close(); + } +?> diff --git a/widgets/logged_members/conf/info.xml b/widgets/logged_members/conf/info.xml index 472731158..0da3d42de 100644 --- a/widgets/logged_members/conf/info.xml +++ b/widgets/logged_members/conf/info.xml @@ -1,12 +1,17 @@ 로그인 사용자 출력 위젯 + Display On-Line Members 在线会员列表 zero + zero zero 로그인 사용자를 출력하는 위젯입니다. + + + This widget displays on-line members. 显示在线会员列表的控件。 @@ -15,24 +20,30 @@ 목록수 + List Count 目录数 text 출력될 목록의 수를 정하실 수 있습니다. (기본 5개) + You may set number of list to be displayed. (default 5) 可设置要显示的目录数。 (默认为5个) 대상 지정 + Target 模块对象 select 대상을 전체로 하면 홈페이지 접속자 모두가 출력되고 Mid 구분으로 하게 되면 접속한 Mid에 같이 접속한 회원만 출력이 됩니다. + All on-line members will be displayed when you set target as 'All', or members in same Mid will be displayed when target is 'By Mid'. 选择“全部”将显示全部在线会员,“区分Mid”为显示各模块中的在线会员。 전체 + All 全部 total Mid 구분 + By Mid 区分Mid mid diff --git a/widgets/login_info/skins/default/css/default.css b/widgets/login_info/skins/default/css/default.css index 597c82d9d..3879a64e6 100644 --- a/widgets/login_info/skins/default/css/default.css +++ b/widgets/login_info/skins/default/css/default.css @@ -48,13 +48,10 @@ .default_login .hr_dot_01 { background:url(../images/default/hr_dot_01.gif) repeat-x; height:2px; overflow:hidden; clear:both; margin:6px; } -.default_login .item { background:url(../images/default/bul_01.gif) no-repeat 5px 5px; height:16px; padding:3px 0px 0px 20px; margin-left:5px; margin-top:2px; } +.default_login .item { float:left; background:url(../images/default/bul_01.gif) no-repeat 5px 5px; height:16px; padding:3px 0px 0px 20px; margin-left:5px; margin-top:2px; } .default_login .item a { color:#666666; text-decoration:none; } .default_login .item { font-size:11px; letter-spacing:-1px; margin-right:10px; padding:3px 0px 0px 20px; white-space:nowrap; } -.default_login .profile { width:70px; float:left; background:url(../images/default/icon_profile.gif) no-repeat left; } -.default_login .message { width:70px; float:left; background:url(../images/default/icon_note.gif) no-repeat left; } -.default_login .friend { float:left; background:url(../images/default/icon_friend.gif) no-repeat left; } -.default_login .administrative { float:left; background:url(../images/default/icon_key.gif) no-repeat left; margin-right:0px; } +.default_login .administrative { background:url(../images/default/icon_key.gif) no-repeat left; margin-right:0px; } .default_login .administrative a { color:#D80D0F; } .default_login .lastlogin { clear:both; padding:5px; white-space:wrap; font-size:8pt; } diff --git a/widgets/login_info/skins/default/images/default/icon_friend.gif b/widgets/login_info/skins/default/images/default/icon_friend.gif deleted file mode 100644 index fc3d86376..000000000 Binary files a/widgets/login_info/skins/default/images/default/icon_friend.gif and /dev/null differ diff --git a/widgets/login_info/skins/default/images/default/icon_friend_list.gif b/widgets/login_info/skins/default/images/default/icon_friend_list.gif deleted file mode 100644 index adabcfc6e..000000000 Binary files a/widgets/login_info/skins/default/images/default/icon_friend_list.gif and /dev/null differ diff --git a/widgets/login_info/skins/default/images/default/icon_message_box.gif b/widgets/login_info/skins/default/images/default/icon_message_box.gif deleted file mode 100644 index 5a05d50e2..000000000 Binary files a/widgets/login_info/skins/default/images/default/icon_message_box.gif and /dev/null differ diff --git a/widgets/login_info/skins/default/images/default/icon_note.gif b/widgets/login_info/skins/default/images/default/icon_note.gif deleted file mode 100644 index 5367d40af..000000000 Binary files a/widgets/login_info/skins/default/images/default/icon_note.gif and /dev/null differ diff --git a/widgets/login_info/skins/default/images/default/icon_profile.gif b/widgets/login_info/skins/default/images/default/icon_profile.gif deleted file mode 100644 index a750c0ad0..000000000 Binary files a/widgets/login_info/skins/default/images/default/icon_profile.gif and /dev/null differ diff --git a/widgets/login_info/skins/default/login_info.html b/widgets/login_info/skins/default/login_info.html index d37cd7c85..fd117a472 100644 --- a/widgets/login_info/skins/default/login_info.html +++ b/widgets/login_info/skins/default/login_info.html @@ -16,11 +16,11 @@
    - - - + + + -
    {$lang->last_login} : {zDate($logged_info->last_login, "Y-m-d H:i")}
    +
    {$lang->last_login}
    {zDate($logged_info->last_login, "Y-m-d H:i")}
    diff --git a/widgets/rss_reader/rss_reader.class.php b/widgets/rss_reader/rss_reader.class.php index a460e3d72..81e4aa0ca 100644 --- a/widgets/rss_reader/rss_reader.class.php +++ b/widgets/rss_reader/rss_reader.class.php @@ -68,9 +68,10 @@ foreach ($items as $key => $value) { if($key >= $PAGE_LIMIT) break; - unset($item); + foreach($value as $key2 => $value2) { + if(is_array($value2)) $value2 = array_shift($value2); $item->{$key2} = $value2->body; } diff --git a/widgets/tag_list/skins/blog_tag_list/tags.html b/widgets/tag_list/skins/blog_tag_list/tags.html index 8b1e1a6c6..d1a443df1 100644 --- a/widgets/tag_list/skins/blog_tag_list/tags.html +++ b/widgets/tag_list/skins/blog_tag_list/tags.html @@ -43,9 +43,9 @@ class="{$tag_class}" > - {htmlspecialchars($val->tag)} + {htmlspecialchars($val->tag)} - {htmlspecialchars($val->tag)} + {htmlspecialchars($val->tag)}