issue 44 : Remove x-functions from the importer module. In addition, some codes were refactored

git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@8485 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
taggon 2011-06-15 09:16:45 +00:00
parent a34550f4f9
commit 47e188ac13
5 changed files with 159 additions and 135 deletions

View file

@ -0,0 +1 @@
@charset "utf-8";#step2_position{height:150px;overflow-y:scroll;border:2px solid #DDDDDD}div.progressBox{width:700px;margin:30px auto;border:1px solid #DDDDDD;white-space:nowrap;overflow:hidden;height:20px}div.progress1{float:left;border-right:1px solid #DDDDDD;text-align:right;overflow:hidden;background-color:#361DB5;color:#FFFFFF;font-family:tahoma;font-family:tahoma;font-size:9pt;white-space:nowrap;height:20px}div.progress2{float:left;text-align:left;overflow:hidden;white-space:nowrap;color:#444444;font-family:tahoma;font-size:9pt;height:20px}.w700{width:700px}

View file

@ -1,5 +1,10 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<!--@if(__DEBUG__)-->
<load target="js/importer_admin.js" />
<load target="css/importer.css" />
<!--@else-->
<load target="js/importer_admin.min.js" />
<load target="css/importer.min.css" />
<!--@end-->
{@ $type_list = array('module'=>$lang->type_module, 'ttxml'=>$lang->type_ttxml, 'member'=>$lang->type_member, 'sync'=>$lang->type_syncmember, 'message'=>$lang->type_message) }
@ -10,9 +15,7 @@
<div class="header4">
<ul class="localNavigation">
<!--@foreach($type_list as $key => $val)-->
<li <!--@if($source_type==$key)-->class="on"<!--@end-->><a href="{getUrl('source_type',$key)}">{$val}</a></li>
<!--@end-->
<li loop="$type_list=>$key,$val" class="on"|cond="$source_type==$key"><a href="{getUrl('source_type',$key)}">{$val}</a></li>
</ul>
</div>

View file

@ -1,5 +1,10 @@
<!--%import("js/importer_admin.js")-->
<!--%import("css/importer.css")-->
<!--@if(__DEBUG__)-->
<load target="js/importer_admin.js" />
<load target="css/importer.css" />
<!--@else-->
<load target="js/importer_admin.min.js" />
<load target="css/importer.min.css" />
<!--@end-->
<h3 class="xeAdmin">{$lang->importer} <span class="gray">{$lang->cmd_management}</span></h3>
@ -8,7 +13,7 @@
<!--// step 1. import하려는 XML파일의 성격 및 대상 모듈을 지정 -->
<div id="step1">
<form action="./" method="get">
<form action="./" method="post">
<input type="hidden" name="module" value="{$module}" />
<input type="hidden" name="act" value="{$act}" />

View file

@ -8,163 +8,166 @@
* 회원정보와 게시글/댓글등의 동기화 요청 결과 처리 함수
**/
function doSync(fo_obj) {
exec_xml('importer','procImporterAdminSync', new Array(), completeSync);
exec_xml(
'importer',
'procImporterAdminSync',
[],
function(ret){
alert(ret.message);
location.href = location.href;
}
);
return false;
}
function completeSync(ret_obj) {
alert(ret_obj['message']);
location.href=location.href;
}
/**
* xml파일을 DB입력전에 extract를 통해 분할 캐싱을 요청하는 함수
**/
var prepared = false;
function doPreProcessing(fo_obj) {
var xml_file = fo_obj.xml_file.value;
function doPreProcessing(form) {
var xml_file, type, resp, prepared = false, $ = jQuery, $status, $process, $form;
xml_file = form.elements['xml_file'].value;
type = form.elements['type'].value;
if(!xml_file) return false;
var type = fo_obj.type.value;
$form = $('#importForm').hide();
$process = $('#process').show();
$status = $('#status').empty();
// display dots while preparing
(function(){
if(prepared) return;
var str = $status.html();
(!str.length || str.length - preProcessingMsg.length > 50)?str=preProcessingMsg:str+='.';
$status.html(str);
setTimeout(arguments.callee, 50);
})();
jQuery('#importForm').hide();
jQuery('#process').show();
jQuery('#status').empty();
prepared = false;
setTimeout(doPrepareDot, 50);
var params = new Array();
params['xml_file'] = xml_file;
params['type'] = type;
function on_complete(ret) {
var $reload, $cont, fo_proc, fo_import, elems, i, c, key, to_copy;
var response_tags = new Array('error','message','type','total','cur','key','status');
exec_xml('importer','procImporterAdminPreProcessing', params, completePreProcessing, response_tags);
prepared = true;
$status.empty();
$reload = $('#btn_reload');
$cont = $('#btn_continue');
if(ret.status == -1) {
$form.show();
$reload.show();
$process.hide();
$cont.hide();
return alert(ret.message);
}
$reload.hide();
$cont.show();
fo_proc = get_by_id('fo_process');
elems = fo_proc.elements;
for(i=0,c=resp.length; i < c; i++) {
key = resp[i];
elems[key]?elems[key].value=ret[key]:0;
}
fo_import = get_by_id('fo_import');
if(fo_import) {
to_copy = ['target_module','guestbook_target_module','user_id', 'unit_count'];
for(i=0,c=to_copy.length; i < c; i++) {
key = to_copy[i];
if(fo_import.elements[key]) fo_proc.elements[key].value = fo_import.elements[key].value;
}
}
doImport();
}
exec_xml(
'importer', // module
'procImporterAdminPreProcessing', // action
{type:type, xml_file:xml_file}, // parameters
on_complete, // callback
resp=['error','message','type','total','cur','key','status'] // response tags
);
return false;
}
/* 준비중일때 .(dot) 찍어주는.. */
function doPrepareDot() {
if(prepared) return;
var str = jQuery('#status').html();
if(str.length < 1 || str.length - preProcessingMsg.length > 50) str = preProcessingMsg;
else str += ".";
jQuery('#status').html(str);
setTimeout(doPrepareDot, 50);
}
/* 준비가 끝났을때 호출되는 함수 */
function completePreProcessing(ret_obj, response_tags) {
prepared = true;
jQuery('#status').empty();
var status = ret_obj['status'];
var message = ret_obj['message'];
var type = ret_obj['type'];
var total = parseInt(ret_obj['total'],10);
var cur = parseInt(ret_obj['cur'],10);
var key = ret_obj['key'];
if(status == -1) {
xDisplay('importForm','block');
xDisplay('process','none');
xDisplay('btn_reload','block');
xDisplay('btn_continue','none');
alert(message);
return;
}
jQuery('#btn_reload').hide();
jQuery('#btn_continue').show();
var fo_obj = jQuery('#fo_process').get(0);
fo_obj.type.value = type;
fo_obj.total.value = total;
fo_obj.cur.value = cur;
fo_obj.key.value = key;
var fo_import = jQuery('#fo_import').get(0);
if(fo_import && fo_import.target_module) fo_obj.target_module.value = fo_import.target_module.value;
if(fo_import && fo_import.guestbook_target_module) fo_obj.guestbook_target_module.value = fo_import.guestbook_target_module.value;
if(fo_import && fo_import.user_id) fo_obj.user_id.value = fo_import.user_id.value;
fo_obj.unit_count.value = fo_import.unit_count.options[fo_import.unit_count.selectedIndex].value;
// extract된 파일을 이용해서 import
doImport();
}
/* @brief 임포트 시작 */
/* @brief Start importing */
function doImport() {
var fo_obj = jQuery('#fo_process').get(0);
var form = get_by_id('fo_process'), elems = form.elements, i, c, params={}, resp;
var params = new Array();
params['type'] = fo_obj.type.value;
params['total'] = fo_obj.total.value;
params['cur'] = fo_obj.cur.value;
params['key'] = fo_obj.key.value;
params['target_module'] = fo_obj.target_module.value;
params['guestbook_target_module'] = fo_obj.guestbook_target_module.value;
params['unit_count'] = fo_obj.unit_count.value;
params['user_id'] = fo_obj.user_id.value;
for(i=0,c=elems.length; i < c; i++) {
params[elems[i].name] = elems[i].value;
}
displayProgress(params['total'], params['cur']);
displayProgress(params.total, params.cur);
var response_tags = new Array('error','message','type','total','cur','key');
function on_complete(ret, response_tags) {
var i, c, key;
for(i=0,c=resp.length; i < c; i++) {
key = resp[i];
elems[key]?elems[key].value=ret_obj[key]:0;
}
ret.total = parseInt(ret.total, 10) || 0;
ret.cur = parseInt(ret.cur, 10) || 0;
if(ret.total > ret.cur) {
doImport();
} else {
alert(ret.message);
try {
form.reset();
get_by_id('fo_import').reset();
jQuery('#process').hide();
jQuery('#importForm').show();
} catch(e){};
}
}
show_waiting_message = false;
exec_xml('importer','procImporterAdminImport', params, completeImport, response_tags);
exec_xml(
'importer', // module
'procImporterAdminImport', // act
params,
on_complete, // callback
resp = ['error','message','type','total','cur','key'] // response tags
);
show_waiting_message = true;
return false;
}
/* import중 표시 */
function completeImport(ret_obj, response_tags) {
var message = ret_obj['message'];
var type = ret_obj['type'];
var total = parseInt(ret_obj['total'], 10);
var cur = parseInt(ret_obj['cur'], 10);
var key = ret_obj['key'];
displayProgress(total, cur);
var fo_obj = jQuery('#fo_process').get(0);
fo_obj.type.value = type;
fo_obj.total.value = total;
fo_obj.cur.value = cur;
fo_obj.key.value = key;
// extract된 파일을 이용해서 import
if(total > cur) doImport();
else {
alert(message);
fo_obj.reset();
jQuery('#process').hide();
jQuery('#importForm').show();
jQuery('#fo_import').get(0).reset();
}
}
/* 상태 표시 함수 */
/* display progress */
function displayProgress(total, cur) {
// 진행률 구함
var per = 0;
if(total > 0) per = Math.round(cur / total * 100);
else per = 100;
if(!per) per = 1;
var per, stat, $stat;
var status = '<div class="progressBox"><div class="progress1" style="width:'+per+'%;">'+per+'%&nbsp;</div>';
status += '<div class="progress2">'+cur+'/'+total+'</div>';
status += '<div class="clear"></div></div>';
jQuery('#status').html(status);
per = Math.max(total?Math.round(cur/total*100):100, 1);
$stat = jQuery('#status');
if(!$stat.find('div.progress1').length) {
$stat.html( '<div class="progressBox"><div class="progress1"></div><div class="progress2"></div><div class="clear"></div></div>' );
}
$stat
.find('div.progress1')
.html(per+'&nbsp;')
.css('width', per+'%')
.end()
.find('div.progress2')
.text(cur+'/'+total);
}
function insertSelectedModule(id, module_srl, mid, browser_title) {
jQuery('#' + id).val(module_srl);
jQuery('#_' + id).val(browser_title+' ('+mid+')');
get_by_id(id).value = module_srl;
get_by_id('_'+id).value = browser_title + ' ('+mid+')';
}

View file

@ -0,0 +1,12 @@
/**
* @file modules/importer/js/importer_admin.js
* @author NHN (developers@xpressengine.com)
* @brief importer에서 사용하는 javascript
**/
function doSync(fo_obj){exec_xml('importer','procImporterAdminSync',[],function(ret){alert(ret.message);location.href=location.href});return false}
function doPreProcessing(form){var xml_file,type,resp,prepared=false,$=jQuery,$status,$process,$form;xml_file=form.elements['xml_file'].value;type=form.elements['type'].value;if(!xml_file)return false;$form=$('#importForm').hide();$process=$('#process').show();$status=$('#status').empty();(function(){if(prepared)return;var str=$status.html();(!str.length||str.length-preProcessingMsg.length>50)?str=preProcessingMsg:str+='.';$status.html(str);setTimeout(arguments.callee,50)})();setTimeout(doPrepareDot,50)
function on_complete(ret){var $reload,$cont,fo_proc,fo_import,elems,i,c,key,to_copy;prepared=true;$status.empty();$reload=$('#btn_reload');$cont=$('#btn_continue');if(ret.status==-1){$form.show();$reload.show();$process.hide();$cont.hide();return alert(ret.message)};$reload.hide();$cont.show();fo_proc=get_by_id('fo_process');elems=fo_proc.elements;for(i=0,c=resp.length;i<c;i++){key=resp[i];elems[key]?elems[key].value=ret[key]:0};fo_import=get_by_id('fo_import');if(fo_import){to_copy=['target_module','guestbook_target_module','user_id','unit_count'];for(i=0,c=to_copy.length;i<c;i++){key=to_copy[i];if(fo_import.elements[key])fo_proc.elements[key].value=fo_import.elements[key].value}};doImport()};exec_xml('importer','procImporterAdminPreProcessing',{type:type,xml_file:xml_file},on_complete,resp=['error','message','type','total','cur','key','status']);return false}
function doImport(){var form=get_by_id('fo_process'),elems=form.elements,i,c,params={},resp;for(i=0,c=elems.length;i<c;i++)params[elems[i].name]=elems[i].value;displayProgress(params.total,params.cur)
function on_complete(ret,response_tags){var i,c,key;for(i=0,c=resp.length;i<c;i++){key=resp[i];elems[key]?elems[key].value=ret_obj[key]:0};ret.total=parseInt(ret.total,10)||0;ret.cur=parseInt(ret.cur,10)||0;if(ret.total>ret.cur){doImport()}else{alert(ret.message);try{form.reset();get_by_id('fo_import').reset();jQuery('#process').hide();jQuery('#importForm').show()}catch(e){}}};show_waiting_message=false;exec_xml('importer','procImporterAdminImport',params,on_complete,resp=['error','message','type','total','cur','key']);show_waiting_message=true;return false}
function displayProgress(total,cur){var per,stat,$stat;per=Math.max(total?Math.round(cur/total*100):100,1);$stat=jQuery('#status');if(!$stat.find('div.progress1').length)$stat.html('<div class="progressBox"><div class="progress1"></div><div class="progress2"></div><div class="clear"></div></div>');$stat.find('div.progress1').html(per+'&nbsp;').css('width',per+'%').end().find('div.progress2').text(cur+'/'+total)}
function insertSelectedModule(id,module_srl,mid,browser_title){get_by_id(id).value=module_srl;get_by_id('_'+id).value=browser_title+' ('+mid+')'}