Bläddra i källkod

apply options for revisions

Yuki Takei 6 år sedan
förälder
incheckning
c1152698b4

+ 26 - 4
src/client/js/components/Admin/ImportData/GrowiZipImportConfigurationModal.jsx

@@ -10,10 +10,6 @@ import AppContainer from '../../../services/AppContainer';
 // import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 
-export const AVAILABLE_COLLECTION_NAMES = [
-  'pages',
-];
-
 class GrowiZipImportConfigurationModal extends React.Component {
 
   constructor(props) {
@@ -143,6 +139,29 @@ class GrowiZipImportConfigurationModal extends React.Component {
     /* eslint-enable react/no-unescaped-entities */
   }
 
+  renderRevisionsContents() {
+    const { option } = this.state;
+
+    /* eslint-disable react/no-unescaped-entities */
+    return (
+      <>
+        <div className="checkbox checkbox-warning">
+          <input
+            id="cbOpt1"
+            type="checkbox"
+            checked={option.isOverwriteAuthorWithCurrentUser}
+            onChange={() => this.changeHandler({ isOverwriteAuthorWithCurrentUser: !option.isOverwriteAuthorWithCurrentUser })}
+          />
+          <label htmlFor="cbOpt1">
+            Overwrite page's author with the current user
+            <p className="help-block mt-0">Recommended <span className="text-danger">NOT</span> to check this when users will also be restored.</p>
+          </label>
+        </div>
+      </>
+    );
+    /* eslint-enable react/no-unescaped-entities */
+  }
+
   render() {
     const { t, collectionName } = this.props;
 
@@ -151,6 +170,9 @@ class GrowiZipImportConfigurationModal extends React.Component {
       case 'pages':
         contents = this.renderPagesContents();
         break;
+      case 'revisions':
+        contents = this.renderRevisionsContents();
+        break;
     }
 
     return (

+ 4 - 2
src/client/js/components/Admin/ImportData/GrowiZipImportForm.jsx

@@ -5,6 +5,7 @@ import * as toastr from 'toastr';
 
 import GrowiArchiveImportOption from '@commons/models/admin/growi-archive-import-option';
 import ImportOptionForPages from '@commons/models/admin/import-option-for-pages';
+import ImportOptionForRevisions from '@commons/models/admin/import-option-for-revisions';
 
 import { createSubscribedElement } from '../../UnstatedUtils';
 import AppContainer from '../../../services/AppContainer';
@@ -13,7 +14,7 @@ import { toastSuccess, toastError } from '../../../util/apiNotification';
 
 
 import GrowiZipImportItem, { DEFAULT_MODE, MODE_RESTRICTED_COLLECTION } from './GrowiZipImportItem';
-import GrowiZipImportConfigurationModal, { AVAILABLE_COLLECTION_NAMES as CONFIGMODAL_AVAILABLE_COLLECTION_NAMES } from './GrowiZipImportConfigurationModal';
+import GrowiZipImportConfigurationModal from './GrowiZipImportConfigurationModal';
 import ErrorViewer from './ErrorViewer';
 
 
@@ -30,6 +31,7 @@ const ALL_GROUPED_COLLECTIONS = GROUPS_PAGE.concat(GROUPS_USER).concat(GROUPS_CO
 
 const IMPORT_OPTION_CLASS_MAPPING = {
   pages: ImportOptionForPages,
+  revisions: ImportOptionForRevisions,
 };
 
 class GrowiImportForm extends React.Component {
@@ -383,7 +385,7 @@ class GrowiImportForm extends React.Component {
         {collectionNames.map((collectionName) => {
           const collectionProgress = progressMap[collectionName];
           const errors = errorsMap[collectionName];
-          const isConfigButtonAvailable = CONFIGMODAL_AVAILABLE_COLLECTION_NAMES.includes(collectionName);
+          const isConfigButtonAvailable = Object.keys(IMPORT_OPTION_CLASS_MAPPING).includes(collectionName);
 
           return (
             <div className="col-xs-6 my-1" key={collectionName}>

+ 19 - 12
src/server/routes/apiv3/import.js

@@ -42,6 +42,23 @@ const router = express.Router();
  *            description: whether the current importing job exists or not
  */
 
+/**
+ * generate overwrite params with overwrite-params/* modules
+ * @param {string} collectionName
+ * @param {object} req Request Object
+ * @param {GrowiArchiveImportOption} options GrowiArchiveImportOption instance
+ */
+const generateOverwriteParams = (collectionName, req, options) => {
+  switch (collectionName) {
+    case 'pages':
+      return require('./overwrite-params/pages')(req, options);
+    case 'revisions':
+      return require('./overwrite-params/revisions')(req, options);
+    default:
+      return {};
+  }
+};
+
 module.exports = (crowi) => {
   const { growiBridgeService, importService } = crowi;
   const accessTokenParser = require('../../middleware/access-token-parser')(crowi);
@@ -191,18 +208,8 @@ module.exports = (crowi) => {
       const importSettings = importService.generateImportSettings(options.mode);
       importSettings.jsonFileName = fileName;
 
-      /*
-       * define overwrite params for each collection
-       * all imported documents are overwriten by this value
-       * each value can be any value or a function (value, { document, schema, propertyName }) { return newValue }
-       */
-      switch (collectionName) {
-        case 'pages':
-          importSettings.overwriteParams = require('./overwrite-params/pages')(req, options);
-          break;
-        default:
-          importSettings.overwriteParams = {};
-      }
+      // generate overwrite params
+      importSettings.overwriteParams = generateOverwriteParams(collectionName, req, options);
 
       importSettingsMap[collectionName] = importSettings;
     });

+ 1 - 1
src/server/service/import.js

@@ -419,7 +419,7 @@ class ImportService {
       // distinguish between null and undefined
       if (value !== undefined) {
         const overwriteFunc = (typeof overwriteValue === 'function') ? overwriteValue : null;
-        _document[propertyName] = (overwriteFunc != null) ? overwriteFunc(value, { document: _document, propertyName, schema }) : value;
+        _document[propertyName] = (overwriteFunc != null) ? overwriteFunc(value, { document: _document, propertyName, schema }) : overwriteValue;
       }
     });