|
|
@@ -25,7 +25,6 @@ import { createBatchStream } from '~/server/util/batch-stream';
|
|
|
import loggerFactory from '~/utils/logger';
|
|
|
import { prepareDeleteConfigValuesForCalc } from '~/utils/page-delete-config';
|
|
|
|
|
|
-import PageEvent from '../events/page';
|
|
|
import { ObjectIdLike } from '../interfaces/mongoose-utils';
|
|
|
import { PathAlreadyExistsError } from '../models/errors';
|
|
|
import PageOperation, { PageActionStage, PageActionType, PageOperationDocument } from '../models/page-operation';
|
|
|
@@ -132,26 +131,11 @@ class PageService {
|
|
|
|
|
|
crowi: any;
|
|
|
|
|
|
- pageEvent: any;
|
|
|
-
|
|
|
tagEvent: any;
|
|
|
|
|
|
constructor(crowi) {
|
|
|
this.crowi = crowi;
|
|
|
- this.pageEvent = crowi.event('page');
|
|
|
this.tagEvent = crowi.event('tag');
|
|
|
-
|
|
|
- // init
|
|
|
- this.initPageEvent();
|
|
|
- }
|
|
|
-
|
|
|
- private initPageEvent() {
|
|
|
- // create
|
|
|
- this.pageEvent.on('create', this.pageEvent.onCreate);
|
|
|
-
|
|
|
- // createMany
|
|
|
- this.pageEvent.on('createMany', this.pageEvent.onCreateMany);
|
|
|
- this.pageEvent.on('addSeenUsers', this.pageEvent.onAddSeenUsers);
|
|
|
}
|
|
|
|
|
|
canDeleteCompletely(path: string, creatorId: ObjectIdLike, operator: any | null, isRecursively: boolean): boolean {
|
|
|
@@ -468,7 +452,6 @@ class PageService {
|
|
|
update.updatedAt = new Date();
|
|
|
}
|
|
|
const renamedPage = await Page.findByIdAndUpdate(page._id, { $set: update }, { new: true });
|
|
|
- this.pageEvent.emit('rename', page, user);
|
|
|
|
|
|
// 5.increase parent's descendantCount.
|
|
|
// see: https://dev.growi.org/62149d019311629d4ecd91cf#Handling%20of%20descendantCount%20in%20case%20of%20unexpected%20process%20interruption
|
|
|
@@ -660,8 +643,6 @@ class PageService {
|
|
|
await PageRedirect.create({ fromPath: page.path, toPath: newPagePath });
|
|
|
}
|
|
|
|
|
|
- this.pageEvent.emit('rename');
|
|
|
-
|
|
|
return renamedPage;
|
|
|
}
|
|
|
|
|
|
@@ -736,7 +717,6 @@ class PageService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- this.pageEvent.emit('updateMany', pages, user);
|
|
|
}
|
|
|
|
|
|
private async renameDescendantsV4(pages, user, options, oldPagePathPrefix, newPagePathPrefix) {
|
|
|
@@ -788,8 +768,6 @@ class PageService {
|
|
|
throw Error(`Failed to create PageRedirect documents: ${err}`);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- this.pageEvent.emit('updateMany', pages, user);
|
|
|
}
|
|
|
|
|
|
private async renameDescendantsWithStream(targetPage, newPagePath, user, options = {}, shouldUseV4Process = true) {
|
|
|
@@ -805,8 +783,6 @@ class PageService {
|
|
|
const pathRegExp = new RegExp(`^${escapeStringRegexp(targetPage.path)}`, 'i');
|
|
|
|
|
|
const renameDescendants = this.renameDescendants.bind(this);
|
|
|
- const pageEvent = this.pageEvent;
|
|
|
- let descendantPages: PageDocument[] = [];
|
|
|
let count = 0;
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
@@ -816,7 +792,6 @@ class PageService {
|
|
|
await renameDescendants(
|
|
|
batch, user, options, pathRegExp, newPagePathPrefix, shouldUseV4Process,
|
|
|
);
|
|
|
- descendantPages = descendantPages.concat(batch);
|
|
|
logger.debug(`Renaming pages progressing: (count=${count})`);
|
|
|
}
|
|
|
catch (err) {
|
|
|
@@ -830,8 +805,6 @@ class PageService {
|
|
|
|
|
|
// update path
|
|
|
targetPage.path = newPagePath;
|
|
|
- pageEvent.emit('syncDescendantsUpdate', targetPage, user);
|
|
|
-
|
|
|
callback();
|
|
|
},
|
|
|
});
|
|
|
@@ -841,7 +814,6 @@ class PageService {
|
|
|
.pipe(writeStream);
|
|
|
|
|
|
await streamToPromise(writeStream);
|
|
|
- this.pageEvent.emit('rename', targetPage, user, descendantPages);
|
|
|
}
|
|
|
|
|
|
private async renameDescendantsWithStreamV4(targetPage, newPagePath, user, options = {}) {
|
|
|
@@ -852,7 +824,6 @@ class PageService {
|
|
|
const pathRegExp = new RegExp(`^${escapeStringRegexp(targetPage.path)}`, 'i');
|
|
|
|
|
|
const renameDescendants = this.renameDescendants.bind(this);
|
|
|
- const pageEvent = this.pageEvent;
|
|
|
let count = 0;
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
@@ -872,7 +843,6 @@ class PageService {
|
|
|
logger.debug(`Renaming pages has completed: (totalCount=${count})`);
|
|
|
// update path
|
|
|
targetPage.path = newPagePath;
|
|
|
- pageEvent.emit('syncDescendantsUpdate', targetPage, user);
|
|
|
callback();
|
|
|
},
|
|
|
});
|
|
|
@@ -969,7 +939,6 @@ class PageService {
|
|
|
newPagePath, page.revision.body, user, options,
|
|
|
);
|
|
|
}
|
|
|
- this.pageEvent.emit('duplicate', page, user);
|
|
|
|
|
|
// 4. Take over tags
|
|
|
const originTags = await page.findRelatedTagsById();
|
|
|
@@ -1063,7 +1032,6 @@ class PageService {
|
|
|
const createdPage = await this.crowi.pageService.create(
|
|
|
newPagePath, page.revision.body, user, options,
|
|
|
);
|
|
|
- this.pageEvent.emit('duplicate', page, user);
|
|
|
|
|
|
if (isRecursively) {
|
|
|
this.duplicateDescendantsWithStream(page, newPagePath, user);
|
|
|
@@ -1231,7 +1199,6 @@ class PageService {
|
|
|
const pathRegExp = new RegExp(`^${escapeStringRegexp(page.path)}`, 'i');
|
|
|
|
|
|
const duplicateDescendants = this.duplicateDescendants.bind(this);
|
|
|
- const pageEvent = this.pageEvent;
|
|
|
let count = 0;
|
|
|
let nNonEmptyDuplicatedPages = 0;
|
|
|
const writeStream = new Writable({
|
|
|
@@ -1253,7 +1220,6 @@ class PageService {
|
|
|
logger.debug(`Adding pages has completed: (totalCount=${count})`);
|
|
|
// update path
|
|
|
page.path = newPagePath;
|
|
|
- pageEvent.emit('syncDescendantsUpdate', page, user);
|
|
|
callback();
|
|
|
},
|
|
|
});
|
|
|
@@ -1274,7 +1240,6 @@ class PageService {
|
|
|
const pathRegExp = new RegExp(`^${escapeStringRegexp(page.path)}`, 'i');
|
|
|
|
|
|
const duplicateDescendants = this.duplicateDescendants.bind(this);
|
|
|
- const pageEvent = this.pageEvent;
|
|
|
let count = 0;
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
@@ -1294,7 +1259,6 @@ class PageService {
|
|
|
logger.debug(`Adding pages has completed: (totalCount=${count})`);
|
|
|
// update path
|
|
|
page.path = newPagePath;
|
|
|
- pageEvent.emit('syncDescendantsUpdate', page, user);
|
|
|
callback();
|
|
|
},
|
|
|
});
|
|
|
@@ -1392,10 +1356,6 @@ class PageService {
|
|
|
*/
|
|
|
this.deleteRecursivelyMainOperation(page, user, pageOp._id);
|
|
|
}
|
|
|
- else {
|
|
|
-
|
|
|
- this.pageEvent.emit('delete', page, user);
|
|
|
- }
|
|
|
|
|
|
return deletedPage;
|
|
|
}
|
|
|
@@ -1421,8 +1381,6 @@ class PageService {
|
|
|
throw err;
|
|
|
}
|
|
|
}
|
|
|
- this.pageEvent.emit('create', deletedPage, user);
|
|
|
-
|
|
|
return deletedPage;
|
|
|
}
|
|
|
|
|
|
@@ -1473,9 +1431,6 @@ class PageService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- this.pageEvent.emit('delete', page, user);
|
|
|
- this.pageEvent.emit('create', deletedPage, user);
|
|
|
-
|
|
|
return deletedPage;
|
|
|
}
|
|
|
|
|
|
@@ -1532,9 +1487,6 @@ class PageService {
|
|
|
throw new Error(`Failed to delete pages: ${err}`);
|
|
|
}
|
|
|
}
|
|
|
- finally {
|
|
|
- this.pageEvent.emit('syncDescendantsDelete', pages, user);
|
|
|
- }
|
|
|
|
|
|
try {
|
|
|
await PageRedirect.bulkWrite(insertPageRedirectOperations);
|
|
|
@@ -1563,7 +1515,6 @@ class PageService {
|
|
|
const deleteDescendants = this.deleteDescendants.bind(this);
|
|
|
let count = 0;
|
|
|
let nDeletedNonEmptyPages = 0; // used for updating descendantCount
|
|
|
- let descendantPages: PageDocument[] = [];
|
|
|
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
@@ -1573,7 +1524,6 @@ class PageService {
|
|
|
try {
|
|
|
count += batch.length;
|
|
|
await deleteDescendants(batch, user);
|
|
|
- descendantPages = descendantPages.concat(batch);
|
|
|
logger.debug(`Deleting pages progressing: (count=${count})`);
|
|
|
}
|
|
|
catch (err) {
|
|
|
@@ -1595,8 +1545,6 @@ class PageService {
|
|
|
|
|
|
await streamToPromise(writeStream);
|
|
|
|
|
|
- this.pageEvent.emit('delete', targetPage, user, descendantPages);
|
|
|
-
|
|
|
return nDeletedNonEmptyPages;
|
|
|
}
|
|
|
|
|
|
@@ -1635,8 +1583,6 @@ class PageService {
|
|
|
|
|
|
await this.deleteCompletelyOperation(ids, paths);
|
|
|
|
|
|
- this.pageEvent.emit('syncDescendantsDelete', pages, user); // update as renamed page
|
|
|
-
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -1711,9 +1657,6 @@ class PageService {
|
|
|
*/
|
|
|
this.deleteCompletelyRecursivelyMainOperation(page, user, options, pageOp._id);
|
|
|
}
|
|
|
- else if (!page.isEmpty && !preventEmitting) {
|
|
|
- this.pageEvent.emit('deleteCompletely', page, user);
|
|
|
- }
|
|
|
|
|
|
return;
|
|
|
}
|
|
|
@@ -1738,10 +1681,6 @@ class PageService {
|
|
|
this.deleteCompletelyDescendantsWithStream(page, user, options);
|
|
|
}
|
|
|
|
|
|
- if (!page.isEmpty && !preventEmitting) {
|
|
|
- this.pageEvent.emit('deleteCompletely', page, user);
|
|
|
- }
|
|
|
-
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
@@ -1766,9 +1705,6 @@ class PageService {
|
|
|
let count = 0;
|
|
|
let nDeletedNonEmptyPages = 0; // used for updating descendantCount
|
|
|
|
|
|
-
|
|
|
- let descendantPages: PageDocument[] = [];
|
|
|
-
|
|
|
const deleteMultipleCompletely = this.deleteMultipleCompletely.bind(this);
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
@@ -1778,7 +1714,6 @@ class PageService {
|
|
|
try {
|
|
|
count += batch.length;
|
|
|
await deleteMultipleCompletely(batch, user, options);
|
|
|
- descendantPages = descendantPages.concat(batch);
|
|
|
logger.debug(`Adding pages progressing: (count=${count})`);
|
|
|
}
|
|
|
catch (err) {
|
|
|
@@ -1799,7 +1734,6 @@ class PageService {
|
|
|
.pipe(writeStream);
|
|
|
|
|
|
await streamToPromise(writeStream);
|
|
|
- this.pageEvent.emit('deleteCompletely', targetPage, user, descendantPages);
|
|
|
|
|
|
return nDeletedNonEmptyPages;
|
|
|
}
|
|
|
@@ -1902,7 +1836,6 @@ class PageService {
|
|
|
|
|
|
if (!isRecursively) {
|
|
|
await this.updateDescendantCountOfAncestors(parent._id, 1, true);
|
|
|
- this.pageEvent.emit('revert', page, user);
|
|
|
}
|
|
|
else {
|
|
|
let pageOp;
|
|
|
@@ -2000,8 +1933,6 @@ class PageService {
|
|
|
}, { new: true });
|
|
|
await PageTagRelation.updateMany({ relatedPage: page._id }, { $set: { isPageTrashed: false } });
|
|
|
|
|
|
- this.pageEvent.emit('revert', page, user);
|
|
|
-
|
|
|
return updatedPage;
|
|
|
}
|
|
|
|
|
|
@@ -2017,14 +1948,12 @@ class PageService {
|
|
|
|
|
|
const revertDeletedDescendants = this.revertDeletedDescendants.bind(this);
|
|
|
let count = 0;
|
|
|
- let descendantPages: PageDocument[] = [];
|
|
|
const writeStream = new Writable({
|
|
|
objectMode: true,
|
|
|
async write(batch, encoding, callback) {
|
|
|
try {
|
|
|
count += batch.length;
|
|
|
await revertDeletedDescendants(batch, user);
|
|
|
- descendantPages = descendantPages.concat(batch);
|
|
|
logger.debug(`Reverting pages progressing: (count=${count})`);
|
|
|
}
|
|
|
catch (err) {
|
|
|
@@ -2045,7 +1974,6 @@ class PageService {
|
|
|
.pipe(writeStream);
|
|
|
|
|
|
await streamToPromise(writeStream);
|
|
|
- this.pageEvent.emit('revert', targetPage, user, descendantPages);
|
|
|
|
|
|
return count;
|
|
|
}
|
|
|
@@ -3350,9 +3278,6 @@ class PageService {
|
|
|
// Update descendantCount
|
|
|
await this.updateDescendantCountOfAncestors(savedPage._id, 1, false);
|
|
|
|
|
|
- // Emit create event
|
|
|
- this.pageEvent.emit('create', savedPage, user);
|
|
|
-
|
|
|
// Delete PageRedirect if exists
|
|
|
const PageRedirect = mongoose.model('PageRedirect') as unknown as PageRedirectModel;
|
|
|
try {
|
|
|
@@ -3452,9 +3377,6 @@ class PageService {
|
|
|
// Update descendantCount
|
|
|
await this.updateDescendantCountOfAncestors(savedPage._id, 1, false);
|
|
|
|
|
|
- // Emit create event
|
|
|
- this.pageEvent.emit('create', savedPage, dummyUser);
|
|
|
-
|
|
|
return savedPage;
|
|
|
}
|
|
|
|