浏览代码

Set and retrieve logo settings

https://youtrack.weseek.co.jp/issue/GW-7772
- Add currentLogo and isDefaultLogo key in config model
- Create api route to store custom logo
- Implement customize logo api in AdminCustomizeContainer
I Komang Mudana 4 年之前
父节点
当前提交
e9b3050198

+ 26 - 0
packages/app/src/client/services/AdminCustomizeContainer.js

@@ -59,6 +59,8 @@ export default class AdminCustomizeContainer extends Container {
       uploadedLogoSrc: this.getUploadedLogoSrc(),
       isUploadedLogo: false,
       defaultLogoSrc: DEFAULT_LOGO,
+      currentLogo: '',
+      isDefaultLogo: false,
       /* eslint-enable quote-props, no-multi-spaces */
     };
     this.switchPageListLimitationS = this.switchPageListLimitationS.bind(this);
@@ -104,6 +106,8 @@ export default class AdminCustomizeContainer extends Container {
         currentCustomizeHeader: customizeParams.customizeHeader,
         currentCustomizeCss: customizeParams.customizeCss,
         currentCustomizeScript: customizeParams.customizeScript,
+        currentLogo: customizeParams.currentLogo,
+        isDefaultLogo: customizeParams.isDefaultLogo,
       });
 
       // search style name from object for display
@@ -468,4 +472,26 @@ export default class AdminCustomizeContainer extends Container {
     }
   }
 
+  async changeIsDefaultLogoEnabled(boolean) {
+    this.setState({ isDefaultLogo: boolean });
+  }
+
+  async updateCustomizeLogo() {
+    try {
+      const response = await this.appContainer.apiv3.put('/customize-setting/customize-logo', {
+        isDefaultLogo: this.state.isDefaultLogo,
+        currentLogo: this.state.currentLogo,
+      });
+      const { customizedParams } = response.data;
+      this.setState({
+        isDefaultLogo: customizedParams.isDefaultLogo,
+        currentLogo: customizedParams.currentLogo,
+      });
+    }
+    catch (err) {
+      logger.error(err);
+      throw new Error('Failed to update data');
+    }
+  }
+
 }

+ 2 - 0
packages/app/src/server/models/config.ts

@@ -135,6 +135,8 @@ export const defaultCrowiConfigs: { [key: string]: any } = {
   'customize:isEnabledStaleNotification': false,
   'customize:isAllReplyShown': false,
   'customize:isSearchScopeChildrenAsDefault': false,
+  'customize:currentLogo': '/images/logo.svg',
+  'customize:isDefaultLogo': true,
 
   'notification:owner-page:isEnabled': false,
   'notification:group-page:isEnabled': false,

+ 26 - 0
packages/app/src/server/routes/apiv3/customize-setting.js

@@ -135,6 +135,10 @@ module.exports = (crowi) => {
     customizeScript: [
       body('customizeScript').isString(),
     ],
+    logo: [
+      body('currentLogo').isString(),
+      body('isDefaultLogo').isBoolean(),
+    ],
   };
 
   /**
@@ -177,6 +181,8 @@ module.exports = (crowi) => {
       customizeHeader: await crowi.configManager.getConfig('crowi', 'customize:header'),
       customizeCss: await crowi.configManager.getConfig('crowi', 'customize:css'),
       customizeScript: await crowi.configManager.getConfig('crowi', 'customize:script'),
+      currentLogo: await crowi.configManager.getConfig('crowi', 'customize:currentLogo'),
+      isDefaultLogo: await crowi.configManager.getConfig('crowi', 'customize:isDefaultLogo'),
     };
 
     return res.apiv3({ customizeParams });
@@ -609,5 +615,25 @@ module.exports = (crowi) => {
     }
   });
 
+  router.put('/customize-logo', loginRequiredStrictly, adminRequired, csrf, validator.logo, apiV3FormValidator, async(req, res) => {
+    const requestParams = {
+      'customize:currentLogo': req.body.currentLogo,
+      'customize:isDefaultLogo': req.body.isDefaultLogo,
+    };
+    try {
+      await crowi.configManager.updateConfigsInTheSameNamespace('crowi', requestParams);
+      const customizedParams = {
+        currentLogo: await crowi.configManager.getConfig('crowi', 'customize:currentLogo'),
+        isDefaultLogo: await crowi.configManager.getConfig('crowi', 'customize:isDefaultLogo'),
+      };
+      return res.apiv3({ customizedParams });
+    }
+    catch (err) {
+      const msg = 'Error occurred in updating customizeLogo';
+      logger.error('Error', err);
+      return res.apiv3Err(new ErrorV3(msg, 'update-customizeLogo-failed'));
+    }
+  });
+
   return router;
 };