XE 코드 고도화

1. 위젯/ 에디터컴포넌트의 코드 컴파일을 Context가 아닌 각 모듈이 trigger로 동작하게 개선 : 관리자 페이지에서 모듈 업데이트 필요
2. IE7에서 버튼 이미지가 어긋나는 문제 수정
3. 페이지 모듈의 캐싱 기능 추가 : 페이지 자체 캐시 가능하도록 함
4. 에디터에서 파일업로드시 파일 크기가 제대로 적용되지 않던 문제 수정 및 파일을 올리는 중에 남은 용량을 체크하여 미리 파일 업로드가 되지 않도록 함



git-svn-id: http://xe-core.googlecode.com/svn/sandbox@6103 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2009-04-14 09:34:12 +00:00
parent 1ee64389ab
commit 32c3e86b1b
42 changed files with 838 additions and 810 deletions

View file

@ -28,19 +28,6 @@
$this->setMessage('msg_auto_saved');
}
function doSaveDoc($args) {
if(Context::get('is_logged')) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
// 저장
return executeQuery('editor.insertSavedDoc', $args);
}
/**
* @brief 자동저장된 문서 삭제
**/
@ -79,30 +66,6 @@
}
}
/**
* @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger
**/
function triggerDeleteSavedDoc(&$obj) {
$this->deleteSavedDoc();
return new Object();
}
/**
* @brief 자동 저장된 글을 삭제
* 현재 접속한 사용자를 기준
**/
function deleteSavedDoc() {
if(Context::get('is_logged')) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
// 일단 이전 저장본 삭제
return executeQuery('editor.deleteSavedDoc', $args);
}
/**
* @brief 에디터의 모듈별 추가 확장 폼을 저장
**/
@ -171,6 +134,93 @@
$this->setMessage('success_updated');
}
/**
* @brief 에디터컴포넌트의 코드를 결과물로 변환
**/
function triggerEditorComponentCompile(&$content) {
$content = $this->transComponent($content);
}
/**
* @brief 에디터 컴포넌트코드를 결과물로 변환
**/
function transComponent($content) {
$content = preg_replace_callback('!<div([^\>]*)editor_component=([^\>]*)>(.*?)\<\/div\>!is', array($this,'transEditorComponent'), $content);
$content = preg_replace_callback('!<img([^\>]*)editor_component=([^\>]*?)\>!is', array($this,'transEditorComponent'), $content);
return $content;
}
/**
* @brief 내용의 에디터 컴포넌트 코드를 변환
**/
function transEditorComponent($matches) {
// IE에서는 태그의 특성중에서 " 를 빼어 버리는 경우가 있기에 정규표현식으로 추가해줌
$buff = $matches[0];
$buff = preg_replace_callback('/([^=^"^ ]*)=([^ ^>]*)/i', fixQuotation, $buff);
$buff = str_replace("&","&amp;",$buff);
// 에디터 컴포넌트에서 생성된 코드
$oXmlParser = new XmlParser();
$xml_doc = $oXmlParser->parse($buff);
if($xml_doc->div) $xml_doc = $xml_doc->div;
else if($xml_doc->img) $xml_doc = $xml_doc->img;
$xml_doc->body = $matches[3];
// attribute가 없으면 return
$editor_component = $xml_doc->attrs->editor_component;
if(!$editor_component) return $matches[0];
// component::transHTML() 을 이용하여 변환된 코드를 받음
$oEditorModel = &getModel('editor');
$oComponent = &$oEditorModel->getComponentObject($editor_component, 0);
if(!is_object($oComponent)||!method_exists($oComponent, 'transHTML')) return $matches[0];
return $oComponent->transHTML($xml_doc);
}
/**
* @brief 자동 저장
**/
function doSaveDoc($args) {
if(Context::get('is_logged')) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
// 저장
return executeQuery('editor.insertSavedDoc', $args);
}
/**
* @brief 게시글의 입력/수정이 일어났을 경우 자동 저장문서를 제거하는 trigger
**/
function triggerDeleteSavedDoc(&$obj) {
$this->deleteSavedDoc();
return new Object();
}
/**
* @brief 자동 저장된 글을 삭제
* 현재 접속한 사용자를 기준
**/
function deleteSavedDoc() {
if(Context::get('is_logged')) {
$logged_info = Context::get('logged_info');
$args->member_srl = $logged_info->member_srl;
} else {
$args->ipaddress = $_SERVER['REMOTE_ADDR'];
}
// 일단 이전 저장본 삭제
return executeQuery('editor.deleteSavedDoc', $args);
}
/**
* @brief 가상 사이트에서 사용된 에디터 컴포넌트 정보를 제거
**/
@ -256,6 +306,12 @@
}
$component_list->{$component_name} = $xml_info;
// 버튼, 아이콘 이미지 구함
$icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/icon.gif';
$component_icon_file = _XE_PATH_.'modules/editor/components/'.$component_name.'/component_icon.gif';
if(file_exists($icon_file)) $component_list->{$component_name}->icon = true;
if(file_exists($component_icon_file)) $component_list->{$component_name}->component_icon = true;
}
// enabled만 체크하도록 하였으면 그냥 return