Skip to content

Commit

Permalink
refs #514
Browse files Browse the repository at this point in the history
  * 1.8 트리와 동기화
  • Loading branch information
inureyes committed Jan 25, 2010
1 parent ca24856 commit 40a96c3
Show file tree
Hide file tree
Showing 20 changed files with 348 additions and 264 deletions.
27 changes: 18 additions & 9 deletions documents/changelog_ko.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,31 @@
* 버그 로그는 일반적으로 이전 버전에서 발생했으나 해결된 부분을 포함하며, 이번 버전을 만드는 과정에서 발생하는 버그는 기록하지 않습니다.
== v1.8.2 개발 관련 노트 ==
=== 추가된 점 ===
* 설치 : 설치시 PHP 버전을 확인하여 동작 가능 여부를 알려줌 (#1406)
* 플러그인 : 플러그인 언어 리소스가 플러그인이 생성하는 관리 패널 영역까지 적용됨 (#1412)
* 설치 : 설치시 PHP 버전을 확인하여 동작 가능 여부를 알려줌 (#1406)
* 일반 : 유니코드 제어 루틴 변경 (#1416)
* 플러그인 : 플러그인 언어 리소스가 플러그인이 생성하는 관리 패널 영역까지 적용됨 (#1412)

=== 변경된 점 ===
* 일반 : 컨텐츠 포매팅 시 이미지 및 첨부파일을 절대 경로를 참조하도록 기본 값을 수정 (#1407)

* 일반 : 컨텐츠 포매팅 시 이미지 및 첨부파일을 절대 경로를 참조하도록 기본 값을 수정 (#1407)
* 일반 : 유니코드 처리 루틴의 성능 개선 (#1416)
* TTXML : 티스토리 데이터를 복원할 경우 첨부파일의 파일명이 너무 길어 사라질 수 있는 부분 변경 (#1365)

=== 버그 수정 ===
* 블로그 : 일반 핸드폰용 모바일 블로그 주소 (/m) 접근이 제대로 되지 않는 문제 수정 (#1402)
* 블로그 : 댓글을 작성하거나 수정할 경우 최근 댓글 목록 갱신이 1.8 호환 스킨에서 이상하게 출력되는 문제 수정 (#1409)
* 블로그 : 일반 핸드폰용 모바일 블로그 주소 (/m) 접근이 제대로 되지 않는 문제 수정 (#1402)
* 블로그 : 모바일 블로깅 시 댓글 작성에 문제가 생기는 경우 수정 (#1402)
* 블로그 : 댓글을 작성하거나 수정할 경우 최근 댓글 목록 갱신이 1.8 호환 스킨에서 이상하게 출력되는 문제 수정 (#1409)
* 블로그 : 카테고리가 없는 경우 네비게이션 표시가 이상하게 되는 문제 수정 (#1372)
* 관리패널 : 서비스 - 언어 설정에서 셀렉트박스에 언어 목록이 이상하게 출력되는 문제 수정 (#1403)
* 관리패널 : line 기능을 주소 검색줄에 추가하는 버튼이 오동작하는 문제 수정 (#1148)
* 일반 : 세션 관련 Config 객체 (1.8 베타때 사용되었음) 사용하는 부분을 모두 다시 구현 (#1322)
* 일반 : 체크업으로 데이터베이스 업데이트 시 오타 난 부분 수정 (#1410)
* 일반 : 세션 관련 Config 객체 (1.8 베타때 사용되었음) 사용하는 부분을 모두 다시 구현 (#1322)
* 일반 : 체크업으로 데이터베이스 업데이트 시 오타 난 부분 수정 (#1410)
* 일반 : memcached 기반의 캐시 운영시 플러싱 오류 수정 (#1362)
* 일반 : 쿼리 캐시 사용시 DB 기반의 캐시 동작 모드에서 지원되지 않는 메소드 참조 오류 수정 (#1362)
* 일반 : 세션이 닫힐 때 가비지 컬렉션 루틴이 정상동작하지 않는 오류 수정 (#1419)
* 일반 : 데이터베이스 접근시 autocommit 이 동작하지 않는 문제 수정 (#1277)
* 에디터 : 볼드 버튼 동작시 HTML이 이상하게 생성되는 문제 수정 (#1422)
* 모바일 : 아이폰 모드에서 그림 출력 및 페이지 출력이 이상하게 되는 문제 수정 (#1408, #1415)
* 설치 : MySQLi 모드 설치시 캐릭터셋 설정이 빠지는 문제 수정 (#1066)
* 설치 : MySQLi 모드 설치시 캐릭터셋 설정이 빠지는 문제 수정 (#1066)


== v1.8.1 개발 관련 노트 ==
Expand Down
10 changes: 10 additions & 0 deletions framework/alias/UTF8.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php
/// Copyright (c) 2004-2010, Needlworks / Tatter Network Foundation
/// All rights reserved. Licensed under the GPL.
/// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT)

if(!class_exists('UTF8')) {
class UTF8 extends Utils_Unicode {
}
}
?>
222 changes: 0 additions & 222 deletions framework/boot/10-CoreClasses.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,228 +42,6 @@ static function startsWith($string, $start) {
}
}

/// Unicode string manipulation class.
/// (PHP built-in functions work incorrectly.)
final class UTF8 {
static function validate($str, $truncated = false) {
$length = strlen($str);
if ($length == 0)
return true;
for ($i = 0; $i < $length; $i++) {
$high = ord($str{$i});
if ($high < 0x80) {
continue;
} else if ($high <= 0xC1) {
return false;
} else if ($high < 0xE0) {
if (++$i >= $length)
return $truncated;
else if (($str{$i} & "\xC0") == "\x80")
continue;
} else if ($high < 0xF0) {
if (++$i >= $length) {
return $truncated;
} else if (($str{$i} & "\xC0") == "\x80") {
if (++$i >= $length)
return $truncated;
else if (($str{$i} & "\xC0") == "\x80")
continue;
}
} else if ($high < 0xF5) {
if (++$i >= $length) {
return $truncated;
} else if (($str{$i} & "\xC0") == "\x80") {
if (++$i >= $length) {
return $truncated;
} else if (($str{$i} & "\xC0") == "\x80") {
if (++$i >= $length)
return $truncated;
else if (($str{$i} & "\xC0") == "\x80")
continue;
}
}
} // F5~FF is invalid by RFC 3629
return false;
}
return true;
}

static function correct($str, $broken = '') {
$corrected = '';
$strlen = strlen($str);
for ($i = 0; $i < $strlen; $i++) {
switch ($str{$i}) {
case "\x09":
case "\x0A":
case "\x0D":
$corrected .= $str{$i};
break;
case "\x7F":
$corrected .= $broken;
break;
default:
$high = ord($str{$i});
if ($high < 0x20) { // Special Characters.
$corrected .= $broken;
} else if ($high < 0x80) { // 1byte.
$corrected .= $str{$i};
} else if ($high <= 0xC1) {
$corrected .= $broken;
} else if ($high < 0xE0) { // 2byte.
if (($i + 1 >= $strlen) || (($str{$i + 1} & "\xC0") != "\x80"))
$corrected .= $broken;
else
$corrected .= $str{$i} . $str{$i + 1};
$i += 1;
} else if ($high < 0xF0) { // 3byte.
if (($i + 2 >= $strlen) || (($str{$i + 1} & "\xC0") != "\x80") || (($str{$i + 2} & "\xC0") != "\x80"))
$corrected .= $broken;
else
$corrected .= $str{$i} . $str{$i + 1} . $str{$i + 2};
$i += 2;
} else if ($high < 0xF5) { // 4byte.
if (($i + 3 >= $strlen) || (($str{$i + 1} & "\xC0") != "\x80") || (($str{$i + 2} & "\xC0") != "\x80") || (($str{$i + 3} & "\xC0") != "\x80"))
$corrected .= $broken;
else
$corrected .= $str{$i} . $str{$i + 1} . $str{$i + 2} . $str{$i + 3};
$i += 3;
} else { // F5~FF is invalid by RFC3629.
$corrected .= $broken;
}
break;
}
}
if (preg_match('/&#([0-9]{1,});/', $corrected))
$corrected = mb_decode_numericentity($corrected, array(0x0, 0x10000, 0, 0xfffff), 'UTF-8');
return $corrected;
}

static function bring($str, $encoding = null) {
global $service;
return @iconv((isset($encoding) ? $encoding : $service['encoding']), 'UTF-8', $str);
}

static function convert($str, $encoding = null) {
global $service;
return @iconv('UTF-8', (isset($encoding) ? $encoding : $service['encoding']), $str);
}

static function length($str) {
$len = strlen($str);
for ($i = $length = 0; $i < $len; $length++) {
$high = ord($str{$i});
if ($high < 0x80)
$i += 1;
else if ($high < 0xE0)
$i += 2;
else if ($high < 0xF0)
$i += 3;
else
$i += 4;
}
return $length;
}

static function lengthAsEm($str) {
$len = strlen($str);
for ($i = $length = 0; $i < $len; ) {
$high = ord($str{$i});
if ($high < 0x80) {
$i += 1;
$length += 1;
} else {
if ($high < 0xE0)
$i += 2;
else if ($high < 0xF0)
$i += 3;
else
$i += 4;
$length += 2;
}
}
return $length;
}

static function lessenAsEncoding($str, $length = 255, $tail = '...') {
$context = Model_Context::getInstance();
if($context->getProperty('database.utf8') != true)
return UTF8::lessen($str, $length, $tail);
else
return UTF8::lessenAsByte($str, $length, $tail);
}

static function lessen($str, $chars, $tail = '...') {
if (UTF8::length($str) <= $chars)
$tail = '';
else
$chars -= UTF8::length($tail);
$len = strlen($str);
for ($i = $adapted = 0; $i < $len; $adapted = $i) {
$high = ord($str{$i});
if ($high < 0x80)
$i += 1;
else if ($high < 0xE0)
$i += 2;
else if ($high < 0xF0)
$i += 3;
else
$i += 4;
if (--$chars < 0)
break;
}
return trim(substr($str, 0, $adapted)) . $tail;
}

static function lessenAsByte($str, $bytes, $tail = '...') {
if (strlen($str) <= $bytes)
$tail = '';
else
$bytes -= strlen($tail);
$len = strlen($str);
for ($i = $adapted = 0; $i < $len; $adapted = $i) {
$high = ord($str{$i});
if ($high < 0x80)
$i += 1;
else if ($high < 0xE0)
$i += 2;
else if ($high < 0xF0)
$i += 3;
else
$i += 4;
if ($i > $bytes)
break;
}
return substr($str, 0, $adapted) . $tail;
}

static function lessenAsEm($str, $ems, $tail = '...') {
if (UTF8::lengthAsEm($str) <= $ems)
$tail = '';
else
$ems -= strlen($tail);
$len = strlen($str);
for ($i = $adapted = 0; $i < $len; $adapted = $i) {
$high = ord($str{$i});
if ($high < 0x80) {
$i += 1;
$ems -= 1;
} else {
if ($high < 0xE0)
$i += 2;
else if ($high < 0xF0)
$i += 3;
else
$i += 4;
$ems -= 2;
}
if ($ems < 0)
break;
}
return trim(substr($str, 0, $adapted)) . $tail;
}
}


final class Validator {
/**
Date-Time ::= RFC-1123 (the modification of RFC-822)
Expand Down
7 changes: 4 additions & 3 deletions framework/data/DBModel.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ function doesExistTable($tablename) {

class DBModel extends Singleton implements IModel {
protected $_attributes, $_qualifiers, $_query;
protected $_relations, $_filters, $_order, $_limitation, $table, $id, $_reservedFields, $_isReserved;
protected $_relations, $_filters, $_order, $_limitation, $table, $id, $_reservedFields, $_isReserved, $param;

function __construct($table = null) {
$this->context = Model_Context::getInstance();
Expand All @@ -56,14 +56,15 @@ public function reset($table = null, $param = null) {
$this->_order = array();
$this->_limit = array();
$this->_isReserved = array();

$this->param = array();
$this->_reservedFields = POD::reservedFieldNames();
$this->_reservedFunctions = POD::reservedFunctionNames();
if(!empty($this->_reservedFields)) {
foreach($this->_reservedFields as $reserved) {
$this->_isReserved[$reserved] = true;
}
}
if(!empty($param)) $this->param = $param;
}

public function resetAttributes() {
Expand Down Expand Up @@ -281,7 +282,7 @@ public function delete() {
return true;
return false;
}

/// To use create() method, $this->structure variable must be defined.
public function create() {
if(!isset($this->structure) || empty($this->structure) || !is_array($this->structure)) return false;
Expand Down
12 changes: 11 additions & 1 deletion framework/legacy/Needlworks.Cache.PageCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ private function _error($error) {
}

class queryCache extends Singleton {
private $pooltype = null;
function __construct($query = null, $prefix = null){
$this->reset();

Expand All @@ -177,8 +178,10 @@ function __construct($query = null, $prefix = null){

if($this->context->getProperty('service.memcached') == true) {
$this->pool = Cache_Memcache::getInstance();
$this->pooltype = 'memcache';
} else {
$this->pool = DBModel::getInstance();
$this->pooltype = 'db';
}
}

Expand Down Expand Up @@ -219,8 +222,15 @@ public function purge() {
else return false;
}
public function flush() {
if(empty($this->__usePageCache)) return false;
$this->pool->reset('PageCacheLog',$this->prefix);
$this->pool->flush();
if($this->pooltype == 'memcache') {
$this->pool->flush();
} else {
$this->pool->setQualifier('blogid','equals',getBlogId());
$this->pool->setQualifier('name','like',$this->prefix,true);
$this->pool->delete();
}
}

private function getQueryHash(){
Expand Down
2 changes: 1 addition & 1 deletion framework/legacy/Textcube.Control.Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public static function destroy($id, $setCookie = false) {
public static function gc($maxLifeTime = false) {
if(is_null(self::$context)) self::initialize();
self::query('query',"DELETE FROM ".self::$context->getProperty('database.prefix')."Sessions
WHERE updated < (UNIX_TIMESTAMP() - ".self::$context->getProperty('service.timeout').")");
WHERE updated < ".(Timestamp::getUNIXtime() - self::$context->getProperty('service.timeout')));
$result = self::query('all',"SELECT DISTINCT v.id, v.address
FROM ".self::$context->getProperty('database.prefix')."SessionVisits v
LEFT JOIN ".self::$context->getProperty('database.prefix')."Sessions s ON v.id = s.id AND v.address = s.address
Expand Down
4 changes: 2 additions & 2 deletions framework/legacy/Textcube.Data.Link.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
// due to compartibility issues with other software under 'Project Tattertools.'

class Link {
function Link() {
function __construct() {
$this->reset();
}

Expand Down Expand Up @@ -82,7 +82,7 @@ function add() {
if (!$query = $this->_buildQuery())
return false;
if (!isset($this->registered))
$query->setAttribute('written', 'UNIX_TIMESTAMP()');
$query->setAttribute('written', Timestamp::getUNIXtime());

if (!$query->insert())
return $this->_error('insert');
Expand Down
5 changes: 5 additions & 0 deletions framework/utils/Browser.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,11 @@ function __construct() {
}

public function getBrowserName() {
/// Blocking (is in development)
$ctx = Model_Context::getInstance();
if($ctx->getProperty('service.useMobileAdmin') != true) {
return 'unknown';
}
if(!is_null($this->browserName)) return $this->browserName;
if(isset($_SERVER['HTTP_USER_AGENT'])) {
if(strpos($_SERVER['HTTP_USER_AGENT'],'iPhone') ||
Expand Down
Loading

0 comments on commit 40a96c3

Please sign in to comment.