itizawa 5 лет назад
Родитель
Сommit
f342b51b81
3 измененных файлов с 44 добавлено и 44 удалено
  1. 2 42
      src/server/models/page.js
  2. 2 2
      src/server/routes/page.js
  3. 40 0
      src/server/service/page.js

+ 2 - 42
src/server/models/page.js

@@ -14,7 +14,7 @@ const differenceInYears = require('date-fns/differenceInYears');
 
 
 const { pathUtils } = require('growi-commons');
 const { pathUtils } = require('growi-commons');
 const templateChecker = require('@commons/util/template-checker');
 const templateChecker = require('@commons/util/template-checker');
-const { isTopPage } = require('@commons/util/path-utils');
+const { isTopPage, isTrashPage } = require('@commons/util/path-utils');
 const escapeStringRegexp = require('escape-string-regexp');
 const escapeStringRegexp = require('escape-string-regexp');
 
 
 const ObjectId = mongoose.Schema.Types.ObjectId;
 const ObjectId = mongoose.Schema.Types.ObjectId;
@@ -303,7 +303,7 @@ module.exports = function(crowi) {
   }
   }
 
 
   pageSchema.methods.isDeleted = function() {
   pageSchema.methods.isDeleted = function() {
-    return (this.status === STATUS_DELETED) || checkIfTrashed(this.path);
+    return (this.status === STATUS_DELETED) || isTrashPage(this.path);
   };
   };
 
 
   pageSchema.methods.isPublic = function() {
   pageSchema.methods.isPublic = function() {
@@ -1103,46 +1103,6 @@ module.exports = function(crowi) {
     }
     }
   };
   };
 
 
-  pageSchema.statics.deletePage = async function(pageData, user, options = {}) {
-    const newPath = this.getDeletedPageName(pageData.path);
-    const isTrashed = checkIfTrashed(pageData.path);
-
-    if (isTrashed) {
-      throw new Error('This method does NOT support deleting trashed pages.');
-    }
-
-    const socketClientId = options.socketClientId || null;
-    if (this.isDeletableName(pageData.path)) {
-
-      pageData.status = STATUS_DELETED;
-      const updatedPageData = await this.rename(pageData, newPath, user, { socketClientId, createRedirectPage: true });
-
-      return updatedPageData;
-    }
-
-    return Promise.reject(new Error('Page is not deletable.'));
-  };
-
-  const checkIfTrashed = (path) => {
-    return (path.search(/^\/trash/) !== -1);
-  };
-
-  pageSchema.statics.deletePageRecursively = async function(targetPage, user, options = {}) {
-    const isTrashed = checkIfTrashed(targetPage.path);
-    const newPath = this.getDeletedPageName(targetPage.path);
-    if (isTrashed) {
-      throw new Error('This method does NOT supports deleting trashed pages.');
-    }
-
-    if (!this.isDeletableName(targetPage.path)) {
-      throw new Error('Page is not deletable');
-    }
-    const socketClientId = options.socketClientId || null;
-    targetPage.status = STATUS_DELETED;
-    return await this.renameRecursively(targetPage, newPath, user, { socketClientId, createRedirectPage: true });
-  };
-
-
   pageSchema.statics.removeByPath = function(path) {
   pageSchema.statics.removeByPath = function(path) {
     if (path == null) {
     if (path == null) {
       throw new Error('path is required');
       throw new Error('path is required');

+ 2 - 2
src/server/routes/page.js

@@ -1195,10 +1195,10 @@ module.exports = function(crowi, app) {
         }
         }
 
 
         if (isRecursively) {
         if (isRecursively) {
-          await Page.deletePageRecursively(page, req.user, options);
+          await crowi.pageService.deletePageRecursively(page, req.user, options);
         }
         }
         else {
         else {
-          await Page.deletePage(page, req.user, options);
+          await crowi.pageService.deletePage(page, req.user, options);
         }
         }
       }
       }
     }
     }

+ 40 - 0
src/server/service/page.js

@@ -4,6 +4,7 @@ const logger = require('@alias/logger')('growi:models:page');
 const debug = require('debug')('growi:models:page');
 const debug = require('debug')('growi:models:page');
 const { Writable } = require('stream');
 const { Writable } = require('stream');
 const { createBatchStream } = require('@server/util/batch-stream');
 const { createBatchStream } = require('@server/util/batch-stream');
+const { isTrashPage } = require('@commons/util/path-utils');
 const { serializePageSecurely } = require('../models/serializers/page-serializer');
 const { serializePageSecurely } = require('../models/serializers/page-serializer');
 
 
 const STATUS_PUBLISHED = 'published';
 const STATUS_PUBLISHED = 'published';
@@ -201,6 +202,45 @@ class PageService {
 
 
   }
   }
 
 
+
+  async deletePage(pageData, user, options = {}) {
+    const Page = this.crowi.model('Page');
+    const newPath = Page.getDeletedPageName(pageData.path);
+    const isTrashed = isTrashPage(pageData.path);
+
+    if (isTrashed) {
+      throw new Error('This method does NOT support deleting trashed pages.');
+    }
+
+    const socketClientId = options.socketClientId || null;
+    if (Page.isDeletableName(pageData.path)) {
+
+      pageData.status = Page.STATUS_DELETED;
+      const updatedPageData = await Page.rename(pageData, newPath, user, { socketClientId, createRedirectPage: true });
+
+      return updatedPageData;
+    }
+
+    return Promise.reject(new Error('Page is not deletable.'));
+  }
+
+  async deletePageRecursively(targetPage, user, options = {}) {
+    const Page = this.crowi.model('Page');
+
+    const isTrashed = isTrashPage(targetPage.path);
+    const newPath = Page.getDeletedPageName(targetPage.path);
+    if (isTrashed) {
+      throw new Error('This method does NOT supports deleting trashed pages.');
+    }
+
+    if (!Page.isDeletableName(targetPage.path)) {
+      throw new Error('Page is not deletable');
+    }
+    const socketClientId = options.socketClientId || null;
+    targetPage.status = Page.STATUS_DELETED;
+    return Page.renameRecursively(targetPage, newPath, user, { socketClientId, createRedirectPage: true });
+  }
+
   // delete multiple pages
   // delete multiple pages
   async deleteMultipleCompletely(pages, user, options = {}) {
   async deleteMultipleCompletely(pages, user, options = {}) {
     this.validateCrowi();
     this.validateCrowi();