zahmis 5 سال پیش
والد
کامیت
98ffeff0e0
2فایلهای تغییر یافته به همراه37 افزوده شده و 1 حذف شده
  1. 2 1
      src/client/js/components/PageDuplicateModal.jsx
  2. 35 0
      src/server/routes/apiv3/pages.js

+ 2 - 1
src/client/js/components/PageDuplicateModal.jsx

@@ -70,7 +70,8 @@ const PageDuplicateModal = (props) => {
     try {
       setErrorCode(null);
       setErrorMessage(null);
-      const res = await appContainer.apiPost('/pages.duplicate', { page_id: pageId, new_path: pageNameInput });
+      const res = await appContainer.apiPost('/pages/duplicate', { page_id: pageId, new_path: pageNameInput });
+      // const res = await appContainer.apiPost('/pages.duplicate', { page_id: pageId, new_path: pageNameInput });
       const { page } = res;
       window.location.href = encodeURI(`${page.path}?duplicated=${path}`);
     }

+ 35 - 0
src/server/routes/apiv3/pages.js

@@ -13,8 +13,12 @@ const router = express.Router();
  *    name: Pages
  */
 module.exports = (crowi) => {
+  const pathUtils = require('growi-commons').pathUtils;
+
   const accessTokenParser = require('../../middlewares/access-token-parser')(crowi);
   const loginRequired = require('../../middlewares/login-required')(crowi, true);
+  const loginRequiredStrictly = require('../middlewares/login-required')(crowi);
+
   const adminRequired = require('../../middlewares/admin-required')(crowi);
   const csrf = require('../../middlewares/csrf')(crowi);
 
@@ -83,6 +87,37 @@ module.exports = (crowi) => {
     }
   });
 
+  router.put('/duplicate', accessTokenParser, loginRequiredStrictly, csrf, async(req, res) => {
+    const pageId = req.body.page_id;
+    let newPagePath = pathUtils.normalizePath(req.body.new_path);
+
+    const page = await Page.findByIdAndViewer(pageId, req.user);
+
+    if (page == null) {
+      res.code = 'Page is not found';
+      logger.error('Failed to find the pages');
+      return res.apiv3Err();
+      // return res.json(ApiResponse.error(`Page '${pageId}' is not found or forbidden`, 'notfound_or_forbidden'));
+    }
+
+    // check whether path starts slash
+    newPagePath = pathUtils.addHeadingSlash(newPagePath);
+
+    await page.populateDataToShowRevision();
+    const originTags = await page.findRelatedTagsById();
+
+    req.body.path = newPagePath;
+    req.body.body = page.revision.body;
+    req.body.grant = page.grant;
+    req.body.grantedUsers = page.grantedUsers;
+    req.body.grantUserGroupId = page.grantedGroup;
+    req.body.pageTags = originTags;
+
+    return res.apiv3({});
+
+  });
+
+
   router.get('/subordinated-list', accessTokenParser, loginRequired, async(req, res) => {
     const { path } = req.query;