Просмотр исходного кода

Merge pull request #147 from weseek/imprv/delete-recursively

imprv/121 Add option for recursive delete
Yuki Takei 8 лет назад
Родитель
Сommit
7456ad9d1b
3 измененных файлов с 32 добавлено и 1 удалено
  1. 21 0
      lib/models/page.js
  2. 8 1
      lib/routes/page.js
  3. 3 0
      lib/views/modal/delete.html

+ 21 - 0
lib/models/page.js

@@ -881,6 +881,27 @@ module.exports = function(crowi) {
     }
   };
 
+  pageSchema.statics.deletePageRecursively = function (pageData, user, options) {
+    var Page = this
+      , path = pageData.path
+      , options = options || {}
+      ;
+
+    return new Promise(function (resolve, reject) {
+      Page
+      .generateQueryToListByStartWith(path, user, options)
+      .then(function (pages) {
+        Promise.all(pages.map(function (page) {
+          return Page.deletePage(page, user, options);
+        }))
+        .then(function (data) {
+          return resolve(pageData);
+        });
+      });
+    });
+
+  };
+
   pageSchema.statics.revertDeletedPage = function(pageData, user, options) {
     var Page = this
       , newPath = Page.getRevertDeletedPageName(pageData.path)

+ 8 - 1
lib/routes/page.js

@@ -1001,6 +1001,8 @@ module.exports = function(crowi, app) {
 
     // get completely flag
     const isCompletely = (req.body.completely !== undefined);
+    // get recursively flag
+    const isRecursively = (req.body.recursively !== undefined);
 
     Page.findPageByIdAndGrantedUser(pageId, req.user)
     .then(function(pageData) {
@@ -1015,7 +1017,12 @@ module.exports = function(crowi, app) {
       if (!pageData.isUpdatable(previousRevision)) {
         throw new Error('Someone could update this page, so couldn\'t delete.');
       }
-      return Page.deletePage(pageData, req.user);
+
+      if (isRecursively) {
+        return Page.deletePageRecursively(pageData, req.user);
+      } else {
+        return Page.deletePage(pageData, req.user);
+      }
     }).then(function(data) {
       debug('Page deleted', data.path);
       var result = {};

+ 3 - 0
lib/views/modal/delete.html

@@ -20,6 +20,9 @@
           <input type="hidden" name="path" value="{{ page.path }}">
           <input type="hidden" name="page_id" value="{{ page._id.toString() }}">
           <input type="hidden" name="revision_id" value="{{ page.revision._id.toString() }}">
+          <label class="checkbox-inline text-danger">
+            <input type="checkbox" name="recursively" checked>recursively
+          </label>
           <label class="checkbox-inline text-danger">
             <input type="checkbox" name="completely">completely
           </label>