importer.html 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. {% extends '../layout/admin.html' %}
  2. {% block html_title %}{{ customTitle(t('Import Data')) }}{% endblock %}
  3. {% block content_header %}
  4. <div class="header-wrap">
  5. <header id="page-header">
  6. <h1 id="admin-title" class="title">{{ t('Import Data') }}</h1>
  7. </header>
  8. </div>
  9. {% endblock %}
  10. {% block content_main %}
  11. <div class="content-main admin-importer">
  12. <div class="row">
  13. <div class="col-md-3">
  14. {% include './widget/menu.html' with {current: 'importer'} %}
  15. </div>
  16. <div class="col-lg-7 col-md-9">
  17. <!-- Flash message for success -->
  18. {% set smessage = req.flash('successMessage') %}
  19. {% if smessage.length %}
  20. <div class="alert alert-success">
  21. {% for e in smessage %}
  22. {{ e }}<br>
  23. {% endfor %}
  24. </div>
  25. {% endif %}
  26. <!-- Flash message for error -->
  27. {% set emessage = req.flash('errorMessage') %}
  28. {% if emessage.length %}
  29. <div class="alert alert-danger">
  30. {% for e in emessage %}
  31. {{ e }}<br>
  32. {% endfor %}
  33. </div>
  34. {% endif %}
  35. <!-- esa Importer management forms -->
  36. <form action="/_api/admin/settings/importerEsa" method="post" class="form-horizontal" id="importerSettingFormEsa" role="form"
  37. data-success-messaage="{{ ('Updated') }}">
  38. <fieldset>
  39. <legend>{{ t('importer_management.import_from', 'esa.io') }}</legend>
  40. <table class="table table-bordered table-mapping">
  41. <thead>
  42. <tr>
  43. <th width="45%">esa.io</th>
  44. <th width="10%"></th>
  45. <th>GROWI</th>
  46. </tr>
  47. </thead>
  48. <tbody>
  49. <tr>
  50. <th>{{ t('Article') }}</th>
  51. <th><i class="icon-arrow-right-circle text-success"></i></th>
  52. <th>{{ t('Page') }}</th>
  53. </tr>
  54. <tr>
  55. <th>{{ t('Category') }}</th>
  56. <th><i class="icon-arrow-right-circle text-success"></i></th>
  57. <th>{{ t('Page Path') }}</th>
  58. </tr>
  59. <tr>
  60. <th>{{ t('User') }}</th>
  61. <th></th>
  62. <th>(TBD)</th>
  63. </tr>
  64. </tbody>
  65. </table>
  66. <div class="well well-sm mb-0 small">
  67. <ul>
  68. <li>{{ t("importer_management.page_skip") }}</li>
  69. </ul>
  70. </div>
  71. <div class="form-group">
  72. <input type="password" name="dummypass" style="display:none; top: -100px; left: -100px;" />
  73. </div>
  74. <div class="form-group">
  75. <label for="settingForm[importer:esa:team_name]" class="col-xs-3 control-label">{{ t('importer_management.esa_settings.team_name') }}</label>
  76. <div class="col-xs-6">
  77. <input class="form-control" type="text" name="settingForm[importer:esa:team_name]" value="{{ settingForm['importer:esa:team_name'] | default('') }}">
  78. </div>
  79. </div>
  80. <div class="form-group">
  81. <label for="settingForm[importer:esa:access_token]" class="col-xs-3 control-label">{{ t('importer_management.esa_settings.access_token') }}</label>
  82. <div class="col-xs-6">
  83. <input class="form-control" type="password" name="settingForm[importer:esa:access_token]" value="{{ settingForm['importer:esa:access_token'] | default('') }}">
  84. </div>
  85. </div>
  86. <div class="form-group">
  87. <input type="hidden" name="_csrf" value="{{ csrf() }}" />
  88. <div class="col-xs-offset-3 col-xs-6">
  89. <button id="testConnectionToEsa" type="button" class="btn btn-primary btn-esa" data-action="/_api/admin/import/esa" name="Esa"
  90. data-success-message="Import posts from esa success." data-error-message="Error occurred in importing pages from esa.io">
  91. {{ t("importer_management.import") }}
  92. </button>
  93. <button type="submit" class="btn btn-secondary">{# the first element is the default button to submit #}
  94. {{ t('Update') }}
  95. </button>
  96. <span class="col-xs-offset-1">
  97. <button id="importFromEsa" type="button" class="btn btn-default btn-esa" data-action="/_api/admin/import/testEsaAPI" name="Esa"
  98. data-success-message="Test connection to esa success." data-error-message="Test connection to esa failed.">
  99. {{ t("importer_management.esa_settings.test_connection") }}
  100. </button>
  101. </span>
  102. </div>
  103. </div>
  104. </fieldset>
  105. </form>
  106. <!-- qiita:team Importer management forms -->
  107. <form action="/_api/admin/settings/importerQiita" method="post" class="form-horizontal mt-5" id="importerSettingFormQiita" role="form"
  108. data-success-messaage="Updated">
  109. <fieldset>
  110. <legend>{{ t('importer_management.import_from', 'Qiita:Team') }}</legend>
  111. <table class="table table-bordered table-mapping">
  112. <thead>
  113. <tr>
  114. <th width="45%">Qiita:Team</th>
  115. <th width="10%"></th>
  116. <th>GROWI</th>
  117. </tr>
  118. </thead>
  119. <tbody>
  120. <tr>
  121. <th>{{ t('Article') }}</th>
  122. <th><i class="icon-arrow-right-circle text-success"></i></th>
  123. <th>{{ t('Page') }}</th>
  124. </tr>
  125. <tr>
  126. <th>{{ t('Tag')}}</th>
  127. <th></th>
  128. <th>-</th>
  129. </tr>
  130. <tr>
  131. <th>{{ t("importer_management.Directory_hierarchy_tag") }}</th>
  132. <th></th>
  133. <th>(TBD)</th>
  134. </tr>
  135. <tr>
  136. <th>{{ t('User') }}</th>
  137. <th></th>
  138. <th>(TBD)</th>
  139. </tr>
  140. </tbody>
  141. </table>
  142. <div class="well well-sm mb-0 small">
  143. <ul>
  144. <li>{{ t("importer_management.page_skip") }}</li>
  145. </ul>
  146. </div>
  147. <div class="form-group">
  148. <input type="password" name="dummypass" style="display: none; top: -100px; left: -100px;" />
  149. </div>
  150. <div class="form-group">
  151. <label for="settingForm[importer:qiita:team_name]" class="col-xs-3 control-label">{{ t('importer_management.qiita_settings.team_name') }}</label>
  152. <div class="col-xs-6">
  153. <input class="form-control" type="text" name="settingForm[importer:qiita:team_name]" value="{{ settingForm['importer:qiita:team_name'] | default('') }}">
  154. </div>
  155. </div>
  156. <div class="form-group">
  157. <label for="settingForm[importer:qiita:access_token]" class="col-xs-3 control-label">{{ t('importer_management.qiita_settings.access_token') }}</label>
  158. <div class="col-xs-6">
  159. <input class="form-control" type="password" name="settingForm[importer:qiita:access_token]" value="{{ settingForm['importer:qiita:access_token'] | default('') }}">
  160. </div>
  161. </div>
  162. <div class="form-group">
  163. <input type="hidden" name="_csrf" value="{{ csrf() }}" />
  164. <div class="col-xs-offset-3 col-xs-6">
  165. <button id="testConnectionToQiita" type="button" class="btn btn-primary btn-qiita" data-action="/_api/admin/import/qiita" name="Qiita"
  166. data-success-message="Import posts from qiita:team success." data-error-message="Error occurred in importing pages from qiita:team">
  167. {{ t("importer_management.import") }}
  168. </button>
  169. <button type="submit" class="btn btn-secondary">{# the first element is the default button to submit #}
  170. {{ t('Update') }}
  171. </button>
  172. <span class="col-xs-offset-1">
  173. <button id="importFromQiita" type="button" class="btn btn-default btn-qiita" data-action="/_api/admin/import/testQiitaAPI" name="Qiita"
  174. data-success-message="Test connection to qiita:team success." data-error-message="Test connection to qiita:team failed.">
  175. {{ t("importer_management.qiita_settings.test_connection") }}
  176. </button>
  177. </span>
  178. </div>
  179. </div>
  180. </fieldset>
  181. </form>
  182. </div>
  183. </div>
  184. </div>
  185. <script>
  186. /**
  187. * show flash message
  188. */
  189. function showMessage(formId, msg, status) {
  190. $('#' + formId + ' .alert').remove();
  191. if (!status) {
  192. status = 'success';
  193. }
  194. var $message = $('<p class="alert"></p>');
  195. $message.addClass('alert-' + status);
  196. $message.html(msg.replace(/\n/g, '<br>'));
  197. $message.insertAfter('#' + formId + ' legend');
  198. if (status == 'success') {
  199. setTimeout(function()
  200. {
  201. $message.fadeOut({
  202. complete: function() {
  203. $message.remove();
  204. }
  205. });
  206. }, 5000);
  207. }
  208. }
  209. /**
  210. * Post form data and process UI
  211. */
  212. function postData(form, button, action, success_msg = "Success", error_msg = " {{ t('Error occurred') }} " ) {
  213. var id = form.attr('id');
  214. button.attr('disabled', 'disabled');
  215. var jqxhr = $.post(action, form.serialize(), function(data)
  216. {
  217. if (!data.status) {
  218. showMessage(id, `${error_msg} ${data.message}`, 'danger');
  219. }
  220. else {
  221. showMessage(id, success_msg);
  222. }
  223. })
  224. .fail(function() {
  225. showMessage(id, "{{ t('Error occurred') }}", 'danger');
  226. })
  227. .always(function() {
  228. button.prop('disabled', false);
  229. });
  230. return false;
  231. }
  232. /**
  233. * Handle button esa
  234. */
  235. $('.btn-esa, .btn-qiita').each(function() {
  236. var $form = $('#importerSettingForm' + $(this).attr('name'));
  237. var $button = $(this);
  238. var $action = $button.attr('data-action');
  239. var $success_msg = $button.attr('data-success-message');
  240. var $error_msg = $button.attr('data-error-message');
  241. $button.click(function() { return postData($form, $button, $action, $success_msg, $error_msg) });
  242. });
  243. /**
  244. * Handle submit button esa
  245. */
  246. $('#importerSettingFormEsa, #importerSettingFormQiita').each(function() {
  247. var $form = $(this);
  248. var $button = $("#importerSettingForm" + $(this).attr('name') + " button[type='submit']");
  249. var $action = $form.attr('action');
  250. var $success_msg = $button.attr('data-success-message');
  251. var $error_msg = $button.attr('data-error-message');
  252. $form.submit(function() { return postData($form, $button, $action, $success_msg, $error_msg) });
  253. });
  254. </script>
  255. {% endblock content_main %}
  256. {% block content_footer %}
  257. {% endblock content_footer %}