Просмотр исходного кода

Merge pull request #3877 from weseek/imprv/6037-button-to-cloud

Imprv/6037 button to cloud
Yuki Takei 4 лет назад
Родитель
Сommit
77feb351c1

+ 2 - 0
config/env.dev.js

@@ -22,4 +22,6 @@ module.exports = {
   // DEV_HTTPS: true,
   // DEV_HTTPS: true,
   // FORCE_WIKI_MODE: 'private', // 'public', 'private', undefined
   // FORCE_WIKI_MODE: 'private', // 'public', 'private', undefined
   // PROMSTER_ENABLED: true,
   // PROMSTER_ENABLED: true,
+  // GROWI_CLOUD_URI: 'http://growi.cloud',
+  // GROWI_APP_ID_FOR_GROWI_CLOUD: '012345',
 };
 };

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

@@ -788,6 +788,7 @@
     "rebuild_description_1": "Click the button to rebuild index and add all page datas.",
     "rebuild_description_1": "Click the button to rebuild index and add all page datas.",
     "rebuild_description_2": "This may take a while."
     "rebuild_description_2": "This may take a while."
   },
   },
+  "to_cloud_settings": "Open GROWI.cloud Settings",
   "login": {
   "login": {
     "Sign in error": "Login error",
     "Sign in error": "Login error",
     "Registration successful": "Registration successful",
     "Registration successful": "Registration successful",

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

@@ -782,6 +782,7 @@
     "rebuild_description_1": "全てのページのインデックスを削除し、作り直します。",
     "rebuild_description_1": "全てのページのインデックスを削除し、作り直します。",
     "rebuild_description_2": "この作業には数秒かかります。"
     "rebuild_description_2": "この作業には数秒かかります。"
   },
   },
+  "to_cloud_settings": "GROWI.cloud の管理画面へ",
   "login": {
   "login": {
     "Sign in error": "ログインエラー",
     "Sign in error": "ログインエラー",
     "Registration successful": "登録完了",
     "Registration successful": "登録完了",

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

@@ -793,6 +793,7 @@
 		"deletion_modal_header": "删除页",
 		"deletion_modal_header": "删除页",
 		"delete_completely": "完全删除"
 		"delete_completely": "完全删除"
 	},
 	},
+	"to_cloud_settings": "進入 GROWI.cloud 的管理界面",
 	"login": {
 	"login": {
 		"Sign in error": "登录错误",
 		"Sign in error": "登录错误",
 		"Registration successful": "注册成功",
 		"Registration successful": "注册成功",

+ 20 - 4
src/client/js/components/Admin/Common/AdminNavigation.jsx

@@ -5,12 +5,16 @@ import React from 'react';
 import PropTypes from 'prop-types';
 import PropTypes from 'prop-types';
 import { withTranslation } from 'react-i18next';
 import { withTranslation } from 'react-i18next';
 import urljoin from 'url-join';
 import urljoin from 'url-join';
-
+import AppContainer from '../../../services/AppContainer';
+import { withUnstatedContainers } from '../../UnstatedUtils';
 
 
 const AdminNavigation = (props) => {
 const AdminNavigation = (props) => {
-  const { t } = props;
+  const { t, appContainer } = props;
   const pathname = window.location.pathname;
   const pathname = window.location.pathname;
 
 
+  const growiCloudUri = appContainer.config.env.GROWI_CLOUD_URI;
+  const growiAppIdForGrowiCloud = appContainer.config.env.GROWI_APP_ID_FOR_GROWI_CLOUD;
+
   // eslint-disable-next-line react/prop-types
   // eslint-disable-next-line react/prop-types
   const MenuLabel = ({ menu }) => {
   const MenuLabel = ({ menu }) => {
     switch (menu) {
     switch (menu) {
@@ -24,6 +28,7 @@ const AdminNavigation = (props) => {
       case 'users':         return <><i className="icon-fw icon-user"></i>            { t('User_Management') }</>;
       case 'users':         return <><i className="icon-fw icon-user"></i>            { t('User_Management') }</>;
       case 'user-groups':   return <><i className="icon-fw icon-people"></i>          { t('UserGroup Management') }</>;
       case 'user-groups':   return <><i className="icon-fw icon-people"></i>          { t('UserGroup Management') }</>;
       case 'search':        return <><i className="icon-fw icon-magnifier"></i>       { t('Full Text Search Management') }</>;
       case 'search':        return <><i className="icon-fw icon-magnifier"></i>       { t('Full Text Search Management') }</>;
+      case 'cloud':         return <><i className="icon-fw icon-share-alt"></i>       { t('to_cloud_settings')} </>;
       default:              return <><i className="icon-fw icon-home"></i>            { t('Wiki Management Home Page') }</>;
       default:              return <><i className="icon-fw icon-home"></i>            { t('Wiki Management Home Page') }</>;
     }
     }
   };
   };
@@ -64,6 +69,16 @@ const AdminNavigation = (props) => {
         <MenuLink menu="users"        isListGroupItems isActive={isActiveMenu('/users')} />
         <MenuLink menu="users"        isListGroupItems isActive={isActiveMenu('/users')} />
         <MenuLink menu="user-groups"  isListGroupItems isActive={isActiveMenu('/user-groups')} />
         <MenuLink menu="user-groups"  isListGroupItems isActive={isActiveMenu('/user-groups')} />
         <MenuLink menu="search"       isListGroupItems isActive={isActiveMenu('/search')} />
         <MenuLink menu="search"       isListGroupItems isActive={isActiveMenu('/search')} />
+        {growiCloudUri != null && growiAppIdForGrowiCloud != null
+          && (
+          <a
+            href={`${growiCloudUri}/my/apps/${growiAppIdForGrowiCloud}`}
+            className="list-group-item list-group-item-action border-0 round-corner"
+          >
+            <MenuLabel menu="cloud" />
+          </a>
+          )
+        }
       </>
       </>
     );
     );
   };
   };
@@ -109,10 +124,11 @@ const AdminNavigation = (props) => {
   );
   );
 };
 };
 
 
+const AdminNavigationWrapper = withUnstatedContainers(AdminNavigation, [AppContainer]);
 
 
 AdminNavigation.propTypes = {
 AdminNavigation.propTypes = {
   t: PropTypes.func.isRequired, // i18next
   t: PropTypes.func.isRequired, // i18next
-
+  appContainer: PropTypes.instanceOf(AppContainer).isRequired,
 };
 };
 
 
-export default withTranslation()(AdminNavigation);
+export default withTranslation()(AdminNavigationWrapper);

+ 2 - 0
src/server/models/config.js

@@ -222,6 +222,8 @@ module.exports = function(crowi) {
         HACKMD_URI: env.HACKMD_URI || null,
         HACKMD_URI: env.HACKMD_URI || null,
         MATHJAX: env.MATHJAX || null,
         MATHJAX: env.MATHJAX || null,
         NO_CDN: env.NO_CDN || null,
         NO_CDN: env.NO_CDN || null,
+        GROWI_CLOUD_URI: env.GROWI_CLOUD_URI || null,
+        GROWI_APP_ID_FOR_GROWI_CLOUD: env.GROWI_APP_ID_FOR_GROWI_CLOUD || null,
       },
       },
       isEnabledStaleNotification: crowi.configManager.getConfig('crowi', 'customize:isEnabledStaleNotification'),
       isEnabledStaleNotification: crowi.configManager.getConfig('crowi', 'customize:isEnabledStaleNotification'),
       isAclEnabled: crowi.aclService.isAclEnabled(),
       isAclEnabled: crowi.aclService.isAclEnabled(),

+ 6 - 0
src/server/service/config-loader.js

@@ -404,6 +404,12 @@ const ENV_VAR_NAME_TO_CONFIG_INFO = {
     type:    TYPES.STRING,
     type:    TYPES.STRING,
     default: null,
     default: null,
   },
   },
+  GROWI_APP_ID_FOR_GROWI_CLOUD: {
+    ns:      'crowi',
+    key:     'app:growiAppIdForCloud',
+    type:    TYPES.STRING,
+    default: null,
+  },
   DEFAULT_EMAIL_PUBLISHED: {
   DEFAULT_EMAIL_PUBLISHED: {
     ns:      'crowi',
     ns:      'crowi',
     key:     'customize:isEmailPublishedForNewUser',
     key:     'customize:isEmailPublishedForNewUser',