]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-15782 Move application report code to core extensions
authorWouter Admiraal <wouter.admiraal@sonarsource.com>
Tue, 25 Jan 2022 11:01:52 +0000 (12:01 +0100)
committersonartech <sonartech@sonarsource.com>
Thu, 27 Jan 2022 20:03:05 +0000 (20:03 +0000)
12 files changed:
server/sonar-web/src/main/js/app/components/extensions/exposeLibraries.ts
server/sonar-web/src/main/js/app/components/nav/component/Menu.tsx
server/sonar-web/src/main/js/app/utils/startReactApp.tsx
server/sonar-web/src/main/js/apps/application-settings/ApplicationSettingsApp.tsx [deleted file]
server/sonar-web/src/main/js/apps/application-settings/ReportFrequencyForm.tsx [deleted file]
server/sonar-web/src/main/js/apps/application-settings/__tests__/ApplicationSettingsApp-test.tsx [deleted file]
server/sonar-web/src/main/js/apps/application-settings/__tests__/ReportFrequencyForm-test.tsx [deleted file]
server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ApplicationSettingsApp-test.tsx.snap [deleted file]
server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ReportFrequencyForm-test.tsx.snap [deleted file]
server/sonar-web/src/main/js/apps/application-settings/routes.ts [deleted file]
server/sonar-web/src/main/js/types/settings.ts
sonar-core/src/main/resources/org/sonar/l10n/core.properties

index d85617d3fa791508ca1106dfa4f8bf61b0b5df06..03bccc291d7a2eee4cb2a4af9b9b899db3a88f53 100644 (file)
@@ -99,6 +99,7 @@ import {
   postJSONBody,
   request
 } from '../../../helpers/request';
+import { sanitizeStringRestricted } from '../../../helpers/sanitize';
 import {
   getStandards,
   renderCWECategory,
@@ -162,7 +163,8 @@ const exposeLibraries = () => {
         getComponentIssuesUrl,
         getComponentSecurityHotspotsUrl,
         getMeasureHistoryUrl,
-        getRulesUrl
+        getRulesUrl,
+        sanitizeStringRestricted
       };
     }
   });
index dead2fed58bda232e610b239979590549b8a1ecc..609f64613923b122833665ea5211bdf8156817d7 100644 (file)
@@ -318,7 +318,6 @@ export class Menu extends React.PureComponent<Props> {
       this.renderSettingsLink(query, isApplication, isPortfolio),
       this.renderBranchesLink(query, isProject),
       this.renderBaselineLink(query, isApplication, isPortfolio),
-      this.renderReportSettingsLink(query, isApplication),
       ...this.renderAdminExtensions(query, isApplication),
       this.renderImportExportLink(query, isProject),
       this.renderProfilesLink(query),
@@ -410,23 +409,6 @@ export class Menu extends React.PureComponent<Props> {
     );
   };
 
-  renderReportSettingsLink = (query: Query, isApplication: boolean) => {
-    const extensions = this.getConfiguration().extensions || [];
-    const hasGovernance = extensions.find(e => e.key === 'governance/console');
-
-    if (!isApplication || !hasGovernance) {
-      return null;
-    }
-
-    return (
-      <li key="report-settings">
-        <Link activeClassName="active" to={{ pathname: '/application/settings', query }}>
-          {translate('application_settings.report')}
-        </Link>
-      </li>
-    );
-  };
-
   renderImportExportLink = (query: Query, isProject: boolean) => {
     if (!isProject) {
       return null;
index 40c777ca892fb854cbb510276e108bb62a640f3e..2b03991f6e38e6edaef239d27d3e2f2beab4845f 100644 (file)
@@ -27,7 +27,6 @@ import { IntlProvider } from 'react-intl';
 import { Provider } from 'react-redux';
 import { IndexRoute, Redirect, Route, RouteConfig, RouteProps, Router } from 'react-router';
 import accountRoutes from '../../apps/account/routes';
-import applicationSettingsRoutes from '../../apps/application-settings/routes';
 import auditLogsRoutes from '../../apps/audit-logs/routes';
 import backgroundTasksRoutes from '../../apps/background-tasks/routes';
 import codeRoutes from '../../apps/code/routes';
@@ -123,6 +122,16 @@ function renderRedirects() {
         }}
       />
 
+      <Route
+        path="/application/settings"
+        onEnter={(nextState, replace) => {
+          replace({
+            pathname: '/project/admin/extension/governance/application_report',
+            query: { id: nextState.location.query.id }
+          });
+        }}
+      />
+
       <Route
         path="/issues/search"
         onEnter={(_, replace) => {
@@ -226,7 +235,6 @@ function renderComponentRoutes() {
         <RouteWithChildRoutes path="project/import_export" childRoutes={projectDumpRoutes} />
         <RouteWithChildRoutes path="project/settings" childRoutes={settingsRoutes} />
         <RouteWithChildRoutes path="project_roles" childRoutes={projectPermissionsRoutes} />
-        <RouteWithChildRoutes path="application/settings" childRoutes={applicationSettingsRoutes} />
         <RouteWithChildRoutes path="project/webhooks" childRoutes={webhooksRoutes} />
         <Route
           path="project/deletion"
diff --git a/server/sonar-web/src/main/js/apps/application-settings/ApplicationSettingsApp.tsx b/server/sonar-web/src/main/js/apps/application-settings/ApplicationSettingsApp.tsx
deleted file mode 100644 (file)
index a6c6617..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import * as React from 'react';
-import { getDefinitions, getValues, setSimpleSettingValue } from '../../api/settings';
-import DeferredSpinner from '../../components/ui/DeferredSpinner';
-import { translate } from '../../helpers/l10n';
-import { SettingCategoryDefinition, SettingsKey } from '../../types/settings';
-import ReportFrequencyForm from './ReportFrequencyForm';
-
-interface Props {
-  component: T.Component;
-}
-
-interface State {
-  definition?: SettingCategoryDefinition;
-  frequency?: string;
-  loading: boolean;
-}
-
-export default class ApplicationSettingsApp extends React.PureComponent<Props, State> {
-  mounted = false;
-
-  state: State = {
-    loading: true
-  };
-
-  componentDidMount() {
-    this.mounted = true;
-    this.fetchInitialData();
-  }
-
-  async componentDidUpdate(prevProps: Props) {
-    if (prevProps.component.key !== this.props.component.key) {
-      this.setState({ loading: true });
-      await this.fetchSetting();
-      this.setState({ loading: false });
-    }
-  }
-
-  componentWillUnmount() {
-    this.mounted = false;
-  }
-
-  fetchInitialData = async () => {
-    this.setState({ loading: true });
-    await Promise.all([this.fetchDefinition(), this.fetchSetting()]);
-    this.setState({ loading: false });
-  };
-
-  fetchDefinition = async () => {
-    const { component } = this.props;
-    try {
-      const definitions = await getDefinitions(component.key);
-      const definition = definitions.find(d => d.key === SettingsKey.ProjectReportFrequency);
-
-      if (this.mounted) {
-        this.setState({ definition });
-      }
-    } catch (_) {
-      /* do nothing */
-    }
-  };
-
-  fetchSetting = async () => {
-    const { component } = this.props;
-    try {
-      const setting = (
-        await getValues({ component: component.key, keys: SettingsKey.ProjectReportFrequency })
-      ).pop();
-
-      if (this.mounted) {
-        this.setState({
-          frequency: setting ? setting.value : undefined
-        });
-      }
-    } catch (_) {
-      /* do nothing */
-    }
-  };
-
-  handleSubmit = async (frequency: string) => {
-    const { component } = this.props;
-
-    try {
-      await setSimpleSettingValue({
-        component: component.key,
-        key: SettingsKey.ProjectReportFrequency,
-        value: frequency
-      });
-
-      this.setState({ frequency });
-    } catch (_) {
-      /* Do nothing */
-    }
-  };
-
-  render() {
-    const { definition, frequency, loading } = this.state;
-
-    return (
-      <div className="page page-limited application-settings">
-        <h1>{translate('application_settings.page')}</h1>
-        <div className="boxed-group big-padded big-spacer-top">
-          <DeferredSpinner loading={loading}>
-            <div>
-              {definition && frequency && (
-                <ReportFrequencyForm
-                  definition={definition}
-                  frequency={frequency}
-                  onSave={this.handleSubmit}
-                />
-              )}
-            </div>
-          </DeferredSpinner>
-        </div>
-      </div>
-    );
-  }
-}
diff --git a/server/sonar-web/src/main/js/apps/application-settings/ReportFrequencyForm.tsx b/server/sonar-web/src/main/js/apps/application-settings/ReportFrequencyForm.tsx
deleted file mode 100644 (file)
index 545d432..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import * as React from 'react';
-import { Button, ResetButtonLink } from '../../components/controls/buttons';
-import SelectLegacy from '../../components/controls/SelectLegacy';
-import { translate } from '../../helpers/l10n';
-import { sanitizeStringRestricted } from '../../helpers/sanitize';
-import { SettingCategoryDefinition } from '../../types/settings';
-
-export interface ReportFrequencyFormProps {
-  definition: SettingCategoryDefinition;
-  frequency: string;
-  onSave: (value: string) => Promise<void>;
-}
-
-export default function ReportFrequencyForm(props: ReportFrequencyFormProps) {
-  const { definition, frequency } = props;
-  const { defaultValue } = definition;
-
-  const [currentSelection, setCurrentSelection] = React.useState(frequency);
-
-  const options = props.definition.options.map(option => ({
-    label: option,
-    value: option
-  }));
-
-  const handleReset = () => {
-    if (defaultValue) {
-      setCurrentSelection(defaultValue);
-      props.onSave(defaultValue);
-    }
-  };
-
-  return (
-    <div>
-      <h2>{translate('application_settings.report.frequency')}</h2>
-      {definition.description && (
-        <div
-          className="markdown"
-          // eslint-disable-next-line react/no-danger
-          dangerouslySetInnerHTML={{
-            __html: sanitizeStringRestricted(definition.description)
-          }}
-        />
-      )}
-
-      <SelectLegacy
-        className="input-medium"
-        clearable={false}
-        name={definition.name}
-        onChange={({ value }: { value: string }) => setCurrentSelection(value)}
-        options={options}
-        value={currentSelection}
-      />
-
-      <div className="display-flex-center big-spacer-top">
-        {frequency !== currentSelection && (
-          <Button
-            className="spacer-right button-success"
-            onClick={() => props.onSave(currentSelection)}>
-            {translate('save')}
-          </Button>
-        )}
-
-        {defaultValue !== undefined && frequency !== defaultValue && (
-          <Button className="spacer-right" onClick={handleReset}>
-            {translate('reset_verb')}
-          </Button>
-        )}
-
-        {frequency !== currentSelection && (
-          <ResetButtonLink className="spacer-right" onClick={() => setCurrentSelection(frequency)}>
-            {translate('cancel')}
-          </ResetButtonLink>
-        )}
-      </div>
-    </div>
-  );
-}
diff --git a/server/sonar-web/src/main/js/apps/application-settings/__tests__/ApplicationSettingsApp-test.tsx b/server/sonar-web/src/main/js/apps/application-settings/__tests__/ApplicationSettingsApp-test.tsx
deleted file mode 100644 (file)
index 77f8c98..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { shallow } from 'enzyme';
-import * as React from 'react';
-import { setSimpleSettingValue } from '../../../api/settings';
-import { mockComponent } from '../../../helpers/mocks/component';
-import { waitAndUpdate } from '../../../helpers/testUtils';
-import { SettingsKey } from '../../../types/settings';
-import ApplicationSettingsApp from '../ApplicationSettingsApp';
-
-jest.mock('../../../api/settings', () => {
-  const { mockDefinition } = jest.requireActual('../../../helpers/mocks/settings');
-
-  const definition = mockDefinition({
-    key: 'sonar.governance.report.project.branch.frequency', // SettingsKey.ProjectReportFrequency
-    defaultValue: 'Monthly',
-    description: 'description',
-    options: ['Daily', 'Weekly', 'Monthly']
-  });
-
-  return {
-    getDefinitions: jest.fn().mockResolvedValue([definition]),
-    getValues: jest.fn().mockResolvedValue([{ value: 'Monthly' }]),
-    setSimpleSettingValue: jest.fn().mockResolvedValue(undefined)
-  };
-});
-
-it('should render correctly', async () => {
-  const wrapper = shallowRender();
-  expect(wrapper).toMatchSnapshot('loading');
-  await waitAndUpdate(wrapper);
-  expect(wrapper).toMatchSnapshot('default');
-});
-
-it('should handle submission', async () => {
-  const component = mockComponent({ key: 'app-key' });
-  const wrapper = shallowRender({ component });
-  await waitAndUpdate(wrapper);
-
-  wrapper.instance().handleSubmit('Daily');
-
-  expect(setSimpleSettingValue).toBeCalledWith({
-    component: component.key,
-    key: SettingsKey.ProjectReportFrequency,
-    value: 'Daily'
-  });
-});
-
-function shallowRender(props: Partial<ApplicationSettingsApp['props']> = {}) {
-  return shallow<ApplicationSettingsApp>(
-    <ApplicationSettingsApp component={mockComponent()} {...props} />
-  );
-}
diff --git a/server/sonar-web/src/main/js/apps/application-settings/__tests__/ReportFrequencyForm-test.tsx b/server/sonar-web/src/main/js/apps/application-settings/__tests__/ReportFrequencyForm-test.tsx
deleted file mode 100644 (file)
index dc6db92..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { shallow } from 'enzyme';
-import * as React from 'react';
-import { Button, ResetButtonLink } from '../../../components/controls/buttons';
-import SelectLegacy from '../../../components/controls/SelectLegacy';
-import { mockDefinition } from '../../../helpers/mocks/settings';
-import ReportFrequencyForm, { ReportFrequencyFormProps } from '../ReportFrequencyForm';
-
-it('should render correctly', () => {
-  expect(shallowRender()).toMatchSnapshot('default');
-  expect(shallowRender({ frequency: 'Weekly' })).toMatchSnapshot('changed');
-  expect(shallowRender({ definition: mockDefinition() })).toMatchSnapshot('no description');
-});
-
-it('should handle changes', () => {
-  const onSave = jest.fn();
-  const wrapper = shallowRender({ onSave });
-
-  wrapper.find(SelectLegacy).simulate('change', { value: 'Daily' });
-
-  expect(wrapper.find('.button-success').exists()).toBe(true);
-  expect(wrapper.find(ResetButtonLink).exists()).toBe(true);
-
-  wrapper.find(Button).simulate('click');
-
-  expect(onSave).toBeCalledWith('Daily');
-});
-
-it('should handle reset', () => {
-  const onSave = jest.fn();
-  const wrapper = shallowRender({ frequency: 'Weekly', onSave });
-
-  expect(wrapper.find('.button-success').exists()).toBe(false);
-  wrapper.find(Button).simulate('click');
-
-  expect(onSave).toBeCalledWith('Monthly');
-});
-
-function shallowRender(props: Partial<ReportFrequencyFormProps> = {}) {
-  return shallow<ReportFrequencyFormProps>(
-    <ReportFrequencyForm
-      definition={mockDefinition({
-        defaultValue: 'Monthly',
-        description: 'description',
-        options: ['Daily', 'Weekly', 'Monthly']
-      })}
-      frequency="Monthly"
-      onSave={jest.fn()}
-      {...props}
-    />
-  );
-}
diff --git a/server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ApplicationSettingsApp-test.tsx.snap b/server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ApplicationSettingsApp-test.tsx.snap
deleted file mode 100644 (file)
index 60191d4..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render correctly: default 1`] = `
-<div
-  className="page page-limited application-settings"
->
-  <h1>
-    application_settings.page
-  </h1>
-  <div
-    className="boxed-group big-padded big-spacer-top"
-  >
-    <DeferredSpinner
-      loading={false}
-    >
-      <div>
-        <ReportFrequencyForm
-          definition={
-            Object {
-              "category": "foo category",
-              "defaultValue": "Monthly",
-              "description": "description",
-              "fields": Array [],
-              "key": "sonar.governance.report.project.branch.frequency",
-              "options": Array [
-                "Daily",
-                "Weekly",
-                "Monthly",
-              ],
-              "subCategory": "foo subCat",
-            }
-          }
-          frequency="Monthly"
-          onSave={[Function]}
-        />
-      </div>
-    </DeferredSpinner>
-  </div>
-</div>
-`;
-
-exports[`should render correctly: loading 1`] = `
-<div
-  className="page page-limited application-settings"
->
-  <h1>
-    application_settings.page
-  </h1>
-  <div
-    className="boxed-group big-padded big-spacer-top"
-  >
-    <DeferredSpinner
-      loading={true}
-    >
-      <div />
-    </DeferredSpinner>
-  </div>
-</div>
-`;
diff --git a/server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ReportFrequencyForm-test.tsx.snap b/server/sonar-web/src/main/js/apps/application-settings/__tests__/__snapshots__/ReportFrequencyForm-test.tsx.snap
deleted file mode 100644 (file)
index 7ea031a..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render correctly: changed 1`] = `
-<div>
-  <h2>
-    application_settings.report.frequency
-  </h2>
-  <div
-    className="markdown"
-    dangerouslySetInnerHTML={
-      Object {
-        "__html": "description",
-      }
-    }
-  />
-  <SelectLegacy
-    className="input-medium"
-    clearable={false}
-    onChange={[Function]}
-    options={
-      Array [
-        Object {
-          "label": "Daily",
-          "value": "Daily",
-        },
-        Object {
-          "label": "Weekly",
-          "value": "Weekly",
-        },
-        Object {
-          "label": "Monthly",
-          "value": "Monthly",
-        },
-      ]
-    }
-    value="Weekly"
-  />
-  <div
-    className="display-flex-center big-spacer-top"
-  >
-    <Button
-      className="spacer-right"
-      onClick={[Function]}
-    >
-      reset_verb
-    </Button>
-  </div>
-</div>
-`;
-
-exports[`should render correctly: default 1`] = `
-<div>
-  <h2>
-    application_settings.report.frequency
-  </h2>
-  <div
-    className="markdown"
-    dangerouslySetInnerHTML={
-      Object {
-        "__html": "description",
-      }
-    }
-  />
-  <SelectLegacy
-    className="input-medium"
-    clearable={false}
-    onChange={[Function]}
-    options={
-      Array [
-        Object {
-          "label": "Daily",
-          "value": "Daily",
-        },
-        Object {
-          "label": "Weekly",
-          "value": "Weekly",
-        },
-        Object {
-          "label": "Monthly",
-          "value": "Monthly",
-        },
-      ]
-    }
-    value="Monthly"
-  />
-  <div
-    className="display-flex-center big-spacer-top"
-  />
-</div>
-`;
-
-exports[`should render correctly: no description 1`] = `
-<div>
-  <h2>
-    application_settings.report.frequency
-  </h2>
-  <SelectLegacy
-    className="input-medium"
-    clearable={false}
-    onChange={[Function]}
-    options={Array []}
-    value="Monthly"
-  />
-  <div
-    className="display-flex-center big-spacer-top"
-  />
-</div>
-`;
diff --git a/server/sonar-web/src/main/js/apps/application-settings/routes.ts b/server/sonar-web/src/main/js/apps/application-settings/routes.ts
deleted file mode 100644 (file)
index e1f12d9..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2021 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
- */
-import { lazyLoadComponent } from '../../components/lazyLoadComponent';
-
-const routes = [
-  {
-    indexRoute: { component: lazyLoadComponent(() => import('./ApplicationSettingsApp')) }
-  }
-];
-
-export default routes;
index 82098ddfc3dcf287698cb0e9e2930b7d319f8701..2d50a443fe25001f20789197b9fe329da7be5d62 100644 (file)
@@ -21,8 +21,7 @@ export const enum SettingsKey {
   DaysBeforeDeletingInactiveBranchesAndPRs = 'sonar.dbcleaner.daysBeforeDeletingInactiveBranchesAndPRs',
   DefaultProjectVisibility = 'projects.default.visibility',
   ServerBaseUrl = 'sonar.core.serverBaseURL',
-  PluginRiskConsent = 'sonar.plugins.risk.consent',
-  ProjectReportFrequency = 'sonar.governance.report.project.branch.frequency'
+  PluginRiskConsent = 'sonar.plugins.risk.consent'
 }
 
 export type Setting = SettingValue & { definition: SettingDefinition; hasValue: boolean };
index 71be2967cd2f33e97b444d23cce3abf94915300e..3528fb722c52b97d7b7049b8fa4076830d1cd4e1 100644 (file)
@@ -556,9 +556,6 @@ visibility.private.description.long=Only members of the organization will be abl
 #
 #------------------------------------------------------------------------------
 
-application_settings.page=Application Settings
-application_settings.report=Application Report Settings
-application_settings.report.frequency=Application Reports Frequency
 coding_rules.page=Rules
 global_permissions.page=Global Permissions
 global_permissions.page.description=Grant and revoke permissions to make changes at the global level. These permissions include editing Quality Profiles, executing analysis, and performing global system administration.