diff --git a/CHANGELOG.md b/CHANGELOG.md index f417e788e..876ba1671 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Enhancements +- [Legacy Backup] Restore and File restore functionalities moved to the Backup NG view [#3499](https://github.com/vatesfr/xen-orchestra/issues/3499) (PR [#3610](https://github.com/vatesfr/xen-orchestra/pull/3610)) + ### Bug fixes - [Backup ng logs] Fix restarting VMs with concurrency issue [#3603](https://github.com/vatesfr/xen-orchestra/issues/3603) (PR [#3634](https://github.com/vatesfr/xen-orchestra/pull/3634)) diff --git a/packages/xo-web/src/common/intl/messages.js b/packages/xo-web/src/common/intl/messages.js index ec416c315..18964d0e6 100644 --- a/packages/xo-web/src/common/intl/messages.js +++ b/packages/xo-web/src/common/intl/messages.js @@ -88,6 +88,7 @@ const messages = { xosan: 'XOSAN', backupDeprecatedMessage: 'Warning: Backup is deprecated, use Backup NG instead.', + moveRestoreLegacyMessage: 'Warning: Your legacy backups can be found here', backupMigrationLink: 'How to migrate to Backup NG', backupNgNewPage: 'Create a new backup with Backup NG', backupOverviewPage: 'Overview', @@ -1343,7 +1344,6 @@ const messages = { remoteError: 'Error', remoteErrorMessage: 'The URL ({url}) is invalid (colon in path). Click this button to change the URL to {newUrl}.', - noBackup: 'No backup available', backupVmNameColumn: 'VM Name', backupVmDescriptionColumn: 'VM Description', backupTags: 'Tags', @@ -1361,6 +1361,8 @@ const messages = { importBackupMessage: 'Starting your backup import', vmsToBackup: 'VMs to backup', restoreResfreshList: 'Refresh backup list', + restoreLegacy: 'Legacy restore', + restoreFileLegacy: 'Legacy file restore', restoreVmBackups: 'Restore', restoreVmBackupsTitle: 'Restore {vm}', restoreVmBackupsBulkTitle: @@ -1396,6 +1398,7 @@ const messages = { restoreFilesSelectFiles: 'Select a file…', restoreFileContentNotFound: 'Content not found', restoreFilesNoFilesSelected: 'No files selected', + restoreFilesSelectedFiles: 'Selected files ({files}):', restoreFilesSelectedFilesAndFolders: 'Selected files/folders ({files}):', restoreFilesDiskError: 'Error while scanning disk', restoreFilesSelectAllFiles: "Select all this folder's files", diff --git a/packages/xo-web/src/xo-app/backup/file-restore/index.js b/packages/xo-web/src/xo-app/backup-ng/file-restore-legacy/index.js similarity index 72% rename from packages/xo-web/src/xo-app/backup/file-restore/index.js rename to packages/xo-web/src/xo-app/backup-ng/file-restore-legacy/index.js index 5a5bd2ff8..52733966c 100644 --- a/packages/xo-web/src/xo-app/backup/file-restore/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/file-restore-legacy/index.js @@ -3,15 +3,14 @@ import Component from 'base-component' import Icon from 'icon' import React from 'react' import SortedTable from 'sorted-table' -import Upgrade from 'xoa-upgrade' import { confirm } from 'modal' import { addSubscriptions, noop } from 'utils' import { Container, Row, Col } from 'grid' import { error } from 'notification' import { FormattedDate } from 'react-intl' import { - find, filter, + find, forEach, groupBy, isEmpty, @@ -23,7 +22,6 @@ import { import { fetchFiles, listRemoteBackups, subscribeRemotes } from 'xo' import RestoreFileModalBody from './restore-file-modal' -import styles from './index.css' const VM_COLUMNS = [ { @@ -127,50 +125,20 @@ export default class FileRestore extends Component { render () { const { backupInfoByVm } = this.props - if (!backupInfoByVm) { - return

{_('statusLoading')}

- } + return !isEmpty(backupInfoByVm) ? ( +
+

{_('restoreFileLegacy')}

+ + {_('restoreBackupsInfo')} + - return process.env.XOA_PLAN > 3 ? ( - -

{_('restoreFiles')}

- {isEmpty(backupInfoByVm) ? ( -
- - {_('restoreDeltaBackupsInfo')} - -
- {_('noBackup')} -
-
- ) : ( -
-
    -
  • - - {_('restoreBackupsInfo')} - -
  • -
  • - - {_('restoreDeltaBackupsInfo')} - -
  • -
- - -
- )} -
- ) : ( - - - - ) + +
+ ) : null } } diff --git a/packages/xo-web/src/xo-app/backup/file-restore/restore-file-modal.js b/packages/xo-web/src/xo-app/backup-ng/file-restore-legacy/restore-file-modal.js similarity index 100% rename from packages/xo-web/src/xo-app/backup/file-restore/restore-file-modal.js rename to packages/xo-web/src/xo-app/backup-ng/file-restore-legacy/restore-file-modal.js diff --git a/packages/xo-web/src/xo-app/backup-ng/file-restore/index.js b/packages/xo-web/src/xo-app/backup-ng/file-restore/index.js index ba47b6542..2b4968603 100644 --- a/packages/xo-web/src/xo-app/backup-ng/file-restore/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/file-restore/index.js @@ -32,6 +32,8 @@ import { import DeleteBackupsModalBody from '../restore/delete-backups-modal-body' import RestoreFileModalBody from './restore-file-modal' +import RestoreFileLegacy from '../file-restore-legacy' + // ----------------------------------------------------------------------------- const BACKUPS_COLUMNS = [ @@ -239,6 +241,7 @@ export default class Restore extends Component { columns={BACKUPS_COLUMNS} individualActions={this._individualActions} /> + ) diff --git a/packages/xo-web/src/xo-app/backup/restore/index.js b/packages/xo-web/src/xo-app/backup-ng/restore-legacy/index.js similarity index 91% rename from packages/xo-web/src/xo-app/backup/restore/index.js rename to packages/xo-web/src/xo-app/backup-ng/restore-legacy/index.js index 551d051c0..3558186db 100644 --- a/packages/xo-web/src/xo-app/backup/restore/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/restore-legacy/index.js @@ -1,11 +1,9 @@ import _, { messages } from 'intl' import ChooseSrForEachVdisModal from 'xo/choose-sr-for-each-vdis-modal' import Component from 'base-component' -import Icon from 'icon' import moment from 'moment' import React from 'react' import SortedTable from 'sorted-table' -import Upgrade from 'xoa-upgrade' import { confirm } from 'modal' import { createSelector } from 'selectors' import { addSubscriptions, noop } from 'utils' @@ -332,34 +330,16 @@ export default class Restore extends Component { render () { const { backupInfoByVm } = this.state - - if (!backupInfoByVm) { - return

{_('statusLoading')}

- } - - return process.env.XOA_PLAN > 1 ? ( - -

{_('restoreBackups')}

- {isEmpty(backupInfoByVm) ? ( - _('noBackup') - ) : ( -
- - {_('restoreBackupsInfo')} - - -
- )} -
- ) : ( - - - - ) + return !isEmpty(backupInfoByVm) ? ( +
+

{_('restoreLegacy')}

+ +
+ ) : null } } diff --git a/packages/xo-web/src/xo-app/backup-ng/restore/index.js b/packages/xo-web/src/xo-app/backup-ng/restore/index.js index c9da36c6a..1f7f2fe02 100644 --- a/packages/xo-web/src/xo-app/backup-ng/restore/index.js +++ b/packages/xo-web/src/xo-app/backup-ng/restore/index.js @@ -33,6 +33,8 @@ import RestoreBackupsModalBody, { } from './restore-backups-modal-body' import DeleteBackupsModalBody from './delete-backups-modal-body' +import RestoreLegacy from '../restore-legacy' + // ----------------------------------------------------------------------------- const BACKUPS_COLUMNS = [ @@ -268,6 +270,7 @@ export default class Restore extends Component { collection={this.state.backupDataByVm} columns={BACKUPS_COLUMNS} /> + ) diff --git a/packages/xo-web/src/xo-app/backup/file-restore/index.css b/packages/xo-web/src/xo-app/backup/file-restore/index.css deleted file mode 100644 index 5bce73e1e..000000000 --- a/packages/xo-web/src/xo-app/backup/file-restore/index.css +++ /dev/null @@ -1,3 +0,0 @@ -.listRestoreBackupInfos { - list-style-type: none; -} diff --git a/packages/xo-web/src/xo-app/backup/index.js b/packages/xo-web/src/xo-app/backup/index.js index 334af285c..8b3453627 100644 --- a/packages/xo-web/src/xo-app/backup/index.js +++ b/packages/xo-web/src/xo-app/backup/index.js @@ -10,8 +10,6 @@ import { NavLink, NavTabs } from 'nav' import New from './new' import Edit from './edit' import Overview from './overview' -import Restore from './restore' -import FileRestore from './file-restore' const DeprecatedMsg = () => (
@@ -23,6 +21,18 @@ const DeprecatedMsg = () => ( const DEVELOPMENT = process.env.NODE_ENV === 'development' +const MovingRestoreMessage = () => ( +
+ {_('moveRestoreLegacyMessage')} +
+) + +const MovingFileRestoreMessage = () => ( +
+ {_('moveRestoreLegacyMessage')} +
+) + const HEADER = ( @@ -56,8 +66,8 @@ const Backup = routes('overview', { ':id/edit': Edit, new: DEVELOPMENT ? New : DeprecatedMsg, overview: Overview, - restore: Restore, - 'file-restore': FileRestore, + restore: MovingRestoreMessage, + 'file-restore': MovingFileRestoreMessage, })(({ children }) => ( {children}