PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/files/xe-core/1.7.5.7/modules/importer/tpl/js/importer_admin.js

https://gitlab.com/Mirros/jsdelivr
JavaScript | 251 lines | 184 code | 46 blank | 21 comment | 30 complexity | aff4e1a81040818af292752b35c8847f MD5 | raw file
  1. /**
  2. * @file modules/importer/js/importer_admin.js
  3. * @author NAVER (developers@xpressengine.com)
  4. * @brief importer에서 사용하는 javascript
  5. **/
  6. jQuery(function($){
  7. // Note : Module finder is defined modules/admin/tpl/js/admin.js
  8. // Check whether the xml file exists
  9. $('.checkxml')
  10. .find('input:text')
  11. .change(function(){
  12. $(this).closest('.checkxml').find('.x_help-inline').hide();
  13. })
  14. .end()
  15. .find('button')
  16. .click(function(){
  17. var $this, $container, $input, $messages, $loading, $form, $syncmember, count;
  18. $this = $(this).prop('disabled', true);
  19. $form = $this.closest('form');
  20. $container = $this.closest('.checkxml');
  21. $input = $container.find('input').prop('disabled', true).addClass('loading');
  22. $message = $container.find('.x_help-inline').hide();
  23. function on_complete(data) {
  24. var $ul, $ttxml, $xml;
  25. //$ul = $this.closest('ul');
  26. $xml = $form.find('>.xml');
  27. $ttxml = $form.find('>.ttxml');
  28. $message.text(data.result_message);
  29. // when the file doesn't exists or any other error occurs
  30. if(data.error || data.exists != 'true') {
  31. $message.attr('class', 'x_help-inline').fadeIn(300);
  32. $ttxml = $ttxml.filter(':visible');
  33. $ttxml.eq(-1).slideUp(100, function(){
  34. $ttxml = $ttxml.slice(0,-1).eq(-1).slideUp(100,arguments.callee);
  35. });
  36. $form.find(':submit').attr('disabled','disabled');
  37. return restore();
  38. }
  39. $message.attr('class', 'x_help-inline').fadeIn(300);
  40. $form.find(':submit').removeAttr('disabled');
  41. $syncmember = $form.find('.syncmember:hidden');
  42. $input.prop('disabled', false).removeClass('loading');
  43. $this.prop('disabled', false);
  44. if(data.type == 'XML') {
  45. $xml.not(':visible').add($syncmember).slideDown(300);
  46. } else if(data.type == 'TTXML') {
  47. $ttxml.not(':visible').add($syncmember).slideDown(300);
  48. $form.find('input[name=type]').val('ttxml');
  49. }
  50. };
  51. function restore() {
  52. $input.prop('disabled', false).removeClass('loading');
  53. $this.prop('disabled', false);
  54. $form.find('.syncmember:visible').slideUp(100);
  55. return false;
  56. };
  57. show_waiting_message = false;
  58. $.exec_json('importer.procImporterAdminCheckXmlFile', {filename:$.trim($input.val())}, on_complete);
  59. })
  60. .end()
  61. .find('.x_help-inline').hide().end()
  62. .closest('form').find('>.ttxml').hide().end().end()
  63. .closest('form').find(':submit').attr('disabled','disabled');
  64. // hide 'sync member' block
  65. $('.syncmember').hide();
  66. });
  67. /**
  68. * 회원정보와 게시글/댓글등의 동기화 요청 및 결과 처리 함수
  69. **/
  70. function doSync(fo_obj) {
  71. exec_xml(
  72. 'importer',
  73. 'procImporterAdminSync',
  74. [],
  75. function(ret){
  76. alert(ret.message);
  77. location.href = location.href;
  78. }
  79. );
  80. return false;
  81. }
  82. /**
  83. * xml파일을 DB입력전에 extract를 통해 분할 캐싱을 요청하는 함수
  84. **/
  85. function doPreProcessing(form, formId) {
  86. var xml_file, type, resp, prepared = false, $ = jQuery, $status, $process, $form;
  87. xml_file = form.elements['xml_file'].value;
  88. type = form.elements['type'].value;
  89. if(!xml_file) return false;
  90. // show modal window
  91. $process = $('#process');
  92. if(!$('body').children('.x_modal-backdrop').length) $('body').append('<div class="x_modal-backdrop" />');
  93. $('a[href="#process"].modalAnchor').trigger('open.mw');
  94. exec_xml(
  95. 'importer', // module
  96. 'procImporterAdminPreProcessing', // action
  97. {type:type, xml_file:xml_file}, // parameters
  98. on_complete, // callback
  99. resp=['error','message','type','total','cur','key','status'] // response tags
  100. );
  101. function on_complete(ret) {
  102. var $reload, $cont, fo_proc, elems, i, c, key, to_copy, fo_import;
  103. prepared = true;
  104. // when fail prepare
  105. if(ret.status == -1) {
  106. return alert(ret.message);
  107. }
  108. fo_proc = get_by_id('fo_process');
  109. elems = fo_proc.elements;
  110. for(i=0,c=resp.length; i < c; i++) {
  111. key = resp[i];
  112. elems[key]?elems[key].value=ret[key]:0;
  113. }
  114. fo_import = get_by_id(formId);
  115. if(fo_import) {
  116. to_copy = ['target_module','guestbook_target_module','user_id', 'unit_count'];
  117. for(i=0,c=to_copy.length; i < c; i++) {
  118. key = to_copy[i];
  119. if(fo_import.elements[key]) fo_proc.elements[key].value = fo_import.elements[key].value;
  120. }
  121. }
  122. jQuery('#preProgressMsg').hide();
  123. jQuery('#progressMsg').show();
  124. doImport(formId);
  125. }
  126. return false;
  127. }
  128. /* @brief Start importing */
  129. function doImport(formId) {
  130. var form = get_by_id('fo_process'), elems = form.elements, i, c, params={}, resp;
  131. for(i=0,c=elems.length; i < c; i++) {
  132. params[elems[i].name] = elems[i].value;
  133. }
  134. function on_complete(ret, response_tags) {
  135. var i, c, key, fo_import;
  136. for(i=0,c=resp.length; i < c; i++) {
  137. key = resp[i];
  138. //elems[key]?elems[key].value=ret_obj[key]:0;
  139. elems[key]?elems[key].value=ret[key]:0;
  140. }
  141. ret.total = parseInt(ret.total, 10) || 0;
  142. ret.cur = parseInt(ret.cur, 10) || 0;
  143. percent = parseInt((ret.cur/ret.total)*100);
  144. jQuery('#totalCount').text(ret.total);
  145. jQuery('#completeCount').text(ret.cur);
  146. jQuery('#progressBar').width(percent+'%');
  147. jQuery('#progressPercent').html(percent + "%");
  148. if(ret.total > ret.cur) {
  149. doImport(formId);
  150. } else {
  151. function resultAlertMessage()
  152. {
  153. alert(ret.message);
  154. jQuery('a[href="#process"].modalAnchor')
  155. .unbind('before-close.mw')
  156. .trigger('close.mw')
  157. .find('#progressBar').width(1).end()
  158. .find('#progressPercent').html('0%').end();
  159. try {
  160. form.reset();
  161. get_by_id(formId).reset();
  162. } catch(e){ };
  163. jQuery('span.btn > input[type=submit]').attr('disabled','disabled');
  164. }
  165. fo_import = get_by_id(formId);
  166. if(fo_import != null && fo_import.isSync.checked)
  167. {
  168. exec_xml(
  169. 'importer', // module
  170. 'procImporterAdminSync', // act
  171. params,
  172. function(ret){if(ret && (!ret.error || ret.error == '0'))resultAlertMessage()}, // callback
  173. resp = ['error','message'] // response tags
  174. );
  175. }
  176. else resultAlertMessage();
  177. }
  178. }
  179. show_waiting_message = false;
  180. exec_xml(
  181. 'importer', // module
  182. 'procImporterAdminImport', // act
  183. params,
  184. on_complete, // callback
  185. resp = ['error','message','type','total','cur','key'] // response tags
  186. );
  187. show_waiting_message = true;
  188. return false;
  189. }
  190. /* display progress */
  191. function displayProgress(total, cur) {
  192. var per, stat, $stat;
  193. per = Math.max(total?Math.round(cur/total*100):100, 1);
  194. $stat = jQuery('#status');
  195. if(!$stat.find('div.progress1').length) {
  196. $stat.html( '<div class="progressBox"><div class="progress1"></div><div class="progress2"></div></div>' );
  197. }
  198. $stat
  199. .find('div.progress1')
  200. .html(per+'&nbsp;')
  201. .css('width', per+'%')
  202. .end()
  203. .find('div.progress2')
  204. .text(cur+'/'+total);
  205. }