itizawa пре 5 година
родитељ
комит
bfd31cfac6

+ 1 - 0
resource/locales/en_US/translation.json

@@ -59,6 +59,7 @@
   "Last_Login": "Last login",
   "Share": "Share",
   "Share Link": "Share Link",
+  "share_link_notice":"remove {{count}} share links",
   "Markdown Link": "Markdown Link",
   "Create/Edit Template": "Create/Edit template page",
   "Go to this version": "View this version",

+ 1 - 0
resource/locales/ja_JP/translation.json

@@ -59,6 +59,7 @@
   "Last_Login": "最終ログイン",
   "Share": "共有",
   "Share Link": "共有用リンク",
+  "share_link_notice":"{{count}} 件の共有リンクを削除します",
   "Markdown Link": "Markdown形式のリンク",
   "Create/Edit Template": "テンプレートページの作成/編集",
   "Go to this version": "このバージョンを見る",

+ 3 - 2
resource/locales/zh_CN/translation.json

@@ -53,7 +53,8 @@
 	"Last updated": "上次更新",
 	"Last_Login": "上次登录",
 	"Share": "分享",
-	"Share Link": "分享链接",
+  "Share Link": "分享链接",
+  "share_link_notice":"remove {{count}} share links",
 	"Markdown Link": "Markdown链接",
 	"Create/Edit Template": "创建/编辑 模板页面",
 	"Unportalize": "未启动",
@@ -697,4 +698,4 @@
 		"Registration successful": "注册成功",
 		"Setup": "安装程序"
 	}
-}
+}

+ 4 - 2
src/client/js/components/Admin/Security/DeleteAllShareLinksModal.jsx

@@ -8,7 +8,7 @@ import {
 } from 'reactstrap';
 
 const DeleteAllShareLinksModal = React.memo((props) => {
-
+  const { t } = props;
 
   function closeModal() {
     if (props.onClose == null) {
@@ -41,7 +41,7 @@ const DeleteAllShareLinksModal = React.memo((props) => {
         </span>
       </ModalHeader>
       <ModalBody>
-        {props.count} 件の ShareLink 削除します
+        { t('share_link_notice', { count: props.count })}
       </ModalBody>
       <ModalFooter>
         <Button onClick={closeButtonHandler}>Cancel</Button>
@@ -56,6 +56,8 @@ const DeleteAllShareLinksModal = React.memo((props) => {
 });
 
 DeleteAllShareLinksModal.propTypes = {
+  t: PropTypes.func.isRequired, // i18next
+
   isOpen: PropTypes.bool.isRequired,
   onClose: PropTypes.func,
   count: PropTypes.number.isRequired,

+ 7 - 3
src/client/js/components/Admin/Security/ShareLinkSetting.jsx

@@ -39,7 +39,6 @@ class ShareLinkSetting extends React.Component {
 
     try {
       const res = await appContainer.apiv3Delete('/share-links/all');
-      console.log(res);
       const count = res.data.n;
       toastSuccess(t('toaster.remove_share_link', { count }));
     }
@@ -55,8 +54,13 @@ class ShareLinkSetting extends React.Component {
       <>
         <h2 className="border-bottom mb-3">
           Shared Link List
-
-          <button type="button" className="btn btn-danger pull-right" onClick={this.showDeleteConfirmModal}>Delete all links</button>
+          <button
+            type="button"
+            className="btn btn-danger pull-right"
+            disabled={this.state.shareLinks.length === 0}
+            onClick={this.showDeleteConfirmModal}
+          >Delete all links
+          </button>
         </h2>
 
         <ShareLinkList

+ 24 - 25
src/server/routes/apiv3/share-links.js

@@ -152,59 +152,58 @@ module.exports = (crowi) => {
   /**
   * @swagger
   *
-  *    /share-links/{id}:
+  *    /share-links/all:
   *      delete:
   *        tags: [ShareLinks]
-  *        description: delete one share link related one page
-  *        parameters:
-  *          - name: id
-  *            in: path
-  *            required: true
-  *            description: id of share link
-  *            schema:
-  *              type: string
+  *        description: delete all share links
   *        responses:
   *          200:
-  *            description: Succeeded to delete one share link
+  *            description: Succeeded to remove all share links
   */
-  router.delete('/:id', loginRequired, csrf, async(req, res) => {
-    const { id } = req.params;
+  router.delete('/all', loginRequired, adminRequired, csrf, async(req, res) => {
 
     try {
-      const deletedShareLink = await ShareLink.findOneAndRemove({ _id: id });
-      return res.apiv3({ deletedShareLink });
+      const deletedShareLink = await ShareLink.deleteMany({});
+      return res.apiv3(deletedShareLink);
     }
     catch (err) {
-      const msg = 'Error occurred in delete share link';
+      const msg = 'Error occurred in delete all share link';
       logger.error('Error', err);
-      return res.apiv3Err(new ErrorV3(msg, 'delete-shareLink-failed'));
+      return res.apiv3Err(new ErrorV3(msg, 'delete-all-shareLink-failed'));
     }
-
   });
 
   /**
   * @swagger
   *
-  *    /share-links/all:
+  *    /share-links/{id}:
   *      delete:
   *        tags: [ShareLinks]
-  *        description: delete all share links
+  *        description: delete one share link related one page
+  *        parameters:
+  *          - name: id
+  *            in: path
+  *            required: true
+  *            description: id of share link
+  *            schema:
+  *              type: string
   *        responses:
   *          200:
-  *            description: Succeeded to remove all share links
+  *            description: Succeeded to delete one share link
   */
-  router.delete('/all', loginRequired, adminRequired, csrf, async(req, res) => {
+  router.delete('/:id', loginRequired, csrf, async(req, res) => {
+    const { id } = req.params;
 
     try {
-      const deletedShareLink = null;
-      // const deletedShareLink = await ShareLink.deleteMany({});
+      const deletedShareLink = await ShareLink.findOneAndRemove({ _id: id });
       return res.apiv3({ deletedShareLink });
     }
     catch (err) {
-      const msg = 'Error occurred in delete all share link';
+      const msg = 'Error occurred in delete share link';
       logger.error('Error', err);
-      return res.apiv3Err(new ErrorV3(msg, 'delete-all-shareLink-failed'));
+      return res.apiv3Err(new ErrorV3(msg, 'delete-shareLink-failed'));
     }
+
   });