Explorar o código

change BULK_EXPORT_ENABLED to BULK_EXPORT_PAGES_ENABLED and add BULK_EXPORT_PAGES_ENABLED_USES_ONLY_ENV_VARS

Futa Arai hai 1 ano
pai
achega
dea363219e

+ 18 - 2
apps/app/src/client/components/Admin/App/AppSetting.jsx

@@ -178,8 +178,9 @@ const AppSetting = (props) => {
               type="checkbox"
               id="cbIsPageBulkExportEnabled"
               className="form-check-input"
-              name="isPageBulkExportEnabled"
-              checked={adminAppContainer.state.isPageBulkExportEnabled}
+              name="isBulkExportPagesEnabled"
+              checked={adminAppContainer.state.isBulkExportPagesEnabled}
+              disabled={adminAppContainer.state.isFixedIsBulkExportPagesEnabled}
               onChange={(e) => {
                 adminAppContainer.changeIsPageBulkExportEnabled(e.target.checked);
               }}
@@ -195,6 +196,21 @@ const AppSetting = (props) => {
           <p className="form-text text-muted">
             {t('admin:app_setting.page_bulk_export_explanation')}
           </p>
+
+          {adminAppContainer.state.isFixedIsBulkExportPagesEnabled && (
+            <p className="alert alert-warning mt-2 text-start">
+              <span className="material-symbols-outlined">help</span>
+              <b>FIXED</b><br />
+              {/* eslint-disable-next-line react/no-danger */}
+              <b dangerouslySetInnerHTML={{
+                __html: t('admin:app_setting.fixed_by_env_var', {
+                  envKey: 'BULK_EXPORT_PAGES_ENABLED',
+                  envVar: adminAppContainer.state.isBulkExportPagesEnabled,
+                }),
+              }}
+              />
+            </p>
+          )}
         </div>
       </div>
 

+ 7 - 1
apps/app/src/client/components/Admin/App/FileUploadSetting.tsx

@@ -65,7 +65,13 @@ export const FileUploadSettingMolecule = React.memo((props: FileUploadSettingMol
             <span className="material-symbols-outlined">help</span>
             <b>FIXED</b><br />
             {/* eslint-disable-next-line react/no-danger */}
-            <b dangerouslySetInnerHTML={{ __html: t('admin:app_setting.fixed_by_env_var', { fileUploadType: props.envFileUploadType }) }} />
+            <b dangerouslySetInnerHTML={{
+              __html: t('admin:app_setting.fixed_by_env_var', {
+                envKey: 'FILE_UPLOAD',
+                envVar: props.envFileUploadType,
+              }),
+            }}
+            />
           </p>
         )}
       </div>

+ 3 - 3
apps/app/src/client/components/Navbar/GrowiContextualSubNavigation.tsx

@@ -25,7 +25,7 @@ import type { OnDuplicatedFunction, OnRenamedFunction, OnDeletedFunction } from
 import { useShouldExpandContent } from '~/services/layout/use-should-expand-content';
 import {
   useCurrentPathname,
-  useCurrentUser, useIsGuestUser, useIsReadOnlyUser, useIsPageBulkExportEnabled, useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId,
+  useCurrentUser, useIsGuestUser, useIsReadOnlyUser, useIsBulkExportPagesEnabled, useIsLocalAccountRegistrationEnabled, useIsSharedUser, useShareLinkId,
 } from '~/stores-universal/context';
 import { useEditorMode } from '~/stores-universal/ui';
 import {
@@ -77,7 +77,7 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
   const { data: isGuestUser } = useIsGuestUser();
   const { data: isReadOnlyUser } = useIsReadOnlyUser();
   const { data: isSharedUser } = useIsSharedUser();
-  const { data: isPageBulkExportEnabled } = useIsPageBulkExportEnabled();
+  const { data: isBulkExportPagesEnabled } = useIsBulkExportPagesEnabled();
 
   const { open: openPresentationModal } = usePagePresentationModal();
   const { open: openAccessoriesModal } = usePageAccessoriesModal();
@@ -142,7 +142,7 @@ const PageOperationMenuItems = (props: PageOperationMenuItemsProps): JSX.Element
       </DropdownItem>
 
       {/* Bulk export */}
-      {isPageBulkExportEnabled && (
+      {isBulkExportPagesEnabled && (
         <span id="bulkExportDropdownItem">
           <DropdownItem
             onClick={openPageBulkExportSelectModal}

+ 12 - 6
apps/app/src/client/services/AdminAppContainer.js

@@ -23,7 +23,8 @@ export default class AdminAppContainer extends Container {
       globalLang: '',
       isEmailPublishedForNewUser: true,
       fileUpload: '',
-      isPageBulkExportEnabled: false,
+      isBulkExportPagesEnabled: false,
+      isFixedIsBulkExportPagesEnabled: false,
 
       isV5Compatible: null,
       siteUrl: '',
@@ -101,7 +102,7 @@ export default class AdminAppContainer extends Container {
       globalLang: appSettingsParams.globalLang,
       isEmailPublishedForNewUser: appSettingsParams.isEmailPublishedForNewUser,
       fileUpload: appSettingsParams.fileUpload,
-      isPageBulkExportEnabled: appSettingsParams.isPageBulkExportEnabled,
+      isBulkExportPagesEnabled: appSettingsParams.isBulkExportPagesEnabled,
       isV5Compatible: appSettingsParams.isV5Compatible,
       siteUrl: appSettingsParams.siteUrl,
       siteUrlUseOnlyEnvVars: appSettingsParams.siteUrlUseOnlyEnvVars,
@@ -160,6 +161,11 @@ export default class AdminAppContainer extends Container {
       this.setState({ isFixedFileUploadByEnvVar: true });
     }
 
+    if (appSettingsParams.useOnlyEnvVarsForIsBulkExportPagesEnabled) {
+      this.setState({ isBulkExportPagesEnabled: appSettingsParams.envIsBulkExportPagesEnabled });
+      this.setState({ isFixedIsBulkExportPagesEnabled: true });
+    }
+
   }
 
   /**
@@ -198,10 +204,10 @@ export default class AdminAppContainer extends Container {
   }
 
   /**
-   * Change isPageBulkExportEnabled
+   * Change isBulkExportPagesEnabled
    */
-  changeIsPageBulkExportEnabled(isPageBulkExportEnabled) {
-    this.setState({ isPageBulkExportEnabled });
+  changeIsPageBulkExportEnabled(isBulkExportPagesEnabled) {
+    this.setState({ isBulkExportPagesEnabled });
   }
 
   /**
@@ -406,7 +412,7 @@ export default class AdminAppContainer extends Container {
       globalLang: this.state.globalLang,
       isEmailPublishedForNewUser: this.state.isEmailPublishedForNewUser,
       fileUpload: this.state.fileUpload,
-      isPageBulkExportEnabled: this.state.isPageBulkExportEnabled,
+      isBulkExportPagesEnabled: this.state.isBulkExportPagesEnabled,
     });
     const { appSettingParams } = response.data;
     return appSettingParams;

+ 2 - 2
apps/app/src/features/page-bulk-export/server/service/check-page-bulk-export-job-in-progress-cron.ts

@@ -20,8 +20,8 @@ class CheckPageBulkExportJobInProgressCronService extends CronService {
   }
 
   override async executeJob(): Promise<void> {
-    const isPageBulkExportEnabled = configManager.getConfig('crowi', 'app:isPageBulkExportEnabled');
-    if (!isPageBulkExportEnabled) return;
+    const isBulkExportPagesEnabled = configManager.getConfig('crowi', 'app:isBulkExportPagesEnabled');
+    if (!isBulkExportPagesEnabled) return;
 
     const pageBulkExportJobInProgress = await PageBulkExportJob.findOne({
       $or: Object.values(PageBulkExportJobInProgressStatus).map(status => ({ status })),

+ 1 - 1
apps/app/src/features/page-bulk-export/server/service/page-bulk-export-job-clean-up-cron.ts

@@ -30,7 +30,7 @@ class PageBulkExportJobCleanUpCronService extends CronService {
   }
 
   override async executeJob(): Promise<void> {
-    // Execute cleanup even if isPageBulkExportEnabled is false, to cleanup jobs which were created before bulk export was disabled
+    // Execute cleanup even if isBulkExportPagesEnabled is false, to cleanup jobs which were created before bulk export was disabled
 
     await this.deleteExpiredExportJobs();
     await this.deleteDownloadExpiredExportJobs();

+ 4 - 4
apps/app/src/pages/[[...path]].page.tsx

@@ -42,7 +42,7 @@ import {
   useCsrfToken, useIsSearchScopeChildrenAsDefault, useIsEnabledMarp, useCurrentPathname,
   useIsSlackConfigured, useRendererConfig, useGrowiCloudUri,
   useIsAllReplyShown, useIsContainerFluid, useIsNotCreatable,
-  useIsUploadAllFileAllowed, useIsUploadEnabled, useIsPageBulkExportEnabled,
+  useIsUploadAllFileAllowed, useIsUploadEnabled, useIsBulkExportPagesEnabled,
   useElasticsearchMaxBodyLengthToIndex,
   useIsLocalAccountRegistrationEnabled,
   useIsRomUserAllowedToComment,
@@ -181,7 +181,7 @@ type Props = CommonProps & {
   isContainerFluid: boolean,
   isUploadEnabled: boolean,
   isUploadAllFileAllowed: boolean,
-  isPageBulkExportEnabled: boolean,
+  isBulkExportPagesEnabled: boolean,
   isEnabledStaleNotification: boolean,
   isEnabledAttachTitleHeader: boolean,
   // isEnabledLinebreaks: boolean,
@@ -246,7 +246,7 @@ const Page: NextPageWithLayout<Props> = (props: Props) => {
 
   useIsUploadAllFileAllowed(props.isUploadAllFileAllowed);
   useIsUploadEnabled(props.isUploadEnabled);
-  useIsPageBulkExportEnabled(props.isPageBulkExportEnabled);
+  useIsBulkExportPagesEnabled(props.isBulkExportPagesEnabled);
 
   useIsLocalAccountRegistrationEnabled(props.isLocalAccountRegistrationEnabled);
 
@@ -584,7 +584,7 @@ function injectServerConfigurations(context: GetServerSidePropsContext, props: P
   props.disableLinkSharing = configManager.getConfig('crowi', 'security:disableLinkSharing');
   props.isUploadAllFileAllowed = crowi.fileUploadService.getFileUploadEnabled();
   props.isUploadEnabled = crowi.fileUploadService.getIsUploadable();
-  props.isPageBulkExportEnabled = configManager.getConfig('crowi', 'app:isPageBulkExportEnabled');
+  props.isBulkExportPagesEnabled = configManager.getConfig('crowi', 'app:isBulkExportPagesEnabled');
 
   props.isLocalAccountRegistrationEnabled = crowi.passportService.isLocalStrategySetup
   && configManager.getConfig('crowi', 'security:registrationMode') !== RegistrationMode.CLOSED;

+ 5 - 3
apps/app/src/server/routes/apiv3/app-settings.js

@@ -435,7 +435,9 @@ module.exports = (crowi) => {
       globalLang: crowi.configManager.getConfig('crowi', 'app:globalLang'),
       isEmailPublishedForNewUser: crowi.configManager.getConfig('crowi', 'customize:isEmailPublishedForNewUser'),
       fileUpload: crowi.configManager.getConfig('crowi', 'app:fileUpload'),
-      isPageBulkExportEnabled: crowi.configManager.getConfig('crowi', 'app:isPageBulkExportEnabled'),
+      isBulkExportPagesEnabled: crowi.configManager.getConfig('crowi', 'app:isBulkExportPagesEnabled'),
+      envIsBulkExportPagesEnabled: crowi.configManager.getConfigFromEnvVars('crowi', 'app:isBulkExportPagesEnabled'),
+      useOnlyEnvVarsForIsBulkExportPagesEnabled: crowi.configManager.getConfig('crowi', 'env:useOnlyEnvVars:app:isBulkExportPagesEnabled'),
       isV5Compatible: crowi.configManager.getConfig('crowi', 'app:isV5Compatible'),
       siteUrl: crowi.configManager.getConfig('crowi', 'app:siteUrl'),
       siteUrlUseOnlyEnvVars: crowi.configManager.getConfig('crowi', 'app:siteUrl:useOnlyEnvVars'),
@@ -532,7 +534,7 @@ module.exports = (crowi) => {
       'app:globalLang': req.body.globalLang,
       'customize:isEmailPublishedForNewUser': req.body.isEmailPublishedForNewUser,
       'app:fileUpload': req.body.fileUpload,
-      'app:isPageBulkExportEnabled': req.body.isPageBulkExportEnabled,
+      'app:isBulkExportPagesEnabled': req.body.isBulkExportPagesEnabled,
     };
 
     try {
@@ -543,7 +545,7 @@ module.exports = (crowi) => {
         globalLang: crowi.configManager.getConfig('crowi', 'app:globalLang'),
         isEmailPublishedForNewUser: crowi.configManager.getConfig('crowi', 'customize:isEmailPublishedForNewUser'),
         fileUpload: crowi.configManager.getConfig('crowi', 'app:fileUpload'),
-        isPageBulkExportEnabled: crowi.configManager.getConfig('crowi', 'app:isPageBulkExportEnabled'),
+        isBulkExportPagesEnabled: crowi.configManager.getConfig('crowi', 'app:isBulkExportPagesEnabled'),
       };
 
       const parameters = { action: SupportedAction.ACTION_ADMIN_APP_SETTINGS_UPDATE };

+ 8 - 2
apps/app/src/server/service/config-loader.ts

@@ -787,9 +787,15 @@ const ENV_VAR_NAME_TO_CONFIG_INFO: Record<string, EnvConfig> = {
     type: ValueType.NUMBER,
     default: 5,
   },
-  BULK_EXPORT_ENABLED: {
+  BULK_EXPORT_PAGES_ENABLED: {
     ns: 'crowi',
-    key: 'app:isPageBulkExportEnabled',
+    key: 'app:isBulkExportPagesEnabled',
+    type: ValueType.BOOLEAN,
+    default: true,
+  },
+  BULK_EXPORT_PAGES_ENABLED_USES_ONLY_ENV_VARS: {
+    ns: 'crowi',
+    key: 'env:useOnlyEnvVars:app:isBulkExportPagesEnabled',
     type: ValueType.BOOLEAN,
     default: false,
   },

+ 2 - 2
apps/app/src/stores-universal/context.tsx

@@ -166,8 +166,8 @@ export const useIsUploadAllFileAllowed = (initialData?: boolean): SWRResponse<bo
   return useContextSWR('isUploadAllFileAllowed', initialData);
 };
 
-export const useIsPageBulkExportEnabled = (initialData?: boolean): SWRResponse<boolean, Error> => {
-  return useContextSWR('isPageBulkExportEnabled', initialData);
+export const useIsBulkExportPagesEnabled = (initialData?: boolean): SWRResponse<boolean, Error> => {
+  return useContextSWR('isBulkExportPagesEnabled', initialData);
 };
 
 export const useShowPageLimitationL = (initialData?: number): SWRResponse<number, Error> => {