쪽지 데이터 이전 처리

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3371 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-12-17 04:05:54 +00:00
parent 541d9f7c94
commit 55c3623bff
13 changed files with 244 additions and 0 deletions

View file

@ -5,6 +5,7 @@
<action name="procImporterAdminSync" type="controller" standalone="true" />
<action name="procImporterAdminMemberImport" type="controller" standalone="true" />
<action name="procImporterAdminMessageImport" type="controller" standalone="true" />
<action name="procImporterAdminModuleImport" type="controller" standalone="true" />
</actions>
</module>

View file

@ -240,6 +240,144 @@
return false;
}
/**
* @brief 메세지xml 파일을 분석해서 import
**/
function procImporterAdminMessageImport() {
set_time_limit(0);
$xml_file = Context::get('xml_file');
$total_count = (int)Context::get('total_count');
$success_count = (int)Context::get('success_count');
$readed_line = (int)Context::get('readed_line');
// xml_file 경로가 없으면 에러~
if(!$xml_file) return new Object(-1, 'msg_no_xml_file');
// local 파일 지정인데 파일이 없으면 역시 에러~
if(!eregi('^http:',$xml_file) && (!eregi("\.xml$", $xml_file) || !file_exists($xml_file)) ) return new Object(-1,'msg_no_xml_file');
// 이제부터 데이터를 가져오면서 처리
$fp = $this->getFilePoint($xml_file);
if(!$fp) return new Object(-1,'msg_no_xml_file');
$obj = null;
$inserted_count = 0;
// 본문 데이터부터 처리 시작
$read_line = 0;
while(!feof($fp)) {
$str = trim(fgets($fp, 1024));
if($str == "</message>") $read_line ++;
if($read_line < $readed_line) continue;
// 한 아이템 준비 시작
if($str == '<message>') {
$obj = null;
continue;
// 아이템 종료시 DB 입력
} else if( $str == '</message>') {
if($this->importMessage($obj)) $inserted_count ++;
if($inserted_count >= 500) {
$manual_break = true;
break;
}
// messages 태그 체크 (전체 개수를 구함)
} else if(substr($str,0,9)=='<messages') {
preg_match('/count="([0-9]+)"/i', $str, $matches);
$total_count = $matches[1];
continue;
// 선언구 패스~
} else if(substr($str,0,5)=='<?xml') {
continue;
// 종료 부분
} else if($str == '</messages>') {
break;
// 변수 체크
} else {
$buff .= $str;
$pos = strpos($buff, '>');
$key = substr($buff, 1, $pos-1);
if(substr($buff, -1 * ( strlen($key)+3)) == '</'.$key.'>') {
$val = base64_decode(substr($buff, $pos, strlen($buff)-$pos*2-2));
if($is_extra_var) $extra_var->{$key} = $val;
else $obj->{$key} = $val;
$buff = null;
}
}
}
fclose($fp);
$success_count += $inserted_count;
if($manual_break) {
$this->add('total_count',$total_count);
$this->add('success_count',$success_count);
$this->add('readed_line',$read_line);
$this->add('is_finished','0');
$this->setMessage(sprintf(Context::getLang('msg_importing'), $total_count, $success_count));
} else {
$this->add('is_finished','1');
$this->setMessage(sprintf(Context::getLang('msg_import_finished'), $success_count, $total_count));
}
}
/**
* @brief 주어진 xml 파일을 파싱해서 회원 정보 입력
**/
function importMessage($obj) {
// 보낸이/ 받는이의 member_srl을 구함 (존재하지 않으면 그냥 pass..)
$sender_args->user_id = $obj->sender;
$sender_output = executeQuery('member.getMemberInfo',$sender_args);
$sender_srl = $sender_output->data->member_srl;
if(!$sender_srl) return false;
$receiver_args->user_id = $obj->receiver;
$receiver_output = executeQuery('member.getMemberInfo',$receiver_args);
$receiver_srl = $receiver_output->data->member_srl;
if(!$receiver_srl) return false;
// 보내는 사용자의 쪽지함에 넣을 쪽지
$sender_args->sender_srl = $sender_srl;
$sender_args->receiver_srl = $receiver_srl;
$sender_args->message_type = 'S';
$sender_args->title = $obj->title;
$sender_args->content = $obj->content;
$sender_args->readed = $obj->readed;
$sender_args->regdate = $obj->regdate;
$sender_args->readed_date = $obj->readed_date;
$sender_args->related_srl = getNextSequence();
$sender_args->message_srl = getNextSequence();
$sender_args->list_order = $sender_args->message_srl * -1;
$output = executeQuery('member.sendMessage', $sender_args);
if(!$output->toBool()) return false;
// 받는 회원의 쪽지함에 넣을 쪽지
$receiver_args->message_srl = $sender_args->related_srl;
$receiver_args->list_order = $sender_args->related_srl*-1;
$receiver_args->sender_srl = $sender_srl;
if(!$receiver_args->sender_srl) $receiver_args->sender_srl = $receiver_srl;
$receiver_args->receiver_srl = $receiver_srl;
$receiver_args->message_type = 'R';
$receiver_args->title = $obj->title;
$receiver_args->content = $obj->content;
$receiver_args->readed = $obj->readed;
$receiver_args->regdate = $obj->regdate;
$receiver_args->readed_date = $obj->readed_date;
$output = executeQuery('member.sendMessage', $receiver_args);
if(!$output->toBool()) return false;
return true;
}
function procImporterAdminModuleImport() {
set_time_limit(0);

View file

@ -34,6 +34,9 @@
$template_filename = "module";
break;
case 'message' :
$template_filename = "message";
break;
case 'sync' :
$template_filename = "sync";
break;

View file

@ -13,6 +13,7 @@
$lang->importer = 'Transfer zeroboard datas';
$lang->source_type = 'Previous target';
$lang->type_member = 'Member data';
$lang->type_message = 'Message data';
$lang->type_module = 'Articles data';
$lang->type_syncmember = 'Synchronize member data';
$lang->target_module = 'Target module';
@ -44,6 +45,7 @@
// blah blah..
$lang->about_type_member = 'If you are transfering the member information, select this option';
$lang->about_type_message = 'If you are transfering the message information, select this option';
$lang->about_type_module = 'If you are transfering the board or articles information, select this option';
$lang->about_type_syncmember = 'If you are trying to synchronize the member information after transfering member and article information, select this option';
$lang->about_importer = "You can transfer Zeroboard4, Zeroboard5 Beta or other program's data into ZeroboardXE's data.\nIn order to tranfer, you have to use <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a> to convert the data you want into XML File then upload it.";

View file

@ -13,6 +13,7 @@
$lang->importer = 'Transferir los datos de zeroboard';
$lang->source_type = 'Objetivo a transferir';
$lang->type_member = 'Información del usuario';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_module = 'Información del documento.';
$lang->type_syncmember = 'Sincronizar la información del usuario';
$lang->target_module = 'Objetivo del módulo';
@ -44,6 +45,7 @@
// bla bla...
$lang->about_type_member = 'Seleccione esta opción si estas transferiendo la información del usuario.';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_module = 'Seleccione esta opción si estas transfeririendo información del documento de los tableros';
$lang->about_type_syncmember = 'Seleccione esta opción cuando tenga que sincronizar la información del usuario luego de haber transferido la información del usuario y del artículo.';
$lang->about_importer = "Es posible trasferir los datos de Zeroboard4, zb5beta o de otros programas a ZeroBoardXE.\nPara la transferencia debe utilizar <a href=\"#\" onclick=\"winopen('');return false;\">Exportador XML</a> para transformar los datos en archivo XML, y luego subir ese archivo.";

View file

@ -13,6 +13,7 @@
$lang->importer = 'ZBデータ変換';
$lang->source_type = 'データ変換の対象';
$lang->type_member = '会員情報';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_module = '書き込みデータ情報';
$lang->type_syncmember = '会員情報同期化';
$lang->target_module = '対象モジュール';
@ -44,6 +45,7 @@
// Bla, Blah..
$lang->about_type_member = 'データ変換の対象が会員情報の場合は選択してください。';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_module = 'データ変換の対象が書き込みデータである場合は選択してください。';
$lang->about_type_syncmember = '会員情報と書き込みデータなどの変換を行った後、会員情報を同期化する必要がある場合は、選択してください。';
$lang->about_importer = "ゼロボード4、zb5betaまたは他のプログラムの書き込みデータをゼロボードXEのデータに変換することができます。\n変換するためには、<a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>を利用して変換したい書き込みデータをXMLファイルで作成してアップロードしてください。";

View file

@ -13,6 +13,7 @@
$lang->importer = '제로보드 데이터 이전';
$lang->source_type = '이전 대상';
$lang->type_member = '회원 정보';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_module = '게시물 정보';
$lang->type_syncmember = '회원정보 동기화';
$lang->target_module = '대상 모듈';
@ -44,6 +45,7 @@
// 주절 주절..
$lang->about_type_member = '데이터 이전 대상이 회원정보일 경우 선택해주세요';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_module = '데이터 이전 대상이 게시판등의 게시물 정보일 경우 선택해주세요';
$lang->about_type_syncmember = '회원정보와 게시물정보등을 이전후 회원정보 동기화 해야 할때 선택해주세요';
$lang->about_importer = "제로보드4, zb5beta 또는 다른 프로그램의 데이터를 제로보드XE 데이터로 이전할 수 있습니다.\n이전을 위해서는 <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>를 이용해서 원하는 데이터를 XML파일로 생성후 업로드해주셔야 합니다.";

View file

@ -13,6 +13,7 @@
$lang->importer = 'Импортировать данные zeroboard';
$lang->source_type = 'Предыдущее назначение';
$lang->type_member = 'Данные пользователей';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_module = 'Данные статей';
$lang->type_syncmember = 'Синхронизировать данные пользователей';
$lang->target_module = 'Модуль назначения';
@ -44,6 +45,7 @@
// blah blah.. чепуха)
$lang->about_type_member = 'Если Вы импортируете информацию пользователей, выберите эту опцию';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_module = 'Если Вы импортируете информацию форума или статей, выберите эту опцию';
$lang->about_type_syncmember = 'Если Вы пытаетесь синхронизировать информацию пользователей после импорта информации пользователей и статей, выберите эту опцию';
$lang->about_importer = "Вы можете импортировать данные Zeroboard4, Zeroboard5 Beta или других программ в ZeroboardXE.\nЧтобы импортировать, Вам следует использовать <a href=\"#\" onclick=\"winopen('');return false;\">XML Экспортер (XML Exporter)</a>, чтобы конвертировать нужные данные в XML Файл и затем загрузить его.";

View file

@ -13,6 +13,7 @@
$lang->importer = '数据导入';
$lang->source_type = '导入对象';
$lang->type_member = '会员信息';
$lang->type_message = '쪽지(메세지) 정보';
$lang->type_module = '版面信息';
$lang->type_syncmember = '同步会员信息';
$lang->target_module = '模块对象';
@ -44,6 +45,7 @@
// 说明
$lang->about_type_member = '数据导入对象为会员信息时请选择此项。';
$lang->about_type_message = '데이터 이전 대상이 쪽지(메세지)일 경우 선택해주세요';
$lang->about_type_module = '数据导入对象为版面主题时请选择此项。';
$lang->about_type_syncmember = '导入会员信息和文章信息后需要同步会员信息时请选择此项。';
$lang->about_importer = "不仅可以导入Zeroboard 4Zb5beta的数据,也可以把其他程序数据导入到Zeroboard XE当中。\n导入数据时请利用 <a href=\"#\" onclick=\"winopen('');return false;\">XML Exporter</a>生成XML文件后再上传。";

View file

@ -23,6 +23,10 @@
<th scope="col"><label for="source_type_member">{$lang->type_member}</label></th>
<td class="left"><input type="radio" name="source_type" value="member" id="source_type_member" /> <label for="source_type_member">{$lang->about_type_member}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_message">{$lang->type_message}</label></th>
<td class="left"><input type="radio" name="source_type" value="message" id="source_type_message" /> <label for="source_type_message">{$lang->about_type_message}</label></td>
</tr>
<tr>
<th scope="col"><label for="source_type_syncmember">{$lang->type_syncmember}</label></th>
<td class="left"><input type="radio" name="source_type" value="sync" id="source_type_syncmember" /> <label for="source_type_syncmember">{$lang->about_type_syncmember}</label></td>

View file

@ -67,6 +67,58 @@ function completeImportMember(ret_obj) {
}
}
/* 쪽지 데이터 import */
function doImportMessage(fo_obj) {
var xml_file = fo_obj.xml_file.value;
if(!xml_file) return false;
var params = new Array();
params['xml_file'] = xml_file;
params['total_count'] = fo_obj.total_count.value;
params['success_count'] = fo_obj.success_count.value;
params['readed_line'] = fo_obj.readed_line.value;
var response_tags = new Array("error","message", "total_count", "success_count", "readed_line", "is_finished");
exec_xml('importer','procImporterAdminMessageImport', params, completeImportMessage, response_tags);
return false;
}
function completeImportMessage(ret_obj) {
var total_count = ret_obj['total_count'];
var success_count = ret_obj['success_count'];
var readed_line = ret_obj['readed_line'];
var is_finished = ret_obj['is_finished'];
if(is_finished == '1') {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = 0;
fo_obj.success_count.value = 0;
fo_obj.readed_line.value = 0;
fo_obj.xml_file.disabled = false;
xGetElementById("status").style.display = "none";
xGetElementById("status_button_prev").style.display = "block";
xGetElementById("status_button").style.display = "none";
xInnerHtml("status", ret_obj['message']);
alert(ret_obj['message']);
} else {
var fo_obj = xGetElementById("fo_import");
fo_obj.total_count.value = total_count;
fo_obj.success_count.value = success_count;
fo_obj.readed_line.value = readed_line;
fo_obj.xml_file.disabled = true;
xGetElementById("status").style.display = "block";
xGetElementById("status_button_prev").style.display = "none";
xGetElementById("status_button").style.display = "block";
xInnerHtml("status", ret_obj['message']);
doImportMessage(fo_obj);
}
}
/* 모듈 데이터 import */
function doImportModule(fo_obj) {
var target_module = fo_obj.target_module.options[fo_obj.target_module.selectedIndex].value;

View file

@ -0,0 +1,33 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<h3>{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
<div class="infoText">{nl2br($lang->about_importer)}</div>
<div>
<form action="./" method="get" onsubmit="return doImportMessage(this)" id="fo_import">
<input type="hidden" name="total_count" value="0" />
<input type="hidden" name="success_count" value="0" />
<input type="hidden" name="readed_line" value="0" />
<table cellspacing="0" class="adminTable">
<caption>{$lang->import_step_title[2]} - {$lang->import_step_desc[2]}</caption>
<tr>
<td>
<input type="text" name="xml_file" value="./" class="inputTypeText w400" />
<p>ex1) ../message.xml</p>
<p>ex2) http://...../message.xml</p>
</td>
</tr>
<tr>
<th class="button">
<div id="status_button_prev"><span class="button"><input type="submit" value="{$lang->cmd_next}" /></span></div>
<div id="status_button" style="display:none"><span class="button"><input type="submit" value="{$lang->cmd_continue}" /></span></div>
</th>
</tr>
</table>
<div id="status" style="display:none"></div>
</form>
</div>