sou 7 лет назад
Родитель
Сommit
bf55bce635
4 измененных файлов с 19 добавлено и 27 удалено
  1. 4 4
      lib/routes/admin.js
  2. 1 9
      lib/util/createGrowiPagesFromImports.js
  3. 13 13
      lib/util/importer.js
  4. 1 1
      lib/views/admin/importer.html

+ 4 - 4
lib/routes/admin.js

@@ -979,7 +979,7 @@ module.exports = function(crowi, app) {
     return res.render('admin/importer', {
       settingForm: settingForm,
     });
-  }
+  };
 
   actions.api = {};
   actions.api.appSetting = function(req, res) {
@@ -1222,10 +1222,10 @@ module.exports = function(crowi, app) {
    */
   actions.api.importDataFromEsa = async(req, res) => {
     const user = req.user;
-    const result = await importer.importDataFromEsa(user);
+    const errors = await importer.importDataFromEsa(user);
 
-    if (result.errors) {
-      return res.json({ status: false, message: `<br> - ${result.errors.join('<br> - ')}` });
+    if (errors) {
+      return res.json({ status: false, message: `<br> - ${errors.join('<br> - ')}` });
     }
     return res.json({ status: true });
   };

+ 1 - 9
lib/util/createGrowiPagesFromImports.js

@@ -12,8 +12,6 @@ module.exports = crowi => {
    * }]
    */
   const createGrowiPages = (pages) => {
-    let createdPages = [];
-    let rejectedPages = [];
     let errors = [];
 
     return new Promise((resolve, reject) => {
@@ -28,14 +26,12 @@ module.exports = crowi => {
           if (isCreatableName && !isPageNameTaken) {
             try {
               await Page.create(path, body, user, { grant: Page.GRANT_PUBLIC, grantUserGroupId: null });
-              createdPages.push(page);
             }
             catch (err) {
               errors.push(err);
             }
           }
           else {
-            rejectedPages.push(page);
             if (!isCreatableName) {
               errors.push(new Error(`${path} is not a creatable name in Growi`));
             }
@@ -50,11 +46,7 @@ module.exports = crowi => {
 
       Promise.all(promises)
         .then(() => {
-          resolve({
-            createdPages,
-            rejectedPages,
-            errors,
-          });
+          resolve(errors);
         });
     });
   };

+ 13 - 13
lib/util/importer.js

@@ -6,7 +6,6 @@ module.exports = crowi => {
 
   const logger = require('@alias/logger')('growi:util:importer');
   const esa = require('esa-nodejs');
-  const User = crowi.model('User');
   const config = crowi.getConfig();
   const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
   let importer = {};
@@ -28,17 +27,16 @@ module.exports = crowi => {
    */
   importer.importDataFromEsa = user => {
     return new Promise(async(resolve, reject) => {
-      const rawData = await getAllPostsFromEsa([], 1);
-      const data = convertEsaDataForGrowi(rawData, user);
-      const result = await createGrowiPages(data, user);
+      const firstPage = 1;
+      const errors = await importPostsFromEsa(firstPage, user, []);
 
-      resolve(result);
+      resolve(errors);
     });
   };
 
-  const getAllPostsFromEsa = (pagesSoFar, pageNum) => {
+  const importPostsFromEsa = (pageNum, user, errors) => {
     return new Promise((resolve, reject) => {
-      esaClient.api.posts({page: pageNum, per_page: 100}, (err, res) => {
+      esaClient.api.posts({page: pageNum, per_page: 100}, async(err, res) => {
         const nextPage = res.body.next_page;
         const postsReceived = res.body.posts;
 
@@ -46,12 +44,14 @@ module.exports = crowi => {
           reject(`error in page ${pageNum}: ${err}`);
         }
 
+        const data = convertEsaDataForGrowi(postsReceived, user);
+        const newErrors = await createGrowiPages(data);
+
         if (nextPage) {
-          return resolve(getAllPostsFromEsa(pagesSoFar.concat(postsReceived), nextPage));
-        }
-        else {
-          return resolve(pagesSoFar.concat(postsReceived));
+          return resolve(importPostsFromEsa(nextPage, user, errors.concat(newErrors)));
         }
+
+        resolve(errors.concat(newErrors));
       });
     });
   };
@@ -59,9 +59,9 @@ module.exports = crowi => {
   /**
    * Convert data into usable format for createGrowiPagesFromImports
    */
-  const convertEsaDataForGrowi = (rawData, user) => {
+  const convertEsaDataForGrowi = (pages, user) => {
     const basePage = '';
-    const data = rawData.map(post => {
+    const data = pages.map(post => {
       const category = post.category;
       const name = post.name;
       let path = '';

+ 1 - 1
lib/views/admin/importer.html

@@ -64,7 +64,7 @@
             <input type="hidden" name="_csrf" value="{{ csrf() }}" />
             <div class="col-xs-offset-3 col-xs-6">
               <button id="testConnectionToEsa" type="button" class="btn btn-primary" data-action="/_api/admin/import/esa"
-                  data-success-message="Import posts from esa success." data-error-message="Import posts from esa failed.">
+                  data-success-message="Import posts from esa success." data-error-message="Error occurred in importing pages from esa.io">
                 {{ t("importer_management.import") }}
               </button>
               <button type="submit" class="btn btn-secondary">{# the first element is the default button to submit #}