Skip to content

Commit

Permalink
refs #514
Browse files Browse the repository at this point in the history
  * trunk와 1.8 트리 동기화
  • Loading branch information
inureyes committed Apr 1, 2010
1 parent 80a1073 commit 635f510
Show file tree
Hide file tree
Showing 46 changed files with 374 additions and 270 deletions.
32 changes: 28 additions & 4 deletions documents/changelog_ko.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,44 @@
* 블로그 : 최근 공지와 최근 글의 필자 치환자 추가 및 동작 추가 (#1437)
* 관리패널 : 모바일용 관리 모드 추가 (베타) (#1418)
* 일반 : 다양한 배포본 개발을 돕는 camouflage 기능 추가 (알파) (#1431)

* 일반 : DBModel에서 이스케이핑을 자동으로 판별하도록 함 (#1384)

=== 변경된 점 ===
* 일반 : 스태틱 리소스의 더 많은 부분을 serviceURL에서 불러오도록 함 (대용량 서비스 구축시 리소스 서버 분리시 적용) (#1441)

* 일반 : PHP 5.3에서의 호환성 조정
* 일반 : 모바일 폰, WI-FI 및 와이브로를 사용하는 노트북에서 세션이 유지되도록 세션 처리 루틴을 변경 (#1460)
* 일반 : OpenID 모듈을 1.8 스키마로 재작성 (#1385)
* 블로그 : RSS로 출력가능한 글 수의 한계를 30에서 50으로 증가 (#1452)
* 블로그 : 컨텐츠 포매팅시 절대 경로 사용을 기본값으로 변경 (#1407)
* 에디터 : 글 저장시 저장 버튼이 꺼지도록 UI 변경
* 리더 : RSS로 구독중인 글 목록이 스크롤을 따라 이동하도록 함 (#1161)
* 플러그인 : 구글맵 플러그인을 1.8 스키마로 업그레이드 (#1417)
* 관리패널 : canon 스킨의 디자인 개선 (#1161)
* 모블로깅 : 이메일 또는 모블로깅에서 엔터키를 줄바꿈으로 변환하도록 변경 (#1380)
* 모블로깅 : 모블로깅 작성시간이 메일 확인 시간이 아닌, 메일이 작성된 시간을 기준으로 하도록 수정 (#1449)

=== 버그 수정 ===
* 일반 : 공지사항 등의 내부 피드 로드가 갱신되지 않는 오류 수정 (#1440)
* 일반 : 공지사항을 관리 패널을 들어갈 때 마다 읽어서 로그인이 느려지는 문제 수정 (#1440)
* 일반 : RSS/ATOM 을 읽을 때 Cron이 실행되어 특정 경우 응답이 늦어 일부 리더 및 서비스에서 피드를 읽지 못하는 문제 수정 (#1178)
* 일반 : memcached 를 사용하는 모듈들에서 제 때 플러싱이 되지 않는 오류 수정 (#1455)
* 일반 : 세션 가비지 컬렉션이 정상적으로 동작하지 않는 문제 수정 (#1419)
* 블로그 : 댓글 ajax 블록 로드시에 ATOM/RSS 피드 치환자가 동작하지 않는 문제 수정 (#1435)
* 블로그 : 댓글 페이지 사용시 클릭했을때 2번째 페이지가 보이지 않는 문제 수정 (#1201)
* 블로그 : 댓글을 폈을 때 접히지 않는 문제 수정 (#1201)
* 블로그 : 글 작성시 카테고리 관련 쿼리에 잠재적으로 발생할 수 있는 오류 수정 (#1358)
* 모바일 : 아이폰 모드에서 댓글보기 동작 오류 수정 (#1436)
* 모바일 : 아이폰뷰에서 블로그 소유자의 이름이 제대로 나오지 않는 문제 수정 (#1432)
* 모바일 : 모바일 모드에서 댓글에 댓글을 달지 못하는 문제 수정 (#1459)
* 모바일 : 모바일 모드의 댓글 전체 보기에서 비공개 글의 댓글이 출력되는 문제 수정 (#1458)
* 관리패널 : Canon 스킨에서 블로그 선택 부분이 보이지 않는 문제 수정 (#1461)
* 플러그인: 통계 관련 플러그인들에서 값 및 출력이 제대로 되지 않던 문제 수정
* 에디터 : metaWeblogAPI 사용시 글 및 카테고리 정보를 제대로 가져오지 못하는 문제 수정 (#1433)
* 에디터 : html 코드의 웹표준 변환이 제대로 변환되지 않는 문제 수정 (#1438)
* 에디터 : 위지윅 에디터의 STD 참조 자바스크립트 에러 문제 수정 (#1439)
* 에디터 : 에디터 초기화 함수의 호출이 잘못되던 문제 수정 (#1457)
* 에디터 : Webkit 기반의 브라우저에서 html 처리 보정 루틴 개선 (#1438)
* POD : Cubrid에서 커밋 타이밍 조절 (#1277)
* TTXML : 카테고리복원, 방명록 정보, 스팸필터 정보 복원시 잘못될 수 있는 문제 수정 (#1298)
* TTXML : 댓글 알리미 정보가 복원되지 않는 문제 수정 (#1298)
* OpenID : Transaction 관련을 $_SESSION에서 파일로 옮겨 세션 의존으로 인하여 생기는 문제 수정 (#1385)
Expand All @@ -44,9 +68,9 @@
* rctps_rep_author_link : 저자가 작성한 글 목록 페이지로 가는 링크

=== 모바일 관리 패널 안내 ===
텍스트큐브 1.8.3에는 모바일 관리 패널의 초기 버전이 반영되었습니다. 아직 초기 버전이기 때문에 사용을 위해서는 옵션 파일의 수정이 필요합니다. 설치된 디렉토리의 config.php 에 아래의 한 줄을 추가하시면 됩니다.
텍스트큐브 1.8.3에는 모바일 관리 패널의 초기 버전이 반영되었습니다. 강제 사용을 끄기 위해서는 설치된 디렉토리의 config.php 에 아래의 한 줄을 추가하시면 됩니다.

$service['usemobileadmin'] = true;
$service['usemobileadmin'] = false;

이후 정식 기능이 될 경우에는 서버 메뉴의 환경 설정 패널에서 조정할 수 있게 될 예정입니다.

Expand Down
2 changes: 1 addition & 1 deletion documents/manual_requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Textcube 1.8 Requirements
* with mode_rewrite module
* PHP 5.2 or above
* with iconv / gd module
* MySQL 5.0 or above
* MySQL 5.0 / MariaDB 5.1 or above
* with UTF-8 character set and collation settings

For massive service or heavy load :
Expand Down
4 changes: 2 additions & 2 deletions framework/boot/10-CoreClasses.php
Original file line number Diff line number Diff line change
Expand Up @@ -711,7 +711,7 @@ function getValueByLocale($param)
} else {
$lang = "";
}
$locale = Locale::getInstance();
$locale = Locales::getInstance();
switch ($locale->match($lang)) {
case 3:
$matched = $param[$i];
Expand Down Expand Up @@ -929,7 +929,7 @@ function & selectNode($path, $lang = null) {
} else {
$lang = "";
}
$locale = Locale::getInstance();
$locale = Locales::getInstance();

switch ($locale->match($lang)) {
case 3:
Expand Down
3 changes: 2 additions & 1 deletion framework/id/textcube/config.default.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
define('TEXTCUBE_VERSION', '1.9 : Alpha 1');
define('TEXTCUBE_COPYRIGHT', 'Copyright © 2004-2010. Needlworks / Tatter Network Foundation. All rights reserved. Licensed under the GPL.');
define('TEXTCUBE_HOMEPAGE', 'http://www.textcube.org/');
define('TEXTCUBE_RESOURCE_URL', 'http://resources.textcube.org/1.8.2');
define('TEXTCUBE_RESOURCE_URL', 'http://resources.textcube.org/1.8.3');
define('CRLF', "\r\n");
define('TAB', " ");
define('INT_MAX',2147483647);
Expand Down Expand Up @@ -58,5 +58,6 @@
$service['debug_session_dump'] = false;
$service['debug_rewrite_module'] = false;
$service['useNumericURLonRSS'] = false;
$service['forceinstall'] = false;
//$service['adminskin'] = 'whitedream';
?>
21 changes: 14 additions & 7 deletions framework/legacy/Textcube.Control.Session.Memcached.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,16 +38,19 @@ public static function getName() {

public static function read($id) {
if(is_null(self::$mc)) self::initialize();
return self::$mc->get(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}");
//return self::$mc->get(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}");
return self::$mc->get(self::$context->getProperty('service.domain')."/sessions/{$id}");
}

public static function write($id, $data) {
if(is_null(self::$mc)) self::initialize();
return self::$mc->set(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",$data,0,self::$context->getProperty('service.timeout'));
//return self::$mc->set(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}",$data,0,self::$context->getProperty('service.timeout'));
return self::$mc->set(self::$context->getProperty('service.domain')."/sessions/{$id}",$data,0,self::$context->getProperty('service.timeout'));
}

public static function destroy($id, $setCookie = false) {
self::$mc->delete(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}");
//self::$mc->delete(self::$context->getProperty('service.domain')."/sessions/{$id}/{$_SERVER['REMOTE_ADDR']}");
self::$mc->delete(self::$context->getProperty('service.domain')."/sessions/{$id}");
self::$mc->delete(self::$context->getProperty('service.domain')."/anonymousSession/{$_SERVER['REMOTE_ADDR']}");
return self::$mc->delete(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}");
}
Expand Down Expand Up @@ -94,14 +97,16 @@ public static function setSessionAnonymous($currentId) {
public static function isAuthorized($id) {
if(is_null(self::$mc)) self::initialize();
/* OpenID and Admin sessions are treated as authorized ones*/
$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}");
//$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}");
$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}");
if(!empty($userid)) return true;
else return false;
}

public static function isGuestOpenIDSession($id) {
if(is_null(self::$mc)) self::initialize();
$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}");
//$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}");
$userid = self::$mc->get(self::$context->getProperty('service.domain')."/authorizedSession/{$id}");
if(!empty($userid) && $userid < 0) return true;
else return false;
}
Expand Down Expand Up @@ -132,7 +137,8 @@ public static function authorize($blogid, $userid) {
$_SESSION['userid'] = $userid;
$id = session_id();
if( self::isGuestOpenIDSession($id) ) {
$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,0,self::$context->getProperty('service.timeout'));
//$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,0,self::$context->getProperty('service.timeout'));
$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}",$userid,0,self::$context->getProperty('service.timeout'));
if ($result) {
return true;
}
Expand All @@ -141,7 +147,8 @@ public static function authorize($blogid, $userid) {
if (self::isAuthorized(session_id())) return true;
for ($i = 0; $i < 3; $i++) {
$id = dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF)) . dechex(rand(0x10000000, 0x7FFFFFFF));
$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,0,self::$context->getProperty('service.timeout'));
//$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}/{$_SERVER['REMOTE_ADDR']}",$userid,0,self::$context->getProperty('service.timeout'));
$result = self::$mc->set(self::$context->getProperty('service.domain')."/authorizedSession/{$id}",$userid,0,self::$context->getProperty('service.timeout'));

if ($result) {
@session_id($id);
Expand Down
6 changes: 3 additions & 3 deletions framework/legacy/Textcube.Control.Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,9 @@ public static function isAuthorized($id) {

$result = self::query('cell',"SELECT id
FROM ".self::$context->getProperty('database.prefix')."Sessions
WHERE id = '$id'
AND address = '{$_SERVER['REMOTE_ADDR']}'
AND (userid IS NOT NULL OR preexistence IS NOT NULL)");
WHERE id = '$id' "
// AND address = '{$_SERVER['REMOTE_ADDR']}'
."AND (userid IS NOT NULL OR preexistence IS NOT NULL)");
if ($result)
return true;
return false;
Expand Down
13 changes: 8 additions & 5 deletions framework/legacy/Textcube.Data.Category.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
class Category {
function __construct() {
$this->reset();
$this->pointer = null;
}

function reset() {
Expand Down Expand Up @@ -43,9 +44,10 @@ function open($filter = true, $fields = '*', $sort = 'priority') {
$pool->setOrder($sort);
$this->close();
$this->_result = $pool->getAll($fields);
// $this->_result = POD::query("SELECT $fields FROM {$database['prefix']}Categories WHERE blogid = ".getBlogId()." $filter $sort");
if ($this->_result)
if ($this->_result) {
$this->_count = count($this->_result);
$this->pointer = 0;
}
return $this->shift();
}

Expand All @@ -60,8 +62,8 @@ function close() {

function shift() {
$this->reset();
if ($this->_result && ($row = POD::fetch($this->_result))) {
foreach ($row as $name => $value) {
if($this->_result && !empty($this->_result[$this->pointer])) {
foreach ($this->_result[$this->pointer] as $name => $value) {
if ($name == 'blogid')
continue;
switch ($name) {
Expand All @@ -74,6 +76,7 @@ function shift() {
}
$this->$name = $value;
}
$this->pointer++;
return true;
}
return false;
Expand Down Expand Up @@ -228,4 +231,4 @@ function _error($error) {
return false;
}
}
?>
?>
6 changes: 3 additions & 3 deletions framework/locale/Locale.php → framework/locales/Locales.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
/// All rights reserved. Licensed under the GPL.
/// See the GNU General Public License for more details. (/documents/LICENSE, /documents/COPYRIGHT)

final class Locale extends Singleton {
final class Locales extends Singleton {
public static function getInstance() {
return self::_getInstance(__CLASS__);
}
Expand Down Expand Up @@ -124,7 +124,7 @@ function _t_noop($t) {
Direct locale call functions.
*/
function _t($t) {
$locale = Locale::getInstance();
$locale = Locales::getInstance();
if(isset($locale->resource[$locale->domain]) && isset($locale->resource[$locale->domain][$t])) {
return $locale->resource[$locale->domain][$t];
} else return $t;
Expand All @@ -145,7 +145,7 @@ function _f($t) {
// Function for skin language resource.
// _t() follows the admin panel locale setting, however _text() follows the skin locale setting.
function _text($t) {
$locale = Locale::getInstance();
$locale = Locales::getInstance();
if(isset($locale->resource['blog']) && isset($locale->resource['blog'][$t])) {
return $locale->resource['blog'][$t];
} else return $t;
Expand Down
File renamed without changes.
30 changes: 26 additions & 4 deletions framework/utils/Browser.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,20 @@ function __construct() {
public function getBrowserName() {
/// Blocking (is in development)
$ctx = Model_Context::getInstance();
if($ctx->getProperty('service.usemobileadmin') != true) {
if($ctx->getProperty('service.usemobileadmin',true) === false) {
return 'unknown';
}
if(!is_null($this->browserName)) return $this->browserName;
if(isset($_SERVER['HTTP_USER_AGENT'])) {
if(strpos($_SERVER['HTTP_USER_AGENT'],'iPhone') ||
strpos($_SERVER['HTTP_USER_AGENT'],'iPod')) {
$this->browserName = 'mSafari';
strpos($_SERVER['HTTP_USER_AGENT'],'iPod') ||
strpos($_SERVER['HTTP_USER_AGENT'],'Mobile Safari') ||
(strpos($_SERVER['HTTP_USER_AGENT'],'AppleWebkit')!== false &&
(strpos($_SERVER['HTTP_USER_AGENT'],'SymbianOS')!== false || // Nokia
strpos($_SERVER['HTTP_USER_AGENT'],'Pre')!== false))){ // Palm pre
$this->browserName = 'MobileSafari';
} else if(strpos($_SERVER['HTTP_USER_AGENT'],'Android')) {
$this->browserName = 'Android';
} else if(strpos($_SERVER['HTTP_USER_AGENT'],'Firefox') ||
strpos($_SERVER['HTTP_USER_AGENT'],'iceweasel') ||
strpos($_SERVER['HTTP_USER_AGENT'],'Minefield')) {
Expand All @@ -35,10 +41,26 @@ public function getBrowserName() {
$this->browserName = 'Chrome';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'Webkit')) {
$this->browserName = 'Webkit';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'IEMobile')) {
$this->browserName = 'IEMobile';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')) {
$this->browserName = 'IE';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'Opera Mini')) {
$this->browserName = 'OperaMini';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'Opera')) {
$this->browserName = 'Opera';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'AvantGo')) { // Avantgo (palm)
$this->browserName = 'AvantGo';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'DoCoMo')) { // DoCoMo Phones
$this->browserName = 'DoCoMo';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'Minimo')) { // Firefox mini
$this->browserName = 'Minimo';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'Maemo')) { // Firefox mini
$this->browserName = 'Maemo';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'BlackBerry')!== false) { // Blackberry
$this->browserName = 'BlackBerry';
} else if (strpos($_SERVER['HTTP_USER_AGENT'],'POLARIS')!== false) { // LGE Phone
$this->browserName = 'Polaris';
} else {
$this->browserName = 'unknown';
}
Expand All @@ -49,7 +71,7 @@ public function getVersion() {
}

public function isMobile() {
return (in_array($this->getBrowserName(),array('mSafari')));
return (in_array($this->getBrowserName(),array('MobileSafari','Android','Maemo','OperaMini','Minimo','DoCoMo','AvantGo','BlockBerry')));
}
public function isSafari() {
}
Expand Down
6 changes: 0 additions & 6 deletions interface/common/owner/header.php
Original file line number Diff line number Diff line change
Expand Up @@ -375,12 +375,6 @@
}
?>
<?php
/*if($service['helperPanel'] == true) {
?>
<script type="text/javascript" src="<?php echo $context->getProperty('service.path');?>/resources/script/dojo/dojo.js"></script>
<script type="text/javascript" src="<?php echo $context->getProperty('service.path');?>/resources/script/helpdialog.js"></script>
<?php
}*/
if($service['interface'] == 'simple') {
if(!in_array($blogMenu['contentMenu'],array('post','edit'))) {
?>
Expand Down
2 changes: 1 addition & 1 deletion interface/control/server/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
$encodingList = array('UTF-8','EUC-KR','SHIFT_JIS','EUC-JP','BIG5','EUC-CN','EUC-TW','GBK');

// Languages
$locale = Locale::getInstance();
$locale = Locales::getInstance();
$locale->setDirectory(ROOT.'/resources/locale/description');
$supportedLanguages = $locale->getSupportedLocales();

Expand Down
2 changes: 1 addition & 1 deletion interface/i/category/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
?>
<ul class="posts" id="category_<?php echo $suri['page'];?>" title="<?php echo ($category == 0 ? _text('모든 카테고리') : ucwords(getCategoryNameById($blogid, $category)));?>" selected="false">
<?php
$itemsView .= '<li class="group">'.CRLF;
$itemsView = '<li class="group">'.CRLF;
$itemsView .= ' <span class="left">' . ($category == 0 ? _text('모든 카테고리') : ucwords(getCategoryNameById($blogid, $category))) . ' ('.$list['count'].')</span>'.CRLF;
$itemsView .= ' <span class="right">Page <span class="now_page">' . $paging['page'] . '</span> / '.$paging['pages'].'</span>'.CRLF;
$itemsView .= '</li>'.CRLF;
Expand Down
2 changes: 1 addition & 1 deletion interface/i/search/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
?>
<ul class="search" id="search_<?php echo $suri['page'];?>" title="<?php echo _text('검색 결과');?>" selected="false">
<?php
$itemsView .= '<li class="group">'.CRLF;
$itemsView = '<li class="group">'.CRLF;
$itemsView .= ' <span class="left">'.htmlspecialchars($search).' '._text('검색 결과').'('.$list['count'].')</span>'.CRLF;
$itemsView .= ' <span class="right">'._text('페이지').'<span class="now_page">' . $paging['page'] . '</span> / '.$paging['pages'].'</span>'.CRLF;
$itemsView .= '</li>'.CRLF;
Expand Down
2 changes: 1 addition & 1 deletion interface/i/tag/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
?>
<ul class="posts" id="tag_<?php echo $suri['page'];?>" title="<?php echo getTagById($blogid, $suri['id']);?>" selected="false">
<?php
$itemsView .= '<li class="group">'.CRLF;
$itemsView = '<li class="group">'.CRLF;
$itemsView .= ' <span class="left">' . getTagById($blogid, $suri['id']) . ' ('.$list['count'].')</span>'.CRLF;
$itemsView .= ' <span class="right">Page <span class="now_page">' . $paging['page'] . '</span> / '.$paging['pages'].'</span>'.CRLF;
$itemsView .= '</li>'.CRLF;
Expand Down
Loading

0 comments on commit 635f510

Please sign in to comment.