merge sandbox to trunk for 1.4.4

git-svn-id: http://xe-core.googlecode.com/svn/trunk@7723 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
ngleader 2010-09-28 07:24:47 +00:00
parent 200d63636c
commit b8299c8a65
683 changed files with 70982 additions and 69716 deletions

View file

@ -3,7 +3,7 @@
/**
* @file autolink.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 자동 링크 애드온
**/
if($called_position == 'after_module_proc' && Context::getResponseMethod()!="XMLRPC") {

View file

@ -1,7 +1,7 @@
/**
* @file autolink.js
* @brief javascript code for autolink addon
* @author taggon (gonom9@gmail.com)
* @author NHN (developers@xpressengine.com)
*/
(function($){
var protocol_re = '(https?|ftp|news|telnet|irc|mms)://';

View file

@ -39,15 +39,15 @@
<version>0.1</version>
<date>2008-04-22</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file blogapicounter.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief blogAPI 애드온
*
* ms live writer, 파이어폭스의 performancing, zoundry 등의 외부 툴을 이용하여 글을 입력할 있게 합니다.

View file

@ -3,7 +3,7 @@
/**
* @file ./addons/blogapi/blogapi.func.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief blogapi구현을 위한 함수 모음집
**/

View file

@ -66,15 +66,15 @@
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file captcha.addon.php
* @author zero (zero@nzeo.com), sol(ngleader@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief 특정 action을 실행할때 captcha를 띄우도록
* 영어 알파벳을 입력, 음성기능 추가
**/

View file

@ -1,6 +1,4 @@
/**
* procFilter 함수를 가로채서 captcha 이미지 폼을 출력
**/
/* procFilter 함수를 가로채서 captcha 이미지 및 폼을 출력 */
var oldExecXml = null;
var calledArgs = null;
(function($){
@ -85,7 +83,7 @@ var calledArgs = null;
$.each(captchaTargetAct || {}, function(key,val){ if (val == act){ doCheck = true; return false; } });
if (doCheck) { // captcha 를 사용하는 경우
if (doCheck) { /* captcha 를 사용하는 경우 */
calledArgs = {'module':module,'act':act,'params':params,'callback_func':callback_func,'response_tags':response_tags,'callback_func_arg':callback_func_arg,'fo_obj':fo_obj};
var params = new Array();
params['captcha_action'] = 'setCaptchaSession';
@ -107,6 +105,7 @@ var calledArgs = null;
$("#captcha_layer button.cancel").html(ret_obj['cmd_cancel']);
$("#captcha_image").attr("src", current_url.setQuery('captcha_action','captchaImage').setQuery('rnd', (new Date).getTime()));
$div.find('input[type=text]').val('').focus();
$('html, body').css('height','100%');
};
captchaXE.compare = function(e) {

File diff suppressed because one or more lines are too long

View file

@ -32,19 +32,19 @@
This addon applies only to not-logged-in users.
</description>
<description xml:lang="zh-TW">
此元件可防止機器人程式的垃圾留言,非註冊用戶在討論板/問題追蹤發表主題或評論時,必須要先選對畫面中所顯示的圖案才能發表。
可防止機器人程式的垃圾留言,非用戶要發表主題或回覆時,必須要輸入正確圖片中所顯示的文字才能發表。
</description>
<version>1.0</version>
<date>2010-08-19</date>
<author email_address="developers@xpressengine.com" link="http://www.xpressengine.com">
<name xml:lang="ko">XE</name>
<name xml:lang="zh-CN">XE</name>
<name xml:lang="jp">XE</name>
<name xml:lang="zh-TW">XE</name>
<name xml:lang="en">XE</name>
<name xml:lang="ru">XE</name>
<name xml:lang="vi">XE</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="vi">NHN</name>
</author>
<extra_vars>

View file

@ -1,6 +1,6 @@
<?php
$lang->about_captcha = "위 영어 알파벳을 순서대로 입력해 주세요. 대소문자는 구분하지 않습니다.";
$lang->captcha_reload = '이미지 새로고침';
$lang->captcha_play = '음성으로 듣기';
$lang->captcha_denied = '잘못 입력하셨습니다';
$lang->about_captcha = "請依序輸入圖片中的文字,不分大小寫。";
$lang->captcha_reload = '更換';
$lang->captcha_play = '播放';
$lang->captcha_denied = '輸入錯誤';
?>

View file

@ -48,15 +48,15 @@
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file counter.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 카운터 애드온
**/
// called_position가 before_display_content 일 경우 실행

View file

@ -44,15 +44,15 @@
<version>0.1</version>
<date>2008-05-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -1,7 +1,7 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/

View file

@ -1,7 +1,7 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : zero (zero@nzeo.com) ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░

View file

@ -3,7 +3,7 @@
/**
* @file member_communication.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 사용자의 커뮤니케이션 기능을 활성화
*
* - 새로운 쪽지가 왔을 경우 팝업으로 띄움

View file

@ -39,15 +39,15 @@
<version>0.2</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file image_name.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 사용자의 이미지이름/ 이미지마크등을 출력
*
* <div class="member_회원번호">....</div> 정의가 부분을 찾아 회원번호를 구해서

View file

@ -1,7 +1,7 @@
<?php
/**
* HDML Library ver 0.1
* @author zero <zero@zeroboard.com>
* @author NHN (developers@xpressengine.com)
**/
class wap extends mobileXE {

View file

@ -1,7 +1,7 @@
<?php
/**
* mhtml Library ver 0.1
* @author zero <zero@zeroboard.com> / lang_select : misol
* @author NHN (developers@xpressengine.com) / lang_select : misol
**/
class wap extends mobileXE {

View file

@ -1,7 +1,7 @@
<?php
/**
* Mobile XE Library Class ver 0.1
* @author zero <zero@zeroboard.com> / lang_select : misol
* @author NHN (developers@xpressengine.com) / lang_select : misol
* @brief WAP 태그 출력을 위한 XE 라이브러리
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* WML Library ver 0.1
* @author zero <zero@zeroboard.com> / lang_select : misol
* @author NHN (developers@xpressengine.com) / lang_select : misol
**/
class wap extends mobileXE {

View file

@ -38,14 +38,14 @@
<version>0.1.1</version>
<date>2009-05-23</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
<history version="0.1.1" date="2009-05-23">

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Basic Contents only)
**/
// lang select by misol

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳:ミニミ
* @author NHN (developers@xpressengine.com) 翻訳:ミニミ
* @brief 日本語言語パッケージ
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/

View file

@ -1,7 +1,7 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : zero (zero@nzeo.com) ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : Đào Đức Duy (ducduy.dao.vn@vietxe.net) ░░
░░ * @Website: http://vietxe.net ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/zh-CN.lang.php
* @author zero (zero@nzeo.com) 翻译guny
* @author NHN (developers@xpressengine.com) 翻译guny
* @brief 手机XE插件简体中文语言包
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file addons/mobile/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com) 翻譯royallin
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief XE行動上網正體中文語言
**/
// lang select by misol

View file

@ -3,7 +3,7 @@
/**
* @file mobile.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 모바일XE 애드온
*
* 헤더정보를 가로채서 모바일에서의 접속일 경우 WAP 태그로 컨텐츠를 출력함

View file

@ -48,16 +48,16 @@
<version>0.1</version>
<date>2007-02-28</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
<extra_vars>

View file

@ -3,7 +3,7 @@
/**
* @file openid_delegation_id.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief OpenID Delegation ID 애드온
*
* 오픈아이디를 자신의 홈페이지나 블로그 주소로 이용할 있도록 해줍니다.

View file

@ -48,15 +48,15 @@
<version>0.1</version>
<date>2007-07-26</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file point.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 포인트 레벨 아이콘 표시 애드온
*
* 포인트 시스템 사용중일때 사용자 이름 앞에 포인트 레벨 아이콘을 표시합니다.

View file

@ -39,15 +39,15 @@
<version>0.1</version>
<date>2008-04-22</date>
<author email_address="zero@zeroboard.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="vi">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="zh-TW">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="vi">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="zh-TW">NHN</name>
</author>
</addon>

View file

@ -3,7 +3,7 @@
/**
* @file resize_image.addon.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 본문내 이미지 조절 애드온
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class CacheApc
* @author sol (sol@nhn.com)
* @author NHN (developer@xpressengine.com)
* @brief APC Handler
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class CacheHandler
* @author sol (sol@nhn.com)
* @author NHN (developer@xpressengine.com)
* @brief Cache Handler
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class CacheMemcache
* @author sol (sol@nhn.com)
* @author NHN (developer@xpressengine.com)
* @brief Memcache Handler
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class Context
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Manages Context such as request arguments/environment variables
* @remarks It has dual method structure, easy-to use methods which can be called as Context::methodname(),
* and methods called with static object.
@ -354,7 +354,7 @@
**/
function checkSSO() {
// pass if it's not GET request or XE is not yet installed
if(isCrawler()) return true;
if($this->db_info->use_sso != 'Y' || isCrawler()) return true;
if(Context::getRequestMethod()!='GET' || !Context::isInstalled() || in_array(Context::get('act'),array('rss','atom'))) return true;
// pass if default URL is not set

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DB
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief base class of db* classes
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBCubrid
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Cubrid DBMS를 이용하기 위한 class
* @version 0.1p1
*
@ -879,6 +879,7 @@
$count_query = sprintf("select count(*) as \"count\" from %s %s %s", implode(',',$table_list),implode(' ',$left_join), $condition);
$total_count = $this->getCountCache($output->tables, $condition);
if($total_count === false) {
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -924,6 +924,7 @@
$count_query = sprintf("select count(*) as \"count\" from %s %s %s", implode(',',$table_list),implode(' ',$left_join), $condition);
$total_count = $this->getCountCache($output->tables, $condition);
if($total_count === false) {
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
if(!$this->transaction_started) @ibase_commit($this->fd);

View file

@ -2,7 +2,7 @@
/**
* @class DBMSSQL
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief MSSQL driver로 수정 sol (sol@ngleader.com)
* @version 0.1
**/
@ -746,6 +746,8 @@
if (count($output->groups)) $count_query = sprintf('select count(*) as count from (%s) xet', $count_query);
$param = $this->param;
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$this->param = $param;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBMysql
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief MySQL DBMS를 이용하기 위한 class
* @version 0.1
*
@ -223,7 +223,7 @@
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` add `%s` ", $this->prefix, $table_name, $column_name);
if($size) $query .= sprintf(" %s(%s) ", $type, $size);
else $query .= sprintf(" %s ", $type);
if($default) $query .= sprintf(" default '%s' ", $default);
@ -236,7 +236,7 @@
* @brief 특정 테이블에 특정 column 제거
**/
function dropColumn($table_name, $column_name) {
$query = sprintf("alter table %s%s drop %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` drop `%s` ", $this->prefix, $table_name, $column_name);
$this->_query($query);
}
@ -244,7 +244,7 @@
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("show fields from %s%s", $this->prefix, $table_name);
$query = sprintf("show fields from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -266,7 +266,7 @@
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("alter table %s%s add %s index %s (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$query = sprintf("alter table `%s%s` add %s index `%s` (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$this->_query($query);
}
@ -274,7 +274,7 @@
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$query = sprintf("alter table `%s%s` drop index `%s`", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
@ -284,7 +284,7 @@
**/
function isIndexExists($table_name, $index_name) {
//$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name);
$query = sprintf("show indexes from %s%s", $this->prefix, $table_name);
$query = sprintf("show indexes from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -609,6 +609,8 @@
$count_query = sprintf("select count(*) as count from %s %s %s", implode(', ', $table_list), implode(' ', $left_join), $count_condition);
if (count($output->groups))
$count_query = sprintf('select count(*) as count from (%s) xet', $count_query);
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBMysql_innodb
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief MySQL DBMS를 이용하기 위한 class
* @version 0.1
*
@ -233,7 +233,7 @@
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` add `%s` ", $this->prefix, $table_name, $column_name);
if($size) $query .= sprintf(" %s(%s) ", $type, $size);
else $query .= sprintf(" %s ", $type);
if($default) $query .= sprintf(" default '%s' ", $default);
@ -246,7 +246,7 @@
* @brief 특정 테이블에 특정 column 제거
**/
function dropColumn($table_name, $column_name) {
$query = sprintf("alter table %s%s drop %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` drop `%s` ", $this->prefix, $table_name, $column_name);
$this->_query($query);
}
@ -254,7 +254,7 @@
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("show fields from %s%s", $this->prefix, $table_name);
$query = sprintf("show fields from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -276,7 +276,7 @@
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("alter table %s%s add %s index %s (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$query = sprintf("alter table `%s%s` add %s index `%s` (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$this->_query($query);
}
@ -284,7 +284,7 @@
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$query = sprintf("alter table `%s%s` drop index `%s`", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
@ -293,7 +293,7 @@
**/
function isIndexExists($table_name, $index_name) {
//$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name);
$query = sprintf("show indexes from %s%s", $this->prefix, $table_name);
$query = sprintf("show indexes from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -620,6 +620,8 @@
$count_query = sprintf("select count(*) as count from %s %s %s", implode(', ', $table_list), implode(' ', $left_join), $count_condition);
if (count($output->groups))
$count_query = sprintf('select count(*) as count from (%s) xet', $count_query);
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBMysqli
* @author sol (ngleader@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief MySQL DBMS를 mysqli_* 이용하기 위한 class
* @version 0.1
*
@ -212,7 +212,7 @@
$type = $this->column_type[$type];
if(strtoupper($type)=='INTEGER') $size = '';
$query = sprintf("alter table %s%s add %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` add `%s` ", $this->prefix, $table_name, $column_name);
if($size) $query .= sprintf(" %s(%s) ", $type, $size);
else $query .= sprintf(" %s ", $type);
if($default) $query .= sprintf(" default '%s' ", $default);
@ -225,7 +225,7 @@
* @brief 특정 테이블에 특정 column 제거
**/
function dropColumn($table_name, $column_name) {
$query = sprintf("alter table %s%s drop %s ", $this->prefix, $table_name, $column_name);
$query = sprintf("alter table `%s%s` drop `%s` ", $this->prefix, $table_name, $column_name);
$this->_query($query);
}
@ -233,7 +233,7 @@
* @brief 특정 테이블의 column의 정보를 return
**/
function isColumnExists($table_name, $column_name) {
$query = sprintf("show fields from %s%s", $this->prefix, $table_name);
$query = sprintf("show fields from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -255,7 +255,7 @@
function addIndex($table_name, $index_name, $target_columns, $is_unique = false) {
if(!is_array($target_columns)) $target_columns = array($target_columns);
$query = sprintf("alter table %s%s add %s index %s (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$query = sprintf("alter table `%s%s` add %s index `%s` (%s);", $this->prefix, $table_name, $is_unique?'unique':'', $index_name, implode(',',$target_columns));
$this->_query($query);
}
@ -263,7 +263,7 @@
* @brief 특정 테이블의 특정 인덱스 삭제
**/
function dropIndex($table_name, $index_name, $is_unique = false) {
$query = sprintf("alter table %s%s drop index %s;", $this->prefix, $table_name, $index_name);
$query = sprintf("alter table `%s%s` drop index `%s`", $this->prefix, $table_name, $index_name);
$this->_query($query);
}
@ -273,7 +273,7 @@
**/
function isIndexExists($table_name, $index_name) {
//$query = sprintf("show indexes from %s%s where key_name = '%s' ", $this->prefix, $table_name, $index_name);
$query = sprintf("show indexes from %s%s", $this->prefix, $table_name);
$query = sprintf("show indexes from `%s%s`", $this->prefix, $table_name);
$result = $this->_query($query);
if($this->isError()) return;
$output = $this->_fetch($result);
@ -598,6 +598,8 @@
$count_query = sprintf("select count(*) as count from %s %s %s", implode(', ', $table_list), implode(' ', $left_join), $count_condition);
if (count($output->groups))
$count_query = sprintf('select count(*) as count from (%s) xet', $count_query);
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -809,6 +809,8 @@ class DBPostgresql extends DB
implode(' ', $left_join), $condition);
$total_count = $this->getCountCache($output->tables, $condition);
if ($total_count === false) {
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBSqlite2
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief SQLite ver 2.x 이용하기 위한 class
* @version 0.1
*
@ -641,6 +641,7 @@
$total_count = $this->getCountCache($output->tables, $condition);
if($total_count === false) {
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$result = $this->_query($count_query);
$count_output = $this->_fetch($result);
$total_count = (int)$count_output->count;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DBSqlite3_pdo
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief SQLite3를 PDO로 이용하여 class
* @version 0.1
**/
@ -681,6 +681,7 @@
$count_query = sprintf("select count(*) as count from %s %s %s", implode(',',$table_list),implode(' ',$left_join), $condition);
$total_count = $this->getCountCache($output->tables, $condition);
if($total_count === false) {
$count_query .= (__DEBUG_QUERY__&1 && $output->query_id)?sprintf(' '.$this->comment_syntax,$this->query_id . ' count(*)'):'';
$this->_prepare($count_query);
$count_output = $this->_execute();
$total_count = (int)$count_output->count;

View file

@ -1,7 +1,7 @@
<?php
/**
* @class DisplayHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief DisplayHandler is responsible for displaying the execution result. \n
* Depending on the request type, it can display either HTML or XML content.\n
* Xml content is simple xml presentation of variables in oModule while html content

View file

@ -1,7 +1,7 @@
<?php
/**
* @class EditorHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief edit component의 상위 클래스임
*
* 주로 하는 일은 컴포넌트 요청시 컴포넌트에서 필요로 하는 변수를 세팅해준다

View file

@ -1,7 +1,7 @@
<?php
/**
* @class ExtraVar
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 게시글, 회원등에서 사용하는 확장변수를 핸들링하는 클래스
*
**/
@ -47,7 +47,7 @@
/**
* @class ExtraItem
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 확장변수의 개별
**/
class ExtraItem {

View file

@ -1,7 +1,7 @@
<?php
/**
* @class FileHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief contains methods for accessing file system
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class FileObject
* @author haneul (haneul0318@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief file abstraction class
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class Handler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief an abstract class of (*)Handler
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class HttpRequest
* @author haneul (haneul@gmail.com)
* @author NHN (developers@xpressengine.com)
* @version 0.1
* @brief a class that is designed to be used for sending out HTTP request to an external server and retrieving response
* @remarks Connection: keep-alive is not supported

View file

@ -1,7 +1,7 @@
<?php
/**
* @brief 메일 발송
* @author zero (zero@zeroboard.com)
* @author NHN (developers@xpressengine.com)
**/
class Mail {

View file

@ -1,7 +1,7 @@
<?php
/**
* @class ModuleHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Handling modules
*
* @remarks This class is to excute actions of modules.
@ -71,6 +71,7 @@
**/
function init() {
$oModuleModel = &getModel('module');
$oModuleModel->loadModuleExtends();
$site_module_info = Context::get('site_module_info');
@ -173,11 +174,12 @@
function procModule() {
// If error occurred while preparation, return a message instance
if($this->error) {
$oMessageView = &getView('message');
$oMessageView->setError(-1);
$oMessageView->setMessage($this->error);
$oMessageView->dispMessage();
return $oMessageView;
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
$oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage();
return $oMessageObject;
}
$oModuleModel = &getModel('module');
@ -336,19 +338,20 @@
// If error occurred, handle it
if($this->error) {
// display content with message module instance
$oMessageView = &getView('message');
$oMessageView->setError(-1);
$oMessageView->setMessage($this->error);
$oMessageView->dispMessage();
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
$oMessageObject->setError(-1);
$oMessageObject->setMessage($this->error);
$oMessageObject->dispMessage();
// If module was called normally, change the templates of the module into ones of the message view module
if($oModule) {
$oModule->setTemplatePath($oMessageView->getTemplatePath());
$oModule->setTemplateFile($oMessageView->getTemplateFile());
$oModule->setTemplatePath($oMessageObject->getTemplatePath());
$oModule->setTemplateFile($oMessageObject->getTemplateFile());
// Otherwise, set message instance as the target module
} else {
$oModule = $oMessageView;
$oModule = $oMessageObject;
}
}
@ -423,13 +426,23 @@
* @remarks if there exists a module instance created before, returns it.
**/
function &getModuleInstance($module, $type = 'view', $kind = '') {
$class_path = ModuleHandler::getModulePath($module);
if(!is_dir(_XE_PATH_.$class_path)) return NULL;
$parent_module = $module;
if(__DEBUG__==3) $start_time = getMicroTime();
if($kind != 'admin') $kind = 'svc';
if(is_array($GLOBALS['__MODULE_EXTEND__'])) {
$extend_module = $GLOBALS['__MODULE_EXTEND__'][$module.'.'.($kind=='svc'?'':'admin').'.'.$type];
if($extend_module && file_exists(FileHandler::getRealPath(ModuleHandler::getModulePath($extend_module)))) {
$module = $extend_module;
}else{
unset($extend_module);
}
}
$class_path = ModuleHandler::getModulePath($module);
if(!is_dir(_XE_PATH_.$class_path)) return NULL;
// if there is no instance of the module in global variable, create a new one
if(!$GLOBALS['_loaded_module'][$module][$type][$kind]) {
// Get base class name and load the file contains it
@ -499,6 +512,9 @@
// Load language files for the class
Context::loadLang($class_path.'lang');
if($extend_module) {
Context::loadLang(ModuleHandler::getModulePath($parent_module).'lang');
}
// Set variables to the instance
$oModule->setModule($module);

View file

@ -1,7 +1,7 @@
<?php
/**
* @class ModuleObject
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief base class of ModuleHandler
**/
@ -146,13 +146,14 @@
$this->setMessage($msg_code);
// message 모듈의 에러 표시
$oMessageView = &getView('message');
$oMessageView->setError(-1);
$oMessageView->setMessage($msg_code);
$oMessageView->dispMessage();
$type = Mobile::isFromMobilePhone() ? 'mobile' : 'view';
$oMessageObject = &ModuleHandler::getModuleInstance('message',$type);
$oMessageObject->setError(-1);
$oMessageObject->setMessage($msg_code);
$oMessageObject->dispMessage();
$this->setTemplatePath($oMessageView->getTemplatePath());
$this->setTemplateFile($oMessageView->getTemplateFile());
$this->setTemplatePath($oMessageObject->getTemplatePath());
$this->setTemplateFile($oMessageObject->getTemplateFile());
return $this;
}

View file

@ -1,7 +1,7 @@
<?php
/**
* @class Object
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Base class design to pass the Object instance between XE Modules
*
* @remark Every modules inherits from Object class. It includes error, message, and other variables for communicatin purpose

View file

@ -1,7 +1,7 @@
<?php
/**
* @class Optimizer
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief class designed to be used to merge mutiple JS/CSS files into one file to shorten time taken for transmission.
*
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class PageHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief handles page navigation
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class TemplateHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief template compiler
* @version 0.1
* @remarks It compiles template file by using regular expression into php
@ -12,8 +12,15 @@
var $compiled_path = './files/cache/template_compiled/'; ///< path of compiled caches files
var $tpl_path = ''; ///< target directory
var $tpl_file = ''; ///< target filename
var $path = null; ///< target directory
var $filename = null; ///< target filename
var $file = null; ///< target file (fullpath)
var $xe_path = null; ///< XpressEngine base path
var $web_path = null; ///< tpl file web path
var $compiled_file = null; ///< tpl file web path
var $buff = null; ///< tpl file web path
var $handler_mtime = 0;
/**
* @brief returns TemplateHandler's singleton object
@ -31,6 +38,36 @@
return $GLOBALS['__TemplateHandler__'];
}
/**
* @brief set variables for template compile
**/
function init($tpl_path, $tpl_filename, $tpl_file) {
// verify arguments
if(substr($tpl_path,-1)!='/') $tpl_path .= '/';
if(substr($tpl_filename,-5)!='.html') $tpl_filename .= '.html';
// create tpl_file variable
if(!$tpl_file) $tpl_file = $tpl_path.$tpl_filename;
// set template file infos.
$info = pathinfo($tpl_file);
//$this->path = preg_replace('/^\.\//','',$info['dirname']).'/';
$this->path = $tpl_path;
$this->filename = $tpl_filename;
$this->file = $tpl_file;
$this->xe_path = preg_replace('/([^\.^\/]+)\.php$/i','',$_SERVER['SCRIPT_NAME']);
$this->web_path = $this->xe_path.str_replace(_XE_PATH_,'',$this->path);
// get compiled file name
$this->compiled_file = sprintf('%s%s.compiled.php',$this->compiled_path, md5($this->file));
// compare various file's modified time for check changed
$this->handler_mtime = filemtime(_XE_PATH_.'classes/template/TemplateHandler.class.php');
$this->buff = null;
}
/**
* @brief compiles specified tpl file and execution result in Context into resultant content
* @param[in] $tpl_path path of the directory containing target template file
@ -42,40 +79,37 @@
// store the starting time for debug information
if(__DEBUG__==3 ) $start = getMicroTime();
// verify arguments
if(substr($tpl_path,-1)!='/') $tpl_path .= '/';
if(substr($tpl_filename,-5)!='.html') $tpl_filename .= '.html';
// initiation
$this->init($tpl_path, $tpl_filename, $tpl_file);
// create tpl_file variable
if(!$tpl_file) $tpl_file = $tpl_path.$tpl_filename;
// if target file does not exist exit
if(!$this->file || !file_exists($this->file)) return sprintf('Err : "%s" template file is not exists.', $this->file);
// if target file does not exist return
if(!$tpl_file || !file_exists(FileHandler::getRealPath($tpl_file))) return;
$this->tpl_path = preg_replace('/^\.\//','',$tpl_path);
$this->tpl_file = $tpl_file;
$source_template_mtime = filemtime($this->file);
$latest_mtime = $source_template_mtime>$this->handler_mtime?$source_template_mtime:$this->handler_mtime;
// cache controll
$oCacheHandler = &CacheHandler::getInstance('template');
// get cached buff
if($oCacheHandler->isSupport()){
$cache_key = 'template:' . $tpl_file;
$buff = $oCacheHandler->get($cache_key, filemtime(FileHandler::getRealPath($tpl_file)));
if(!$buff){
$buff = $this->_compileTplFile($tpl_file);
$oCacheHandler->put($cache_key, $buff);
$cache_key = 'template:'.$this->file;
$this->buff = $oCacheHandler->get($cache_key, $latest_mtime);
} else {
if(file_exists($this->compiled_file) && filemtime($this->compiled_file)>$latest_mtime) {
$this->buff = FileHandler::readFile($this->compiled_file);
}
$output = $this->_fetch('', $buff, $tpl_path);
}else{
// get cached compiled file name
$compiled_tpl_file = FileHandler::getRealPath($this->_getCompiledFileName($tpl_file));
// compile
$buff = $this->_compile($tpl_file, $compiled_tpl_file);
// make a result, combining Context and compiled_tpl_file
$output = $this->_fetch($compiled_tpl_file, $buff, $tpl_path);
}
if(!$this->buff) {
$this->parse();
if($oCacheHandler->isSupport()) $oCacheHandler->put($cache_key, $this->buff);
else FileHandler::writeFile($this->compiled_file, $this->buff);
}
$output = $this->_fetch();
// store the ending time for debug information
if(__DEBUG__==3 ) $GLOBALS['__template_elapsed__'] += getMicroTime() - $start;
return $output;
@ -88,27 +122,16 @@
* @return Returns compiled content in case of success or NULL in case of failure
**/
function compileDirect($tpl_path, $tpl_filename) {
$this->tpl_path = $tpl_path;
$this->tpl_file = $tpl_file;
$this->init($tpl_path, $tpl_filename, null);
$tpl_file = $tpl_path.$tpl_filename;
if(!file_exists($tpl_file)) return;
// if target file does not exist exit
if(!$this->file || !file_exists($this->file)) {
Context::close();
printf('"%s" template file is not exists.', $this->file);
exit();
}
return $this->_compileTplFile($tpl_file);
}
/**
* @brief compile a template file only if a cached template file does not exist or it is outdated.
* @param[in] $tpl_path a file path of the target template file
* @param[in] $compiled_tpl_file a file path of cached template file
* @return Returns compiled template file if cached one does not exists or it is outdated, NULL otherwise
**/
function _compile($tpl_file, $compiled_tpl_file) {
if(!file_exists($compiled_tpl_file)) return $this->_compileTplFile($tpl_file, $compiled_tpl_file);
$source_ftime = filemtime(FileHandler::getRealPath($tpl_file));
$target_ftime = filemtime($compiled_tpl_file);
if($source_ftime>$target_ftime) return $this->_compileTplFile($tpl_file, $compiled_tpl_file);
return $this->parse();
}
/**
@ -118,24 +141,36 @@
* @param[in] $compiled_tpl_file if specified, write compiled result into the file
* @return compiled result in case of success or NULL in case of error
**/
function _compileTplFile($tpl_file, $compiled_tpl_file = '') {
function parse() {
if(!file_exists($this->file)) return;
// read tpl file
$buff = FileHandler::readFile($tpl_file);
if(!$buff) return;
$buff = FileHandler::readFile($this->file);
// replace value of src in img/input/script tag
$buff = preg_replace_callback('/<(img|input|script)([^>]*)src="([^"]*?)"/is', array($this, '_replacePath'), $buff);
// loop 템플릿 문법을 변환
$buff = $this->_replaceLoop($buff);
// |cond 템플릿 문법을 변환
$buff = preg_replace_callback("/<\/?(\w+)((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)\/?>/i", array($this, '_replacePipeCond'), $buff);
// cond 템플릿 문법을 변환
$buff = $this->_replaceCond($buff);
// include 태그의 변환
$buff = preg_replace_callback('!<include ([^>]+)>!is', array($this, '_replaceInclude'), $buff);
// unload/ load 태그의 변환
$buff = preg_replace_callback('!<(unload|load) ([^>]+)>!is', array($this, '_replaceLoad'), $buff);
// 가상 태그인 block의 변환
$buff = preg_replace('/<block([ ]*)>|<\/block>/is','',$buff);
// replace include <!--#include($filename)-->
$buff = preg_replace_callback('!<\!--#include\(([^\)]*?)\)-->!is', array($this, '_compileIncludeToCode'), $buff);
// if value of src in img/input tag starts with ./ or with filename replace the path
$buff = preg_replace_callback('/<(img|input)([^>]*)src=[\'"]{1}(.*?)[\'"]{1}/is', array($this, '_compileImgPath'), $buff);
// replace variables
$buff = preg_replace_callback('/\{[^@^ ]([^\{\}\n]+)\}/i', array($this, '_compileVarToContext'), $buff);
// replace parts not displaying results
$buff = preg_replace_callback('/\{\@([^\{\}]+)\}/i', array($this, '_compileVarToSilenceExecute'), $buff);
// replace <!--@, -->
$buff = preg_replace_callback('!<\!--@(.*?)-->!is', array($this, '_compileFuncToCode'), $buff);
@ -151,13 +186,410 @@
// javascript plugin import
$buff = preg_replace_callback('!<\!--%load_js_plugin\(\"([^\"]*?)\"\)-->!is', array($this, '_compileLoadJavascriptPlugin'), $buff);
// replace variables
$buff = preg_replace_callback('/\{[^@^ ]([^\{\}\n]+)\}/i', array($this, '_compileVarToContext'), $buff);
// PHP 변수형의 변환 ($문자등을 공유 context로 변환)
$buff = $this->_replaceVarInPHP($buff);
// replace parts not displaying results
$buff = preg_replace_callback('/\{\@([^\{\}]+)\}/i', array($this, '_compileVarToSilenceExecute'), $buff);
// prevent from calling directly before writing into file
$buff = sprintf('%s%s%s','<?php if(!defined("__ZBXE__")) exit();?>',"\n",$buff);
$this->buff = '<?php if(!defined("__ZBXE__")) exit();?>'.$buff;
}
// write compiled code into file only if $compiled_tpl_file is not NULL
if($compiled_tpl_file) FileHandler::writeFile($compiled_tpl_file, $buff);
/**
* @brief fetch using ob_* function
* @param[in] $compiled_tpl_file path of compiled template file
* @param[in] $buff if buff is not null, eval it instead of including compiled template file
* @param[in] $tpl_path set context's tpl path
* @return result string
**/
function _fetch() {
if(!$this->buff) return;
return $buff;
$__Context = &$GLOBALS['__Context__'];
$__Context->tpl_path = $this->path;
if($_SESSION['is_logged']) $__Context->logged_info = $_SESSION['logged_info'];
ob_start();
$eval_str = "?>".$this->buff;
eval($eval_str);
return ob_get_clean();
}
/**
* @brief change image path
* @pre $matches is an array containg three elements
* @param[in] $matches match
* @return changed result
**/
private function _replacePath($matches)
{
$path = trim($matches[3]);
if(substr($path,0,1)=='/' || substr($path,0,1)=='{' || strpos($path,'://')!==false) return $matches[0];
if(substr($path,0,2)=='./') $path = substr($path,2);
$target = $this->web_path.$path;
while(strpos($target,'/../')!==false)
{
$target = preg_replace('/\/([^\/]+)\/\.\.\//','/',$target);
}
return '<'.$matches[1].$matches[2].'src="'.$target.'"';
}
/**
* @brief loop 문법의 변환
**/
function _replaceLoop($buff)
{
while(false !== $pos = strpos($buff, ' loop="'))
{
$pre = substr($buff,0,$pos);
$next = substr($buff,$pos);
$pre_pos = strrpos($pre, '<');
preg_match('/^ loop="([^"]+)"/i',$next,$m);
$tag = substr($next,0,strlen($m[0]));
$next = substr($next,strlen($m[0]));
$next_pos = strpos($next, '<');
$tag = substr($pre, $pre_pos). $tag. substr($next, 0, $next_pos);
$pre = substr($pre, 0, $pre_pos);
$next = substr($next, $next_pos);
$tag_name = trim(substr($tag,1,strpos($tag,' ')));
$tag_head = $tag_tail = '';
if(!preg_match('/ loop="([^"]+)"/is',$tag)) {
print "<strong>Invalid XpressEngine Template Syntax</strong><br/>";
print "File : ".$this->file."<br/>";
print "Code : ".htmlspecialchars($tag);
exit();
}
preg_match_all('/ loop="([^"]+)"/is',$tag,$m);
$tag = preg_replace('/ loop="([^"]+)"/is','', $tag);
for($i=0,$c=count($m[0]);$i<$c;$i++)
{
$loop = $m[1][$i];
if(false!== $fpos = strpos($loop,'=>'))
{
$target = trim(substr($loop,0,$fpos));
$vars = trim(substr($loop,$fpos+2));
if(false===strpos($vars,','))
{
$tag_head .= '<?php if(count('.$target.')) { foreach('.$target.' as '.$vars.') { ?>';
$tag_tail .= '<?php } } ?>';
}
else
{
$t = explode(',',$vars);
$tag_head .= '<?php if(count('.$target.')) { foreach('.$target.' as '.trim($t[0]).' => '.trim($t[1]).') { ?>';
$tag_tail .= '<?php } } ?>';
}
}
elseif(false!==strpos($loop,';'))
{
$tag_head .= '<?php for('.$loop.'){ ?>';
$tag_tail .= '<?php } ?>';
}
else
{
$t = explode('=',$loop);
if(count($t)==2)
{
$tag_head .= '<?php while('.trim($t[0]).' = '.trim($t[1]).') { ?>';
$tag_tail .= '<?php } ?>';
}
}
}
if(substr(trim($tag),-2)!='/>')
{
while(false !== $close_pos = strpos($next, '</'.$tag_name))
{
$tmp_buff = substr($next, 0, $close_pos+strlen('</'.$tag_name.'>'));
$tag .= $tmp_buff;
$next = substr($next, strlen($tmp_buff));
if(false === strpos($tmp_buff, '<'.$tag_name)) break;
}
}
$buff = $pre.$tag_head.$tag.$tag_tail.$next;
}
return $buff;
}
/**
* @brief pipe cond, |cond= 변환
**/
function _replacePipeCond($matches)
{
while(strpos($matches[0],'|cond="')!==false) {
if(preg_match('/ (\w+)=\"([^\"]+)\"\|cond=\"([^\"]+)\"/is', $matches[0], $m))
$matches[0] = str_replace($m[0], sprintf('<?php if(%s) {?> %s="%s"<?}?>', $m[3], $m[1], $m[2]), $matches[0]);
}
return $matches[0];
}
/**
* @brief cond 문법의 변환
**/
function _replaceCond($buff)
{
while(false !== ($pos = strpos($buff, ' cond="')))
{
$pre = substr($buff,0,$pos);
$next = substr($buff,$pos);
$pre_pos = strrpos($pre, '<');
$next_pos = strpos($next, '<');
$tag = substr($pre, $pre_pos). substr($next, 0, $next_pos);
$pre = substr($pre, 0, $pre_pos);
$next = substr($next, $next_pos);
$tag_name = trim(substr($tag,1,strpos($tag,' ')));
$tag_head = $tag_tail = '';
if(preg_match_all('/ cond=\"([^\"]+)"/is',$tag,$m))
{
for($i=0,$c=count($m[0]);$i<$c;$i++)
{
$tag_head .= '<?php if('.$m[1][$i].') { ?>';
$tag_tail .= '<?php } ?>';
}
}
if(!preg_match('/ cond="([^"]+)"/is',$tag)) {
print "<strong>Invalid XpressEngine Template Syntax</strong><br/>";
print "File : ".$this->file."<br/>";
print "Code : ".htmlspecialchars($tag);
exit();
}
$tag = preg_replace('/ cond="([^"]+)"/is','', $tag);
if(substr(trim($tag),-2)=='/>')
{
$buff = $pre.$tag_head.$tag.$tag_tail.$next;
}
else
{
while(false !== $close_pos = strpos($next, '</'.$tag_name))
{
$tmp_buff = substr($next, 0, $close_pos+strlen('</'.$tag_name.'>'));
$tag .= $tmp_buff;
$next = substr($next, strlen($tmp_buff));
if(false === strpos($tmp_buff, '<'.$tag_name)) break;
}
$buff = $pre.$tag_head.$tag.$tag_tail.$next;
}
}
return $buff;
}
/**
* @brief 다른 template파일을 include하는 include tag의 변환
**/
function _replaceInclude($matches)
{
if(!preg_match('/target=\"([^\"]+)\"/is',$matches[0], $m)) throw new Exception('"target" attribute missing in "'.htmlspecialchars($matches[0]).'"');
$target = $m[1];
if(substr($target,0,1)=='/')
{
$target = substr($target,1);
$pos = strrpos('/',$target);
$filename = substr($target,$pos+1);
$path = substr($target,0,$pos);
} else {
if(substr($target,0,2)=='./') $target = substr($target,2);
$pos = strrpos('/',$target);
$filename = substr($target,$pos);
$path = $this->path.substr($target,0,$pos);
}
return sprintf(
'<?php%s'.
'$oTemplate = &TemplateHandler::getInstance();%s'.
'print $oTemplate->compile(\'%s\',\'%s\');%s'.
'?>%s',
"\n",
"\n",
$path, $filename, "\n",
"\n"
);
}
/**
* @brief load 태그의 변환
**/
function _replaceLoad($matches) {
$output = $matches[0];
if(!preg_match_all('/ ([^=]+)=\"([^\"]+)\"/is',$matches[0], $m)) return $matches[0];
$type = $matches[1];
for($i=0,$c=count($m[1]);$i<$c;$i++)
{
if(!trim($m[1][$i])) continue;
$attrs[trim($m[1][$i])] = trim($m[2][$i]);
}
if(!$attrs['target']) return $matches[0];
$web_path = $this->web_path;
$base_path = $this->path;
$target = $attrs['target'];
if(substr($target,0,2)=='./') $target = substr($target,2);
if(!substr($target,0,1)!='/') $target = $web_path.$target;
// if target ends with lang, load language pack
if(substr($target, -4)=='lang') {
if(substr($target,0,2)=='./') $target = substr($target, 2);
$lang_dir = $base_path.$target;
if(is_dir($lang_dir)) $output = sprintf('<?php Context::loadLang("%s"); ?>', $lang_dir);
// otherwise try to load xml, css, js file
} else {
if(substr($target,0,1)!='/') $source_filename = $base_path.$target;
else $source_filename = $target;
// get filename and path
$tmp_arr = explode("/",$source_filename);
$filename = array_pop($tmp_arr);
$base_path = implode("/",$tmp_arr)."/";
// get the ext
$tmp_arr = explode(".",$filename);
$ext = strtolower(array_pop($tmp_arr));
// according to ext., import the file
switch($ext) {
// xml js filter
case 'xml' :
// create an instance of XmlJSFilter class, then create js and handle Context::addJsFile
$output = sprintf(
'<?php%s'.
'require_once("./classes/xml/XmlJsFilter.class.php");%s'.
'$oXmlFilter = new XmlJSFilter("%s","%s");%s'.
'$oXmlFilter->compile();%s'.
'?>%s',
"\n",
"\n",
$base_path,
$filename,
"\n",
"\n",
"\n"
);
break;
// css file
case 'css' :
if(!preg_match('/^(http|\/)/i',$source_filename)) $source_filename = $base_path.$filename;
if($type == 'unload') $output = '<?php Context::unloadCSSFile("'.$source_filename.'"); ?>';
else $output = '<?php Context::addCSSFile("'.$source_filename.'"); ?>';
break;
// js file
case 'js' :
if(!preg_match('/^(http|\/)/i',$source_filename)) $source_filename = $base_path.$filename;
if($type == 'unload') $output = '<?php Context::unloadJsFile("'.$source_filename.'"); ?>';
else $output = '<?php Context::addJsFile("'.$source_filename.'"); ?>';
break;
}
}
return $output;
}
/**
* @brief $문자 PHP 변수 변환
**/
private function _replaceVarInPHP($buff) {
$head = $tail = '';
while(false !== $pos = strpos($buff, '<?php'))
{
$head .= substr($buff,0,$pos);
$buff = substr($buff,$pos);
$pos = strpos($buff,'?>');
$body = substr($buff,0,$pos+2);
$head .= preg_replace_callback('/(.?)\$([a-z0-9\_\-\[\]\'\"]+)/is',array($this, '_replaceVarString'), $body);
$buff = substr($buff,$pos+2);
}
return $head.$buff;
}
/**
* @brief php5의 class::$변수명의 경우 context를 사용하지 않아야 하기에 함수로 대체
**/
private function _replaceVarString($matches)
{
if($matches[1]==':') return $matches[0];
if(substr($matches[2],0,1)=='_') return $matches[0];
return $matches[1].'$__Context->'.$matches[2];
}
/**
* @brief replace <!--#include $path--> with php code
* @param[in] $matches match
* @return replaced result
**/
function _compileIncludeToCode($matches) {
// if target string to include contains variables handle them
$arg = str_replace(array('"','\''), '', $matches[1]);
if(!$arg) return;
$tmp_arr = explode("/", $arg);
for($i=0;$i<count($tmp_arr);$i++) {
$item1 = trim($tmp_arr[$i]);
if($item1=='.'||substr($item1,-5)=='.html') continue;
$tmp2_arr = explode(".",$item1);
for($j=0;$j<count($tmp2_arr);$j++) {
$item = trim($tmp2_arr[$j]);
if(substr($item,0,1)=='$') $item = Context::get(substr($item,1));
$tmp2_arr[$j] = $item;
}
$tmp_arr[$i] = implode(".",$tmp2_arr);
}
$arg = implode("/",$tmp_arr);
if(substr($arg,0,2)=='./') $arg = substr($arg,2);
// step1: check files in the template directory
$source_filename = sprintf("%s/%s", dirname($this->file), $arg);
// step2: check path from root
if(!file_exists($source_filename)) $source_filename = './'.$arg;
if(!file_exists($source_filename)) return;
// split into path and filename
$tmp_arr = explode('/', $source_filename);
$filename = array_pop($tmp_arr);
$path = implode('/', $tmp_arr).'/';
// try to include
$output = sprintf(
'<?php%s'.
'$oTemplate = &TemplateHandler::getInstance();%s'.
'print $oTemplate->compile(\'%s\',\'%s\');%s'.
'?>%s',
"\n",
"\n",
$path, $filename, "\n",
"\n"
);
return $output;
}
/**
@ -194,32 +626,6 @@
return '<?php @print('.preg_replace('/\$([a-zA-Z0-9\_\-\>]+)/i','$__Context->\\1', $str).');?>';
}
/**
* @brief change image path
* @pre $matches is an array containg three elements
* @param[in] $matches match
* @return changed result
**/
function _compileImgPath($matches) {
static $real_path = null;
$str1 = $matches[0];
$str2 = $path = trim($matches[3]);
if(substr($path,0,1)=='/' || substr($path,0,1)=='{' || strpos($path,'://')!==false) return $str1;
if(substr($path,0,2)=='./') $path = substr($path,2);
if(is_null($real_path)) {
$url = parse_url(Context::getRequestUri());
$real_path = $url['path'];
}
$target = $real_path.$this->tpl_path.$path;
while(strpos($target,'/../')!==false) {
$target = preg_replace('/\/([^\/]+)\/\.\.\//','/',$target);
}
return str_replace($str2, $target, $str1);
}
/**
* @brief replace @... function in { } into print func(..)
* @param[in] $matches match
@ -290,62 +696,6 @@
return sprintf('<?php %s %s ?>', $prefix, $output);
}
/**
* @brief replace <!--#include $path--> with php code
* @param[in] $matches match
* @return replaced result
**/
function _compileIncludeToCode($matches) {
// if target string to include contains variables handle them
$arg = str_replace(array('"','\''), '', $matches[1]);
if(!$arg) return;
$tmp_arr = explode("/", $arg);
for($i=0;$i<count($tmp_arr);$i++) {
$item1 = trim($tmp_arr[$i]);
if($item1=='.'||substr($item1,-5)=='.html') continue;
$tmp2_arr = explode(".",$item1);
for($j=0;$j<count($tmp2_arr);$j++) {
$item = trim($tmp2_arr[$j]);
if(substr($item,0,1)=='$') $item = Context::get(substr($item,1));
$tmp2_arr[$j] = $item;
}
$tmp_arr[$i] = implode(".",$tmp2_arr);
}
$arg = implode("/",$tmp_arr);
if(substr($arg,0,2)=='./') $arg = substr($arg,2);
// step1: check files in the template directory
$source_filename = sprintf("%s/%s", dirname($this->tpl_file), $arg);
// step2: check path from root
if(!file_exists($source_filename)) $source_filename = './'.$arg;
if(!file_exists($source_filename)) return;
// split into path and filename
$tmp_arr = explode('/', $source_filename);
$filename = array_pop($tmp_arr);
$path = implode('/', $tmp_arr).'/';
// try to include
$output = sprintf(
'<?php%s'.
'$oTemplate = &TemplateHandler::getInstance();%s'.
'print $oTemplate->compile(\'%s\',\'%s\');%s'.
'?>%s',
"\n",
"\n",
$path, $filename, "\n",
"\n"
);
return $output;
}
/**
* @brief replace xe specific code, "<!--%filename-->" with appropriate php code
@ -354,7 +704,7 @@
**/
function _compileImportCode($matches) {
// find xml file
$base_path = $this->tpl_path;
$base_path = $this->path;
$given_file = trim($matches[1]);
if(!$given_file) return;
if(isset($matches[3])) $optimized = strtolower(trim($matches[3]));
@ -368,7 +718,7 @@
// if given_file ends with lang, load language pack
if(substr($given_file, -4)=='lang') {
if(substr($given_file,0,2)=='./') $given_file = substr($given_file, 2);
$lang_dir = sprintf('%s%s', $this->tpl_path, $given_file);
$lang_dir = $base_path.$given_file;
if(is_dir($lang_dir)) $output = sprintf('<?php Context::loadLang("%s"); ?>', $lang_dir);
// otherwise try to load xml, css, js file
@ -438,7 +788,7 @@
* @remarks javascript plugin works as optimized = false
**/
function _compileLoadJavascriptPlugin($matches) {
$base_path = $this->tpl_path;
$base_path = $this->path;
$plugin = trim($matches[1]);
return sprintf('<?php Context::loadJavascriptPlugin("%s"); ?>', $plugin);
}
@ -450,7 +800,7 @@
**/
function _compileUnloadCode($matches) {
// find xml file
$base_path = $this->tpl_path;
$base_path = $this->path;
$given_file = trim($matches[1]);
if(!$given_file) return;
if(isset($matches[3])) $optimized = strtolower(trim($matches[3]));
@ -497,39 +847,5 @@
return $output;
}
/**
* @brief return compiled_tpl_file's name accroding to template file name
* @param[in] $tpl_file template file name
* @return compiled template file's name
**/
function _getCompiledFileName($tpl_file) {
return sprintf('%s%s.compiled.php',$this->compiled_path, md5($tpl_file));
}
/**
* @brief fetch using ob_* function
* @param[in] $compiled_tpl_file path of compiled template file
* @param[in] $buff if buff is not null, eval it instead of including compiled template file
* @param[in] $tpl_path set context's tpl path
* @return result string
**/
function _fetch($compiled_tpl_file, $buff = NULL, $tpl_path = '') {
$__Context = &$GLOBALS['__Context__'];
$__Context->tpl_path = $tpl_path;
if($_SESSION['is_logged']) $__Context->logged_info = $_SESSION['logged_info'];
ob_start();
if($buff) {
$eval_str = "?>".$buff;
eval($eval_str);
} else {
include($compiled_tpl_file);
}
return ob_get_clean();
}
}
?>

View file

@ -1,7 +1,7 @@
<?php
/**
* @class WidgetHandler
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief Handler class for widget execution
* @remark it is empty for now, it would be removed in the future
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class GeneralXmlParser
* @author haneul (haneul0318@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief Generic XML parser for XE
* @version 0.1
*/

View file

@ -1,7 +1,7 @@
<?php
/**
* @class XmlJsFilter
* @author taggon (gonom9@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief filter class traslate xml content into javascript code
* @version 0.2
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class XmlParser
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief class parsing a given xmlrpc request and creating a data object
* @version 0.1
*

View file

@ -1,7 +1,7 @@
<?php
/**
* @class XmlQueryParser
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief case to parse XE xml query
* @version 0.1
*

View file

@ -1,4 +1,4 @@
/* NHN > UIT Center > Open UI Platform Team > Jeong Chan Myeong(dece24@nhncorp.com) */
/* NHN (developers@xpressengine.com) */
/* Anchor Button */
a.button,

View file

@ -1,6 +1,6 @@
/**
* @file common.js
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 몇가지 유용한 & 기본적으로 자주 사용되는 자바스크립트 함수들 모음
**/

View file

@ -1,6 +1,6 @@
/**
* @file js_app.js
* @author taggon (gonom9@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief XE JavaScript Application Framework (JAF)
* @namespace xe
* @update 20100701

View file

@ -1,6 +1,6 @@
/**
* @brief XE Calendar
* @author gony (http://mygony.com)
* @author NHN (developers@xpressengine.com)
*
* 사용법
*

View file

@ -1,6 +1,6 @@
/**
* @brief XE Colorpicker
* @author mygony (http://mygony.com)
* @author NHN (developers@xpressengine.com)
**/
jQuery(function($){
var ready = false;

View file

@ -1,6 +1,6 @@
/**
* @brief Watch Input box
* @author taggon (http://mygony.com)
* @author NHN (developers@xpresseingine.com)
**/
(function($){

View file

@ -1,6 +1,6 @@
/**
* @file common.js
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 몇가지 유용한 & 기본적으로 자주 사용되는 자바스크립트 함수들 모음
**/

View file

@ -1,6 +1,6 @@
/**
* @file js_app.js
* @author taggon (gonom9@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief XE JavaScript Application Framework (JAF)
* @namespace xe
* @update 20100701

View file

@ -177,7 +177,7 @@ function xml2json(xml, tab, ignoreAttrib) {
(function($){
/**
* @brief exec_xml
* @author taggon <gonom9@gmail.com>
* @author NHN (developers@xpressengine.com)
**/
$.exec_xml = window.exec_xml = function(module, act, params, callback_func, response_tags, callback_func_arg, fo_obj) {
var xml_path = request_uri+"index.php"

View file

@ -1,6 +1,6 @@
/**
* @file common/js/xml_js_filter.js
* @author taggon (taggon@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief xml filter (validator) plugin
*
* A rule is a method validate one field.

View file

@ -11,61 +11,61 @@
<script type="text/javascript">// <![CDATA[
describe('SetQuery', {
'should satisfy basic uri condition' : function() {
target = "http://www.zeroboard.com/";
value_of(target.setQuery("q","r")).should_be("http://www.zeroboard.com/?q=r");
target = "http://xpressengine.com/";
value_of(target.setQuery("q","r")).should_be("http://xpressengine.com/?q=r");
},
'should work when ssl is on' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
ssl_actions = new Array("dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com/?act=dispLogin");
},
'should work when ssl is on and https_port is set (not 443)' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
https_port = 445;
ssl_actions = new Array("dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com:445/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com:445/?act=dispLogin");
},
'should work when ssl is on and https_port is set as 443' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
https_port = 443;
ssl_actions = new Array("dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com/?act=dispLogin");
},
'should replace https to http if act is not a member of ssl_actions': function() {
targets = "https://www.zeroboard.com/";
targets = "https://xpressengine.com/";
ssl_actions = new Array("dispLogin");
value_of(targets.setQuery("act","dispLogin2")).should_be("http://www.zeroboard.com/?act=dispLogin2");
value_of(targets.setQuery("act","dispLogin2")).should_be("http://xpressengine.com/?act=dispLogin2");
},
'should remove https port' : function() {
targetsp = "https://www.zeroboard.com:443/?q=r";
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://www.zeroboard.com/?q=r&act=dispLogin2");
targetsp = "https://xpressengine.com:443/?q=r";
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://xpressengine.com/?q=r&act=dispLogin2");
},
'should remove https port and add http port if http port is defined' : function() {
targetsp = "https://www.zeroboard.com:443/?q=r";
targetsp = "https://xpressengine.com:443/?q=r";
http_port = 8000;
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://www.zeroboard.com:8000/?q=r&act=dispLogin2");
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://xpressengine.com/:8000/?q=r&act=dispLogin2");
},
'should only remove https port and if http port is defined as 80' : function() {
targetsp = "https://www.zeroboard.com:443/?q=r";
targetsp = "https://xpressengine.com:443/?q=r";
http_port = 80;
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://www.zeroboard.com/?q=r&act=dispLogin2");
value_of(targetsp.setQuery("act","dispLogin2")).should_be("http://xpressengine.com/?q=r&act=dispLogin2");
},
'should work if enforce_ssl is set' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
enforce_ssl = true;
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com/?act=dispLogin");
},
'should work if enforce_ssl is set with 443 port' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
enforce_ssl = true;
https_port = 443;
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com/?act=dispLogin");
},
'should work if enforce_ssl is set with none-443 port' : function() {
target = "http://www.zeroboard.com/";
target = "http://xpressengine.com/";
enforce_ssl = true;
https_port = 445;
value_of(target.setQuery("act","dispLogin")).should_be("https://www.zeroboard.com:445/?act=dispLogin");
value_of(target.setQuery("act","dispLogin")).should_be("https://xpressengine.com:445/?act=dispLogin");
}
})
// ]]></script>

View file

@ -1,6 +1,6 @@
/**
* @file common/js/xml_js_filter.js
* @author taggon (taggon@gmail.com)
* @author NHN (developers@xpressengine.com)
* @brief xml filter (validator) plugin
*
* A rule is a method validate one field.

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/en.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief English Language Pack (Only basic words are included here)
**/
@ -309,9 +309,9 @@
$lang->filter->isnull = 'Please input a value for %s';
$lang->filter->outofrange = 'Please align the text length of %s';
$lang->filter->equalto = "The value of %s is invalid";
$lang->filter->invalid_email = "The format of %s is invalid. ex) zbxe@zeroboard.com";
$lang->filter->invalid_email = "The format of %s is invalid. ex) developers@xpressengine.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "The format of %s is invalid.\\nAll values should consist of alphabets, numbers or underscore(_) and the first letter should be alphabet";
$lang->filter->invalid_homepage = "The format of %s is invalid. ex) http://www.zeroboard.com";
$lang->filter->invalid_homepage = "The format of %s is invalid. ex) http://xpressengine.com/";
$lang->filter->invalid_korean = "The format of %s is invalid. Please input Korean only";
$lang->filter->invalid_korean_number = "The format of %s is invalid. Please input Korean or numbers";
$lang->filter->invalid_alpha = "The format of %s is invalid. Please input alphabets only";

View file

@ -1,7 +1,7 @@
<?php
/**
* @archivo common/lang/es.lang.php
* @autor zero (zero@nzeo.com)
* @autor NHN (developers@xpressengine.com)
* @sumario Paquete del Idioma Español (incluye sólo las palabras básicas )
**/
@ -316,9 +316,9 @@
$lang->filter->isnull = 'Introduzca valor en el %s';
$lang->filter->outofrange = 'Se ha excedido el máximo número de letras permitido en el %s';
$lang->filter->equalto = 'Valor inválido en el %s';
$lang->filter->invalid_email = 'Formato email inválido en el %s (ej. zbxe@zeroboard.com)';
$lang->filter->invalid_email = 'Formato email inválido en el %s (ej. developers@xpressengine.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "Formato inválido en el %s.\\nSólo pueden introducir los alfabetos o los dígitos númericos o el guión bajo(_). Además, el primer valor sólo puede ser una letra de alfabeto";
$lang->filter->invalid_homepage = 'Formato url inválido en el %s (ej: http://www.zeroboard.com)';
$lang->filter->invalid_homepage = 'Formato url inválido en el %s (ej: http://xpressengine.com/)';
$lang->filter->invalid_korean = 'Sólo puede introducir los caracteres coreanos en el %s';
$lang->filter->invalid_korean_number = 'Sólo puede introducir los caracteres coreanos o números en el %s';
$lang->filter->invalid_alpha = 'Sólo puede introducir los alfabetos en el %s';

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/fr.lang.php
* @author zero (zero@nzeo.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
* @author NHN (developers@xpressengine.com) Traduit par Pierre Duvent(PierreDuvent@gamil.com)
* @brief Paquet du langage en français
**/
@ -309,9 +309,9 @@
$lang->filter->isnull = 'Entrez une valeur pour %s';
$lang->filter->outofrange = 'Aligner la longueur du texte de %s';
$lang->filter->equalto = "La valeur de %s est invalide.";
$lang->filter->invalid_email = "Le format de %s est invalide. ex) zbxe@zeroboard.com";
$lang->filter->invalid_email = "Le format de %s est invalide. ex) developers@xpressengine.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "La format de %s n\'est pas convenable.\\nToutes les lettres devraient se composer des alphabets, des chiffres ou du soulignage(_) Et la première lettre doit être un de l\'alphabet.";
$lang->filter->invalid_homepage = "La format de %s n\'est pas convenable. ex) http://www.zeroboard.com";
$lang->filter->invalid_homepage = "La format de %s n\'est pas convenable. ex) http://xpressengine.com/";
$lang->filter->invalid_korean = "La format de %s n\'est pas convenable. Entrez seulement en coréen, S.V.P.";
$lang->filter->invalid_korean_number = "La format de %s n\'est pas convenable. Entrez seulement des lettres d\'alphabet coréen ou des chiffres, S.V.P.";
$lang->filter->invalid_alpha = "La format de %s n\'est pas convenable. Entrez seulement en alphabet, S.V.P.";

View file

@ -1,7 +1,7 @@
<?php
/**
* @Datei common/lang/ge.lang.php
* @Author zero (zero@nzeo.com)
* @Author NHN (developers@xpressengine.com)
* @Kurzen german Language Pack (nur einfache Worte sind hier eingeschlossen)
**/
@ -309,9 +309,9 @@
$lang->filter->isnull = 'Bitte geben Sie einen Wert für% s';
$lang->filter->outofrange = 'Bitte richten Sie die Textlänge von% s';
$lang->filter->equalto = "Der Wert von% s ist ungültig";
$lang->filter->invalid_email = "Das Format von% s ist ungültig. ex) zbxe@zeroboard.com";
$lang->filter->invalid_email = "Das Format von% s ist ungültig. ex) developers@xpressengine.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "Das Format von% s ist ungültig. \ \ Nall Werte sollte aus Alphabet, Zahlen oder Unterstrich (_) und den ersten Buchstaben sollten Alphabet" ;
$lang->filter->invalid_homepage = "Das Format von% s ist ungültig. ex) http://www.zeroboard.com";
$lang->filter->invalid_homepage = "Das Format von% s ist ungültig. ex) http://xpressengine.com/";
$lang->filter->invalid_korean = "Das Format von% s ist ungültig. Koreanisch Bitte geben Sie nur";
$lang->filter->invalid_korean_number = "Das Format von% s ist ungültig. Bitte geben Sie Ihre Koreanisch oder Zahlen";
$lang->filter->invalid_alpha = "Das Format von% s ist ungültig. Bitte geben Sie nur Alphabete";

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/jp.lang.php
* @author zero (zero@nzeo.com) 翻訳RisaPapa、ミニミ
* @author NHN (developers@xpressengine.com) 翻訳RisaPapa、ミニミ
* @brief 日本語言語パッケージ(基本的な実行関連の用語がまとめられている)
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/ko.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 한국어 언어팩 (기본적인 내용만 수록)
**/
@ -306,9 +306,9 @@
$lang->filter->isnull = '%s-ийг оруулна уу';
$lang->filter->outofrange = '%s-ийн үсгийн тоог тааруулна уу.';
$lang->filter->equalto = '%s-ыг буруу оруулсан байна.';
$lang->filter->invalid_email = '%s-ын хэлбэрийг буруу оруулсан байна. (Жнь: zbxe@zeroboard.com)';
$lang->filter->invalid_email = '%s-ын хэлбэрийг буруу оруулсан байна. (Жнь: developers@xpressengine.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s-ын хэлбэр буруу байна. .\\n Латин vсэг, тоо болон \'_\'-р оруулж болох бeгeeд эхлэл нь vсэг байх шаардлагатай. ";
$lang->filter->invalid_homepage = '%s-ын хэлбэр буруу байна.. (Жнь: http://www.zeroboard.com)';
$lang->filter->invalid_homepage = '%s-ын хэлбэр буруу байна.. (Жнь: http://xpressengine.com/)';
$lang->filter->invalid_korean = '%s-ын хэлбэр буруу байна. Солонгосоор оруулах ёстой';
$lang->filter->invalid_korean_number = '%s-ын хэлбэр буруу байна. Солонгос үсэг болон тоогоор оруулах хэрэгтэй.';
$lang->filter->invalid_alpha = '%s-ын хэлбэр буруу байна. Зөвхөн латин үсгээр оруулах ёстой';

View file

@ -1,7 +1,7 @@
<?php
/**
* @file ru.lang.php
* @author zero <zero@nzeo.com> | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @author NHN (developers@xpressengine.com) | translation by Maslennikov Evgeny aka X-[Vr]bL1s5 | e-mail: x-bliss[a]tut.by; ICQ: 225035467;
* @brief Russian basic language pack
**/
@ -310,9 +310,9 @@
$lang->filter->isnull = 'Please input a value for %s';
$lang->filter->outofrange = 'Please align the text length of %s';
$lang->filter->equalto = "The value of %s is invalid";
$lang->filter->invalid_email = "The format of %s is invalid. ex) zbxe@zeroboard.com";
$lang->filter->invalid_email = "The format of %s is invalid. ex) developers@xpressengine.com";
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "The format of %s is invalid.\\nAll values should consist of alphabets, numbers or underscore(_) and the first letter should be alphabet";
$lang->filter->invalid_homepage = "The format of %s is invalid. ex) http://www.zeroboard.com";
$lang->filter->invalid_homepage = "The format of %s is invalid. ex) http://xpressengine.com/";
$lang->filter->invalid_korean = "The format of %s is invalid. Please input Korean only";
$lang->filter->invalid_korean_number = "The format of %s is invalid. Please input Korean or numbers";
$lang->filter->invalid_alpha = "The format of %s is invalid. Please input alphabets only";

View file

@ -1,7 +1,7 @@
<?php
/* ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
░░ * @File : common/lang/vi.lang.php ░░
░░ * @Author : zero (zero@nzeo.com) ░░
░░ * @Author : NHN (developers@xpressengine.com) ░░
░░ * @Trans : DucDuy Dao (webmaster@xpressengine.vn) ░░
░░ * @Website: http://xpressengine.vn ░░
░░ * @Brief : Vietnamese Language Pack (Only basic words are included here) ░░

View file

@ -1,7 +1,7 @@
<?php
/**
* @file common/lang/zh-CN.lang.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 简体中文语言包
**/
@ -310,9 +310,9 @@
$lang->filter->isnull = '请输入%s';
$lang->filter->outofrange = '请确认%s字数';
$lang->filter->equalto = '%s值有误。';
$lang->filter->invalid_email = '%s格式有误。zbxe@zeroboard.com)';
$lang->filter->invalid_email = '%s格式有误。developers@xpressengine.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s只能用英文数字和 _首个字符必须是英文字母。";
$lang->filter->invalid_homepage = '%s格式有误。 http://www.zeroboard.com)';
$lang->filter->invalid_homepage = '%s格式有误。 http://xpressengine.com/)';
$lang->filter->invalid_korean = '%s只能输入中文';
$lang->filter->invalid_korean_number = '%s只能输入中文或数字';
$lang->filter->invalid_alpha = '%s只能输入英文字母';

View file

@ -1,8 +1,8 @@
<?php
/**
* @file common/lang/zh-TW.lang.php
* @author zero (zero@nzeo.com) 翻譯royallin
* @brief 正體中文語言(包含基本內容)
* @author NHN (developers@xpressengine.com) 翻譯royallin
* @brief 正體中文語言
**/
// 基本用語
@ -65,8 +65,8 @@
$lang->cmd_publish = "發表";
$lang->cmd_layout_setup = '版面設置';
$lang->cmd_layout_edit = '版面編輯';
$lang->cmd_search_by_ipaddress = '以 IP 位址搜尋';
$lang->cmd_add_ip_to_spamfilter = '封鎖此 IP 位址';
$lang->cmd_search_by_ipaddress = '以 IP 搜尋';
$lang->cmd_add_ip_to_spamfilter = '封鎖此 IP';
$lang->enable = '可用';
$lang->disable = '禁用';
@ -310,9 +310,9 @@
$lang->filter->isnull = '請輸入%s';
$lang->filter->outofrange = '請確認%s字數';
$lang->filter->equalto = '%s值有誤。';
$lang->filter->invalid_email = '%s格式有誤。(例:zbxe@zeroboard.com)';
$lang->filter->invalid_email = '%s格式有誤。(例:developers@xpressengine.com)';
$lang->filter->invalid_user_id = $lang->filter->invalid_userid = "%s只允許使用英文數字和底線開頭必須是英文。";
$lang->filter->invalid_homepage = '%s格式有誤。(例: http://www.zeroboard.com)';
$lang->filter->invalid_homepage = '%s格式有誤。(例: http://xpressengine.com/)';
$lang->filter->invalid_korean = '%s只能輸入中文';
$lang->filter->invalid_korean_number = '%s只能輸入中文或數字';
$lang->filter->invalid_alpha = '%s只能輸入英文字母';

View file

@ -1,6 +1,6 @@
<?php
/**
* @author sol (sol@nhn.com)
* @author NHN (developer@xpressengine.com)
* @brief css js Optimizer 처리 gateway
*
**/
@ -115,7 +115,7 @@ function printFileList($list){
for($i=0,$c=count($list);$i<$c;$i++){
$file = getRealPath($list[$i]);
if(file_exists($file)){
$output .= '/* file:' . $file . " */\n";
$output .= '/* file: ' . str_replace(_XE_PATH_,'./',$file) . " */\n";
$output .= file_get_contents($file);
$output .= "\n";
}

View file

@ -1,7 +1,7 @@
<?php
/**
* @file config/config.inc.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 기본적으로 사용하는 class파일의 include 환경 설정을
**/
@ -13,7 +13,7 @@
* @brief XE의 전체 버전 표기
* 파일의 수정이 없더라도 공식 릴리즈시에 수정되어 함께 배포되어야
**/
define('__ZBXE_VERSION__', '1.4.3.1');
define('__ZBXE_VERSION__', '1.4.4');
/**
* @brief zbXE가 설치된 장소의 base path를 구함

View file

@ -1,7 +1,7 @@
<?php
/**
* @file config/func.inc.php
* @author zero (zero@nzeo.com)
* @author NHN (developers@xpressengine.com)
* @brief 편의 목적으로 만든 함수라이브러리 파일
**/
@ -637,8 +637,9 @@
function removeSrcHack($matches) {
$tag = strtolower(trim($matches[1]));
$buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0]));
$buff = str_replace(array('&','&amp;'),array('&amp;','&amp;'),$buff);
//$buff = trim(preg_replace('/(\/>|>)/','/>',$matches[0]));
$buff = $matches[0];
$buff = str_replace(array('&amp;','&'),array('&','&amp;'),$buff);
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', 'fixQuotation', $buff);
$oXmlParser = new XmlParser();

View file

@ -1,7 +1,7 @@
<?php
/**
* @file index.php
* @author zero <zero@zeroboard.com>
* @author NHN (developers@xpressengine.com)
* @brief 시작 페이지
*
* Request Argument에서 mid, act로 module 객체를 찾아서 생성하고 \n

View file

@ -11,72 +11,54 @@
<title xml:lang="vi">Giao diện chính thức của XE</title>
<description xml:lang="ko">
XE 공식 사이트 레이아웃입니다.
디자인 : 이소라
퍼블리싱 : 정찬명
레이아웃 제작 : zero
제작 : NHN
</description>
<description xml:lang="jp">
XEの公式サイトのレイアウトです。
デザイン:イ ソラ
パブリシング:ジョン チャンミョン
レイアウト作成Zero
제작 : NHN
</description>
<description xml:lang="en">
This layout is the XE Official website layout.
Designer : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Layout producer : zero
제작 : NHN
</description>
<description xml:lang="ge">
Dieses Layout ist das XE Offizielle Website-Layout.
Designer: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Layout Hersteller: Zero
제작 : NHN
</description>
<description xml:lang="ru">
Этот формат является XE Официальный сайт компоновку.
Дизайнер: So-Ra Lee
HTML / CSS: Chan-Myung Jeong
Макет производителя: ноль
제작 : NHN
</description>
<description xml:lang="es">
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
제작 : NHN
</description>
<description xml:lang="zh-CN">
XE官方网站布局。
设计 : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
布局 : zero
제작 : NHN
</description>
<description xml:lang="zh-TW">
XE官方網站版面。
設計 : So-Ra Lee
HTML/CSS : Chan-Myung Jeong
版面設計 : zero
제작 : NHN
</description>
<description xml:lang="vi">
Đây là giao diện chính thức của XE.
Thiết kế bởi: So-Ra Lee
HTML/CSS : Chan-Myung Jeong
Quản lý : zero
제작 : NHN
</description>
<version>0.1</version>
<date>2007-08-01</date>
<link>http://blog.nzeo.com</link>
<link>http://xpressengine.com/</link>
<author email_address="zero@xpressengine.com" link="http://blog.nzeo.com">
<name xml:lang="ko">zero</name>
<name xml:lang="jp">zero</name>
<name xml:lang="en">zero</name>
<name xml:lang="ge">zero</name>
<name xml:lang="ru">zero</name>
<name xml:lang="es">zero</name>
<name xml:lang="zh-CN">zero</name>
<name xml:lang="zh-TW">zero</name>
<name xml:lang="vi">zero</name>
<author email_address="developers@xpressengine.com" link="http://xpressengine.com/">
<name xml:lang="ko">NHN</name>
<name xml:lang="jp">NHN</name>
<name xml:lang="en">NHN</name>
<name xml:lang="ge">NHN</name>
<name xml:lang="ru">NHN</name>
<name xml:lang="es">NHN</name>
<name xml:lang="zh-CN">NHN</name>
<name xml:lang="zh-TW">NHN</name>
<name xml:lang="vi">NHN</name>
</author>
<extra_vars>

View file

@ -1,8 +1,5 @@
@charset "utf-8";
/*
NHN UIT Lab. WebStandardization Team (http://html.nhndesign.com/)
Jeong, Chan Myeong 070601~070630
*/
/* NHN (developers@xpressengine.com) */
/* Black Skin - Start */
#selectLang { margin:0; padding:0; }

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