|
|
@@ -1157,6 +1157,54 @@ module.exports = function(crowi) {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ pageSchema.statics.duplicate = function (path, originPageData, user, options) {
|
|
|
+ var Page = this
|
|
|
+ , Revision = crowi.model('Revision')
|
|
|
+ , format = options.format || 'markdown'
|
|
|
+ , grant = options.grant || GRANT_PUBLIC
|
|
|
+ , originRevision = originPageData.revision
|
|
|
+
|
|
|
+ // force public
|
|
|
+ if (isPortalPath(path)) {
|
|
|
+ grant = GRANT_PUBLIC;
|
|
|
+ }
|
|
|
+
|
|
|
+ return new Promise(function (resolve, reject) {
|
|
|
+ Page.findOne({ path: path }, function (err, pageData) {
|
|
|
+ if (pageData) {
|
|
|
+ return reject(new Error('Cannot create new page to existed path'));
|
|
|
+ }
|
|
|
+
|
|
|
+ var newPage = new Page();
|
|
|
+ newPage.path = path;
|
|
|
+ newPage.creator = user;
|
|
|
+ newPage.lastUpdateUser = user;
|
|
|
+ newPage.createdAt = Date.now();
|
|
|
+ newPage.updatedAt = Date.now();
|
|
|
+ newPage.redirectTo = null;
|
|
|
+ newPage.grant = grant;
|
|
|
+ newPage.status = STATUS_PUBLISHED;
|
|
|
+ newPage.grantedUsers = [];
|
|
|
+ newPage.grantedUsers.push(user);
|
|
|
+
|
|
|
+ newPage.save(function (err, newPage) {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+
|
|
|
+ var newRevision = Revision.prepareRevision(newPage, originRevision.body, user, { format: format });
|
|
|
+ Page.pushRevision(newPage, newRevision, user).then(function (data) {
|
|
|
+ resolve(data);
|
|
|
+ pageEvent.emit('create', data, user);
|
|
|
+ }).catch(function (err) {
|
|
|
+ debug('Push Revision Error on duplicate page', err);
|
|
|
+ return reject(err);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
pageSchema.statics.getHistories = function() {
|
|
|
// TODO
|
|
|
return;
|