From bbdd1874de7796a9e09ed036212f8fc0046d8f69 Mon Sep 17 00:00:00 2001 From: SMaker Date: Sun, 9 Feb 2014 23:45:34 +0900 Subject: [PATCH 01/36] =?UTF-8?q?Router=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .htaccess | 36 +---- classes/context/Context.class.php | 12 +- classes/router/Router.class.php | 240 ++++++++++++++++++++++++++++++ config/config.inc.php | 1 + 4 files changed, 255 insertions(+), 34 deletions(-) create mode 100644 classes/router/Router.class.php diff --git a/.htaccess b/.htaccess index 89ecf951f..43536f5e9 100644 --- a/.htaccess +++ b/.htaccess @@ -15,37 +15,7 @@ RewriteRule ^(.+)/files/(member_extra_info|attach|cache|faceOff)/(.*) ./files/$2 RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.+)/(files|modules|widgets|widgetstyles|layouts|m.layouts|addons)/(.*) ./$2/$3 [L] -# rss , blogAPI -RewriteRule ^(rss|atom)$ ./index.php?module=rss&act=$1 [L] -RewriteRule ^([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?mid=$1&act=$2 [L] -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)$ ./index.php?vid=$1&mid=$2&act=$3 [L] - -# trackback -RewriteRule ^([0-9]+)/(.+)/trackback$ ./index.php?document_srl=$1&key=$2&act=trackback [L] -RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?mid=$1&document_srl=$2&key=$3&act=trackback [L] -RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&document_srl=$2&key=$3&act=trackback [L] -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback$ ./index.php?vid=$1&mid=$2&document_srl=$3&key=$4&act=trackback [L] - -# document permanent link -RewriteRule ^([0-9]+)$ ./index.php?document_srl=$1 [L,QSA] - -# mid link -RewriteCond %{SCRIPT_FILENAME} !-d -RewriteRule ^([a-zA-Z0-9_]+)/?$ ./index.php?mid=$1 [L,QSA] -# mid + document link -RewriteRule ^([a-zA-Z0-9_]+)/([0-9]+)$ ./index.php?mid=$1&document_srl=$2 [L,QSA] - -# vid + mid link -RewriteCond %{SCRIPT_FILENAME} !-d -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/?$ ./index.php?vid=$1&mid=$2 [L,QSA] -# vid + mid + document link -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)$ ./index.php?vid=$1&mid=$2&document_srl=$3 [L,QSA] - -# mid + entry title -RewriteRule ^([a-zA-Z0-9_]+)/entry/(.+)$ ./index.php?mid=$1&entry=$2 [L,QSA] -# vid + mid + entry title -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)$ ./index.php?vid=$1&mid=$2&entry=$3 [L,QSA] - -#shop / vid / [category|product] / identifier +# router RewriteCond %{SCRIPT_FILENAME} !-f -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)$ ./index.php?act=route&vid=$1&type=$2&identifier=$3 [L,QSA] +RewriteCond %{SCRIPT_FILENAME} !-d +RewriteRule ^(.*)$ ./index.php [L] diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 4b69ac9ff..866f55364 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -358,6 +358,13 @@ class Context // check if using rewrite module $this->allow_rewrite = ($this->db_info->use_rewrite == 'Y' ? TRUE : FALSE); + // If using rewrite module, initializes router + if($this->allow_rewrite) + { + $oRouter = Router::getInstance(); + $oRouter->proc(); + } + // set locations for javascript use if($_SERVER['REQUEST_METHOD'] == 'GET') { @@ -1535,7 +1542,10 @@ class Context 'act.document_srl.key.mid.vid' => ($act == 'trackback') ? "$vid/$mid/$srl/$key/$act" : '' ); - $query = $target_map[$target]; + $oRouter = Router::getInstance(); + $oRouter->setMap($target_map); + + $query = $oRouter->makePrettyUrl($target); } if(!$query) diff --git a/classes/router/Router.class.php b/classes/router/Router.class.php new file mode 100644 index 000000000..d71a23854 --- /dev/null +++ b/classes/router/Router.class.php @@ -0,0 +1,240 @@ + 0) + { + self::$segments = explode('/', $path); + + // Remove the meanless segment + unset(self::$segments[0]); + } + + $self = Router::getInstance(); + + // Set default routes + $self->routes = array( + // rss , blogAPI + '(rss|atom)' => array('module' => 'rss', 'act' => '$1'), + '([a-zA-Z0-9_]+)/(rss|atom|api)' => array('mid' => '$1', 'act' => '$2'), + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)' => array('vid' => '$1', 'mid' => '$2', 'act' => '$3'), + // trackback + '([0-9]+)/(.+)/trackback' => array('document_srl' => '$1', 'key' => '$2', 'act' => 'trackback'), + '([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('mid' => '$1', 'document_srl' => '$2', 'key' => '$3', 'act' => 'trackback'), + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3' , 'key' => '$4', 'act' => 'trackback'), + // mid + '([a-zA-Z0-9_]+)/?' => array('mid' => '$1'), + // mid + document_srl + '([a-zA-Z0-9_]+)/([0-9]+)' => array('mid' => '$1', 'document_srl' => '$2'), + // vid + mid + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/' => array('vid' => '$1', 'mid' => '$2'), + // vid + mid + document_srl + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)?' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3'), + // document_srl + '([0-9]+)' => array('document_srl' => '$1'), + // mid + entry title + '([a-zA-Z0-9_]+)/entry/(.+)' => array('mid' => '$1', 'entry' => '$2'), + // vid + mid + entry title + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)' => array('vid' => '$1', 'mid' => '$2', 'entry' => '$3'), + // shop / vid / [category|product] / identifier + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)' => array('act' => 'route', 'vid' => '$1', 'type' => '$2', 'identifier'=> '$3'), + ); + + if(isset($self->routes[$path])) + { + foreach($self->routes[$path] as $key => $val) + { + $val = preg_replace('#^\$([0-9]+)$#e', '\$matches[$1]', $val); + + Context::set($key, $val, TRUE); + } + + return; + } + + // Apply routes + foreach($self->routes as $regex => $query) + { + if(preg_match('#^' . $regex . '$#', $path, $matches)) + { + foreach($query as $key => $val) + { + $val = preg_replace('#^\$([0-9]+)$#e', '\$matches[$1]', $val); + + Context::set($key, $val, TRUE); + } + } + } + } + + /** + * @brief Add a rewrite map(s) + * @param array $map + * @return void + */ + public function setMap($map) + { + $self = Router::getInstance(); + $self->rewrite_map = array_merge($self->rewrite_map, $map); + } + + /** + * @brief Add a route + * @param string $target + * @param array $query + * @return void + */ + public function add($target, $query) + { + $self = Router::getInstance(); + $self->routes[$target] = $query; + } + + /** + * @brief Add multiple routes + * @param array $routes + * @return void + */ + public function adds($routes) + { + $self = Router::getInstance(); + $self->routes = array_merge($self->routes, $routes); + } + + /** + * @brief Get segment from request uri + * @param int $index + * @return string + */ + public function getSegment($index) + { + $self = Router::getInstance(); + return $self->segments[$index]; + } + + + /** + * @brief Get segment from request uri + * @param int $index + * @return string + */ + public function getSegments() + { + $self = Router::getInstance(); + return $self->segments; + } + + /** + * @brief Get route info + * @param string $regex + * @return array + */ + public function getRoute($regex) + { + $self = Router::getInstance(); + return $self->routes[$regex]; + } + + /** + * @brief Get routes list + * @return array + */ + public function getRoutes() + { + $self = Router::getInstance(); + return $self->routes; + } + + /** + * @brief Get routes list + * @param string $regex + * @return boolean + */ + public function isExistsRoute($regex) + { + $self = Router::getInstance(); + return isset($self->routes[$regex]); + } + + /** + * @brief Makes shortten url + * @param string $regex + * @return string + */ + public function makePrettyUrl($regex) + { + $self = Router::getInstance(); + return $self->rewrite_map[$regex]; + } +} \ No newline at end of file diff --git a/config/config.inc.php b/config/config.inc.php index 19e086d61..d9b4cccad 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -250,6 +250,7 @@ if(!defined('__XE_LOADED_CLASS__')) require(_XE_PATH_ . 'classes/xml/XmlJsFilter.class.php'); require(_XE_PATH_ . 'classes/xml/XmlLangParser.class.php'); require(_XE_PATH_ . 'classes/cache/CacheHandler.class.php'); + require(_XE_PATH_ . 'classes/router/Router.class.php'); require(_XE_PATH_ . 'classes/context/Context.class.php'); require(_XE_PATH_ . 'classes/db/DB.class.php'); require(_XE_PATH_ . 'classes/file/FileHandler.class.php'); From 9cbad3147b772f4bc3658235e26869f15f06204d Mon Sep 17 00:00:00 2001 From: SMaker Date: Thu, 13 Feb 2014 12:23:01 +0900 Subject: [PATCH 02/36] =?UTF-8?q?singleton=20=EA=B0=9D=EC=B2=B4=EB=A5=BC?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8A=94=20=EB=8C=80=EC=8B=A0?= =?UTF-8?q?=EC=97=90=20static=20method=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/context/Context.class.php | 8 +- classes/router/Router.class.php | 131 +++++++++++------------------- 2 files changed, 51 insertions(+), 88 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index 866f55364..2c4b8d233 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -361,8 +361,7 @@ class Context // If using rewrite module, initializes router if($this->allow_rewrite) { - $oRouter = Router::getInstance(); - $oRouter->proc(); + Router::proc(); } // set locations for javascript use @@ -1542,10 +1541,9 @@ class Context 'act.document_srl.key.mid.vid' => ($act == 'trackback') ? "$vid/$mid/$srl/$key/$act" : '' ); - $oRouter = Router::getInstance(); - $oRouter->setMap($target_map); + Router::setMap($target_map); - $query = $oRouter->makePrettyUrl($target); + $query = Router::makePrettyUrl($target); } if(!$query) diff --git a/classes/router/Router.class.php b/classes/router/Router.class.php index d71a23854..94de130b3 100644 --- a/classes/router/Router.class.php +++ b/classes/router/Router.class.php @@ -6,12 +6,6 @@ */ class Router { - /** - * Singleton - * @var object - */ - private static $theInstance = null; - /** * URI Segments * @var array @@ -22,35 +16,45 @@ class Router * Routes * @var array */ - private $routes = array(); + private static $routes = array( + // rss , blogAPI + '(rss|atom)' => array('module' => 'rss', 'act' => '$1'), + '([a-zA-Z0-9_]+)/(rss|atom|api)' => array('mid' => '$1', 'act' => '$2'), + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)' => array('vid' => '$1', 'mid' => '$2', 'act' => '$3'), + // trackback + '([0-9]+)/(.+)/trackback' => array('document_srl' => '$1', 'key' => '$2', 'act' => 'trackback'), + '([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('mid' => '$1', 'document_srl' => '$2', 'key' => '$3', 'act' => 'trackback'), + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3' , 'key' => '$4', 'act' => 'trackback'), + // mid + '([a-zA-Z0-9_]+)/?' => array('mid' => '$1'), + // mid + document_srl + '([a-zA-Z0-9_]+)/([0-9]+)' => array('mid' => '$1', 'document_srl' => '$2'), + // vid + mid + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/' => array('vid' => '$1', 'mid' => '$2'), + // vid + mid + document_srl + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)?' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3'), + // document_srl + '([0-9]+)' => array('document_srl' => '$1'), + // mid + entry title + '([a-zA-Z0-9_]+)/entry/(.+)' => array('mid' => '$1', 'entry' => '$2'), + // vid + mid + entry title + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)' => array('vid' => '$1', 'mid' => '$2', 'entry' => '$3'), + // shop / vid / [category|product] / identifier + '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)' => array('act' => 'route', 'vid' => '$1', 'type' => '$2', 'identifier'=> '$3') + ); /** * Rewrite map * @var array */ - private $rewrite_map = array(); - - /** - * @brief returns static context object (Singleton). It's to use Router without declaration of an object - * @return object Instance - */ - public static function getInstance() - { - if(!isset(self::$theInstance)) - { - self::$theInstance = new Router(); - } - - return self::$theInstance; - } - + private static $rewrite_map = array(); /** * @brief Applys routes. * @see This function should be called only once * @return void */ - public function proc() + public static function proc() { $uri = $_SERVER['REQUEST_URI']; @@ -81,39 +85,9 @@ class Router unset(self::$segments[0]); } - $self = Router::getInstance(); - - // Set default routes - $self->routes = array( - // rss , blogAPI - '(rss|atom)' => array('module' => 'rss', 'act' => '$1'), - '([a-zA-Z0-9_]+)/(rss|atom|api)' => array('mid' => '$1', 'act' => '$2'), - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(rss|atom|api)' => array('vid' => '$1', 'mid' => '$2', 'act' => '$3'), - // trackback - '([0-9]+)/(.+)/trackback' => array('document_srl' => '$1', 'key' => '$2', 'act' => 'trackback'), - '([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('mid' => '$1', 'document_srl' => '$2', 'key' => '$3', 'act' => 'trackback'), - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)/(.+)/trackback' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3' , 'key' => '$4', 'act' => 'trackback'), - // mid - '([a-zA-Z0-9_]+)/?' => array('mid' => '$1'), - // mid + document_srl - '([a-zA-Z0-9_]+)/([0-9]+)' => array('mid' => '$1', 'document_srl' => '$2'), - // vid + mid - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/' => array('vid' => '$1', 'mid' => '$2'), - // vid + mid + document_srl - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([0-9]+)?' => array('vid' => '$1', 'mid' => '$2', 'document_srl' => '$3'), - // document_srl - '([0-9]+)' => array('document_srl' => '$1'), - // mid + entry title - '([a-zA-Z0-9_]+)/entry/(.+)' => array('mid' => '$1', 'entry' => '$2'), - // vid + mid + entry title - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/entry/(.+)' => array('vid' => '$1', 'mid' => '$2', 'entry' => '$3'), - // shop / vid / [category|product] / identifier - '([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-zA-Z0-9_\.-]+)' => array('act' => 'route', 'vid' => '$1', 'type' => '$2', 'identifier'=> '$3'), - ); - - if(isset($self->routes[$path])) + if(isset(self::$routes[$path])) { - foreach($self->routes[$path] as $key => $val) + foreach(self::$routes[$path] as $key => $val) { $val = preg_replace('#^\$([0-9]+)$#e', '\$matches[$1]', $val); @@ -124,7 +98,7 @@ class Router } // Apply routes - foreach($self->routes as $regex => $query) + foreach(self::$routes as $regex => $query) { if(preg_match('#^' . $regex . '$#', $path, $matches)) { @@ -143,10 +117,9 @@ class Router * @param array $map * @return void */ - public function setMap($map) + public static function setMap($map) { - $self = Router::getInstance(); - $self->rewrite_map = array_merge($self->rewrite_map, $map); + self::$rewrite_map = array_merge(self::$rewrite_map, $map); } /** @@ -155,10 +128,9 @@ class Router * @param array $query * @return void */ - public function add($target, $query) + public static function add($target, $query) { - $self = Router::getInstance(); - $self->routes[$target] = $query; + self::$routes[$target] = $query; } /** @@ -168,8 +140,7 @@ class Router */ public function adds($routes) { - $self = Router::getInstance(); - $self->routes = array_merge($self->routes, $routes); + self::$routes = array_merge(self::$routes, $routes); } /** @@ -177,10 +148,9 @@ class Router * @param int $index * @return string */ - public function getSegment($index) + public static function getSegment($index) { - $self = Router::getInstance(); - return $self->segments[$index]; + return self::$segments[$index]; } @@ -189,10 +159,9 @@ class Router * @param int $index * @return string */ - public function getSegments() + public static function getSegments() { - $self = Router::getInstance(); - return $self->segments; + return self::$segments; } /** @@ -200,20 +169,18 @@ class Router * @param string $regex * @return array */ - public function getRoute($regex) + public static function getRoute($regex) { - $self = Router::getInstance(); - return $self->routes[$regex]; + return self::$routes[$regex]; } /** * @brief Get routes list * @return array */ - public function getRoutes() + public static function getRoutes() { - $self = Router::getInstance(); - return $self->routes; + return self::$routes; } /** @@ -221,10 +188,9 @@ class Router * @param string $regex * @return boolean */ - public function isExistsRoute($regex) + public static function isExistsRoute($regex) { - $self = Router::getInstance(); - return isset($self->routes[$regex]); + return isset(self::$routes[$regex]); } /** @@ -232,9 +198,8 @@ class Router * @param string $regex * @return string */ - public function makePrettyUrl($regex) + public static function makePrettyUrl($regex) { - $self = Router::getInstance(); - return $self->rewrite_map[$regex]; + return self::$rewrite_map[$regex]; } } \ No newline at end of file From b9a515c1013b9ba8f0704ffd8cf47cd7a4fe8a96 Mon Sep 17 00:00:00 2001 From: YJSoft Date: Sat, 26 Apr 2014 18:16:08 +0900 Subject: [PATCH 03/36] =?UTF-8?q?#588=20=ED=85=9C=ED=94=8C=EB=A6=BF=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=98=A4=EB=A5=98=EC=8B=9C=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=A0=95=EB=B3=B4=EC=99=80=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=EA=B0=80=20=EB=B0=9C=EC=83=9D=ED=95=9C=20?= =?UTF-8?q?=ED=85=9C=ED=94=8C=EB=A6=BF=20=ED=8C=8C=EC=9D=BC=EC=9D=84=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit eval에서 발생하는 오류 대신 실제 오류가 발생한 템플릿 파일을 출력함으로 디버깅시 참고 가능하게함 개선 코드(by @lansi951 ) 반영 --- classes/template/TemplateHandler.class.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 3a9d72b66..d71b3abe8 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -370,7 +370,12 @@ class TemplateHandler else { $eval_str = "?>" . $buff; - eval($eval_str); + @eval($eval_str); + $error_info = error_get_last(); + if ($error_info['type'] == 4) + { + echo "

Error Pharsing Template - {$error_info['message']} in template file {$this->file}

"; + } } return ob_get_clean(); From 96de92beedf91a28a162e261439aebcfb05ff14b Mon Sep 17 00:00:00 2001 From: YJSoft Date: Sun, 27 Apr 2014 01:02:02 +0900 Subject: [PATCH 04/36] =?UTF-8?q?file=20cache=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=8B=9C=20=EC=98=A4=EB=A5=98=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=EA=B0=80=20=EB=90=98=EC=A7=80=20=EC=95=8A=EB=8D=98?= =?UTF-8?q?=EC=A0=90=20=EC=88=98=EC=A0=95=20&=20=EC=98=A4=ED=83=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit include문 사용시 parse error 예외처리가 불가능함으로 FileHandler::readFile로 읽어 들인뒤 eval하는 방식으로 수정하였습니다. 추가:pharse가 아니라 parse네요;;; --- classes/template/TemplateHandler.class.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index d71b3abe8..c043bf660 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -365,7 +365,14 @@ class TemplateHandler ob_start(); if(substr($buff, 0, 7) == 'file://') { - include(substr($buff, 7)); + $eval_str = FileHandler::readFile(substr($buff, 7)); + $eval_str_buffed = "?>" . $eval_str; + @eval($eval_str_buffed); + $error_info = error_get_last(); + if ($error_info['type'] == 4) + { + echo "

Error Parsing Template - {$error_info['message']} in template file {$this->file}

"; + } } else { @@ -374,7 +381,7 @@ class TemplateHandler $error_info = error_get_last(); if ($error_info['type'] == 4) { - echo "

Error Pharsing Template - {$error_info['message']} in template file {$this->file}

"; + echo "

Error Parsing Template - {$error_info['message']} in template file {$this->file}

"; } } From 5c9bf55b97dff90c94c048f921f3b15d07b23a1e Mon Sep 17 00:00:00 2001 From: YJSoft Date: Sun, 11 May 2014 19:33:29 +0900 Subject: [PATCH 05/36] =?UTF-8?q?exception=EC=9D=84=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/template/TemplateHandler.class.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index c043bf660..1874bce03 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -11,7 +11,7 @@ */ class TemplateHandler { - +e private $compiled_path = 'files/cache/template_compiled/'; ///< path of compiled caches files private $path = NULL; ///< target directory private $filename = NULL; ///< target filename @@ -371,7 +371,7 @@ class TemplateHandler $error_info = error_get_last(); if ($error_info['type'] == 4) { - echo "

Error Parsing Template - {$error_info['message']} in template file {$this->file}

"; + throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); } } else @@ -381,7 +381,7 @@ class TemplateHandler $error_info = error_get_last(); if ($error_info['type'] == 4) { - echo "

Error Parsing Template - {$error_info['message']} in template file {$this->file}

"; + throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); } } From 9ee99ea7b9cf158968c01179a3b34c1add14f098 Mon Sep 17 00:00:00 2001 From: YJSoft Date: Sun, 11 May 2014 19:57:12 +0900 Subject: [PATCH 06/36] =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EB=B0=8F=20=EC=A3=BC=EC=84=9D=EB=AC=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/template/TemplateHandler.class.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 1874bce03..90814ab66 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -11,7 +11,7 @@ */ class TemplateHandler { -e + private $compiled_path = 'files/cache/template_compiled/'; ///< path of compiled caches files private $path = NULL; ///< target directory private $filename = NULL; ///< target filename @@ -365,10 +365,12 @@ e ob_start(); if(substr($buff, 0, 7) == 'file://') { + //load cache file from disk $eval_str = FileHandler::readFile(substr($buff, 7)); $eval_str_buffed = "?>" . $eval_str; @eval($eval_str_buffed); $error_info = error_get_last(); + //parse error if ($error_info['type'] == 4) { throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); @@ -379,6 +381,7 @@ e $eval_str = "?>" . $buff; @eval($eval_str); $error_info = error_get_last(); + //parse error if ($error_info['type'] == 4) { throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); From a35c51c311b2490834f11615ac45ad7c50147b83 Mon Sep 17 00:00:00 2001 From: YJSoft Date: Thu, 29 May 2014 11:31:28 +0900 Subject: [PATCH 07/36] =?UTF-8?q?=5F=5FDEBUG=5F=5F=EA=B0=80=201=EC=9D=BC?= =?UTF-8?q?=EB=95=8C=EB=A7=8C=20file=20=EC=BA=90=EC=8B=9C=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=EC=8B=9C=20eval?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit __DEBUG__가 0일경우 기존 include 방식을 사용 --- classes/template/TemplateHandler.class.php | 23 ++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index 90814ab66..7c0b53d71 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -365,15 +365,22 @@ class TemplateHandler ob_start(); if(substr($buff, 0, 7) == 'file://') { - //load cache file from disk - $eval_str = FileHandler::readFile(substr($buff, 7)); - $eval_str_buffed = "?>" . $eval_str; - @eval($eval_str_buffed); - $error_info = error_get_last(); - //parse error - if ($error_info['type'] == 4) + if(__DEBUG__) { - throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); + //load cache file from disk + $eval_str = FileHandler::readFile(substr($buff, 7)); + $eval_str_buffed = "?>" . $eval_str; + @eval($eval_str_buffed); + $error_info = error_get_last(); + //parse error + if ($error_info['type'] == 4) + { + throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); + } + } + else + { + include(substr($buff, 7)); } } else From b85b7b18e0278a41a9d69d0dad1a7516e827bf59 Mon Sep 17 00:00:00 2001 From: sungbum hong Date: Tue, 8 Jul 2014 13:50:08 +0900 Subject: [PATCH 08/36] fix typo --- classes/object/Object.class.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/object/Object.class.php b/classes/object/Object.class.php index aadf61e72..ed5a76bcf 100644 --- a/classes/object/Object.class.php +++ b/classes/object/Object.class.php @@ -165,7 +165,7 @@ class Object } /** - * Method to retrieve an object containing a key/value paris + * Method to retrieve an object containing a key/value pairs * * @return Object Returns an object containing key/value pairs */ From b5c23ae116572e2cbb8f29c68243a4b9795c0dab Mon Sep 17 00:00:00 2001 From: sejin7940 Date: Thu, 17 Jul 2014 04:37:09 +0900 Subject: [PATCH 09/36] Update comment.controller.php --- modules/comment/comment.controller.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 563e5ac03..9762ac69b 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -711,6 +711,15 @@ class commentController extends comment // remove XE's wn tags from contents $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); + if(Mobile::isFromMobilePhone()) + { + if($obj->use_html != 'Y') + { + $obj->content = htmlspecialchars($obj->content, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); + } + $obj->content = nl2br($obj->content); + } + // remove iframe and script if not a top administrator on the session if($logged_info->is_admin != 'Y') { From 94f9296847c7f7b39cde2856d8bc6c2a5ca16ac8 Mon Sep 17 00:00:00 2001 From: akasima Date: Fri, 18 Jul 2014 18:12:31 +0900 Subject: [PATCH 10/36] =?UTF-8?q?#855=20=EB=AA=A8=EB=93=88=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=EA=B8=B0=EC=97=90=EC=84=9C=20=EB=AA=A8=EB=93=88=20?= =?UTF-8?q?=EB=B6=84=EB=A5=98=EA=B0=80=20=EC=9E=88=EC=9D=84=20=EA=B2=BD?= =?UTF-8?q?=EC=9A=B0=20=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/module/tpl/module_selector.html | 54 +++++++++++++++---------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/modules/module/tpl/module_selector.html b/modules/module/tpl/module_selector.html index 008313f97..abc1ce359 100644 --- a/modules/module/tpl/module_selector.html +++ b/modules/module/tpl/module_selector.html @@ -27,6 +27,9 @@ + + +

{$key}

@@ -36,32 +39,41 @@ - - - {@ $_idx =0; } - + {@ $_idx =0; } + - {@ $browser_title = str_replace("'", "\\'", htmlspecialchars($v->browser_title, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)); } - - - + {@ $browser_title = str_replace("'", "\\'", htmlspecialchars($v->browser_title, ENT_COMPAT | ENT_HTML401, 'UTF-8', false)); } + + + - {@ $_idx ++; } - - - - + {@ $_idx ++; } + + + +
{$k}{$v->browser_title}{$type=='single'?$lang->cmd_select:$lang->cmd_insert}{$k}{$v->browser_title}{$type=='single'?$lang->cmd_select:$lang->cmd_insert}
+ + + + + + + + + + + - - - - - - - - + + + + + + +
{$lang->mid}{$lang->browser_title}{$type=='single'?$lang->cmd_select:$lang->cmd_insert}
{$k}{$v->browser_title}browser_title)}',{$type=='single'?'false':'true'}); return false;" class="button green">{$type=='single'?$lang->cmd_select:$lang->cmd_insert}
{$k}{$v->browser_title}browser_title)}',{$type=='single'?'false':'true'}); return false;" class="button green">{$type=='single'?$lang->cmd_select:$lang->cmd_insert}
+ From c187b8a3c226123bd09938b9f3fbc933d8789fcd Mon Sep 17 00:00:00 2001 From: izuzero Date: Fri, 18 Jul 2014 20:21:42 +0900 Subject: [PATCH 11/36] =?UTF-8?q?=EA=B3=B5=ED=86=B5=20CSS=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/css/xe.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/css/xe.css b/common/css/xe.css index cdddb3605..44177eacc 100644 --- a/common/css/xe.css +++ b/common/css/xe.css @@ -300,7 +300,7 @@ button.btn { -moz-border-radius-topleft: 4px; border-top-left-radius: 4px; } -.btn-group>.btn: last-child { +.btn-group>.btn:last-child { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; From 66a2440daa235100f27d4de0c3ac0ea0d61ce553 Mon Sep 17 00:00:00 2001 From: akasima Date: Fri, 11 Jul 2014 10:47:50 +0900 Subject: [PATCH 12/36] =?UTF-8?q?#839=20getRemoteResource=20=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=97=B0=EA=B2=B0=20=EC=84=A4=EC=A0=95=EC=9D=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/file/FileHandler.class.php | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/classes/file/FileHandler.class.php b/classes/file/FileHandler.class.php index 29d94eb7f..db1a82f62 100644 --- a/classes/file/FileHandler.class.php +++ b/classes/file/FileHandler.class.php @@ -515,7 +515,7 @@ class FileHandler * @param string $post_data Request arguments array for POST method * @return string If success, the content of the target file. Otherwise: none */ - function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array()) + function getRemoteResource($url, $body = null, $timeout = 3, $method = 'GET', $content_type = null, $headers = array(), $cookies = array(), $post_data = array(), $request_config = array()) { try { @@ -533,6 +533,15 @@ class FileHandler else { $oRequest = new HTTP_Request($url); + + if(count($request_config) && method_exists($oRequest, 'setConfig')) + { + foreach($request_config as $key=>$val) + { + $oRequest->setConfig($key, $val); + } + } + if(count($headers) > 0) { foreach($headers as $key => $val) From 26b12ae189e3ac6942a8a713df8544ce6c4be978 Mon Sep 17 00:00:00 2001 From: akasima Date: Mon, 21 Jul 2014 12:21:44 +0900 Subject: [PATCH 13/36] modify version to 1.7.5.4 --- config/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.inc.php b/config/config.inc.php index 9982dd018..9a76c342a 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -29,7 +29,7 @@ define('__ZBXE__', __XE__); /** * Display XE's full version. */ -define('__XE_VERSION__', '1.7.5.3'); +define('__XE_VERSION__', '1.7.5.4'); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); From 791149f02940b4ab2868b5193a5faeb91801fb8e Mon Sep 17 00:00:00 2001 From: akasima Date: Tue, 22 Jul 2014 18:53:28 +0900 Subject: [PATCH 14/36] modify version to 1.7.5.5 --- config/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.inc.php b/config/config.inc.php index 9a76c342a..25a30b758 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -29,7 +29,7 @@ define('__ZBXE__', __XE__); /** * Display XE's full version. */ -define('__XE_VERSION__', '1.7.5.4'); +define('__XE_VERSION__', '1.7.5.5'); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); From 3503a896ae7a79b1e4198de971dc2db29cc5317d Mon Sep 17 00:00:00 2001 From: akasima Date: Wed, 23 Jul 2014 14:18:28 +0900 Subject: [PATCH 15/36] =?UTF-8?q?#834=20message=20module=EC=9D=98=20?= =?UTF-8?q?=EC=98=A4=ED=93=A8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20BI=20?= =?UTF-8?q?=EA=B5=90=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/message/skins/default/http_status_code.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/message/skins/default/http_status_code.html b/modules/message/skins/default/http_status_code.html index e4719dea7..b40f89176 100644 --- a/modules/message/skins/default/http_status_code.html +++ b/modules/message/skins/default/http_status_code.html @@ -10,7 +10,7 @@ html,body{min-height:100%} body{font-size:12px} h1{margin:0;font:bold 24px Arial, Helvetica, sans-serif;color:#666} -section{position:relative;max-width:500px;margin:100px auto 0 auto;padding:0 0 0 70px;overflow:hidden;background:url(data:image/png;base64,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) no-repeat 5px 5px} +section{position:relative;max-width:500px;margin:100px auto 0 auto;padding:0 0 0 100px;overflow:hidden;background:url('layouts/default/siteTitle.png') no-repeat 5px 15px} div{height:100%;border-left:1px dotted #ccc;padding:0 0 0 15px} p{line-height:1.5;color:#666} @media only all and (max-width:480px){ From 26427a8967a8ab25c45120a30e74d64996a9bbe4 Mon Sep 17 00:00:00 2001 From: akasima Date: Fri, 25 Jul 2014 18:27:59 +0900 Subject: [PATCH 16/36] =?UTF-8?q?#862=20escapeValue()=EC=97=90=EC=84=9C=20?= =?UTF-8?q?foreach=EB=A1=9C=20=EC=B2=98=EB=A6=AC=EB=90=98=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xml/xmlquery/argument/Argument.class.php | 794 +++++++++--------- 1 file changed, 396 insertions(+), 398 deletions(-) diff --git a/classes/xml/xmlquery/argument/Argument.class.php b/classes/xml/xmlquery/argument/Argument.class.php index 33eebc324..ffc275495 100644 --- a/classes/xml/xmlquery/argument/Argument.class.php +++ b/classes/xml/xmlquery/argument/Argument.class.php @@ -1,398 +1,396 @@ - */ - -/** - * Argument class - * @author NAVER (developers@xpressengine.com) - * @package /classes/xml/xmlquery/argument - * @version 0.1 - */ -class Argument -{ - - /** - * argument value - * @var mixed - */ - var $value; - - /** - * argument name - * @var string - */ - var $name; - - /** - * argument type - * @var string - */ - var $type; - - /** - * result of argument type check - * @var bool - */ - var $isValid; - - /** - * error message - * @var Object - */ - var $errorMessage; - - /** - * column operation - */ - var $column_operation; - - /** - * Check if arg value is user submnitted or default - * @var mixed - */ - var $uses_default_value; - - /** - * Caches escaped and toString value so that the parsing won't happen multiple times - * @var mixed - */ - var $_value; // - - /** - * constructor - * @param string $name - * @param mixed $value - * @return void - */ - - function Argument($name, $value) - { - $this->value = $value; - $this->name = $name; - $this->isValid = TRUE; - } - - function getType() - { - if(isset($this->type)) - { - return $this->type; - } - if(is_string($this->value)) - { - return 'column_name'; - } - - return 'number'; - } - - function setColumnType($value) - { - $this->type = $value; - } - - function setColumnOperation($operation) - { - $this->column_operation = $operation; - } - - function getName() - { - return $this->name; - } - - function getValue() - { - if(!isset($this->_value)) - { - $value = $this->getEscapedValue(); - $this->_value = $this->toString($value); - } - return $this->_value; - } - - function getPureValue() - { - return $this->value; - } - - function getColumnOperation() - { - return $this->column_operation; - } - - function getEscapedValue() - { - return $this->escapeValue($this->value); - } - - function getUnescapedValue() - { - if($this->value === 'null') - { - return null; - } - return $this->value; - } - - /** - * mixed value to string - * @param mixed $value - * @return string - */ - function toString($value) - { - if(is_array($value)) - { - if(count($value) === 0) - { - return ''; - } - if(count($value) === 1 && $value[0] === '') - { - return ''; - } - return '(' . implode(',', $value) . ')'; - } - return $value; - } - - /** - * escape value - * @param mixed $value - * @return mixed - */ - function escapeValue($value) - { - $column_type = $this->getType(); - if($column_type == 'column_name') - { - $dbParser = DB::getParser(); - return $dbParser->parseExpression($value); - } - if(!isset($value)) - { - return null; - } - - $columnTypeList = array('date' => 1, 'varchar' => 1, 'char' => 1, 'text' => 1, 'bigtext' => 1); - if(isset($columnTypeList[$column_type])) - { - if(!is_array($value)) - { - $value = $this->_escapeStringValue($value); - } - else - { - $total = count($value); - for($i = 0; $i < $total; $i++) - { - $value[$i] = $this->_escapeStringValue($value[$i]); - } - //$value[$i] = '\''.$value[$i].'\''; - } - } - if($this->uses_default_value) - { - return $value; - } - if($column_type == 'number') - { - if(is_array($value)) - { - foreach($value AS $key => $val) - { - if(isset($val) && $val !== '') - { - $value[$key] = (int) $val; - } - } - } - else - { - $value = (int) $value; - } - } - - return $value; - } - - /** - * escape string value - * @param string $value - * @return string - */ - function _escapeStringValue($value) - { - // Remove non-utf8 chars. - $regex = '@((?:[\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}){1,100})|([\xF0-\xF7][\x80-\xBF]{3})|([\x80-\xBF])|([\xC0-\xFF])@x'; - - $value = preg_replace_callback($regex, array($this, 'utf8Replacer'), $value); - $db = DB::getInstance(); - $value = $db->addQuotes($value); - return '\'' . $value . '\''; - } - - function utf8Replacer($captures) - { - if(strlen($captures[1])) - { - // Valid byte sequence. Return unmodified. - return $captures[1]; - } - else if(strlen($captures[2])) - { - // Remove user defined area - if("\xF3\xB0\x80\x80" <= $captures[2]) - { - return; - } - - return $captures[2]; - } - else - { - return; - } - } - - function isValid() - { - return $this->isValid; - } - - function isColumnName() - { - $type = $this->getType(); - $value = $this->getUnescapedValue(); - if($type == 'column_name') - { - return TRUE; - } - if($type == 'number' && is_null($value)) - { - return FALSE; - } - if($type == 'number' && !is_numeric($value) && $this->uses_default_value) - { - return TRUE; - } - return FALSE; - } - - function getErrorMessage() - { - return $this->errorMessage; - } - - function ensureDefaultValue($default_value) - { - if($this->value === NULL || $this->value === '') - { - $this->value = $default_value; - $this->uses_default_value = TRUE; - } - } - - /** - * check filter by filter type - * @param string $filter_type - * @return void - */ - function checkFilter($filter_type) - { - if(isset($this->value) && $this->value != '') - { - global $lang; - $val = $this->value; - $key = $this->name; - switch($filter_type) - { - case 'email' : - case 'email_address' : - if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - case 'homepage' : - if(!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - case 'userid' : - case 'user_id' : - if(!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - case 'number' : - case 'numbers' : - if(is_array($val)) - { - $val = join(',', $val); - } - if(!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - case 'alpha' : - if(!preg_match('/^[a-z]+$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - case 'alpha_number' : - if(!preg_match('/^[0-9a-z]+$/is', $val)) - { - $this->isValid = FALSE; - $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key)); - } - break; - } - } - } - - function checkMaxLength($length) - { - if($this->value && (strlen($this->value) > $length)) - { - global $lang; - $this->isValid = FALSE; - $key = $this->name; - $this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key)); - } - } - - function checkMinLength($length) - { - if($this->value && (strlen($this->value) < $length)) - { - global $lang; - $this->isValid = FALSE; - $key = $this->name; - $this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key)); - } - } - - function checkNotNull() - { - if(!isset($this->value)) - { - global $lang; - $this->isValid = FALSE; - $key = $this->name; - $this->errorMessage = new Object(-1, sprintf($lang->filter->isnull, $lang->{$key} ? $lang->{$key} : $key)); - } - } - -} -/* End of file Argument.class.php */ -/* Location: ./classes/xml/xmlquery/argument/Argument.class.php */ + */ + +/** + * Argument class + * @author NAVER (developers@xpressengine.com) + * @package /classes/xml/xmlquery/argument + * @version 0.1 + */ +class Argument +{ + + /** + * argument value + * @var mixed + */ + var $value; + + /** + * argument name + * @var string + */ + var $name; + + /** + * argument type + * @var string + */ + var $type; + + /** + * result of argument type check + * @var bool + */ + var $isValid; + + /** + * error message + * @var Object + */ + var $errorMessage; + + /** + * column operation + */ + var $column_operation; + + /** + * Check if arg value is user submnitted or default + * @var mixed + */ + var $uses_default_value; + + /** + * Caches escaped and toString value so that the parsing won't happen multiple times + * @var mixed + */ + var $_value; // + + /** + * constructor + * @param string $name + * @param mixed $value + * @return void + */ + + function Argument($name, $value) + { + $this->value = $value; + $this->name = $name; + $this->isValid = TRUE; + } + + function getType() + { + if(isset($this->type)) + { + return $this->type; + } + if(is_string($this->value)) + { + return 'column_name'; + } + + return 'number'; + } + + function setColumnType($value) + { + $this->type = $value; + } + + function setColumnOperation($operation) + { + $this->column_operation = $operation; + } + + function getName() + { + return $this->name; + } + + function getValue() + { + if(!isset($this->_value)) + { + $value = $this->getEscapedValue(); + $this->_value = $this->toString($value); + } + return $this->_value; + } + + function getPureValue() + { + return $this->value; + } + + function getColumnOperation() + { + return $this->column_operation; + } + + function getEscapedValue() + { + return $this->escapeValue($this->value); + } + + function getUnescapedValue() + { + if($this->value === 'null') + { + return null; + } + return $this->value; + } + + /** + * mixed value to string + * @param mixed $value + * @return string + */ + function toString($value) + { + if(is_array($value)) + { + if(count($value) === 0) + { + return ''; + } + if(count($value) === 1 && $value[0] === '') + { + return ''; + } + return '(' . implode(',', $value) . ')'; + } + return $value; + } + + /** + * escape value + * @param mixed $value + * @return mixed + */ + function escapeValue($value) + { + $column_type = $this->getType(); + if($column_type == 'column_name') + { + $dbParser = DB::getParser(); + return $dbParser->parseExpression($value); + } + if(!isset($value)) + { + return null; + } + + $columnTypeList = array('date' => 1, 'varchar' => 1, 'char' => 1, 'text' => 1, 'bigtext' => 1); + if(isset($columnTypeList[$column_type])) + { + if(!is_array($value)) + { + $value = $this->_escapeStringValue($value); + } + else + { + foreach($value as $key=>$val) + { + $value[$key] = $this->_escapeStringValue($val); + } + } + } + if($this->uses_default_value) + { + return $value; + } + if($column_type == 'number') + { + if(is_array($value)) + { + foreach($value AS $key => $val) + { + if(isset($val) && $val !== '') + { + $value[$key] = (int) $val; + } + } + } + else + { + $value = (int) $value; + } + } + + return $value; + } + + /** + * escape string value + * @param string $value + * @return string + */ + function _escapeStringValue($value) + { + // Remove non-utf8 chars. + $regex = '@((?:[\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}){1,100})|([\xF0-\xF7][\x80-\xBF]{3})|([\x80-\xBF])|([\xC0-\xFF])@x'; + + $value = preg_replace_callback($regex, array($this, 'utf8Replacer'), $value); + $db = DB::getInstance(); + $value = $db->addQuotes($value); + return '\'' . $value . '\''; + } + + function utf8Replacer($captures) + { + if(strlen($captures[1])) + { + // Valid byte sequence. Return unmodified. + return $captures[1]; + } + else if(strlen($captures[2])) + { + // Remove user defined area + if("\xF3\xB0\x80\x80" <= $captures[2]) + { + return; + } + + return $captures[2]; + } + else + { + return; + } + } + + function isValid() + { + return $this->isValid; + } + + function isColumnName() + { + $type = $this->getType(); + $value = $this->getUnescapedValue(); + if($type == 'column_name') + { + return TRUE; + } + if($type == 'number' && is_null($value)) + { + return FALSE; + } + if($type == 'number' && !is_numeric($value) && $this->uses_default_value) + { + return TRUE; + } + return FALSE; + } + + function getErrorMessage() + { + return $this->errorMessage; + } + + function ensureDefaultValue($default_value) + { + if($this->value === NULL || $this->value === '') + { + $this->value = $default_value; + $this->uses_default_value = TRUE; + } + } + + /** + * check filter by filter type + * @param string $filter_type + * @return void + */ + function checkFilter($filter_type) + { + if(isset($this->value) && $this->value != '') + { + global $lang; + $val = $this->value; + $key = $this->name; + switch($filter_type) + { + case 'email' : + case 'email_address' : + if(!preg_match('/^[\w-]+((?:\.|\+|\~)[\w-]+)*@[\w-]+(\.[\w-]+)+$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_email, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + case 'homepage' : + if(!preg_match('/^(http|https)+(:\/\/)+[0-9a-z_-]+\.[^ ]+$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_homepage, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + case 'userid' : + case 'user_id' : + if(!preg_match('/^[a-zA-Z]+([_0-9a-zA-Z]+)*$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_userid, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + case 'number' : + case 'numbers' : + if(is_array($val)) + { + $val = join(',', $val); + } + if(!preg_match('/^(-?)[0-9]+(,\-?[0-9]+)*$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_number, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + case 'alpha' : + if(!preg_match('/^[a-z]+$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + case 'alpha_number' : + if(!preg_match('/^[0-9a-z]+$/is', $val)) + { + $this->isValid = FALSE; + $this->errorMessage = new Object(-1, sprintf($lang->filter->invalid_alpha_number, $lang->{$key} ? $lang->{$key} : $key)); + } + break; + } + } + } + + function checkMaxLength($length) + { + if($this->value && (strlen($this->value) > $length)) + { + global $lang; + $this->isValid = FALSE; + $key = $this->name; + $this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key)); + } + } + + function checkMinLength($length) + { + if($this->value && (strlen($this->value) < $length)) + { + global $lang; + $this->isValid = FALSE; + $key = $this->name; + $this->errorMessage = new Object(-1, sprintf($lang->filter->outofrange, $lang->{$key} ? $lang->{$key} : $key)); + } + } + + function checkNotNull() + { + if(!isset($this->value)) + { + global $lang; + $this->isValid = FALSE; + $key = $this->name; + $this->errorMessage = new Object(-1, sprintf($lang->filter->isnull, $lang->{$key} ? $lang->{$key} : $key)); + } + } + +} +/* End of file Argument.class.php */ +/* Location: ./classes/xml/xmlquery/argument/Argument.class.php */ From c9dc416c60b5bfcd1f35c5b1fed545f67c8c4e6d Mon Sep 17 00:00:00 2001 From: BJRambo Date: Sat, 26 Jul 2014 09:43:28 +0900 Subject: [PATCH 17/36] =?UTF-8?q?#857=20$widget=5Finfo->extra=5Fvar=20?= =?UTF-8?q?=EB=A5=BC=20new=20stdClass=20=EC=B2=98=EB=A6=AC=EB=B6=80?= =?UTF-8?q?=EB=B6=84=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/widget/widget.model.php | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/widget/widget.model.php b/modules/widget/widget.model.php index dd24bffba..77014aba4 100644 --- a/modules/widget/widget.model.php +++ b/modules/widget/widget.model.php @@ -205,7 +205,6 @@ class widgetModel extends widget $extra_var_count = count($extra_vars); $buff .= sprintf('$widget_info->extra_var_count = "%s";', $extra_var_count); - $buff .= '$widget_info->extra_var = new stdClass;'; for($i=0;$i<$extra_var_count;$i++) { unset($var); From 2c66e6786c6485a1e6ec05fe4ea6dcfd90140dac Mon Sep 17 00:00:00 2001 From: akasima Date: Mon, 28 Jul 2014 11:32:44 +0900 Subject: [PATCH 18/36] modify version to 1.7.5.6 --- config/config.inc.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.inc.php b/config/config.inc.php index 25a30b758..f5302db4e 100644 --- a/config/config.inc.php +++ b/config/config.inc.php @@ -29,7 +29,7 @@ define('__ZBXE__', __XE__); /** * Display XE's full version. */ -define('__XE_VERSION__', '1.7.5.5'); +define('__XE_VERSION__', '1.7.5.6'); define('__XE_VERSION_ALPHA__', (stripos(__XE_VERSION__, 'alpha') !== false)); define('__XE_VERSION_BETA__', (stripos(__XE_VERSION__, 'beta') !== false)); define('__XE_VERSION_RC__', (stripos(__XE_VERSION__, 'rc') !== false)); From 16c2694c1950e9cdb495b2d2d2e343a148331ceb Mon Sep 17 00:00:00 2001 From: akasima Date: Tue, 29 Jul 2014 17:57:34 +0900 Subject: [PATCH 19/36] #869 installController::checkRewriteUsable() modified to support HTTPS --- modules/install/install.controller.php | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/install/install.controller.php b/modules/install/install.controller.php index e62f5961d..d880f890b 100644 --- a/modules/install/install.controller.php +++ b/modules/install/install.controller.php @@ -388,26 +388,26 @@ class installController extends install FileHandler::writeFile(_XE_PATH_.$checkFilePath, trim($checkString)); + $scheme = $_SERVER['REQUEST_SCHEME']; $hostname = $_SERVER['SERVER_NAME']; $port = $_SERVER['SERVER_PORT']; + $str_port = ''; + if($port) + { + $str_port = ':' . $port; + } + $query = "/JUST/CHECK/REWRITE/" . $checkFilePath; $currentPath = str_replace($_SERVER['DOCUMENT_ROOT'], "", _XE_PATH_); if($currentPath != "") + { $query = $currentPath . $query; - - $fp = @fsockopen($hostname, $port, $errno, $errstr, 5); - if(!$fp) return false; - - fputs($fp, "GET {$query} HTTP/1.0\r\n"); - fputs($fp, "Host: {$hostname}\r\n\r\n"); - - $buff = ''; - while(!feof($fp)) { - $str = fgets($fp, 1024); - if(trim($str)=='') $start = true; - if($start) $buff .= $str; } - fclose($fp); + + $requestUrl = sprintf('%s://%s%s%s', $scheme, $hostname, $str_port, $query); + $requestConfig = array(); + $requestConfig['ssl_verify_peer'] = false; + $buff = FileHandler::getRemoteResource($requestUrl, null, 10, 'POST', 'application/x-www-form-urlencoded', array(), array(), array(), $requestConfig); FileHandler::removeFile(_XE_PATH_.$checkFilePath); From 272ac061d606a8f80b301ae367a879aef42f5a5e Mon Sep 17 00:00:00 2001 From: izuzero Date: Tue, 29 Jul 2014 23:51:04 +0900 Subject: [PATCH 20/36] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20=EA=B3=84?= =?UTF-8?q?=EC=A0=95=EC=9D=B8=EB=8D=B0=EB=8F=84=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=EC=B2=A8=EB=B6=80=EC=A0=9C=ED=95=9C=EC=9D=B4=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=EB=90=98=EB=8A=94=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/file/file.model.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/file/file.model.php b/modules/file/file.model.php index bf2295ad8..713ce080a 100644 --- a/modules/file/file.model.php +++ b/modules/file/file.model.php @@ -238,7 +238,9 @@ class fileModel extends file if($logged_info->is_admin == 'Y') { - $file_config->allowed_filesize = preg_replace("/[a-z]/is","",ini_get('upload_max_filesize')); + $size = preg_replace('/[a-z]/is', '', ini_get('upload_max_filesize')); + $file_config->allowed_attach_size = $size; + $file_config->allowed_filesize = $size; $file_config->allowed_filetypes = '*.*'; } return $file_config; From 7acee1050db4235afdc4351d2e4afaaecd0031dd Mon Sep 17 00:00:00 2001 From: akasima Date: Wed, 30 Jul 2014 10:00:35 +0900 Subject: [PATCH 21/36] #861 modified, https install error --- modules/install/install.view.php | 13 +++++++++++++ modules/install/tpl/form.cubrid.html | 2 +- modules/install/tpl/form.mssql.html | 2 +- modules/install/tpl/form.mysql.html | 2 +- modules/install/tpl/form.mysql_innodb.html | 2 +- modules/install/tpl/form.mysqli.html | 2 +- modules/install/tpl/form.mysqli_innodb.html | 2 +- 7 files changed, 19 insertions(+), 6 deletions(-) diff --git a/modules/install/install.view.php b/modules/install/install.view.php index 38e34fdaa..e8b79ef45 100644 --- a/modules/install/install.view.php +++ b/modules/install/install.view.php @@ -124,6 +124,19 @@ class installView extends install $title = sprintf(Context::getLang('input_dbinfo_by_dbtype'), Context::get('db_type')); Context::set('title', $title); + + $error_return_url = getNotEncodedUrl('', 'act', Context::get('act'), 'db_type', Context::get('db_type')); + if($_SERVER['HTTPS'] == 'on') + { + // Error occured when using https protocol at "ModuleHandler::init() ' + $parsedUrl = parse_url($error_return_url); + $error_return_url = ''; + if(isset($parsedUrl['path'])) $error_return_url .= $parsedUrl['path']; + if(isset($parsedUrl['query'])) $error_return_url .= '?' . $parsedUrl['query']; + if(isset($parsedUrl['fragment'])) $error_return_url .= '?' . $parsedUrl['fragment']; + } + Context::set('error_return_url', $error_return_url); + $this->setTemplateFile($tpl_filename); } diff --git a/modules/install/tpl/form.cubrid.html b/modules/install/tpl/form.cubrid.html index 50285bf91..f3495114f 100644 --- a/modules/install/tpl/form.cubrid.html +++ b/modules/install/tpl/form.cubrid.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

diff --git a/modules/install/tpl/form.mssql.html b/modules/install/tpl/form.mssql.html index cf757236d..97d2288cd 100644 --- a/modules/install/tpl/form.mssql.html +++ b/modules/install/tpl/form.mssql.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

diff --git a/modules/install/tpl/form.mysql.html b/modules/install/tpl/form.mysql.html index c1a93a304..7946b98c9 100644 --- a/modules/install/tpl/form.mysql.html +++ b/modules/install/tpl/form.mysql.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

diff --git a/modules/install/tpl/form.mysql_innodb.html b/modules/install/tpl/form.mysql_innodb.html index c1a93a304..7946b98c9 100644 --- a/modules/install/tpl/form.mysql_innodb.html +++ b/modules/install/tpl/form.mysql_innodb.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

diff --git a/modules/install/tpl/form.mysqli.html b/modules/install/tpl/form.mysqli.html index 358e962f5..2a008984d 100644 --- a/modules/install/tpl/form.mysqli.html +++ b/modules/install/tpl/form.mysqli.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

diff --git a/modules/install/tpl/form.mysqli_innodb.html b/modules/install/tpl/form.mysqli_innodb.html index 358e962f5..2a008984d 100644 --- a/modules/install/tpl/form.mysqli_innodb.html +++ b/modules/install/tpl/form.mysqli_innodb.html @@ -7,7 +7,7 @@

{$XE_VALIDATOR_MESSAGE}

- +

{$title}

From f382c3615d80aa9f0a5bf5161f7ea1bc869ba1cd Mon Sep 17 00:00:00 2001 From: akasima Date: Wed, 30 Jul 2014 14:58:27 +0900 Subject: [PATCH 22/36] #872 add send message trigger parameter --- modules/communication/communication.controller.php | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/communication/communication.controller.php b/modules/communication/communication.controller.php index cbda510a2..47d27bfa7 100644 --- a/modules/communication/communication.controller.php +++ b/modules/communication/communication.controller.php @@ -175,6 +175,9 @@ class communicationController extends communication $content = removeHackTag($content); $title = htmlspecialchars($title, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); + $message_srl = getNextSequence(); + $related_srl = getNextSequence(); + // messages to save in the sendor's message box $sender_args = new stdClass(); $sender_args->sender_srl = $sender_srl; @@ -184,15 +187,15 @@ class communicationController extends communication $sender_args->content = $content; $sender_args->readed = 'N'; $sender_args->regdate = date("YmdHis"); - $sender_args->message_srl = getNextSequence(); - $sender_args->related_srl = getNextSequence(); + $sender_args->message_srl = $message_srl; + $sender_args->related_srl = $related_srl; $sender_args->list_order = $sender_args->message_srl * -1; // messages to save in the receiver's message box $receiver_args = new stdClass(); - $receiver_args->message_srl = $sender_args->related_srl; + $receiver_args->message_srl = $related_srl; $receiver_args->related_srl = 0; - $receiver_args->list_order = $sender_args->related_srl * -1; + $receiver_args->list_order = $related_srl * -1; $receiver_args->sender_srl = $sender_srl; if(!$receiver_args->sender_srl) { @@ -210,6 +213,7 @@ class communicationController extends communication $trigger_obj->sender_srl = $sender_srl; $trigger_obj->receiver_srl = $receiver_srl; $trigger_obj->message_srl = $message_srl; + $trigger_obj->related_srl = $related_srl; $trigger_obj->title = $title; $trigger_obj->content = $content; $trigger_obj->sender_log = $sender_log; From 969622a29cf30786b995548a26635112c3360447 Mon Sep 17 00:00:00 2001 From: akasima Date: Wed, 30 Jul 2014 16:29:14 +0900 Subject: [PATCH 23/36] #853 add empty value to select box of member extra vars --- modules/member/member.admin.view.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/member/member.admin.view.php b/modules/member/member.admin.view.php index ab12df6d9..eebe090dc 100644 --- a/modules/member/member.admin.view.php +++ b/modules/member/member.admin.view.php @@ -582,6 +582,7 @@ class memberAdminView extends member { $template = ''; $optionTag = array(); + $optionTag[] = sprintf('', $lang->cmd_select); if($extendForm->default_value) { foreach($extendForm->default_value as $v) From 9a3eab0bdae343b4337c78e1b576ee4cbe2716e9 Mon Sep 17 00:00:00 2001 From: akasima Date: Thu, 31 Jul 2014 10:07:40 +0900 Subject: [PATCH 24/36] =?UTF-8?q?Revert=20"#847=20=EB=AA=A8=EB=B0=94?= =?UTF-8?q?=EC=9D=BC(=EB=98=90=EB=8A=94=20textarea=ED=98=95)=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EB=8C=93=EA=B8=80=20=EC=88=98=EC=A0=95=EC=8B=9C=20?= =?UTF-8?q?=EC=A4=84=EB=B0=94=EA=BF=88=20=EC=9C=A0=EC=A7=80=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/comment/comment.controller.php | 9 --------- 1 file changed, 9 deletions(-) diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index 9762ac69b..563e5ac03 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -711,15 +711,6 @@ class commentController extends comment // remove XE's wn tags from contents $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); - if(Mobile::isFromMobilePhone()) - { - if($obj->use_html != 'Y') - { - $obj->content = htmlspecialchars($obj->content, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); - } - $obj->content = nl2br($obj->content); - } - // remove iframe and script if not a top administrator on the session if($logged_info->is_admin != 'Y') { From d0dbbffd1c76576ceb7b7c2807a8653dbfc7a7f7 Mon Sep 17 00:00:00 2001 From: akasima Date: Thu, 31 Jul 2014 14:03:22 +0900 Subject: [PATCH 25/36] =?UTF-8?q?#847=20=EB=AA=A8=EB=B0=94=EC=9D=BC(?= =?UTF-8?q?=EB=98=90=EB=8A=94=20textarea=ED=98=95)=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EB=8C=93=EA=B8=80=20=EC=88=98=EC=A0=95=EC=8B=9C=20=EC=A4=84?= =?UTF-8?q?=EB=B0=94=EA=BF=88=20=EC=9C=A0=EC=A7=80=EB=90=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20restore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/comment/comment.controller.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/comment/comment.controller.php b/modules/comment/comment.controller.php index be8f0adfc..3485227f3 100644 --- a/modules/comment/comment.controller.php +++ b/modules/comment/comment.controller.php @@ -721,6 +721,15 @@ class commentController extends comment // remove XE's wn tags from contents $obj->content = preg_replace('!<\!--(Before|After)(Document|Comment)\(([0-9]+),([0-9]+)\)-->!is', '', $obj->content); + if(Mobile::isFromMobilePhone()) + { + if($obj->use_html != 'Y') + { + $obj->content = htmlspecialchars($obj->content, ENT_COMPAT | ENT_HTML401, 'UTF-8', false); + } + $obj->content = nl2br($obj->content); + } + // remove iframe and script if not a top administrator on the session if($logged_info->is_admin != 'Y') { From b0a50e8be50a70b50833e6f895a92ffb18c1112e Mon Sep 17 00:00:00 2001 From: akasima Date: Thu, 31 Jul 2014 14:43:43 +0900 Subject: [PATCH 26/36] #837 remove unnecessary html tags --- modules/message/skins/default/http_status_code.html | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/modules/message/skins/default/http_status_code.html b/modules/message/skins/default/http_status_code.html index b40f89176..61fde1d3a 100644 --- a/modules/message/skins/default/http_status_code.html +++ b/modules/message/skins/default/http_status_code.html @@ -1,11 +1,3 @@ - - - - - -01 - -