|
@@ -5,12 +5,10 @@ module.exports = crowi => {
|
|
|
'use strict';
|
|
'use strict';
|
|
|
|
|
|
|
|
const debug = require('debug')('growi:lib:importer');
|
|
const debug = require('debug')('growi:lib:importer');
|
|
|
- const request = require('request');
|
|
|
|
|
const esa = require('esa-nodejs');
|
|
const esa = require('esa-nodejs');
|
|
|
- const Page = crowi.model('Page');
|
|
|
|
|
const User = crowi.model('User');
|
|
const User = crowi.model('User');
|
|
|
- const pageRouter = require('../routes/page')(crowi);
|
|
|
|
|
const config = crowi.getConfig();
|
|
const config = crowi.getConfig();
|
|
|
|
|
+ const createGrowiPages = require('./createGrowiPagesFromImports')(crowi);
|
|
|
let importer = {};
|
|
let importer = {};
|
|
|
let esaClient = {};
|
|
let esaClient = {};
|
|
|
|
|
|
|
@@ -30,8 +28,9 @@ module.exports = crowi => {
|
|
|
*/
|
|
*/
|
|
|
importer.importPagesFromEsa = user => {
|
|
importer.importPagesFromEsa = user => {
|
|
|
return new Promise(async(resolve, reject) => {
|
|
return new Promise(async(resolve, reject) => {
|
|
|
- const data = await getAllDataFromEsa();
|
|
|
|
|
- const result = await createGrowiPages(data.body.posts, user);
|
|
|
|
|
|
|
+ const rawData = await getAllDataFromEsa();
|
|
|
|
|
+ const data = convertEsaDataForGrowi(rawData, user);
|
|
|
|
|
+ const result = await createGrowiPages(data, user);
|
|
|
|
|
|
|
|
resolve(result);
|
|
resolve(result);
|
|
|
});
|
|
});
|
|
@@ -53,53 +52,33 @@ module.exports = crowi => {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * Create posts from imported data
|
|
|
|
|
|
|
+ * Convert data into usable format for createGrowiPagesFromImports
|
|
|
*/
|
|
*/
|
|
|
- const createGrowiPages = (pages, user) => {
|
|
|
|
|
- const basePage = '/';
|
|
|
|
|
- let createdPages = [];
|
|
|
|
|
- let rejectedPages = [];
|
|
|
|
|
- let errors = [];
|
|
|
|
|
|
|
+ const convertEsaDataForGrowi = (rawData, user) => {
|
|
|
|
|
+ const basePage = '';
|
|
|
|
|
+ const data = rawData.body.posts.map(post => {
|
|
|
|
|
+ const category = post.category;
|
|
|
|
|
+ const name = post.name;
|
|
|
|
|
+ let path = '';
|
|
|
|
|
|
|
|
- return new Promise((resolve, reject) => {
|
|
|
|
|
- const promises = pages.map(page => {
|
|
|
|
|
- return new Promise(async(resolve, reject) => {
|
|
|
|
|
- const pagePath = basePage + [page.category, page.name].filter(v => v).join('/');
|
|
|
|
|
- const isCreatableName = await Page.isCreatableName(pagePath);
|
|
|
|
|
- const isPageNameTaken = await Page.findPage(pagePath, user, null, true);
|
|
|
|
|
-
|
|
|
|
|
- if (isCreatableName && !isPageNameTaken) {
|
|
|
|
|
- try {
|
|
|
|
|
- await Page.create(pagePath, page.body_md, 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(`${pagePath} is not a creatable name in Growi`));
|
|
|
|
|
- }
|
|
|
|
|
- if (isPageNameTaken) {
|
|
|
|
|
- errors.push(new Error(`${pagePath} already exists in Growi`));
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- resolve();
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ if (category && name) {
|
|
|
|
|
+ path = `${category}/${name}`;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (category) {
|
|
|
|
|
+ path = category;
|
|
|
|
|
+ }
|
|
|
|
|
+ else if (name) {
|
|
|
|
|
+ path = name;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- Promise.all(promises)
|
|
|
|
|
- .then(() => {
|
|
|
|
|
- resolve({
|
|
|
|
|
- createdPages,
|
|
|
|
|
- rejectedPages,
|
|
|
|
|
- errors,
|
|
|
|
|
- });
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ return {
|
|
|
|
|
+ path: `${basePage}/${path}`,
|
|
|
|
|
+ body: post.body_md,
|
|
|
|
|
+ user: user,
|
|
|
|
|
+ };
|
|
|
});
|
|
});
|
|
|
|
|
+
|
|
|
|
|
+ return data;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
/**
|