PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / trunk
JetBackup – Backup, Restore & Migrate vtrunk
3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / public / views / modal / manageBackupJob.htm
backup / public / views / modal Last commit date
backupNow.htm 1 year ago callSupport.htm 1 year ago deleteBackup.htm 1 year ago downloadBackup.htm 1 year ago downloadBackupLog.htm 1 year ago editBackupNotes.htm 1 year ago exportBackup.htm 1 year ago extractBackup.htm 1 year ago fileManager.htm 10 months ago importBackup.htm 1 year ago lockBackup.htm 1 year ago manageBackupJob.htm 1 year ago manageDestination.htm 1 year ago manageSchedule.htm 1 year ago quickStart.htm 1 year ago restoreBackup.htm 1 year ago showExtractedPath.htm 1 year ago viewLog.htm 1 year ago
manageBackupJob.htm
249 lines
1 <div class="modal-header">
2 <div class="modal-main-title">
3 <h1 class="modal-title fs-5" id="jobManageModal">
4 {{ jobID ? lang.t("Edit Job") : lang.t("Create New Job") }}
5 </h1>
6 </div>
7 <button type="button" class="btn-close" ng-click="cancel()" aria-label="Close"></button>
8 </div>
9
10 <div class="modal-body">
11
12 <div class="jb-loading-screen" ng-if="loading">
13 <p class="jb-loading-text">
14 Loading<span class="jb-dots"><span></span><span></span><span></span></span>
15 </p>
16 </div>
17 <div id="job-form-wrapper" ng-show="!loading">
18 <div class="form-group row">
19 <label for="jobName" class="col-sm-3 col-form-label jb-label">{{ lang.t("Job Name") }}</label>
20 <div class="col-sm-9">
21 <input type="text" class="form-control jb-input jb-grey-0" id="jobName" ng-model="saveData.name" name="name">
22 <p class="pd-3">{{ lang.t("Give your backup job a clear, descriptive name (e.g., 'Daily Backups' or 'Database Only'). This name is for internal reference only.") }}</p>
23 </div>
24 </div>
25
26 <div class="form-group row selectDestinations">
27 <label for="destinations" class="col-sm-3 col-form-label jb-label">{{ lang.t("Destinations") }}</label>
28 <div class="col-sm-9">
29 <div id="destinations" class="pd-3">
30 <div ng-repeat="destination in destinations" ng-if="!destination.read_only" class="d-flex align-items-center mb-2">
31 <span class="switch-main">
32 <label class="switch">
33 <input type="checkbox"
34 ng-model="destination.selected"
35 ng-change="toggleDestination(destination._id)"
36 ng-checked="isDestinationChecked(destination._id)"
37 id="destination_{{destination._id}}">
38 <span class="slider round"></span>
39 </label>
40 </span>
41 <label for="destination_{{destination._id}}" class="ml-10">{{ destination.name }}</label>
42 <span class="ml-10" ng-if="destination.read_only">{{ lang.t("[Read-only]") }}</span>
43 </div>
44 </div>
45 <p class="pd-3">{{ lang.t("Enable one or more destinations to store backups when this job runs. Don’t see your destination? Make sure it’s enabled in the Destinations tab.") }}</p>
46 </div>
47 </div>
48
49 <div class="form-group row backup_contains">
50 <label class="col-sm-3 col-form-label jb-label">{{ lang.t("Backup Contains") }}</label>
51 <div class="col-sm-9">
52
53 <!-- Checkbox for Files (Home Directory) -->
54 <div class="pd-3 d-flex align-items-center">
55 <span class="switch-main">
56 <label class="switch">
57 <input id="switch_files" type="checkbox" ng-model="saveData.contains_files" ng-change="toggleBackupOption()">
58 <span class="slider round"></span>
59 </label>
60 </span>
61 <label for="switch_files" class="ml-10">{{ lang.t("Files") }}</label>
62 <span class="switch-main ml-10" ng-show="saveData.contains_files">
63 <label class="switch">
64 <input id="switch_is_files_excluded" type="checkbox" ng-model="saveData.is_files_excluded" ng-change="toggleBackupOption()">
65 <span class="slider round"></span>
66 </label>
67 </span>
68 <label for="switch_is_files_excluded" class="ml-10" ng-show="saveData.contains_files">{{ lang.t("Exclude Folders/Files") }}</label>
69 </div>
70
71 <div class="col-sm-9">
72 <div class="mt-2" id="excludeFilesWrapper">
73
74 <textarea ng-show="saveData.is_files_excluded" class="form-control" id="exclude_files" rows="5"
75 ng-model="excludeFilesInput"
76 placeholder="{{ lang.t('Enter paths to exclude, one per line (e.g., /wp-content/cache/*)') }}">
77 </textarea>
78 <small ng-show="saveData.is_files_excluded" class="text-muted mt-1 d-block">
79 {{ lang.t('You can use wildcards like * to exclude multiple files or folders.') }}
80 </small>
81
82 </div>
83 </div>
84
85 <!-- Checkbox for Database -->
86 <div class="pd-3 d-flex align-items-center">
87 <span class="switch-main">
88 <label class="switch">
89 <input id="switch_database" type="checkbox" ng-model="saveData.contains_database" ng-change="toggleBackupOption('database')">
90 <span class="slider round"></span>
91 </label>
92 </span>
93 <label for="switch_database" class="ml-10">{{ lang.t("Database") }}</label>
94 <span class="switch-main ml-10" ng-show="saveData.contains_database">
95 <label class="switch">
96 <input id="switch_is_tables_excluded" type="checkbox" ng-model="saveData.is_tables_excluded" ng-change="toggleBackupOption('is_tables_excluded')">
97 <span class="slider round"></span>
98 </label>
99 </span>
100 <label for="switch_is_tables_excluded" class="ml-10" ng-show="saveData.contains_database">{{ lang.t("Exclude Database Tables") }}</label>
101 </div>
102
103 <div class="col-sm-9">
104 <div class="mt-2" id="excludeTablesWrapper">
105 <select class="form-select form-select-lg"
106 id="exclude_tables"
107 multiple
108 ng-model="database_excludes"
109 ng-options="table as table.name for table in databaseTables"
110 ng-show="saveData.is_tables_excluded"
111 ng-disabled="!saveData.is_tables_excluded"
112 aria-label="{{ lang.t('Select tables to exclude') }}">
113 <option ng-if="databaseTables.length === 0" disabled>{{ lang.t('No tables available') }}</option>
114 </select>
115 <small ng-show="saveData.is_tables_excluded" class="text-muted mt-1 d-block">
116 {{ lang.t('Hold down the Ctrl (Windows) or Command (Mac) key to select multiple tables. Excluding a table will backup the structure of the table, not the content of the table.') }}
117 </small>
118 </div>
119 </div>
120 <p class="pd-3">{{ lang.t("By default, all site files and database tables are included. You can customize what’s excluded in this job by toggling the Exclude Files or Exclude Tables option. Common Exclusions are enabled by default regardless of your selections for optimal performance; you can adjust this behavior in Settings.") }}</p>
121 </div>
122 </div>
123
124 <!-- EOF Backup contains -->
125
126 <div class="form-group row selectSchedules">
127 <label for="schedules" class="col-sm-3 col-form-label jb-label">{{ lang.t("Schedules") }}</label>
128 <div id="schedules" class="col-sm-9">
129 <div ng-repeat="schedule in schedules" class="pd-3 d-flex align-items-center">
130 <div class="col-xl-5 col-sm-5 d-flex align-items-center">
131 <span class="switch-main">
132 <label class="switch">
133 <input type="checkbox"
134 ng-model="schedule.selected"
135 ng-change="toggleSchedule(schedule)"
136 ng-checked="isScheduleChecked(schedule._id)"
137 id="schedule_{{schedule._id}}">
138 <span class="slider round"></span>
139 </label>
140 </span>
141 <label for="schedule_{{schedule._id}}" class="ml-10">{{ schedule.name }}</label>
142 </div>
143 <div ng-show="schedule.selected" class="col-sm-5 col-xl-7 col-lg-7 d-flex schedule_retention_wrapper align-items-center schedule_retention_{{schedule._id}}">
144 <div class="col-sm-4 col-lg-5 col-xl-3 col-md-5">
145 <label for="schedule_retention_{{schedule._id}}">{{ lang.t("Retention") }}:</label>
146 </div>
147 <div class="col-sm-6">
148 <div class="input-group">
149 <button type="button" class="btn btn-secondary"
150 ng-click="changeRetain(schedule, -1)">
151 -
152 </button>
153 <input id="schedule_retention_{{schedule._id}}"
154 name="schedule_retention[{{schedule._id}}]"
155 class="form-control text-center"
156 type="number"
157 min="0"
158 max="999"
159 placeholder="0"
160 ng-model="schedule.retain"
161 ng-change="updateScheduleRetain(schedule)">
162 <button type="button" class="btn btn-secondary"
163 ng-click="changeRetain(schedule, 1)">
164 +
165 </button>
166 </div>
167
168 </div>
169 </div>
170 </div>
171 <div class="pd-3">
172 <p>{{ lang.t("Select one or more schedules to automate this backup job. Set the minimum number of backups to retain under each schedule (e.g., keep 7 daily backups).") }}</p>
173 </div>
174 </div>
175 </div>
176 <!-- EOF Schdules -->
177
178 <div class="form-group row schedules_time_row">
179 <label for="schedule_time" class="col-sm-3 col-form-label jb-label">{{ lang.t("Schedule Time") }}</label>
180 <div class="col-sm-9">
181 <div class="col-sm-4">
182 <div class="input-group position-relative" moment-picker="saveData.schedule_time" format="HH:mm" show-header="false">
183 <input type="text"
184 class="form-control text-center pr-5"
185 id="schedule_time"
186 name="schedule_time"
187 placeholder="{{ lang.t('Pick a time') }}"
188 ng-model="saveData.schedule_time"
189 ng-model-options="{ updateOn: 'blur' }"
190 style="border-radius: 5px;" />
191
192 <!-- Clock icon moved to the right -->
193 <span class="position-absolute clock-icon"
194 style="right: 10px; top: 50%; transform: translateY(-50%); cursor: pointer;">
195 <em aria-hidden="true" class="far fa-clock text-muted"></em>
196 </span>
197 </div>
198 </div>
199 <div class="pd-3">
200 <p>{{ lang.t("Define the time of day the backup job should run, based on the schedules you selected. If no schedule is enabled, the job must be run manually. Old backups will be automatically cleaned based on your retention settings.") }}</p>
201 </div>
202 </div>
203 </div>
204
205 <div class="form-group row backup_monitor">
206 <label for="backup_monitor" class="col-sm-3 col-form-label jb-label">{{ lang.t("Backup Monitor") }}</label>
207 <div class="col-sm-9">
208 <div class="col-1">
209 <input type="text" class="form-control mb-3 text-center"
210 name="backup_monitor"
211 id="backup_monitor"
212 ng-model="saveData.job_monitor"
213 min="0"
214 max="99"
215 string-to-number
216 validate-field="int"
217 placeholder="0">
218 </div>
219 <p>{{ lang.t("Get alerts if backups haven’t run for a specified number of days. Configure the alert email in Settings > Notification.") }}</p>
220 </div>
221 </div>
222
223 </div>
224 </div>
225
226 <div class="form-group row justify-content-center">
227 <div class="col-11 error-messages" ng-if="formErrors.length > 0">
228 <div class="alert alert-danger" role="alert">
229 <ul class="mb-0">
230 <li ng-repeat="error in formErrors">{{ error }}</li>
231 </ul>
232 </div>
233 </div>
234 </div>
235
236 <div class="modal-footer">
237 <button class="btn btn-secondary cancel_btn" type="button" ng-click="cancel()">
238 {{ lang.t("Cancel") }}
239 </button>
240 <button
241 class="btn btn-primary apply_btn"
242 type="button"
243 ng-click="ok()"
244 ng-disabled="saving">
245 <span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true" ng-show="saving"></span>
246 {{ lang.t("Save") }}
247 </button>
248
249 </div>