backupNow.htm
9 months ago
callSupport.htm
9 months ago
deleteBackup.htm
9 months ago
downloadBackup.htm
9 months ago
downloadBackupLog.htm
9 months ago
editBackupNotes.htm
9 months ago
exportBackup.htm
9 months ago
extractBackup.htm
9 months ago
fileManager.htm
9 months ago
importBackup.htm
9 months ago
lockBackup.htm
9 months ago
manageBackupJob.htm
9 months ago
manageDestination.htm
9 months ago
manageSchedule.htm
9 months ago
quickStart.htm
9 months ago
restoreBackup.htm
9 months ago
showExtractedPath.htm
9 months ago
viewLog.htm
9 months ago
manageDestination.htm
187 lines
| 1 | <div class="modal-header"> |
| 2 | <div class="modal-main-title"> |
| 3 | <h1 class="modal-title fs-5" id="destinationManageLabel"> |
| 4 | {{ destinationID ? lang.t("Edit Destination") : lang.t("Create New Destination") }} |
| 5 | </h1> |
| 6 | |
| 7 | </div> |
| 8 | <button type="button" class="btn-close" ng-click="cancel()" aria-label="{{ lang.t('Close') }}"></button> |
| 9 | </div> |
| 10 | |
| 11 | <div class="modal-body"> |
| 12 | <div id="destination-form-wrapper"> |
| 13 | |
| 14 | <div class="jb-loading-screen" ng-show="!loaded"> |
| 15 | <p class="jb-loading-text"> |
| 16 | Loading<span class="jb-dots"><span></span><span></span><span></span></span> |
| 17 | </p> |
| 18 | </div> |
| 19 | |
| 20 | |
| 21 | <div ng-show="!saveData._id && loaded && !hasActiveJetStorage" class="alert d-flex align-items-start p-4 rounded shadow-sm position-relative" style="background-color: #fff5ee;"> |
| 22 | <div class="me-3"> |
| 23 | <i class="bi bi-hdd-network-fill fs-2 text-primary"></i> |
| 24 | </div> |
| 25 | <div> |
| 26 | <h5 class="mb-1">{{ lang.t("Use our premium cloud storage solution for remote backups!") }}</h5> |
| 27 | <p class="mb-2"> |
| 28 | {{ lang.t("JetBackup Premium Cloud Storage is designed to work efficiently with JetBackup, providing secure and reliable backups with lightning-fast performance.") }} |
| 29 | </p> |
| 30 | <button ng-click="openJetBackupStoragePopup()" target="_blank" class="btn btn-sm" style="background-color: #FF6C2C; color: white;"> |
| 31 | {{ lang.t("Claim your 2GB of free storage now >>") }} |
| 32 | </button> |
| 33 | </div> |
| 34 | |
| 35 | <div class="jetstorage-logo jetbackup-jetstorage-dest-color"></div> |
| 36 | </div> |
| 37 | |
| 38 | |
| 39 | |
| 40 | <!-- Destination Type Select --> |
| 41 | <div class="form-group row" id="destination_type_row" ng-show="!saveData._id && loaded"> |
| 42 | |
| 43 | |
| 44 | |
| 45 | <label class="col-sm-3 col-form-label jb-label">{{ lang.t("Destination Type") }}</label> |
| 46 | <div class="col-sm-3"> |
| 47 | <div class="jetbackup-dropdown" role="button" tabindex="0"> |
| 48 | <button class="dropdown-toggle btn btn-secondary destination_type_dropdown jb-background-grey border-0" |
| 49 | type="button" |
| 50 | aria-expanded="{{isOpen}}" |
| 51 | ng-click="isOpen = !isOpen"> |
| 52 | <span>{{ selectedDestinationType }}</span> |
| 53 | <span class="caret"></span> |
| 54 | </button> |
| 55 | <ul class="jetbackup-dropdown-menu col-3 mt-10" ng-show="isOpen" aria-hidden="{{!isOpen}}"> |
| 56 | <li class="d-flex" |
| 57 | ng-repeat="(key, value) in destinationTypes" |
| 58 | ng-click="selectDestinationType(key); isOpen = false;"> |
| 59 | <span class="jetbackup-cloud-icon" ng-class="value.iconClass"></span> |
| 60 | <a href="#" |
| 61 | class="dropdown-item destination_type {{ key }}" |
| 62 | data-destination-type="{{ key }}" |
| 63 | ng-click="$event.preventDefault();"> |
| 64 | {{ value.display }} |
| 65 | </a> |
| 66 | </li> |
| 67 | </ul> |
| 68 | </div> |
| 69 | </div> |
| 70 | </div> |
| 71 | |
| 72 | <div class="form-group row" ng-show="!saveData._id && selectedDestinationType === 'JetBackup Storage'"> |
| 73 | <label for="simple_mode" class="col-sm-3 col-form-label jb-label">{{ lang.t('Enable Simple Mode') }}</label> |
| 74 | <div class="col-sm-9"> |
| 75 | <div class="pd-3 switch-main"> |
| 76 | <label class="switch"> |
| 77 | <input id="simple_mode" |
| 78 | type="checkbox" |
| 79 | ng-model="saveData.simpleMode" |
| 80 | ng-checked="saveData.simpleMode == 1" |
| 81 | ng-click="toggleState(saveData.simpleMode)"> |
| 82 | <span class="slider round"></span> |
| 83 | </label> |
| 84 | </div> |
| 85 | <p class="pd-3"> |
| 86 | {{ lang.t("When using simple mode, use the quick access code to setup your storage") }} |
| 87 | </p> |
| 88 | </div> |
| 89 | </div> |
| 90 | |
| 91 | <div id="generic_params_wrapper" ng-show="selectedDestinationType !== 'Select' && !saveData.simpleMode"> |
| 92 | |
| 93 | <div class="form-group row"> |
| 94 | <label for="destination_name" class="col-sm-3 col-form-label jb-label">{{ lang.t("Name") }}</label> |
| 95 | <div class="col-sm-7"> |
| 96 | <input type="text" class="form-control jb-input jb-grey-0" id="destination_name" name="destination_name" ng-model="saveData.name"> |
| 97 | <p>{{ lang.t("Display name for your destination") }}</p> |
| 98 | </div> |
| 99 | </div> |
| 100 | |
| 101 | <div class="form-group row"> |
| 102 | <label for="destination_notes" class="col-sm-3 col-form-label jb-label">{{ lang.t("Notes") }}</label> |
| 103 | <div class="col-sm-7"> |
| 104 | <input type="text" class="form-control jb-input jb-grey-0" id="destination_notes" name="destination_notes" ng-model="saveData.notes"> |
| 105 | <p>{{ lang.t("Add internal notes to help identify or describe this destination.") }}</p> |
| 106 | </div> |
| 107 | </div> |
| 108 | |
| 109 | |
| 110 | <div class="form-group row"> |
| 111 | <label for="destination_read_only" class="col-sm-3 col-form-label jb-label">{{ lang.t("Read Only") }}</label> |
| 112 | <div class="col-sm-7"> |
| 113 | <span class="switch-main"> |
| 114 | <label class="switch"> |
| 115 | <input id="destination_read_only" |
| 116 | type="checkbox" |
| 117 | ng-model="saveData.read_only" |
| 118 | ng-checked="saveData.read_only == 1" |
| 119 | ng-click="toggleState(saveData.read_only)"> |
| 120 | <span class="slider round"></span> |
| 121 | </label> |
| 122 | </span> |
| 123 | <p>{{ lang.t("This destination will only allow restore and download actions. Use it for migration scenarios or when write access isn’t required.") }}</p> |
| 124 | </div> |
| 125 | </div> |
| 126 | |
| 127 | <div class="form-group row"> |
| 128 | <label for="chunkSize" class="col-sm-3 col-form-label jb-label">{{ lang.t('Chunk Size') }}</label> |
| 129 | <div class="col-sm-9"> |
| 130 | <div class="pd-3"> |
| 131 | <select id="chunkSize" class="form-select" aria-label="chunk_size" name="chunk_size" |
| 132 | ng-model="saveData.chunk_size" |
| 133 | ng-options="value as key for (key, value) in chunks_list"> |
| 134 | </select> |
| 135 | <p class="pd-3">{{ lang.t('Set the default read/write chunk size. Smaller chunks suit small files or slow connections, while larger chunks are better for big files on fast, stable networks.') }}</p> |
| 136 | </div> |
| 137 | </div> |
| 138 | </div> |
| 139 | |
| 140 | <div class="form-group row" ng-show="isDiskSpaceSupported()"> |
| 141 | <label for="free_disk" class="col-sm-3 col-form-label jb-label">{{ lang.t('Free Disk Limit') }}</label> |
| 142 | <div class="col-sm-9"> |
| 143 | <div class="pd-3"> |
| 144 | <select id="free_disk" class="form-select" aria-label="free_disk" name="free_disk" |
| 145 | ng-model="saveData.free_disk" |
| 146 | ng-options="value as key for (key, value) in disk_space_options"> |
| 147 | </select> |
| 148 | <p class="pd-3">{{ lang.t('This option will check if destination disk space reached the specified limit before it performs the backup. If you enable this option and available disk space is less than the amount specified, the system will not perform the backup.') }}</p> |
| 149 | </div> |
| 150 | </div> |
| 151 | </div> |
| 152 | |
| 153 | <div class="form-group row" ng-show="!saveData.simpleMode"> |
| 154 | <label for="destination_path" class="col-sm-3 col-form-label jb-label">{{ lang.t("Backup Directory") }}</label> |
| 155 | <div class="col-sm-7"> |
| 156 | <input type="text" |
| 157 | class="form-control jb-input jb-grey-0" |
| 158 | id="destination_path" |
| 159 | name="destination_path" |
| 160 | ng-model="saveData.path" |
| 161 | ng-disabled="!!saveData._id" |
| 162 | title="{{ saveData._id ? lang.t('This field cannot be modified for active destination') : '' }}"> |
| 163 | <p class="pd-3">{{ lang.t("Define the directory path on the remote server for storing backups. Make sure it’s writable and uniquely identifies the domain (e.g., /backups/domain.com/).") }}</p> |
| 164 | </div> |
| 165 | </div> |
| 166 | |
| 167 | </div> |
| 168 | |
| 169 | <div ng-include="destinationTemplate"></div> |
| 170 | |
| 171 | </div> |
| 172 | </div> |
| 173 | |
| 174 | <div class="modal-footer"> |
| 175 | <button class="btn btn-secondary cancel_btn" type="button" ng-click="cancel()"> |
| 176 | {{ lang.t("Cancel") }} |
| 177 | </button> |
| 178 | <button |
| 179 | class="btn btn-primary create_new_destination apply_btn" |
| 180 | type="button" |
| 181 | ng-click="ok()" |
| 182 | ng-disabled="selectedDestinationType === 'Select' || loading"> |
| 183 | <span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true" ng-show="loading"></span> |
| 184 | {{ lang.t("Save") }} |
| 185 | </button> |
| 186 | |
| 187 | </div> |