Version Description
25/Oct/2017 =
FEATURE: Warn the user if their .htaccess seems to contain a redirect (or any other reference) to the old site after migration.
FEATURE: When importing a database, warn the user if the current MySQL server does not support a used collation, and offer to replace it
FIX: Saving of S3 settings had taken a dislike to buckets beginning with a capital 'B'
FIX: UpdraftCentral users' module was failing to handle loading a very large number of users
TWEAK: Allows the installation and/or activation of the WP-Optimize plugin from UpdraftCentral
TWEAK: Add multisite attribute to the error response object for the create user, delete user and edit user actions.
TWEAK: All remote storage methods are ported over to using configuration templates internally
TWEAK: Include a method to add a manifest file inside each backup archive
TWEAK: All code relating to the now-dead Dropbox APIv1 removed (N.B. If you've not updated UpdraftPlus since November 2016 and were using Dropbox, it won't be working - https://blogs.dropbox.com/developers/2017/09/api-v1-shutdown-details/)
TWEAK: Prevent a PHP log notice upon database backup restore when using Google Drive without a client ID
TWEAK: Prevent the final 'Restore' button being pressed a second time
TWEAK: Improvements to the UpdraftCentral wizard
TWEAK: Update to trunk version of plugin updater (paid versions), restoring the ability to work on older WP versions (3.8 and before)
TWEAK: Add lbakut_activity_log to the list of large log tables
TWEAK: Updater in paid versions now requests JSON as response format for responses when claiming entitlements
TWEAK: Resolve: Backup labels could end up with extraneous slashes in output
TWEAK: Updater in paid versions can now receive and process update information in respond to entitlement claim - one less HTTP round-trip
TWEAK: Improve Google Cloud authentication success message for bucket name is not defined
TWEAK: UpdraftVault commands now pass an instance identifier
Release Info
Developer | DavidAnderson |
Plugin | UpdraftPlus WordPress Backup Plugin |
Version | 1.13.12 |
Comparing to | |
See all releases |
Code changes from version 1.13.11 to 1.13.12
- admin.php +634 -424
- backup.php +484 -270
- central/bootstrap.php +36 -25
- central/commands.php +1 -1
- central/listener.php +4 -4
- central/modules/analytics.php +1 -1
- central/modules/comments.php +1 -1
- central/modules/core.php +33 -18
- central/modules/plugin.php +184 -0
- central/modules/updates.php +4 -4
- central/modules/updraftvault.php +0 -42
- central/modules/users.php +125 -57
- class-updraftplus.php +339 -74
- css/admin.css +10 -4
- css/admin.min.css +1 -1
- css/admin.min.css.map +1 -1
- images/addons-images/backblaze.png +0 -0
- images/notices/metaslider_logo.png +0 -0
- includes/Dropbox/API.php +0 -594
- includes/Dropbox/Exception.php +0 -28
- includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php +0 -433
- includes/Dropbox/OAuth/Consumer/Curl.php +0 -249
- includes/Dropbox/OAuth/Consumer/WordPress.php +0 -80
- includes/Dropbox/OAuth/Storage/Encrypter.php +0 -109
- includes/Dropbox/OAuth/Storage/StorageInterface.php +0 -30
- includes/Dropbox/OAuth/Storage/WordPress.php +0 -195
- includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php +3 -1
- includes/Dropbox2/OAuth/Consumer/Curl.php +2 -1
- includes/class-commands.php +28 -14
- includes/class-wpadmin-commands.php +69 -0
- includes/handlebars/LICENSE +1 -1
- includes/handlebars/handlebars.js +3 -3
- includes/handlebars/handlebars.min.js +3 -3
- includes/handlebars/handlebars.runtime.js +3 -3
- includes/handlebars/handlebars.runtime.min.js +3 -3
- includes/updraft-admin.js +129 -91
- includes/updraft-admin.min.js +3 -3
- includes/updraftplus-notices.php +1 -1
- includes/updraftvault.php +46 -0
- languages/updraftplus-af.po +1203 -1122
- languages/updraftplus-ar.mo +0 -0
- languages/updraftplus-ar.po +431 -343
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined
|
4 |
|
5 |
// Admin-area code lives here. This gets called in admin_menu, earlier than admin_init
|
6 |
|
@@ -15,6 +15,8 @@ class UpdraftPlus_Admin {
|
|
15 |
|
16 |
private $backups_instance_ids;
|
17 |
|
|
|
|
|
18 |
public function __construct() {
|
19 |
$this->admin_init();
|
20 |
}
|
@@ -31,14 +33,15 @@ class UpdraftPlus_Admin {
|
|
31 |
return $path;
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
34 |
public function get_templates_dir() {
|
35 |
return apply_filters('updraftplus_templates_dir', $this->wp_normalize_path(UPDRAFTPLUS_DIR.'/templates'));
|
36 |
}
|
37 |
|
38 |
-
public function get_templates_url() {
|
39 |
-
return apply_filters('updraftplus_templates_url', UPDRAFTPLUS_DIR.'/templates');
|
40 |
-
}
|
41 |
-
|
42 |
private function register_template_directories() {
|
43 |
|
44 |
$template_directories = array();
|
@@ -118,11 +121,17 @@ class UpdraftPlus_Admin {
|
|
118 |
$clientid = $storage_options['clientid'];
|
119 |
$token = empty($storage_options['token']) ? '' : $storage_options['token'];
|
120 |
}
|
121 |
-
if (!empty($clientid) && '' == $token)
|
|
|
|
|
|
|
122 |
unset($clientid);
|
123 |
unset($token);
|
124 |
} else {
|
125 |
-
if (empty($storage_options['user_id']))
|
|
|
|
|
|
|
126 |
}
|
127 |
}
|
128 |
}
|
@@ -140,7 +149,10 @@ class UpdraftPlus_Admin {
|
|
140 |
$clientid = $storage_options['clientid'];
|
141 |
$token = (empty($storage_options['token'])) ? '' : $storage_options['token'];
|
142 |
|
143 |
-
if (!empty($clientid) && empty($token))
|
|
|
|
|
|
|
144 |
}
|
145 |
}
|
146 |
}
|
@@ -156,7 +168,8 @@ class UpdraftPlus_Admin {
|
|
156 |
} elseif (!empty($settings['settings'])) {
|
157 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
158 |
if (empty($storage_options['tk_access_token'])) {
|
159 |
-
|
|
|
160 |
}
|
161 |
}
|
162 |
}
|
@@ -172,14 +185,19 @@ class UpdraftPlus_Admin {
|
|
172 |
$updraftplus->log_wp_error($settings, true, true);
|
173 |
} elseif (!empty($settings['settings'])) {
|
174 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
175 |
-
if((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)){
|
176 |
-
if(!empty($storage_options['clientid']) && !empty($storage_options['secret']) && empty($storage_options['refresh_token'])) {
|
177 |
-
|
|
|
178 |
} elseif (empty($storage_options['refresh_token'])) {
|
179 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
180 |
}
|
181 |
-
} else{
|
182 |
-
if(empty($storage_options['refresh_token']))add_action('all_admin_notices', array($this,'show_admin_warning_onedrive'));
|
183 |
}
|
184 |
}
|
185 |
}
|
@@ -196,7 +214,7 @@ class UpdraftPlus_Admin {
|
|
196 |
} elseif (!empty($settings['settings'])) {
|
197 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
198 |
if (empty($storage_options['token']) && empty($storage_options['email'])) {
|
199 |
-
add_action('all_admin_notices', array($this,'show_admin_warning_updraftvault'));
|
200 |
}
|
201 |
}
|
202 |
}
|
@@ -205,7 +223,7 @@ class UpdraftPlus_Admin {
|
|
205 |
if ($this->disk_space_check(1048576*35) === false) add_action('all_admin_notices', array($this, 'show_admin_warning_diskspace'));
|
206 |
}
|
207 |
|
208 |
-
private function setup_all_admin_notices_udonly($service, $override = false){
|
209 |
global $wp_version;
|
210 |
|
211 |
if (UpdraftPlus_Options::user_can_manage() && defined('DISABLE_WP_CRON') && DISABLE_WP_CRON && (!defined('UPDRAFTPLUS_DISABLE_WP_CRON_NOTICE') || !UPDRAFTPLUS_DISABLE_WP_CRON_NOTICE)) {
|
@@ -213,7 +231,7 @@ class UpdraftPlus_Admin {
|
|
213 |
}
|
214 |
|
215 |
if (UpdraftPlus_Options::get_updraft_option('updraft_debug_mode')) {
|
216 |
-
@ini_set('display_errors',1);
|
217 |
@error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
|
218 |
add_action('all_admin_notices', array($this, 'show_admin_debug_warning'));
|
219 |
}
|
@@ -223,9 +241,9 @@ class UpdraftPlus_Admin {
|
|
223 |
$this->no_settings_warning = true;
|
224 |
}
|
225 |
|
226 |
-
|
227 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
228 |
-
$max_execution_time = (int)@ini_get('max_execution_time');
|
229 |
if ($max_execution_time>0 && $max_execution_time<20) {
|
230 |
add_action('all_admin_notices', array($this, 'show_admin_warning_execution_time'));
|
231 |
}
|
@@ -240,20 +258,10 @@ class UpdraftPlus_Admin {
|
|
240 |
if (version_compare($wp_version, '3.2', '<')) add_action('all_admin_notices', array($this, 'show_admin_warning_wordpressversion'));
|
241 |
}
|
242 |
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
foreach ($actions_to_remove as $action) {
|
249 |
-
remove_action('all_admin_notices', $action);
|
250 |
-
}
|
251 |
-
|
252 |
-
}
|
253 |
-
*/
|
254 |
-
|
255 |
-
//Used to output the information for the next scheduled backup
|
256 |
-
//**// moved to function for the ajax saves
|
257 |
public function next_scheduled_backups_output() {
|
258 |
// UNIX timestamp
|
259 |
$next_scheduled_backup = wp_next_scheduled('updraft_backup');
|
@@ -262,14 +270,14 @@ class UpdraftPlus_Admin {
|
|
262 |
$next_scheduled_backup_gmt = gmdate('Y-m-d H:i:s', $next_scheduled_backup);
|
263 |
// Convert to blog time zone
|
264 |
$next_scheduled_backup = get_date_from_gmt($next_scheduled_backup_gmt, 'D, F j, Y H:i');
|
265 |
-
//
|
266 |
} else {
|
267 |
$next_scheduled_backup = __('Nothing currently scheduled', 'updraftplus');
|
268 |
$files_not_scheduled = true;
|
269 |
}
|
270 |
|
271 |
$next_scheduled_backup_database = wp_next_scheduled('updraft_backup_database');
|
272 |
-
if (UpdraftPlus_Options::get_updraft_option('updraft_interval_database',UpdraftPlus_Options::get_updraft_option('updraft_interval')) == UpdraftPlus_Options::get_updraft_option('updraft_interval')) {
|
273 |
if (isset($files_not_scheduled)) {
|
274 |
$next_scheduled_backup_database = $next_scheduled_backup;
|
275 |
$database_not_scheduled = true;
|
@@ -283,7 +291,7 @@ class UpdraftPlus_Admin {
|
|
283 |
$next_scheduled_backup_database_gmt = gmdate('Y-m-d H:i:s', $next_scheduled_backup_database);
|
284 |
// Convert to blog time zone
|
285 |
$next_scheduled_backup_database = get_date_from_gmt($next_scheduled_backup_database_gmt, 'D, F j, Y H:i');
|
286 |
-
//
|
287 |
} else {
|
288 |
$next_scheduled_backup_database = __('Nothing currently scheduled', 'updraftplus');
|
289 |
$database_not_scheduled = true;
|
@@ -305,13 +313,16 @@ class UpdraftPlus_Admin {
|
|
305 |
}
|
306 |
}
|
307 |
|
|
|
|
|
|
|
308 |
private function admin_init() {
|
309 |
|
310 |
add_action('core_upgrade_preamble', array($this, 'core_upgrade_preamble'));
|
311 |
add_action('admin_action_upgrade-plugin', array($this, 'admin_action_upgrade_pluginortheme'));
|
312 |
add_action('admin_action_upgrade-theme', array($this, 'admin_action_upgrade_pluginortheme'));
|
313 |
|
314 |
-
add_action('admin_head', array($this,'admin_head'));
|
315 |
add_filter((is_multisite() ? 'network_admin_' : '').'plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
|
316 |
add_action('wp_ajax_updraft_download_backup', array($this, 'updraft_download_backup'));
|
317 |
add_action('wp_ajax_updraft_ajax', array($this, 'updraft_ajax_handler'));
|
@@ -326,8 +337,8 @@ class UpdraftPlus_Admin {
|
|
326 |
// Add a new Ajax action for saving settings
|
327 |
add_action('wp_ajax_updraft_savesettings', array($this, 'updraft_ajax_savesettings'));
|
328 |
|
329 |
-
// Ajax for settings import and export
|
330 |
-
add_action('wp_ajax_updraft_importsettings', array($this, 'updraft_ajax_importsettings'));
|
331 |
|
332 |
// UpdraftPlus templates
|
333 |
$this->register_template_directories();
|
@@ -346,7 +357,7 @@ class UpdraftPlus_Admin {
|
|
346 |
|
347 |
// Main dashboard page advert
|
348 |
// Since our nonce is printed, make sure they have sufficient credentials
|
349 |
-
if (
|
350 |
|
351 |
$dismissed_until = UpdraftPlus_Options::get_updraft_option('updraftplus_dismisseddashnotice', 0);
|
352 |
|
@@ -355,17 +366,17 @@ class UpdraftPlus_Admin {
|
|
355 |
$installed = @filemtime($backup_dir.'/index.html');
|
356 |
$installed_for = time() - $installed;
|
357 |
|
358 |
-
if (($installed && time() > $dismissed_until && $installed_for > 28*86400
|
359 |
add_action('all_admin_notices', array($this, 'show_admin_notice_upgradead'));
|
360 |
}
|
361 |
}
|
362 |
|
363 |
-
//Moved out for use with Ajax saving
|
364 |
$this->setup_all_admin_notices_global($service);
|
365 |
}
|
366 |
|
367 |
// Next, the actions that only come on the UpdraftPlus page
|
368 |
-
if (
|
369 |
$this->setup_all_admin_notices_udonly($service);
|
370 |
|
371 |
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 99999);
|
@@ -374,9 +385,8 @@ class UpdraftPlus_Admin {
|
|
374 |
/**
|
375 |
* Sets up what is needed to allow an in-page backup to be run. Will enqueue scripts and output appropriate HTML (so, should be run when at a suitable place). Not intended for use on the UpdraftPlus settings page.
|
376 |
*
|
377 |
-
* @param string
|
378 |
* @param callable $callback Callable function to output the contents of the updraft_inpage_prebackup element - i.e. what shows in the modal before a backup beings.
|
379 |
-
*
|
380 |
*/
|
381 |
public function add_backup_scaffolding($title, $callback) {
|
382 |
$this->admin_enqueue_scripts();
|
@@ -424,7 +434,7 @@ class UpdraftPlus_Admin {
|
|
424 |
die();
|
425 |
}
|
426 |
|
427 |
-
$restore_nonce = (string)$_POST['restorenonce'];
|
428 |
|
429 |
if (empty($_POST['ajaxauth'])) {
|
430 |
echo json_encode(array('e' => 'Illegitimate data sent (2)'));
|
@@ -461,15 +471,15 @@ class UpdraftPlus_Admin {
|
|
461 |
$updraftplus->backup_time_nonce($restore_nonce);
|
462 |
$updraftplus->logfile_open($restore_nonce);
|
463 |
|
464 |
-
$timestamp = empty($_POST['timestamp']) ? false : (int)$_POST['timestamp'];
|
465 |
-
$multisite = empty($_POST['multisite']) ? false : (bool)$_POST['multisite'];
|
466 |
-
$created_by_version = empty($_POST['created_by_version']) ? false : (int)$_POST['created_by_version'];
|
467 |
|
468 |
// TODO: We need to know about first_one (not yet sent), as well as last_one
|
469 |
|
470 |
// TODO: Verify the values of these
|
471 |
-
$type = empty($_POST['type']) ? false : (int)$_POST['type'];
|
472 |
-
$backupfile = empty($_POST['backupfile']) ? false : (string)$_POST['backupfile'];
|
473 |
|
474 |
$updraftplus->log("Deferred restore resumption: $type: $backupfile (timestamp=$timestamp, last_one=$last_one)");
|
475 |
|
@@ -557,18 +567,15 @@ class UpdraftPlus_Admin {
|
|
557 |
'id' => 'updraft_admin_node_premium',
|
558 |
'title' => 'UpdraftPlus Premium',
|
559 |
'parent' => 'updraft_admin_node',
|
560 |
-
'href' => apply_filters('updraftplus_com_link','https://updraftplus.com/shop/updraftplus-premium/')
|
561 |
);
|
562 |
$wp_admin_bar->add_node($args);
|
563 |
}
|
564 |
}
|
565 |
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
// return "<link rel='stylesheet' id='$handle-css' $title href='$href' type='text/css' media='$media' />\n";
|
570 |
-
// }
|
571 |
-
|
572 |
public function show_admin_notice_upgradead() {
|
573 |
$this->include_template('wp-admin/notices/thanks-for-using-main-dash.php');
|
574 |
}
|
@@ -593,7 +600,9 @@ class UpdraftPlus_Admin {
|
|
593 |
|
594 |
}
|
595 |
|
596 |
-
|
|
|
|
|
597 |
public function admin_enqueue_scripts() {
|
598 |
|
599 |
global $updraftplus, $wp_locale;
|
@@ -604,10 +613,10 @@ class UpdraftPlus_Admin {
|
|
604 |
// Defeat other plugins/themes which dump their jQuery UI CSS onto our settings page
|
605 |
wp_deregister_style('jquery-ui');
|
606 |
$jquery_ui_css_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '1.11.4'.'.'.time() : '1.11.4';
|
607 |
-
wp_enqueue_style('jquery-ui', UPDRAFTPLUS_URL.'/includes/jquery-ui.custom'.$min_or_not.'.css', array(), $jquery_ui_css_enqueue_version);
|
608 |
|
609 |
wp_enqueue_style('updraft-admin-css', UPDRAFTPLUS_URL.'/css/admin'.$min_or_not.'.css', array(), $enqueue_version);
|
610 |
-
//
|
611 |
|
612 |
$this->ensure_sufficient_jquery_and_enqueue();
|
613 |
$jquery_blockui_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '2.70.0'.'.'.time() : '2.70.0';
|
@@ -624,14 +633,14 @@ class UpdraftPlus_Admin {
|
|
624 |
|
625 |
$day_selector = '';
|
626 |
for ($day_index = 0; $day_index <= 6; $day_index++) {
|
627 |
-
//
|
628 |
$selected = '';
|
629 |
$day_selector .= "\n\t<option value='" . $day_index . "' $selected>" . $wp_locale->get_weekday($day_index) . '</option>';
|
630 |
}
|
631 |
|
632 |
$mday_selector = '';
|
633 |
for ($mday_index = 1; $mday_index <= 28; $mday_index++) {
|
634 |
-
//
|
635 |
$selected = '';
|
636 |
$mday_selector .= "\n\t<option value='" . $mday_index . "' $selected>" . $mday_index . '</option>';
|
637 |
}
|
@@ -646,7 +655,7 @@ class UpdraftPlus_Admin {
|
|
646 |
'excludedeverything' => __('If you exclude both the database and the files, then you have excluded everything!', 'updraftplus'),
|
647 |
'nofileschosen' => __('You have chosen to backup files, but no file entities have been selected', 'updraftplus'),
|
648 |
'notableschosen' => __('You have chosen to backup a database, but no tables have been selected', 'updraftplus'),
|
649 |
-
'
|
650 |
'unexpectedresponse' => __('Unexpected response:', 'updraftplus'),
|
651 |
'servererrorcode' => __('The web server returned an error code (try again, or check your web server logs)', 'updraftplus'),
|
652 |
'newuserpass' => __("The new user's RackSpace console password is (this will not be shown again):", 'updraftplus'),
|
@@ -705,13 +714,13 @@ class UpdraftPlus_Admin {
|
|
705 |
'updatequotacount' => __('Update quota count', 'updraftplus'),
|
706 |
'addingsite' => __('Adding...', 'updraftplus'),
|
707 |
'addsite' => __('Add site', 'updraftplus'),
|
708 |
-
//
|
709 |
'creating_please_allow' => __('Creating...', 'updraftplus').(function_exists('openssl_encrypt') ? '' : ' ('.__('your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup.', 'updraftplus').')'),
|
710 |
'sendtosite' => __('Send to site:', 'updraftplus'),
|
711 |
'checkrpcsetup' => sprintf(__('You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly.', 'updraftplus'), '2.10.3'),
|
712 |
'pleasenamekey' => __('Please give this key a name (e.g. indicate the site it is for):', 'updraftplus'),
|
713 |
'key' => __('Key', 'updraftplus'),
|
714 |
-
'nokeynamegiven' => sprintf(__("Failure: No %s was given.",'updraftplus'), __('key name', 'updraftplus')),
|
715 |
'deleting' => __('Deleting...', 'updraftplus'),
|
716 |
'enter_mothership_url' => __('Please enter a valid URL', 'updraftplus'),
|
717 |
'delete_response_not_understood' => __("We requested to delete the file, but could not understand the server's response", 'updraftplus'),
|
@@ -739,8 +748,8 @@ class UpdraftPlus_Admin {
|
|
739 |
'settings_test_result' => __('%s settings test result:', 'updraftplus'),
|
740 |
'nothing_yet_logged' => __('Nothing yet logged', 'updraftplus'),
|
741 |
'import_select_file' => __('You have not yet selected a file to import.', 'updraftplus'),
|
742 |
-
'import_invalid_json_file' => __('Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file.', 'updraftplus'),
|
743 |
-
'updraft_settings_url' => UpdraftPlus_Options::admin_page_url().'?page=updraftplus',
|
744 |
'network_site_url' => network_site_url(),
|
745 |
'importing' => __('Importing...', 'updraftplus'),
|
746 |
'importing_data_from' => __('This will import data from:', 'updraftplus'),
|
@@ -758,11 +767,13 @@ class UpdraftPlus_Admin {
|
|
758 |
'loading_log_file' => __('Loading log file', 'updraftplus'),
|
759 |
'updraftplus_version' => $updraftplus->version,
|
760 |
'updraftcentral_wizard_empty_url' => __('Please enter the URL where your UpdraftCentral dashboard is hosted.'),
|
761 |
-
'updraftcentral_wizard_invalid_url' => __('Please enter a valid URL e.g http://example.com', 'updraftplus')
|
762 |
-
)
|
763 |
}
|
764 |
|
765 |
-
|
|
|
|
|
766 |
public function core_upgrade_preamble() {
|
767 |
// They need to be able to perform backups, and to perform updates
|
768 |
if (!UpdraftPlus_Options::user_can_manage() || (!current_user_can('update_core') && !current_user_can('update_plugins') && !current_user_can('update_themes'))) return;
|
@@ -772,18 +783,18 @@ class UpdraftPlus_Admin {
|
|
772 |
}
|
773 |
|
774 |
?>
|
775 |
-
<?php
|
776 |
if (!class_exists('UpdraftPlus_Addon_Autobackup')) {
|
777 |
-
if (!class_exists('UpdraftPlus_Notices'))
|
778 |
global $updraftplus_notices;
|
779 |
-
echo apply_filters('updraftplus_autobackup_blurb', $updraftplus_notices->do_notice('autobackup', 'autobackup', true));
|
780 |
} else {
|
781 |
echo '<div class="updraft-ad-container updated">';
|
782 |
echo '<h3 style="margin-top: 2px;">'. __('Be safe with an automatic backup', 'updraftplus').'</h3>';
|
783 |
-
echo apply_filters('updraftplus_autobackup_blurb', '');
|
784 |
echo '</div>';
|
785 |
}
|
786 |
-
|
787 |
<script>
|
788 |
jQuery(document).ready(function() {
|
789 |
jQuery('.updraft-ad-container').appendTo('.wrap p:first');
|
@@ -792,16 +803,19 @@ class UpdraftPlus_Admin {
|
|
792 |
<?php
|
793 |
}
|
794 |
|
|
|
|
|
|
|
795 |
public function admin_head() {
|
796 |
|
797 |
global $pagenow;
|
798 |
|
799 |
-
if (
|
800 |
|
801 |
-
|
802 |
|
803 |
-
|
804 |
-
|
805 |
|
806 |
$plupload_init = array(
|
807 |
'runtimes' => 'html5,flash,silverlight,html4',
|
@@ -822,16 +836,8 @@ class UpdraftPlus_Admin {
|
|
822 |
'action' => 'plupload_action'
|
823 |
)
|
824 |
);
|
825 |
-
// 'flash_swf_url' => includes_url('js/plupload/plupload.flash.swf'),
|
826 |
-
// 'silverlight_xap_url' => includes_url('js/plupload/plupload.silverlight.xap'),
|
827 |
-
|
828 |
-
// We want to receive -db files also...
|
829 |
-
// if (1) {
|
830 |
-
// $plupload_init['filters'] = array(array('title' => __('Allowed Files'), 'extensions' => 'zip,tar,gz,bz2,crypt,sql,txt'));
|
831 |
-
// } else {
|
832 |
-
// }
|
833 |
|
834 |
-
|
835 |
if (is_file(ABSPATH.WPINC.'/js/plupload/Moxie.swf')) {
|
836 |
$plupload_init['flash_swf_url'] = includes_url('js/plupload/Moxie.swf');
|
837 |
} else {
|
@@ -845,11 +851,11 @@ class UpdraftPlus_Admin {
|
|
845 |
}
|
846 |
|
847 |
?><script>
|
848 |
-
var updraft_credentialtest_nonce='<?php echo wp_create_nonce('updraftplus-credentialtest-nonce');?>';
|
849 |
-
var updraftplus_settings_nonce='<?php echo wp_create_nonce('updraftplus-settings-nonce');?>';
|
850 |
var updraft_siteurl = '<?php echo esc_js(site_url('', 'relative'));?>';
|
851 |
-
var updraft_plupload_config
|
852 |
-
var updraft_download_nonce='<?php echo wp_create_nonce('updraftplus_download');?>';
|
853 |
var updraft_accept_archivename = <?php echo apply_filters('updraftplus_accept_archivename_js', "[]");?>;
|
854 |
<?php
|
855 |
$plupload_init['browse_button'] = 'plupload-browse-button2';
|
@@ -858,45 +864,49 @@ class UpdraftPlus_Admin {
|
|
858 |
$plupload_init['multipart_params']['action'] = 'plupload_action2';
|
859 |
$plupload_init['filters'] = array(array('title' => __('Allowed Files'), 'extensions' => 'crypt'));
|
860 |
?>
|
861 |
-
var updraft_plupload_config2
|
862 |
var updraft_downloader_nonce = '<?php wp_create_nonce("updraftplus_download"); ?>'
|
863 |
<?php
|
864 |
$overdue = $this->howmany_overdue_crons();
|
865 |
-
if ($overdue >= 4) {
|
866 |
-
|
867 |
-
|
|
|
868 |
});
|
869 |
<?php } ?>
|
870 |
</script>
|
871 |
<?php
|
872 |
}
|
873 |
|
874 |
-
|
875 |
private function disk_space_check($space) {
|
876 |
global $updraftplus;
|
877 |
$updraft_dir = $updraftplus->backups_dir_location();
|
878 |
$disk_free_space = @disk_free_space($updraft_dir);
|
879 |
-
if (
|
880 |
return ($disk_free_space > $space) ? true : false;
|
881 |
}
|
882 |
|
883 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
884 |
public function plugin_action_links($links, $file) {
|
885 |
-
if (is_array($links) &&
|
886 |
$settings_link = '<a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__("Settings", "updraftplus").'</a>';
|
887 |
array_unshift($links, $settings_link);
|
888 |
-
|
889 |
-
// array_unshift($links, $settings_link);
|
890 |
-
$settings_link = '<a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/").'">'.__("Add-Ons / Pro Support","updraftplus").'</a>';
|
891 |
array_unshift($links, $settings_link);
|
892 |
}
|
893 |
return $links;
|
894 |
}
|
895 |
|
896 |
public function admin_action_upgrade_pluginortheme() {
|
897 |
-
if (isset($_GET['action']) && ($_GET['action']
|
898 |
|
899 |
-
if ($_GET['action']
|
900 |
if (!current_user_can('update_plugins')) return;
|
901 |
} else {
|
902 |
if (!current_user_can('update_themes')) return;
|
@@ -915,34 +925,33 @@ class UpdraftPlus_Admin {
|
|
915 |
$submenu_file = 'themes.php';
|
916 |
}
|
917 |
|
918 |
-
|
919 |
|
920 |
-
if (!class_exists('UpdraftPlus_Notices'))
|
921 |
global $updraftplus_notices;
|
922 |
$updraftplus_notices->do_notice('autobackup', 'autobackup');
|
923 |
}
|
924 |
}
|
925 |
|
926 |
-
public function show_admin_warning($message, $class =
|
927 |
echo '<div class="updraftmessage '.$class.'">'."<p>$message</p></div>";
|
928 |
}
|
929 |
|
930 |
-
//
|
931 |
public function show_admin_warning_multiple_storage_options() {
|
932 |
$this->show_admin_warning('<strong>UpdraftPlus:</strong> '.__('An error occurred when fetching storage module options: ', 'updraftplus').htmlspecialchars($this->storage_module_option_errors), 'error');
|
933 |
}
|
934 |
|
935 |
-
public function show_admin_warning_unwritable(){
|
936 |
$unwritable_mess = htmlspecialchars(__("The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option).", 'updraftplus'));
|
937 |
$this->show_admin_warning($unwritable_mess, "error");
|
938 |
-
}
|
939 |
|
940 |
public function show_admin_nosettings_warning() {
|
941 |
$this->show_admin_warning('<strong>'.__('Welcome to UpdraftPlus!', 'updraftplus').'</strong> '.__('To make a backup, just press the Backup Now button.', 'updraftplus').' <a href="#" id="updraft-navtab-settings2">'.__('To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab.', 'updraftplus').'</a>', 'updated notice is-dismissible');
|
942 |
}
|
943 |
|
944 |
public function show_admin_warning_execution_time() {
|
945 |
-
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)', 'updraftplus'), (int)@ini_get('max_execution_time'), 90));
|
946 |
}
|
947 |
|
948 |
public function show_admin_warning_disabledcron() {
|
@@ -950,7 +959,7 @@ class UpdraftPlus_Admin {
|
|
950 |
}
|
951 |
|
952 |
public function show_admin_warning_diskspace() {
|
953 |
-
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue.', 'updraftplus'),'35 MB'));
|
954 |
}
|
955 |
|
956 |
public function show_admin_warning_wordpressversion() {
|
@@ -958,7 +967,7 @@ class UpdraftPlus_Admin {
|
|
958 |
}
|
959 |
|
960 |
public function show_admin_warning_litespeed() {
|
961 |
-
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('Your website is hosted using the %s web server.', 'updraftplus'),'LiteSpeed').' <a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/faqs/i-am-having-trouble-backing-up-and-my-web-hosting-company-uses-the-litespeed-webserver/").'">'.__('Please consult this FAQ if you have problems backing up.', 'updraftplus').'</a>');
|
962 |
}
|
963 |
|
964 |
public function show_admin_debug_warning() {
|
@@ -972,38 +981,58 @@ class UpdraftPlus_Admin {
|
|
972 |
return $ret;
|
973 |
}
|
974 |
|
975 |
-
|
|
|
|
|
976 |
public function show_admin_warning_dropbox() {
|
977 |
-
$this->
|
|
|
|
|
978 |
}
|
979 |
|
|
|
|
|
|
|
980 |
public function show_admin_warning_onedrive() {
|
981 |
-
|
|
|
|
|
982 |
}
|
983 |
|
984 |
public function show_admin_warning_updraftvault() {
|
985 |
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> '.sprintf(__('%s has been chosen for remote storage, but you are not currently connected.', 'updraftplus'), 'UpdraftPlus Vault').' '.__('Go to the remote storage settings in order to connect.', 'updraftplus'), 'updated');
|
986 |
}
|
987 |
|
|
|
|
|
|
|
988 |
public function show_admin_warning_googledrive() {
|
989 |
-
$this->
|
|
|
|
|
990 |
}
|
991 |
|
|
|
|
|
|
|
992 |
public function show_admin_warning_googlecloud() {
|
993 |
-
$this->
|
|
|
|
|
994 |
}
|
995 |
|
996 |
-
|
|
|
|
|
|
|
|
|
|
|
997 |
public function prune_updraft_dir_prefix($updraft_dir) {
|
998 |
if ('/' == substr($updraft_dir, 0, 1) || "\\" == substr($updraft_dir, 0, 1) || preg_match('/^[a-zA-Z]:/', $updraft_dir)) {
|
999 |
$wcd = trailingslashit(WP_CONTENT_DIR);
|
1000 |
if (strpos($updraft_dir, $wcd) === 0) {
|
1001 |
$updraft_dir = substr($updraft_dir, strlen($wcd));
|
1002 |
}
|
1003 |
-
# Legacy
|
1004 |
-
// if (strpos($updraft_dir, ABSPATH) === 0) {
|
1005 |
-
// $updraft_dir = substr($updraft_dir, strlen(ABSPATH));
|
1006 |
-
// }
|
1007 |
}
|
1008 |
return $updraft_dir;
|
1009 |
}
|
@@ -1017,7 +1046,7 @@ class UpdraftPlus_Admin {
|
|
1017 |
|
1018 |
if (empty($_REQUEST['timestamp']) || !is_numeric($_REQUEST['timestamp']) || empty($_REQUEST['type'])) exit;
|
1019 |
|
1020 |
-
$findex = empty($_REQUEST['findex']) ? 0 : (int)$_REQUEST['findex'];
|
1021 |
$stage = empty($_REQUEST['stage']) ? '' : $_REQUEST['stage'];
|
1022 |
$file_path = empty($_REQUEST['filepath']) ? '' : $_REQUEST['filepath'];
|
1023 |
|
@@ -1132,14 +1161,14 @@ class UpdraftPlus_Admin {
|
|
1132 |
$needs_downloading = false;
|
1133 |
|
1134 |
if (!file_exists($fullpath)) {
|
1135 |
-
//
|
1136 |
$needs_downloading = true;
|
1137 |
$updraftplus->log('File does not yet exist locally - needs downloading');
|
1138 |
} elseif ($known_size > 0 && filesize($fullpath) < $known_size) {
|
1139 |
$updraftplus->log("The file was found locally (".filesize($fullpath).") but did not match the size in the backup history ($known_size) - will resume downloading");
|
1140 |
$needs_downloading = true;
|
1141 |
} elseif ($known_size > 0) {
|
1142 |
-
$updraftplus->log('The file was found locally and matched the recorded size from the backup history ('.round($known_size/1024,1).' KB)');
|
1143 |
} else {
|
1144 |
$updraftplus->log('No file size was found recorded in the backup history. We will assume the local one is complete.');
|
1145 |
$known_size = filesize($fullpath);
|
@@ -1222,14 +1251,14 @@ class UpdraftPlus_Admin {
|
|
1222 |
|
1223 |
if ($restore) {
|
1224 |
$service_description = empty($updraftplus->backup_methods[$service]) ? $service : $updraftplus->backup_methods[$service];
|
1225 |
-
$updraftplus->log(__("File is not locally present - needs retrieving from remote storage",'updraftplus')." ($service_description)", 'notice-restore');
|
1226 |
}
|
1227 |
|
1228 |
$object = $storage_objects_and_ids[$service]['object'];
|
1229 |
|
1230 |
-
if (!$object->supports_feature('multi_options')) {
|
1231 |
-
error_log("UpdraftPlus_Admin::get_remote_file(): Multi-options not supported by: ".$service);
|
1232 |
-
continue;
|
1233 |
}
|
1234 |
|
1235 |
$instance_ids = $storage_objects_and_ids[$service]['instance_settings'];
|
@@ -1273,12 +1302,11 @@ class UpdraftPlus_Admin {
|
|
1273 |
/**
|
1274 |
* Downloads a specified file into UD's directory
|
1275 |
*
|
1276 |
-
* @param String $file
|
1277 |
-
* @param
|
1278 |
-
*
|
1279 |
* @return Boolean - Whether the operation succeeded. Inherited from the storage module's download() method. N.B. At the time of writing it looks like not all modules necessarily return true upon success; but false can be relied upon for detecting failure.
|
1280 |
*/
|
1281 |
-
private function download_file($file,
|
1282 |
|
1283 |
global $updraftplus;
|
1284 |
|
@@ -1318,7 +1346,11 @@ class UpdraftPlus_Admin {
|
|
1318 |
|
1319 |
}
|
1320 |
|
1321 |
-
|
|
|
|
|
|
|
|
|
1322 |
public function _updraftplus_background_operation_started($msg) {
|
1323 |
global $updraftplus;
|
1324 |
// The extra spaces are because of a bug seen on one server in handling of non-ASCII characters; see HS#11739
|
@@ -1348,7 +1380,7 @@ class UpdraftPlus_Admin {
|
|
1348 |
$data_in_get = array('get_log', 'get_fragment');
|
1349 |
|
1350 |
// UpdraftPlus_WPAdmin_Commands extends UpdraftPlus_Commands - i.e. all commands are in there
|
1351 |
-
if (!class_exists('UpdraftPlus_WPAdmin_Commands'))
|
1352 |
$commands = new UpdraftPlus_WPAdmin_Commands($this);
|
1353 |
|
1354 |
if (method_exists($commands, $subaction)) {
|
@@ -1407,9 +1439,8 @@ class UpdraftPlus_Admin {
|
|
1407 |
/**
|
1408 |
* Run a credentials test for the indicated remote storage module
|
1409 |
*
|
1410 |
-
* @param Array
|
1411 |
-
* @param Boolean $return_instead_of_echo
|
1412 |
-
*
|
1413 |
* @return Array|Void - the results, if they are being returned (rather than echoed). Keys: 'output' (the output), 'data' (other data)
|
1414 |
*/
|
1415 |
public function do_credentials_test($test_settings, $return_instead_of_echo = false) {
|
@@ -1419,7 +1450,7 @@ class UpdraftPlus_Admin {
|
|
1419 |
$objname = "UpdraftPlus_BackupModule_$method";
|
1420 |
|
1421 |
$this->logged = array();
|
1422 |
-
|
1423 |
set_error_handler(array($this, 'get_php_errors'), E_ALL & ~E_STRICT);
|
1424 |
|
1425 |
if (!class_exists($objname)) include_once(UPDRAFTPLUS_DIR."/methods/$method.php");
|
@@ -1427,7 +1458,7 @@ class UpdraftPlus_Admin {
|
|
1427 |
$ret = '';
|
1428 |
$data = null;
|
1429 |
|
1430 |
-
|
1431 |
if (method_exists($objname, "credentials_test")) {
|
1432 |
$obj = new $objname;
|
1433 |
if ($return_instead_of_echo) ob_start();
|
@@ -1452,9 +1483,7 @@ class UpdraftPlus_Admin {
|
|
1452 |
* Delete a backup set, whilst respecting limits on how much to delete in one go
|
1453 |
*
|
1454 |
* @uses remove_backup_set_cleanup()
|
1455 |
-
*
|
1456 |
* @param Array $opts - deletion options; with keys backup_timestamp, delete_remote, [remote_delete_limit]
|
1457 |
-
*
|
1458 |
* @return Array - as from remove_backup_set_cleanup()
|
1459 |
*/
|
1460 |
public function delete_set($opts) {
|
@@ -1462,9 +1491,9 @@ class UpdraftPlus_Admin {
|
|
1462 |
global $updraftplus;
|
1463 |
|
1464 |
$backups = UpdraftPlus_Backup_History::get_history();
|
1465 |
-
$timestamps = (string)$opts['backup_timestamp'];
|
1466 |
|
1467 |
-
$remote_delete_limit = (isset($opts['remote_delete_limit']) && $opts['remote_delete_limit'] > 0) ? (int)$opts['remote_delete_limit'] : PHP_INT_MAX;
|
1468 |
|
1469 |
$timestamps = explode(',', $timestamps);
|
1470 |
$delete_remote = empty($opts['delete_remote']) ? false : true;
|
@@ -1504,7 +1533,7 @@ class UpdraftPlus_Admin {
|
|
1504 |
$services = is_string($backups[$timestamp]['service']) ? array($backups[$timestamp]['service']) : $backups[$timestamp]['service'];
|
1505 |
if (is_array($services)) {
|
1506 |
foreach ($services as $service) {
|
1507 |
-
if ($service &&
|
1508 |
}
|
1509 |
}
|
1510 |
}
|
@@ -1517,7 +1546,7 @@ class UpdraftPlus_Admin {
|
|
1517 |
}
|
1518 |
}
|
1519 |
// Delete DB
|
1520 |
-
foreach ($backups[$timestamp] as $key => $value){
|
1521 |
if ('db' == strtolower(substr($key, 0, 2)) && '-size' != substr($key, -5, 5)) {
|
1522 |
$files_to_delete[$key] = $backups[$timestamp][$key];
|
1523 |
}
|
@@ -1572,12 +1601,12 @@ class UpdraftPlus_Admin {
|
|
1572 |
$deleted = $remote_obj->delete($file);
|
1573 |
|
1574 |
if (-1 === $deleted) {
|
1575 |
-
//echo __('Did not know how to delete from this cloud service.', 'updraftplus');
|
1576 |
} elseif (false !== $deleted) {
|
1577 |
$remote_deleted++;
|
1578 |
}
|
1579 |
|
1580 |
-
$itext = $index ? (string)$index : '';
|
1581 |
if ($was_string) {
|
1582 |
unset($backups[$timestamp][$key]);
|
1583 |
if ('db' == strtolower(substr($key, 0, 2))) unset($backups[$timestamp][$key][$index.'-size']);
|
@@ -1612,9 +1641,9 @@ class UpdraftPlus_Admin {
|
|
1612 |
/**
|
1613 |
* This function sorts the array of instance ids currently saved so that any instance id that is in both the saved settings and the backup history move to the top of the array, as these are likely to work. Then values that don't appear in the backup history move to the bottom.
|
1614 |
*
|
1615 |
-
* @param String $a
|
1616 |
-
* @param String $b
|
1617 |
-
* @return Integer
|
1618 |
*/
|
1619 |
public function instance_ids_sort($a, $b) {
|
1620 |
if (in_array($a, $this->backups_instance_ids)) {
|
@@ -1702,6 +1731,13 @@ class UpdraftPlus_Admin {
|
|
1702 |
));
|
1703 |
}
|
1704 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1705 |
public function get_disk_space_used($entity) {
|
1706 |
global $updraftplus;
|
1707 |
if ('updraft' == $entity) {
|
@@ -1711,7 +1747,7 @@ class UpdraftPlus_Admin {
|
|
1711 |
if ('all' == $entity) {
|
1712 |
$total_size = 0;
|
1713 |
foreach ($backupable_entities as $entity => $data) {
|
1714 |
-
|
1715 |
$basedir = $backupable_entities[$entity];
|
1716 |
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
|
1717 |
$size = $this->recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, 'numeric');
|
@@ -1719,7 +1755,7 @@ class UpdraftPlus_Admin {
|
|
1719 |
}
|
1720 |
return $updraftplus->convert_numeric_size_to_text($total_size);
|
1721 |
} elseif (!empty($backupable_entities[$entity])) {
|
1722 |
-
|
1723 |
$basedir = $backupable_entities[$entity];
|
1724 |
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
|
1725 |
return $this->recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir);
|
@@ -1728,6 +1764,13 @@ class UpdraftPlus_Admin {
|
|
1728 |
return __('Error', 'updraftplus');
|
1729 |
}
|
1730 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1731 |
public function activejobs_delete($job_id) {
|
1732 |
|
1733 |
if (preg_match("/^[0-9a-f]{12}$/", $job_id)) {
|
@@ -1757,14 +1800,19 @@ class UpdraftPlus_Admin {
|
|
1757 |
|
1758 |
}
|
1759 |
|
1760 |
-
|
1761 |
-
|
1762 |
-
|
|
|
|
|
|
|
|
|
|
|
1763 |
public function get_download_statuses($downloaders) {
|
1764 |
global $updraftplus;
|
1765 |
$download_status = array();
|
1766 |
foreach ($downloaders as $downloader) {
|
1767 |
-
|
1768 |
if (preg_match('/^([^,]+),(\d+),([-a-z]+|db[0-9]+),(\d+)$/', $downloader, $matches)) {
|
1769 |
$findex = (empty($matches[4])) ? '0' : $matches[4];
|
1770 |
$updraftplus->nonce = dechex($matches[2]).$findex.substr(md5($matches[3]), 0, 3);
|
@@ -1786,7 +1834,7 @@ class UpdraftPlus_Admin {
|
|
1786 |
|
1787 |
global $updraftplus;
|
1788 |
|
1789 |
-
$download_status = empty($request['downloaders']) ? array(): $this->get_download_statuses(explode(':', $request['downloaders']));
|
1790 |
|
1791 |
if (!empty($request['oneshot'])) {
|
1792 |
$job_id = get_site_option('updraft_oneshotnonce', false);
|
@@ -1880,7 +1928,7 @@ class UpdraftPlus_Admin {
|
|
1880 |
|
1881 |
$potential_log_file = $updraft_dir."/log.".$nonce.".txt";
|
1882 |
|
1883 |
-
if (is_readable($potential_log_file)){
|
1884 |
|
1885 |
$templog_array = array();
|
1886 |
$log_file = fopen($potential_log_file, "r");
|
@@ -1916,6 +1964,11 @@ class UpdraftPlus_Admin {
|
|
1916 |
return $ret_array;
|
1917 |
}
|
1918 |
|
|
|
|
|
|
|
|
|
|
|
1919 |
public function howmany_overdue_crons() {
|
1920 |
$how_many_overdue = 0;
|
1921 |
if (function_exists('_get_cron_array') || (is_file(ABSPATH.WPINC.'/cron.php') && include_once(ABSPATH.WPINC.'/cron.php') && function_exists('_get_cron_array'))) {
|
@@ -1923,9 +1976,7 @@ class UpdraftPlus_Admin {
|
|
1923 |
if (is_array($crons)) {
|
1924 |
$timenow = time();
|
1925 |
foreach ($crons as $jt => $job) {
|
1926 |
-
if ($jt < $timenow)
|
1927 |
-
$how_many_overdue++;
|
1928 |
-
}
|
1929 |
}
|
1930 |
}
|
1931 |
}
|
@@ -1937,7 +1988,7 @@ class UpdraftPlus_Admin {
|
|
1937 |
if (0 == error_reporting()) return true;
|
1938 |
$logline = $updraftplus->php_error_to_logline($errno, $errstr, $errfile, $errline);
|
1939 |
if (false !== $logline) $this->logged[] = $logline;
|
1940 |
-
|
1941 |
return true;
|
1942 |
}
|
1943 |
|
@@ -1963,14 +2014,14 @@ class UpdraftPlus_Admin {
|
|
1963 |
} elseif (preg_match('/^downloaded:(\d+):(.*)$/', $file, $matches) && file_exists($matches[2])) {
|
1964 |
$response['p'] = 100;
|
1965 |
$response['f'] = $matches[2];
|
1966 |
-
$response['s'] = (int)$matches[1];
|
1967 |
-
$response['t'] = (int)$matches[1];
|
1968 |
$response['m'] = __('File ready.', 'updraftplus');
|
1969 |
if ('db' != substr($type, 0, 2)) $response['can_show_contents'] = true;
|
1970 |
} elseif (preg_match('/^downloading:(\d+):(.*)$/', $file, $matches) && file_exists($matches[2])) {
|
1971 |
// Convert to bytes
|
1972 |
$response['f'] = $matches[2];
|
1973 |
-
$total_size = (int)max($matches[1], 1);
|
1974 |
$cur_size = filesize($matches[2]);
|
1975 |
$response['s'] = $cur_size;
|
1976 |
$file_age = time() - filemtime($matches[2]);
|
@@ -1995,7 +2046,14 @@ class UpdraftPlus_Admin {
|
|
1995 |
return $uploads;
|
1996 |
}
|
1997 |
|
1998 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1999 |
public function unique_filename_callback($dir, $name, $ext) {
|
2000 |
return $name.$ext;
|
2001 |
}
|
@@ -2047,7 +2105,7 @@ class UpdraftPlus_Admin {
|
|
2047 |
}
|
2048 |
|
2049 |
// If this was the chunk, then we should instead be concatenating onto the final file
|
2050 |
-
if (isset($_POST['chunks']) && isset($_POST['chunk']) && preg_match('/^[0-9]+$/'
|
2051 |
$final_file = basename($_POST['name']);
|
2052 |
if (!rename($status['file'], $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp')) {
|
2053 |
@unlink($status['file']);
|
@@ -2059,10 +2117,12 @@ class UpdraftPlus_Admin {
|
|
2059 |
// Final chunk? If so, then stich it all back together
|
2060 |
if ($_POST['chunk'] == $_POST['chunks']-1) {
|
2061 |
if ($wh = fopen($updraft_dir.'/'.$final_file, 'wb')) {
|
2062 |
-
for ($i=0
|
2063 |
$rf = $updraft_dir.'/'.$final_file.'.'.$i.'.zip.tmp';
|
2064 |
if ($rh = fopen($rf, 'rb')) {
|
2065 |
-
while ($line = fread($rh, 32768))
|
|
|
|
|
2066 |
fclose($rh);
|
2067 |
@unlink($rf);
|
2068 |
}
|
@@ -2098,7 +2158,7 @@ class UpdraftPlus_Admin {
|
|
2098 |
$response['dm'] = sprintf(__('This backup was created by %s, and can be imported.', 'updraftplus'), $accepted);
|
2099 |
} else {
|
2100 |
@unlink($status['file']);
|
2101 |
-
echo json_encode(array('e' => sprintf(__('Error: %s', 'updraftplus'),__('Bad filename format - this does not look like a file created by UpdraftPlus', 'updraftplus'))));
|
2102 |
exit;
|
2103 |
}
|
2104 |
} else {
|
@@ -2106,7 +2166,7 @@ class UpdraftPlus_Admin {
|
|
2106 |
$type = isset($matches[3]) ? $matches[3] : '';
|
2107 |
if (!preg_match('/^log\.[a-f0-9]{12}\.txt/', $file) && 'db' != $type && !isset($backupable_entities[$type])) {
|
2108 |
@unlink($status['file']);
|
2109 |
-
echo json_encode(array('e' => sprintf(__('Error: %s', 'updraftplus'),sprintf(__('This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?', 'updraftplus'), htmlspecialchars($type)))));
|
2110 |
exit;
|
2111 |
}
|
2112 |
}
|
@@ -2118,7 +2178,9 @@ class UpdraftPlus_Admin {
|
|
2118 |
exit;
|
2119 |
}
|
2120 |
|
2121 |
-
|
|
|
|
|
2122 |
public function plupload_action2() {
|
2123 |
|
2124 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
@@ -2141,8 +2203,8 @@ class UpdraftPlus_Admin {
|
|
2141 |
$farray['type'] = 'application/octet-stream';
|
2142 |
|
2143 |
if (isset($_POST['chunks'])) {
|
2144 |
-
//
|
2145 |
-
//
|
2146 |
} else {
|
2147 |
$farray['unique_filename_callback'] = array($this, 'unique_filename_callback');
|
2148 |
}
|
@@ -2160,7 +2222,7 @@ class UpdraftPlus_Admin {
|
|
2160 |
}
|
2161 |
|
2162 |
// If this was the chunk, then we should instead be concatenating onto the final file
|
2163 |
-
if (isset($_POST['chunks']) && isset($_POST['chunk']) && preg_match('/^[0-9]+$/'
|
2164 |
$final_file = basename($_POST['name']);
|
2165 |
rename($status['file'], $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp');
|
2166 |
$status['file'] = $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp';
|
@@ -2168,10 +2230,12 @@ class UpdraftPlus_Admin {
|
|
2168 |
// Final chunk? If so, then stich it all back together
|
2169 |
if ($_POST['chunk'] == $_POST['chunks']-1) {
|
2170 |
if ($wh = fopen($updraft_dir.'/'.$final_file, 'wb')) {
|
2171 |
-
for ($i=0
|
2172 |
$rf = $updraft_dir.'/'.$final_file.'.'.$i.'.zip.tmp';
|
2173 |
if ($rh = fopen($rf, 'rb')) {
|
2174 |
-
while ($line = fread($rh, 32768))
|
|
|
|
|
2175 |
fclose($rh);
|
2176 |
@unlink($rf);
|
2177 |
}
|
@@ -2195,11 +2259,13 @@ class UpdraftPlus_Admin {
|
|
2195 |
}
|
2196 |
|
2197 |
// send the uploaded file url in response
|
2198 |
-
// echo 'OK:'.$status['url'];
|
2199 |
echo 'OK:'.$file;
|
2200 |
exit;
|
2201 |
}
|
2202 |
|
|
|
|
|
|
|
2203 |
public function settings_header() {
|
2204 |
$this->include_template('wp-admin/settings/header.php');
|
2205 |
}
|
@@ -2215,13 +2281,10 @@ class UpdraftPlus_Admin {
|
|
2215 |
|
2216 |
global $updraftplus;
|
2217 |
|
2218 |
-
|
2219 |
-
|
2220 |
-
|
2221 |
-
|
2222 |
-
*/
|
2223 |
-
|
2224 |
-
if (isset($_REQUEST['action']) && (($_REQUEST['action'] == 'updraft_restore' && isset($_REQUEST['backup_timestamp'])) || ('updraft_restore_continue' == $_REQUEST['action'] && !empty($_REQUEST['restoreid'])))) {
|
2225 |
|
2226 |
$is_continuation = ('updraft_restore_continue' == $_REQUEST['action']) ? true : false;
|
2227 |
|
@@ -2253,8 +2316,8 @@ class UpdraftPlus_Admin {
|
|
2253 |
$backup_success = false;
|
2254 |
}
|
2255 |
|
2256 |
-
if (empty($updraftplus->errors) &&
|
2257 |
-
// TODO: Deal with the case of some of the work having been deferred
|
2258 |
// If we restored the database, then that will have out-of-date information which may confuse the user - so automatically re-scan for them.
|
2259 |
UpdraftPlus_Backup_History::rebuild();
|
2260 |
echo '<p><strong>';
|
@@ -2281,7 +2344,7 @@ class UpdraftPlus_Admin {
|
|
2281 |
echo '<strong>'.__('Actions', 'updraftplus').':</strong> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
2282 |
return;
|
2283 |
} elseif (false === $backup_success) {
|
2284 |
-
|
2285 |
echo '<p>';
|
2286 |
$updraftplus->log_e('Restore failed...');
|
2287 |
echo '</p>';
|
@@ -2317,7 +2380,7 @@ class UpdraftPlus_Admin {
|
|
2317 |
|
2318 |
if (isset($_GET['message'])) $this->show_admin_warning(htmlspecialchars($_GET['message']));
|
2319 |
|
2320 |
-
if (isset($_GET['action']) && $_GET['action']
|
2321 |
$created = $this->create_backup_dir();
|
2322 |
if (is_wp_error($created)) {
|
2323 |
echo '<p>'.__('Backup directory could not be created', 'updraftplus').'...<br>';
|
@@ -2326,7 +2389,7 @@ class UpdraftPlus_Admin {
|
|
2326 |
echo '<li>'.htmlspecialchars($msg).'</li>';
|
2327 |
}
|
2328 |
echo '</ul></p>';
|
2329 |
-
} elseif (
|
2330 |
echo '<p>'.__('Backup directory successfully created.', 'updraftplus').'</p><br>';
|
2331 |
}
|
2332 |
echo '<b>'.__('Actions', 'updraftplus').':</b> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
@@ -2362,40 +2425,39 @@ class UpdraftPlus_Admin {
|
|
2362 |
// Opens a div, which needs closing later
|
2363 |
if (isset($_GET['updraft_restore_success'])) {
|
2364 |
|
2365 |
-
if (get_template() === 'optimizePressTheme' || is_plugin_active('optimizePressPlugin') || is_plugin_active_for_network('optimizePressPlugin')){
|
2366 |
-
$this->show_admin_warning("<a href='https://optimizepress.zendesk.com/hc/en-us/articles/203699826-Update-URL-References-after-moving-domain' target='_blank'>" . __("OptimizePress 2.0 encodes its contents, so search/replace does not work.","updraftplus") . ' ' . __("To fix this problem go here.","updraftplus") . "</a>", "notice notice-warning");
|
2367 |
}
|
2368 |
-
$success_advert = (isset($_GET['pval']) && 0 == $_GET['pval'] && !$updraftplus->have_addons) ? '<p>'.__('For even more features and personal support, check out ', 'updraftplus').'<strong><a href="'.apply_filters("updraftplus_com_link",'https://updraftplus.com/shop/updraftplus-premium/').'" target="_blank">UpdraftPlus Premium</a>.</strong></p>' : "";
|
2369 |
|
2370 |
echo "<div class=\"updated backup-restored\"><span><strong>".__('Your backup has been restored.', 'updraftplus').'</strong></span><br>';
|
2371 |
// Unnecessary - will be advised of this below
|
2372 |
-
//
|
2373 |
echo $success_advert;
|
2374 |
$include_deleteform_div = false;
|
2375 |
|
2376 |
}
|
2377 |
|
2378 |
-
// $this->print_restore_in_progress_box_if_needed();
|
2379 |
-
|
2380 |
if ($this->scan_old_dirs(true)) $this->print_delete_old_dirs_form(true, $include_deleteform_div);
|
2381 |
|
2382 |
// Close the div opened by the earlier section
|
2383 |
if (isset($_GET['updraft_restore_success'])) echo '</div>';
|
2384 |
|
2385 |
-
if(empty($success_advert) && empty($this->no_settings_warning)) {
|
2386 |
|
2387 |
-
if (!class_exists('UpdraftPlus_Notices'))
|
2388 |
global $updraftplus_notices;
|
2389 |
$updraftplus_notices->do_notice();
|
2390 |
}
|
2391 |
|
2392 |
if (!$updraftplus->memory_check(64)) {
|
2393 |
-
|
2394 |
-
|
2395 |
-
|
2396 |
-
|
2397 |
-
|
2398 |
-
|
|
|
2399 |
|
2400 |
|
2401 |
if (!empty($updraftplus->errors)) {
|
@@ -2413,18 +2475,29 @@ class UpdraftPlus_Admin {
|
|
2413 |
|
2414 |
?>
|
2415 |
|
2416 |
-
<?php
|
2417 |
|
2418 |
$tabflag = 1;
|
2419 |
|
2420 |
-
if (isset($_REQUEST['tab'])){
|
2421 |
-
switch($_REQUEST['tab']) {
|
2422 |
-
case 'status':
|
2423 |
-
|
2424 |
-
|
2425 |
-
case '
|
2426 |
-
|
2427 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2428 |
}
|
2429 |
}
|
2430 |
|
@@ -2500,7 +2573,7 @@ class UpdraftPlus_Admin {
|
|
2500 |
}
|
2501 |
|
2502 |
$restore_jobdata = $this->restore_in_progress_jobdata;
|
2503 |
-
$seconds_ago = time() - (int)$restore_jobdata['job_time_ms'];
|
2504 |
$minutes_ago = floor($seconds_ago/60);
|
2505 |
$seconds_ago = $seconds_ago - $minutes_ago*60;
|
2506 |
$time_ago = sprintf(__("%s minutes, %s seconds", 'updraftplus'), $minutes_ago, $seconds_ago);
|
@@ -2518,13 +2591,13 @@ class UpdraftPlus_Admin {
|
|
2518 |
|
2519 |
}
|
2520 |
|
|
|
|
|
|
|
|
|
|
|
2521 |
public function backupnow_modal_contents() {
|
2522 |
-
|
2523 |
-
$ret = $this->backup_now_widgetry();
|
2524 |
-
|
2525 |
-
// $ret .= '<p>'.__('Does nothing happen when you attempt backups?', 'updraftplus').' <a href="https://updraftplus.com/faqs/my-scheduled-backups-and-pressing-backup-now-does-nothing-however-pressing-debug-backup-does-produce-a-backup/">'.__('Go here for help.', 'updraftplus').'</a></p>';
|
2526 |
-
|
2527 |
-
return $ret;
|
2528 |
}
|
2529 |
|
2530 |
private function backup_now_widgetry() {
|
@@ -2537,7 +2610,7 @@ class UpdraftPlus_Admin {
|
|
2537 |
|
2538 |
$ret .= '<div id="backupnow_database_moreoptions" class="updraft-hidden" style="display:none;">';
|
2539 |
|
2540 |
-
$premium_link = apply_filters('updraftplus_com_link','https://updraftplus.com/landing/updraftplus-premium');
|
2541 |
|
2542 |
$free_ret = '<em>'.__('All WordPress tables will be backed up.', 'updraftplus').' <a href="'.$premium_link.'">'. __('With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too.', 'updraftplus').'</a></em>';
|
2543 |
|
@@ -2556,15 +2629,25 @@ class UpdraftPlus_Admin {
|
|
2556 |
return $ret;
|
2557 |
}
|
2558 |
|
2559 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
2560 |
public function render_active_jobs_and_log_table($wide_format = false, $print_active_jobs = true) {
|
2561 |
?>
|
2562 |
<table class="form-table" id="updraft_activejobs_table">
|
2563 |
|
2564 |
<?php $active_jobs = ($print_active_jobs) ? $this->print_active_jobs() : '';?>
|
2565 |
<tr id="updraft_activejobsrow" class="<?php
|
2566 |
-
if (!$active_jobs && !$wide_format) {
|
2567 |
-
|
|
|
|
|
|
|
|
|
2568 |
?>">
|
2569 |
<?php if ($wide_format) { ?>
|
2570 |
<td id="updraft_activejobs" colspan="2">
|
@@ -2594,7 +2677,7 @@ class UpdraftPlus_Admin {
|
|
2594 |
</tr>
|
2595 |
|
2596 |
<?php
|
2597 |
-
|
2598 |
if (1==0 && !defined('UPDRAFTPLUS_NOADS_B')) {
|
2599 |
$feed = $updraftplus->get_updraftplus_rssfeed();
|
2600 |
if (is_a($feed, 'SimplePie')) {
|
@@ -2604,7 +2687,7 @@ class UpdraftPlus_Admin {
|
|
2604 |
echo '<li>';
|
2605 |
echo '<a href="'.esc_attr($item->get_permalink()).'">';
|
2606 |
echo htmlspecialchars($item->get_title());
|
2607 |
-
|
2608 |
echo "</a> (".htmlspecialchars($item->get_date('j F Y')).")";
|
2609 |
echo '</li>';
|
2610 |
}
|
@@ -2616,13 +2699,16 @@ class UpdraftPlus_Admin {
|
|
2616 |
<?php
|
2617 |
}
|
2618 |
|
|
|
|
|
|
|
2619 |
private function most_recently_modified_log_link() {
|
2620 |
|
2621 |
global $updraftplus;
|
2622 |
list($mod_time, $log_file, $nonce) = $updraftplus->last_modified_log();
|
2623 |
|
2624 |
?>
|
2625 |
-
<a href="?page=updraftplus&action=downloadlatestmodlog&wpnonce=<?php echo wp_create_nonce('updraftplus_download') ?>" <?php if (!$mod_time) echo 'style="display:none;"'; ?> class="updraft-log-link" onclick="event.preventDefault(); updraft_popuplog('');"><?php _e('Download most recently modified log file', 'updraftplus');?></a>
|
2626 |
<?php
|
2627 |
}
|
2628 |
|
@@ -2639,7 +2725,7 @@ class UpdraftPlus_Admin {
|
|
2639 |
}
|
2640 |
|
2641 |
private function print_delete_old_dirs_form($include_blurb = true, $include_div = true) {
|
2642 |
-
if ($include_blurb) {
|
2643 |
if ($include_div) {
|
2644 |
echo '<div id="updraft_delete_old_dirs_pagediv" class="updated delete-old-directories">';
|
2645 |
}
|
@@ -2655,36 +2741,45 @@ class UpdraftPlus_Admin {
|
|
2655 |
if ($include_blurb && $include_div) echo '</div>';
|
2656 |
}
|
2657 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2658 |
public function get_cron($job_id = false) {
|
2659 |
-
|
2660 |
$cron = get_option('cron');
|
2661 |
if (!is_array($cron)) $cron = array();
|
2662 |
if (false === $job_id) return $cron;
|
2663 |
|
2664 |
foreach ($cron as $time => $job) {
|
2665 |
-
if (isset($job['updraft_backup_resume']))
|
2666 |
-
|
2667 |
-
|
2668 |
-
|
2669 |
-
|
2670 |
-
|
2671 |
-
}
|
2672 |
}
|
2673 |
}
|
2674 |
}
|
2675 |
}
|
2676 |
|
2677 |
-
|
|
|
|
|
|
|
|
|
|
|
2678 |
private function print_active_jobs($this_job_only = false) {
|
2679 |
$cron = $this->get_cron();
|
2680 |
-
// $found_jobs = 0;
|
2681 |
$ret = '';
|
2682 |
|
2683 |
foreach ($cron as $time => $job) {
|
2684 |
if (isset($job['updraft_backup_resume'])) {
|
2685 |
foreach ($job['updraft_backup_resume'] as $hook => $info) {
|
2686 |
if (isset($info['args'][1])) {
|
2687 |
-
// $found_jobs++;
|
2688 |
$job_id = $info['args'][1];
|
2689 |
if (false === $this_job_only || $job_id == $this_job_only) {
|
2690 |
$ret .= $this->print_active_job($job_id, false, $time, $info['args'][0]);
|
@@ -2703,7 +2798,6 @@ class UpdraftPlus_Admin {
|
|
2703 |
}
|
2704 |
}
|
2705 |
|
2706 |
-
// if (0 == $found_jobs) $ret .= '<p><em>'.__('(None)', 'updraftplus').'</em></p>';
|
2707 |
return $ret;
|
2708 |
}
|
2709 |
|
@@ -2716,21 +2810,20 @@ class UpdraftPlus_Admin {
|
|
2716 |
|
2717 |
if (false == apply_filters('updraftplus_print_active_job_continue', true, $is_oneshot, $next_resumption, $jobdata)) return '';
|
2718 |
|
2719 |
-
#if (!is_array($jobdata)) $jobdata = array();
|
2720 |
if (!isset($jobdata['backup_time'])) return '';
|
2721 |
|
2722 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
2723 |
|
2724 |
-
$began_at = (isset($jobdata['backup_time'])) ? get_date_from_gmt(gmdate('Y-m-d H:i:s', (int)$jobdata['backup_time']), 'D, F j, Y H:i') : '?';
|
2725 |
|
2726 |
$jobstatus = empty($jobdata['jobstatus']) ? 'unknown' : $jobdata['jobstatus'];
|
2727 |
$stage = 0;
|
2728 |
switch ($jobstatus) {
|
2729 |
-
|
2730 |
case 'begun':
|
2731 |
$curstage = __('Backup begun', 'updraftplus');
|
2732 |
-
|
2733 |
-
|
2734 |
case 'filescreating':
|
2735 |
$stage = 1;
|
2736 |
$curstage = __('Creating file backup zips', 'updraftplus');
|
@@ -2740,44 +2833,42 @@ class UpdraftPlus_Admin {
|
|
2740 |
if (strlen($sdescrip) > 20 && isset($jobdata['filecreating_substatus']['e']) && is_array($jobdata['filecreating_substatus']['e']) && isset($backupable_entities[$jobdata['filecreating_substatus']['e']]['shortdescription'])) $sdescrip = $backupable_entities[$jobdata['filecreating_substatus']['e']]['shortdescription'];
|
2741 |
$curstage .= ' ('.$sdescrip.')';
|
2742 |
if (isset($jobdata['filecreating_substatus']['i']) && isset($jobdata['filecreating_substatus']['t'])) {
|
2743 |
-
$stage = min(2, 1 + ($jobdata['filecreating_substatus']['i']/max($jobdata['filecreating_substatus']['t'],1)));
|
2744 |
}
|
2745 |
}
|
2746 |
-
|
2747 |
case 'filescreated':
|
2748 |
$stage = 2;
|
2749 |
$curstage = __('Created file backup zips', 'updraftplus');
|
2750 |
-
|
2751 |
-
|
2752 |
-
# Stage 4
|
2753 |
case 'clouduploading':
|
2754 |
$stage = 4;
|
2755 |
$curstage = __('Uploading files to remote storage', 'updraftplus');
|
2756 |
if (isset($jobdata['uploading_substatus']['t']) && isset($jobdata['uploading_substatus']['i'])) {
|
2757 |
-
$t = max((int)$jobdata['uploading_substatus']['t'], 1);
|
2758 |
$i = min($jobdata['uploading_substatus']['i']/$t, 1);
|
2759 |
$p = min($jobdata['uploading_substatus']['p'], 1);
|
2760 |
$pd = $i + $p/$t;
|
2761 |
$stage = 4 + $pd;
|
2762 |
$curstage .= ' '.sprintf(__('(%s%%, file %s of %s)', 'updraftplus'), floor(100*$pd), $jobdata['uploading_substatus']['i']+1, $t);
|
2763 |
}
|
2764 |
-
|
2765 |
case 'pruning':
|
2766 |
$stage = 5;
|
2767 |
$curstage = __('Pruning old backup sets', 'updraftplus');
|
2768 |
-
|
2769 |
case 'resumingforerrors':
|
2770 |
$stage = -1;
|
2771 |
$curstage = __('Waiting until scheduled time to retry because of errors', 'updraftplus');
|
2772 |
-
|
2773 |
-
|
2774 |
case 'finished':
|
2775 |
$stage = 6;
|
2776 |
$curstage = __('Backup finished', 'updraftplus');
|
2777 |
-
|
2778 |
default:
|
2779 |
-
|
2780 |
-
# Database creation and encryption occupies the space from 2 to 4. Databases are created then encrypted, then the next databae is created/encrypted, etc.
|
2781 |
if ('dbcreated' == substr($jobstatus, 0, 9)) {
|
2782 |
$jobstatus = 'dbcreated';
|
2783 |
$whichdb = substr($jobstatus, 9);
|
@@ -2802,7 +2893,7 @@ class UpdraftPlus_Admin {
|
|
2802 |
if (!empty($jobdata['dbcreating_substatus']['t'])) {
|
2803 |
$curstage .= ' ('.sprintf(__('table: %s', 'updraftplus'), $jobdata['dbcreating_substatus']['t']).')';
|
2804 |
if (!empty($jobdata['dbcreating_substatus']['i']) && !empty($jobdata['dbcreating_substatus']['a'])) {
|
2805 |
-
$substage = max(0.001, ($jobdata['dbcreating_substatus']['i'] / max($jobdata['dbcreating_substatus']['a'],1)));
|
2806 |
$stage += $substage * $perdbspace * 0.5;
|
2807 |
}
|
2808 |
}
|
@@ -2834,12 +2925,12 @@ class UpdraftPlus_Admin {
|
|
2834 |
foreach ($time_passed as $run => $passed) {
|
2835 |
if (isset($runs_started[$run])) {
|
2836 |
$time_ago = microtime(true) - ($runs_started[$run] + $time_passed[$run]);
|
2837 |
-
if ($time_ago < $last_checkin_ago ||
|
2838 |
}
|
2839 |
}
|
2840 |
}
|
2841 |
|
2842 |
-
$next_res_after = (int)$time-time();
|
2843 |
$next_res_txt = ($is_oneshot) ? '' : ' - '.sprintf(__("next resumption: %d (after %ss)", 'updraftplus'), $next_resumption, $next_res_after). ' ';
|
2844 |
$last_activity_txt = ($last_checkin_ago >= 0) ? ' - '.sprintf(__('last activity: %ss ago', 'updraftplus'), floor($last_checkin_ago)).' ' : '';
|
2845 |
|
@@ -2856,7 +2947,7 @@ class UpdraftPlus_Admin {
|
|
2856 |
|
2857 |
if (!empty($jobdata['is_autobackup'])) $ret .= ' isautobackup';
|
2858 |
|
2859 |
-
$ret .= '" data-jobid="'.$job_id.'" data-lastactivity="'.(int)$last_checkin_ago.'" data-nextresumption="'.$next_resumption.'" data-nextresumptionafter="'.$next_res_after.'" title="'.esc_attr(sprintf(__('Job ID: %s', 'updraftplus'), $job_id)).$title_info.'">'.$began_at.'</span> ';
|
2860 |
|
2861 |
$ret .= $show_inline_info;
|
2862 |
$ret .= '- <a data-jobid="'.$job_id.'" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=downloadlog&updraftplus_backup_nonce='.$job_id.'" class="updraft-log-link">'.__('show log', 'updraftplus').'</a>';
|
@@ -2875,7 +2966,7 @@ class UpdraftPlus_Admin {
|
|
2875 |
|
2876 |
$ret .= '<div class="curstage">';
|
2877 |
$ret .= htmlspecialchars($curstage);
|
2878 |
-
|
2879 |
$ret .= '<div class="updraft_percentage" data-info="'.esc_attr($curstage).'" data-progress="'.(($stage>0) ? (ceil((100/6)*$stage)) : '0').'" style="height: 100%; width:'.(($stage>0) ? (ceil((100/6)*$stage)) : '0').'%"></div>';
|
2880 |
$ret .= '</div></div>';
|
2881 |
|
@@ -2886,7 +2977,7 @@ class UpdraftPlus_Admin {
|
|
2886 |
}
|
2887 |
|
2888 |
private function delete_old_dirs_go($show_return = true) {
|
2889 |
-
echo
|
2890 |
|
2891 |
if ($this->delete_old_dirs()) {
|
2892 |
echo '<p>'.__('Old directories successfully removed.', 'updraftplus').'</p><br>';
|
@@ -2896,36 +2987,38 @@ class UpdraftPlus_Admin {
|
|
2896 |
if ($show_return) echo '<b>'.__('Actions', 'updraftplus').':</b> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
2897 |
}
|
2898 |
|
2899 |
-
|
|
|
|
|
|
|
|
|
2900 |
private function delete_old_dirs() {
|
2901 |
global $wp_filesystem, $updraftplus;
|
2902 |
-
$credentials = request_filesystem_credentials(wp_nonce_url(UpdraftPlus_Options::admin_page_url()."?page=updraftplus&action=updraft_delete_old_dirs", 'updraftplus-credentialtest-nonce'));
|
2903 |
WP_Filesystem($credentials);
|
2904 |
-
if ($wp_filesystem->errors->get_error_code()) {
|
2905 |
-
foreach ($wp_filesystem->errors->get_error_messages() as $message)
|
2906 |
-
|
2907 |
-
exit;
|
2908 |
}
|
2909 |
// From WP_CONTENT_DIR - which contains 'themes'
|
2910 |
$ret = $this->delete_old_dirs_dir($wp_filesystem->wp_content_dir());
|
2911 |
|
2912 |
$updraft_dir = $updraftplus->backups_dir_location();
|
2913 |
if ($updraft_dir) {
|
2914 |
-
$ret4 =
|
2915 |
} else {
|
2916 |
$ret4 = true;
|
2917 |
}
|
2918 |
|
2919 |
-
// $ret2 = $this->delete_old_dirs_dir($wp_filesystem->abspath());
|
2920 |
$plugs = untrailingslashit($wp_filesystem->wp_plugins_dir());
|
2921 |
if ($wp_filesystem->is_dir($plugs.'-old')) {
|
2922 |
-
|
2923 |
if (!$wp_filesystem->delete($plugs.'-old', true)) {
|
2924 |
$ret3 = false;
|
2925 |
-
|
2926 |
} else {
|
2927 |
$ret3 = true;
|
2928 |
-
|
2929 |
}
|
2930 |
} else {
|
2931 |
$ret3 = true;
|
@@ -2951,7 +3044,7 @@ class UpdraftPlus_Admin {
|
|
2951 |
foreach ($list as $item) {
|
2952 |
$name = (is_array($item)) ? $item['name'] : $item;
|
2953 |
if ("-old" == substr($name, -4, 4)) {
|
2954 |
-
//recursively delete
|
2955 |
print "<strong>".__('Delete', 'updraftplus').": </strong>".htmlspecialchars($name).": ";
|
2956 |
|
2957 |
if ($wpfs) {
|
@@ -2974,7 +3067,11 @@ class UpdraftPlus_Admin {
|
|
2974 |
return $ret;
|
2975 |
}
|
2976 |
|
2977 |
-
|
|
|
|
|
|
|
|
|
2978 |
private function create_backup_dir() {
|
2979 |
|
2980 |
global $wp_filesystem, $updraftplus;
|
@@ -2997,11 +3094,11 @@ class UpdraftPlus_Admin {
|
|
2997 |
|
2998 |
if (!$wp_filesystem->is_dir($default_backup_dir) && !$wp_filesystem->mkdir($default_backup_dir, 0775)) {
|
2999 |
$wperr = new WP_Error;
|
3000 |
-
if ($wp_filesystem->errors->get_error_code()) {
|
3001 |
foreach ($wp_filesystem->errors->get_error_messages() as $message) {
|
3002 |
$wperr->add('mkdir_error', $message);
|
3003 |
}
|
3004 |
-
return $wperr;
|
3005 |
} else {
|
3006 |
return new WP_Error('mkdir_error', __('The request to the filesystem to create the directory failed.', 'updraftplus'));
|
3007 |
}
|
@@ -3029,7 +3126,12 @@ class UpdraftPlus_Admin {
|
|
3029 |
return true;
|
3030 |
}
|
3031 |
|
3032 |
-
|
|
|
|
|
|
|
|
|
|
|
3033 |
private function scan_old_dirs($print_as_comment = false) {
|
3034 |
global $updraftplus;
|
3035 |
$dirs = scandir(untrailingslashit(WP_CONTENT_DIR));
|
@@ -3042,7 +3144,7 @@ class UpdraftPlus_Admin {
|
|
3042 |
return true;
|
3043 |
}
|
3044 |
}
|
3045 |
-
|
3046 |
if (is_dir(untrailingslashit(WP_PLUGIN_DIR).'-old')) {
|
3047 |
if ($print_as_comment) echo '<!--'.htmlspecialchars(untrailingslashit(WP_PLUGIN_DIR).'-old').'-->';
|
3048 |
return true;
|
@@ -3052,9 +3154,10 @@ class UpdraftPlus_Admin {
|
|
3052 |
|
3053 |
/**
|
3054 |
* Outputs html for a storage method using the parameters passed in, this version should be removed when all remote storages use the multi version
|
3055 |
-
*
|
3056 |
-
* @param
|
3057 |
-
* @param
|
|
|
3058 |
*/
|
3059 |
public function storagemethod_row($method, $header, $contents) {
|
3060 |
?>
|
@@ -3066,10 +3169,11 @@ class UpdraftPlus_Admin {
|
|
3066 |
}
|
3067 |
|
3068 |
/**
|
3069 |
-
* Outputs html for a storage method using the parameters passed in
|
3070 |
-
*
|
3071 |
-
* @param
|
3072 |
-
* @param
|
|
|
3073 |
*/
|
3074 |
public function storagemethod_row_multi($classes, $header, $contents) {
|
3075 |
?>
|
@@ -3079,7 +3183,27 @@ class UpdraftPlus_Admin {
|
|
3079 |
</tr>
|
3080 |
<?php
|
3081 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3082 |
|
|
|
|
|
|
|
|
|
|
|
3083 |
public function last_backup_html() {
|
3084 |
|
3085 |
global $updraftplus;
|
@@ -3089,16 +3213,14 @@ class UpdraftPlus_Admin {
|
|
3089 |
if ($updraft_last_backup) {
|
3090 |
|
3091 |
// Convert to GMT, then to blog time
|
3092 |
-
$backup_time = (int)$updraft_last_backup['backup_time'];
|
3093 |
|
3094 |
$print_time = get_date_from_gmt(gmdate('Y-m-d H:i:s', $backup_time), 'D, F j, Y H:i');
|
3095 |
-
// $print_time = date_i18n('D, F j, Y H:i', $backup_time);
|
3096 |
|
3097 |
if (empty($updraft_last_backup['backup_time_incremental'])) {
|
3098 |
$last_backup_text = "<span style=\"color:".(($updraft_last_backup['success']) ? 'green' : 'black').";\">".$print_time.'</span>';
|
3099 |
} else {
|
3100 |
$inc_time = get_date_from_gmt(gmdate('Y-m-d H:i:s', $updraft_last_backup['backup_time_incremental']), 'D, F j, Y H:i');
|
3101 |
-
// $inc_time = date_i18n('D, F j, Y H:i', $updraft_last_backup['backup_time_incremental']);
|
3102 |
$last_backup_text = "<span style=\"color:".(($updraft_last_backup['success']) ? 'green' : 'black').";\">$inc_time</span> (".sprintf(__('incremental backup; base backup: %s', 'updraftplus'), $print_time).')';
|
3103 |
}
|
3104 |
|
@@ -3129,13 +3251,18 @@ class UpdraftPlus_Admin {
|
|
3129 |
}
|
3130 |
|
3131 |
} else {
|
3132 |
-
$last_backup_text =
|
3133 |
}
|
3134 |
|
3135 |
return $last_backup_text;
|
3136 |
|
3137 |
}
|
3138 |
|
|
|
|
|
|
|
|
|
|
|
3139 |
public function get_intervals() {
|
3140 |
return apply_filters('updraftplus_backup_intervals', array(
|
3141 |
'manual' => _x("Manual", 'i.e. Non-automatic', 'updraftplus'),
|
@@ -3149,7 +3276,7 @@ class UpdraftPlus_Admin {
|
|
3149 |
));
|
3150 |
}
|
3151 |
|
3152 |
-
public function really_writable_message($really_is_writable, $updraft_dir){
|
3153 |
if ($really_is_writable) {
|
3154 |
$dir_info = '<span style="color:green;">'.__('Backup directory specified is writable, which is good.', 'updraftplus').'</span>';
|
3155 |
} else {
|
@@ -3164,6 +3291,11 @@ class UpdraftPlus_Admin {
|
|
3164 |
return $dir_info;
|
3165 |
}
|
3166 |
|
|
|
|
|
|
|
|
|
|
|
3167 |
public function settings_formcontents($options = array()) {
|
3168 |
$this->include_template('wp-admin/settings/form-contents.php', false, array('options' => $options));
|
3169 |
}
|
@@ -3205,14 +3337,21 @@ class UpdraftPlus_Admin {
|
|
3205 |
return $ret;
|
3206 |
}
|
3207 |
|
3208 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3209 |
public function files_selector_widgetry($prefix = '', $show_exclusion_options = true, $include_more = true) {
|
3210 |
|
3211 |
$ret = '';
|
3212 |
|
3213 |
global $updraftplus;
|
3214 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
3215 |
-
|
3216 |
$include_more_paths = UpdraftPlus_Options::get_updraft_option('updraft_include_more_path');
|
3217 |
foreach ($backupable_entities as $key => $info) {
|
3218 |
$included = (UpdraftPlus_Options::get_updraft_option("updraft_include_$key", apply_filters("updraftplus_defaultoption_include_".$key, true))) ? 'checked="checked"' : "";
|
@@ -3238,7 +3377,7 @@ class UpdraftPlus_Admin {
|
|
3238 |
|
3239 |
} else {
|
3240 |
|
3241 |
-
if (
|
3242 |
|
3243 |
$data_toggle_exclude_field = $show_exclusion_options ? 'data-toggle_exclude_field="'.$key.'"' : '';
|
3244 |
|
@@ -3253,6 +3392,15 @@ class UpdraftPlus_Admin {
|
|
3253 |
return $ret;
|
3254 |
}
|
3255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3256 |
public function show_double_warning($text, $extraclass = '', $echo = true) {
|
3257 |
|
3258 |
$ret = "<div class=\"error updraftplusmethod $extraclass\"><p>$text</p></div>";
|
@@ -3264,20 +3412,17 @@ class UpdraftPlus_Admin {
|
|
3264 |
}
|
3265 |
|
3266 |
public function optionfilter_split_every($value) {
|
3267 |
-
|
3268 |
-
if ($value < UPDRAFTPLUS_SPLIT_MIN) $value = UPDRAFTPLUS_SPLIT_MIN;
|
3269 |
-
return $value;
|
3270 |
}
|
3271 |
|
3272 |
/**
|
3273 |
* Check if curl exists; if not, print or return appropriate error messages
|
3274 |
*
|
3275 |
-
* @param String $service
|
3276 |
-
* @param Boolean $has_fallback
|
3277 |
-
* @param String
|
3278 |
-
* @param Boolean $echo_instead_of_return
|
3279 |
-
*
|
3280 |
-
* @returns String|Void - any resulting message, if $echo_instead_of_return was set
|
3281 |
*/
|
3282 |
public function curl_check($service, $has_fallback = false, $extraclass = '', $echo_instead_of_return = true) {
|
3283 |
|
@@ -3293,12 +3438,12 @@ class UpdraftPlus_Admin {
|
|
3293 |
$curl_ssl_supported= ($curl_version['features'] & CURL_VERSION_SSL);
|
3294 |
if (!$curl_ssl_supported) {
|
3295 |
if ($has_fallback) {
|
3296 |
-
$ret .= '<p><strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__("Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on).",'updraftplus'), $service).'</p>';
|
3297 |
} else {
|
3298 |
-
$ret .= $this->show_double_warning('<p><strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__("Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative.",'updraftplus'), $service, $service).'</p>', $extraclass, false);
|
3299 |
}
|
3300 |
} else {
|
3301 |
-
$ret .= '<p><em>'.sprintf(__("Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help.", 'updraftplus')
|
3302 |
}
|
3303 |
}
|
3304 |
if ($echo_instead_of_return) {
|
@@ -3308,22 +3453,29 @@ class UpdraftPlus_Admin {
|
|
3308 |
}
|
3309 |
}
|
3310 |
|
3311 |
-
|
3312 |
-
|
3313 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3314 |
|
3315 |
-
|
3316 |
$size = 0;
|
3317 |
|
3318 |
-
|
3319 |
-
|
3320 |
-
|
3321 |
}
|
3322 |
|
3323 |
if (is_string($basedirs)) $basedirs = array($basedirs);
|
3324 |
|
3325 |
-
foreach ($directorieses as $ind => $directories) {
|
3326 |
-
if (!is_array($directories)) $directories=array($directories);
|
3327 |
|
3328 |
$basedir = empty($basedirs[$ind]) ? $basedirs[0] : $basedirs[$ind];
|
3329 |
|
@@ -3349,14 +3501,14 @@ class UpdraftPlus_Admin {
|
|
3349 |
|
3350 |
$directory = $prefix_directory.('' == $suffix_directory ? '' : '/'.$suffix_directory);
|
3351 |
$size = 0;
|
3352 |
-
if (substr($directory, -1) == '/') $directory = substr($directory,0
|
3353 |
|
3354 |
if (!file_exists($directory) || !is_dir($directory) || !is_readable($directory)) return -1;
|
3355 |
if (file_exists($directory.'/.donotbackup')) return 0;
|
3356 |
|
3357 |
if ($handle = opendir($directory)) {
|
3358 |
while (($file = readdir($handle)) !== false) {
|
3359 |
-
if (
|
3360 |
$spath = ('' == $suffix_directory) ? $file : $suffix_directory.'/'.$file;
|
3361 |
if (false !== ($fkey = array_search($spath, $exclude))) {
|
3362 |
unset($exclude[$fkey]);
|
@@ -3367,7 +3519,9 @@ class UpdraftPlus_Admin {
|
|
3367 |
$size += filesize($path);
|
3368 |
} elseif (is_dir($path)) {
|
3369 |
$handlesize = $this->recursive_directory_size_raw($prefix_directory, $exclude, $suffix_directory.('' == $suffix_directory ? '' : '/').$file);
|
3370 |
-
if ($handlesize >= 0) {
|
|
|
|
|
3371 |
}
|
3372 |
}
|
3373 |
}
|
@@ -3384,7 +3538,7 @@ class UpdraftPlus_Admin {
|
|
3384 |
|
3385 |
$backup = $backup_history[$key];
|
3386 |
|
3387 |
-
$pretty_date = get_date_from_gmt(gmdate('Y-m-d H:i:s', (int)$key), 'M d, Y G:i');
|
3388 |
|
3389 |
$rawbackup = "<h2 title=\"$key\">$pretty_date</h2>";
|
3390 |
|
@@ -3406,12 +3560,6 @@ class UpdraftPlus_Admin {
|
|
3406 |
if (!isset($backup[$type])) continue;
|
3407 |
|
3408 |
$rawbackup .= $updraftplus->printfile($info['description'], $backup, $type, $checksums, $jd, true);
|
3409 |
-
|
3410 |
-
// $rawbackup .= '<h3>'.$info['description'].'</h3>';
|
3411 |
-
// $files = is_string($backup[$type]) ? array($backup[$type]) : $backup[$type];
|
3412 |
-
// foreach ($files as $index => $file) {
|
3413 |
-
// $rawbackup .= $file.'<br>';
|
3414 |
-
// }
|
3415 |
}
|
3416 |
|
3417 |
$total_size = 0;
|
@@ -3446,7 +3594,7 @@ class UpdraftPlus_Admin {
|
|
3446 |
|
3447 |
$rawbackup .= $show_services;
|
3448 |
|
3449 |
-
if (
|
3450 |
$rawbackup .= '</p><strong>'.__('Total backup size:', 'updraftplus').'</strong> '.$updraftplus->convert_numeric_size_to_text($total_size).'<p>';
|
3451 |
}
|
3452 |
|
@@ -3507,7 +3655,16 @@ class UpdraftPlus_Admin {
|
|
3507 |
return $ret;
|
3508 |
}
|
3509 |
|
3510 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3511 |
public function download_buttons($backup, $key, $accept, &$entities, $esc_pretty_date) {
|
3512 |
global $updraftplus;
|
3513 |
$ret = '';
|
@@ -3538,7 +3695,7 @@ class UpdraftPlus_Admin {
|
|
3538 |
if ('wpcore' == $type) $wpcore_restore_descrip = $sdescrip;
|
3539 |
}
|
3540 |
if (isset($backup[$type])) {
|
3541 |
-
if (!is_array($backup[$type])) $backup[$type]=array($backup[$type]);
|
3542 |
$howmanyinset = count($backup[$type]);
|
3543 |
$expected_index = 0;
|
3544 |
$index_missing = false;
|
@@ -3547,7 +3704,7 @@ class UpdraftPlus_Admin {
|
|
3547 |
$whatfiles = $backup[$type];
|
3548 |
ksort($whatfiles);
|
3549 |
foreach ($whatfiles as $findex => $bfile) {
|
3550 |
-
$set_contents .= (
|
3551 |
if ($findex != $expected_index) $index_missing = true;
|
3552 |
$expected_index++;
|
3553 |
}
|
@@ -3572,10 +3729,9 @@ class UpdraftPlus_Admin {
|
|
3572 |
}
|
3573 |
|
3574 |
if (!$first_entity) {
|
3575 |
-
// $ret .= ', ';
|
3576 |
} else {
|
3577 |
$first_entity = false;
|
3578 |
-
}
|
3579 |
|
3580 |
$ret .= $this->download_button($type, $key, $findex, $info, $ide, $pdescrip, $esc_pretty_date, $set_contents);
|
3581 |
|
@@ -3591,11 +3747,10 @@ class UpdraftPlus_Admin {
|
|
3591 |
}
|
3592 |
|
3593 |
public function date_label($pretty_date, $key, $backup, $jobdata, $nonce, $simple_format = false) {
|
3594 |
-
// $ret = apply_filters('updraftplus_showbackup_date', '<strong>'.$pretty_date.'</strong>', $backup, $jobdata, (int)$key);
|
3595 |
|
3596 |
$pretty_date = $simple_format ? $pretty_date : '<div class="clear-right">'.$pretty_date.'</div>';
|
3597 |
|
3598 |
-
$ret = apply_filters('updraftplus_showbackup_date', $pretty_date, $backup, $jobdata, (int)$key, $simple_format);
|
3599 |
if (is_array($jobdata) && !empty($jobdata['resume_interval']) && (empty($jobdata['jobstatus']) || 'finished' != $jobdata['jobstatus'])) {
|
3600 |
if ($simple_format) {
|
3601 |
$ret .= ' '.__('(Not finished)', 'updraftplus');
|
@@ -3634,20 +3789,28 @@ class UpdraftPlus_Admin {
|
|
3634 |
return $ret;
|
3635 |
}
|
3636 |
|
3637 |
-
|
3638 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3639 |
return '<div class="updraftplus-remove" style="float: left; clear: none;" data-hasremote="'.$sval.'">
|
3640 |
-
|
3641 |
-
|
3642 |
}
|
3643 |
|
3644 |
public function log_button($backup) {
|
3645 |
global $updraftplus;
|
3646 |
$updraft_dir = $updraftplus->backups_dir_location();
|
3647 |
$ret = '';
|
3648 |
-
if (isset($backup['nonce']) && preg_match("/^[0-9a-f]{12}$/"
|
3649 |
$nval = $backup['nonce'];
|
3650 |
-
// $lt = esc_attr(__('View Log', 'updraftplus'));
|
3651 |
$lt = __('View Log', 'updraftplus');
|
3652 |
$url = esc_attr(UpdraftPlus_Options::admin_page()."?page=updraftplus&action=downloadlog&updraftplus_backup_nonce=$nval");
|
3653 |
$ret .= <<<ENDHERE
|
@@ -3672,10 +3835,9 @@ ENDHERE;
|
|
3672 |
/**
|
3673 |
* Carry out the restore process
|
3674 |
*
|
3675 |
-
* @param
|
3676 |
-
* @param
|
3677 |
-
*
|
3678 |
-
* @return Boolean|WP_Error - WP_Error indicates a terminal failure; false indicates not-yet complete (not necessarily terminal); true indicates complete.
|
3679 |
*/
|
3680 |
private function restore_backup($timestamp, $continuation_data = null) {
|
3681 |
|
@@ -3715,24 +3877,23 @@ ENDHERE;
|
|
3715 |
|
3716 |
$credentials = request_filesystem_credentials(UpdraftPlus_Options::admin_page()."?page=updraftplus&action=updraft_restore&backup_timestamp=$timestamp", '', false, false, $extra_fields);
|
3717 |
WP_Filesystem($credentials);
|
3718 |
-
if ($wp_filesystem->errors->get_error_code()) {
|
3719 |
echo '<p><em><a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/faqs/asked-ftp-details-upon-restorationmigration-updates/").'">'.__('Why am I seeing this?', 'updraftplus').'</a></em></p>';
|
3720 |
-
foreach ($wp_filesystem->errors->get_error_messages() as $message) show_message($message);
|
3721 |
exit;
|
3722 |
}
|
3723 |
|
3724 |
// If we make it this far then WP_Filesystem has been instantiated and is functional
|
3725 |
|
3726 |
-
|
3727 |
$updraftplus->backup_time_nonce();
|
3728 |
$updraftplus->jobdata_set('job_type', 'restore');
|
3729 |
$updraftplus->jobdata_set('job_time_ms', $updraftplus->job_time_ms);
|
3730 |
$updraftplus->logfile_open($updraftplus->nonce);
|
3731 |
|
3732 |
-
|
3733 |
-
|
3734 |
-
|
3735 |
-
# TODO: Provide option to auto-email the log file
|
3736 |
|
3737 |
echo '<h1>'.__('UpdraftPlus Restoration: Progress', 'updraftplus').'</h1><div id="updraft-restore-progress">';
|
3738 |
|
@@ -3800,7 +3961,7 @@ ENDHERE;
|
|
3800 |
parse_str(stripslashes($_POST['updraft_restorer_restore_options']), $restore_options);
|
3801 |
}
|
3802 |
$restore_options['updraft_restorer_replacesiteurl'] = empty($_POST['updraft_restorer_replacesiteurl']) ? false : true;
|
3803 |
-
$restore_options['updraft_encryptionphrase'] = empty($_POST['updraft_encryptionphrase']) ? '' : (string)stripslashes($_POST['updraft_encryptionphrase']);
|
3804 |
$restore_options['updraft_restorer_wpcore_includewpconfig'] = empty($_POST['updraft_restorer_wpcore_includewpconfig']) ? false : true;
|
3805 |
$updraftplus->jobdata_set('restore_options', $restore_options);
|
3806 |
}
|
@@ -3821,7 +3982,7 @@ ENDHERE;
|
|
3821 |
$backupable_entities = apply_filters('updraft_backupable_file_entities_on_restore', $backupable_entities, $restore_options, $backup_set);
|
3822 |
|
3823 |
// We use a single object for each entity, because we want to store information about the backup set
|
3824 |
-
|
3825 |
|
3826 |
global $updraftplus_restorer;
|
3827 |
|
@@ -3851,14 +4012,14 @@ ENDHERE;
|
|
3851 |
foreach ($backup_set as $type => $files) {
|
3852 |
// All restorable entities must be given explicitly, as we can store other arbitrary data in the history array
|
3853 |
if (!isset($backupable_entities[$type]) && 'db' != $type) continue;
|
3854 |
-
if (isset($backupable_entities[$type]['restorable']) && $backupable_entities[$type]['restorable']
|
3855 |
|
3856 |
if (!isset($entities_to_download[$type])) continue;
|
3857 |
if ('wpcore' == $type && is_multisite() && 0 === $updraftplus_restorer->ud_backup_is_multisite) {
|
3858 |
echo "<p>$type: <strong>";
|
3859 |
$updraftplus->log(__('Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file.', 'updraftplus'), 'notice-restore');
|
3860 |
-
|
3861 |
-
|
3862 |
echo "</strong></p>";
|
3863 |
continue;
|
3864 |
}
|
@@ -3879,11 +4040,11 @@ ENDHERE;
|
|
3879 |
|
3880 |
$this->get_remote_file($service, $file, $timestamp, true);
|
3881 |
|
3882 |
-
$index = (
|
3883 |
// If a file size is stored in the backup data, then verify correctness of the local file
|
3884 |
if (isset($backup_set[$type.$index.'-size'])) {
|
3885 |
$fs = $backup_set[$type.$index.'-size'];
|
3886 |
-
$print_message = __("Archive is expected to be size:",'updraftplus')." ".round($fs/1024, 1)." KB: ";
|
3887 |
$as = @filesize($fullpath);
|
3888 |
if ($as == $fs) {
|
3889 |
$updraftplus->log($print_message.__('OK', 'updraftplus'), 'notice-restore');
|
@@ -3891,7 +4052,7 @@ ENDHERE;
|
|
3891 |
$updraftplus->log($print_message.__('Error:', 'updraftplus')." ".__('file is size:', 'updraftplus')." ".round($as/1024)." ($fs, $as)", 'warning-restore');
|
3892 |
}
|
3893 |
} else {
|
3894 |
-
$updraftplus->log(__("The backup records do not contain information about the proper size of this file.",'updraftplus'), 'notice-restore');
|
3895 |
}
|
3896 |
if (!is_readable($fullpath)) {
|
3897 |
$updraftplus->log(__('Could not find one of the files for restoration', 'updraftplus')." ($file)", 'warning-restore');
|
@@ -3923,11 +4084,11 @@ ENDHERE;
|
|
3923 |
foreach ($val->get_error_codes() as $code) {
|
3924 |
if ('already_exists' == $code) $this->print_delete_old_dirs_form(false);
|
3925 |
}
|
3926 |
-
echo '</div>'; //close the updraft_restore_progress div even if we error
|
3927 |
restore_error_handler();
|
3928 |
return $val;
|
3929 |
} elseif (false === $val) {
|
3930 |
-
echo '</div>'; //close the updraft_restore_progress div even if we error
|
3931 |
restore_error_handler();
|
3932 |
return false;
|
3933 |
}
|
@@ -4023,12 +4184,12 @@ ENDHERE;
|
|
4023 |
}
|
4024 |
}
|
4025 |
}
|
4026 |
-
echo '</div>'; //close the updraft_restore_progress div even if we error
|
4027 |
restore_error_handler();
|
4028 |
return $val;
|
4029 |
}
|
4030 |
} elseif (false === $val) {
|
4031 |
-
echo '</div>'; //close the updraft_restore_progress div even if we error
|
4032 |
restore_error_handler();
|
4033 |
return false;
|
4034 |
}
|
@@ -4056,11 +4217,11 @@ ENDHERE;
|
|
4056 |
// Clear any cached pages after the restore
|
4057 |
$updraftplus_restorer->clear_cache();
|
4058 |
|
4059 |
-
if (!function_exists('validate_current_theme'))
|
4060 |
|
4061 |
// Have seen a case where the current theme in the DB began with a capital, but not on disk - and this breaks migrating from Windows to a case-sensitive system
|
4062 |
$template = get_option('template');
|
4063 |
-
if (!empty($template) &&
|
4064 |
|
4065 |
$theme_root = get_theme_root($template);
|
4066 |
$theme_root2 = get_theme_root(strtolower($template));
|
@@ -4085,13 +4246,25 @@ ENDHERE;
|
|
4085 |
return true;
|
4086 |
}
|
4087 |
|
4088 |
-
public function option_filter_template($val) {
|
|
|
|
|
|
|
4089 |
|
4090 |
-
public function option_filter_stylesheet($val) {
|
|
|
|
|
|
|
4091 |
|
4092 |
-
public function option_filter_template_root($val) {
|
|
|
|
|
|
|
4093 |
|
4094 |
-
public function option_filter_stylesheet_root($val) {
|
|
|
|
|
|
|
4095 |
|
4096 |
public function sort_restoration_entities($a, $b) {
|
4097 |
if ($a == $b) return 0;
|
@@ -4129,15 +4302,15 @@ ENDHERE;
|
|
4129 |
die;
|
4130 |
}
|
4131 |
|
4132 |
-
public function updraft_ajax_importsettings() {
|
4133 |
-
global $updraftplus;
|
4134 |
-
|
4135 |
-
if (empty($_POST) || empty($_POST['subaction']) || 'importsettings' != $_POST['subaction'] || !isset($_POST['nonce']) || !is_user_logged_in() || !UpdraftPlus_Options::user_can_manage() || !wp_verify_nonce($_POST['nonce'], 'updraftplus-settings-nonce')) die('Security check');
|
4136 |
-
|
4137 |
-
if (empty($_POST['settings']) || !is_string($_POST['settings'])) die('Invalid data');
|
4138 |
|
4139 |
$this->import_settings($_POST);
|
4140 |
-
}
|
4141 |
|
4142 |
/**
|
4143 |
* This method handles the imported json settings it will convert them into a readable format for the existing save settings function, it will also update some of the options to match the new remote storage options format (Apr 2017)
|
@@ -4177,9 +4350,9 @@ ENDHERE;
|
|
4177 |
if (empty($posted_settings['updraft_azure']['settings'])) $posted_settings['updraft_azure'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_azure']);
|
4178 |
if (empty($posted_settings['updraft_dropbox']['settings'])) $posted_settings['updraft_dropbox'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_dropbox']);
|
4179 |
|
4180 |
-
echo json_encode($this->save_settings($posted_settings));
|
4181 |
|
4182 |
-
die;
|
4183 |
}
|
4184 |
|
4185 |
private function backup_now_remote_message() {
|
@@ -4197,12 +4370,13 @@ ENDHERE;
|
|
4197 |
return '<input type="checkbox" id="backupnow_includecloud" checked="checked"> <label for="backupnow_includecloud">'.__("Send this backup to remote storage", 'updraftplus').'</label>';
|
4198 |
}
|
4199 |
}
|
4200 |
-
|
4201 |
-
|
4202 |
-
|
4203 |
-
|
4204 |
-
|
4205 |
-
|
|
|
4206 |
public function save_settings($settings) {
|
4207 |
|
4208 |
global $updraftplus;
|
@@ -4218,11 +4392,11 @@ ENDHERE;
|
|
4218 |
|
4219 |
$add_to_post_keys = array('updraft_interval', 'updraft_interval_database', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_files', 'updraft_startday_db');
|
4220 |
|
4221 |
-
//If database and files are on same schedule, override the db day/time settings
|
4222 |
if (isset($settings['updraft_interval_database']) && isset($settings['updraft_interval_database']) && $settings['updraft_interval_database'] == $settings['updraft_interval'] && isset($settings['updraft_starttime_files'])) {
|
4223 |
$settings['updraft_starttime_db'] = $settings['updraft_starttime_files'];
|
4224 |
$settings['updraft_startday_db'] = $settings['updraft_startday_files'];
|
4225 |
-
}
|
4226 |
foreach ($add_to_post_keys as $key) {
|
4227 |
// For add-ons that look at $_POST to find saved settings, add the relevant keys to $_POST so that they find them there
|
4228 |
if (isset($settings[$key])) {
|
@@ -4257,14 +4431,14 @@ ENDHERE;
|
|
4257 |
foreach ($settings as $key => $value) {
|
4258 |
|
4259 |
if (in_array($key, $relevant_keys)) {
|
4260 |
-
if (
|
4261 |
-
foreach ($value as $subkey => $subvalue){
|
4262 |
-
if (
|
4263 |
}
|
4264 |
}
|
4265 |
|
4266 |
// This flag indicates that either the stored database option was changed, or that the supplied option was changed before being stored. It isn't comprehensive - it's only used to update some UI elements with invalid input.
|
4267 |
-
$updated = empty($mass_updated) ? (is_string($value) &&
|
4268 |
|
4269 |
$db_updated = empty($mass_updated) ? UpdraftPlus_Options::update_updraft_option($key, $value) : true;
|
4270 |
|
@@ -4274,10 +4448,12 @@ ENDHERE;
|
|
4274 |
$value = UpdraftPlus_Options::get_updraft_option($key);
|
4275 |
if (is_string($value)) $return_array['changed'][$key] = $value;
|
4276 |
}
|
4277 |
-
|
4278 |
} else {
|
|
|
|
|
4279 |
// When last active, it was catching: option_page, action, _wpnonce, _wp_http_referer, updraft_s3_endpoint, updraft_dreamobjects_endpoint. The latter two are empty; probably don't need to be in the page at all.
|
4280 |
-
//error_log("Non-UD key when saving from POSTed data: ".$key);
|
4281 |
}
|
4282 |
}
|
4283 |
} else {
|
@@ -4296,13 +4472,13 @@ ENDHERE;
|
|
4296 |
|
4297 |
// Check if $more_files_path_updated is true, is so then there's a change and we should update the backup modal
|
4298 |
if ($more_files_path_updated) {
|
4299 |
-
$return_array['updraft_include_more_path'] = $this->files_selector_widgetry('backupnow_files_', false, 'sometimes');
|
4300 |
}
|
4301 |
|
4302 |
-
//Because of the single AJAX call, we need to remove the existing UD messages from the 'all_admin_notices' action
|
4303 |
remove_all_actions('all_admin_notices');
|
4304 |
|
4305 |
-
//Moving from 2 to 1 ajax call
|
4306 |
ob_start();
|
4307 |
|
4308 |
$service = UpdraftPlus_Options::get_updraft_option('updraft_service');
|
@@ -4312,7 +4488,7 @@ ENDHERE;
|
|
4312 |
|
4313 |
do_action('all_admin_notices');
|
4314 |
|
4315 |
-
if (!$really_is_writable) { //Check if writable
|
4316 |
$this->show_admin_warning_unwritable();
|
4317 |
}
|
4318 |
|
@@ -4338,16 +4514,16 @@ ENDHERE;
|
|
4338 |
$return_array['messages'] = $messages_output;
|
4339 |
$return_array['scheduled'] = $scheduled_output;
|
4340 |
|
4341 |
-
|
4342 |
-
|
4343 |
-
|
4344 |
return $return_array;
|
4345 |
|
4346 |
}
|
4347 |
|
4348 |
/**
|
4349 |
* A method to remove UpdraftPlus settings from the options table.
|
|
|
4350 |
* @param boolean $wipe_all_settings Set to true as default as we want to remove all options, set to false if calling from UpdraftCentral, as we do not want to remove the UpdraftCentral key or we will lose connection to the site.
|
|
|
4351 |
*/
|
4352 |
public function updraft_wipe_settings($wipe_all_settings = true) {
|
4353 |
|
@@ -4374,15 +4550,37 @@ ENDHERE;
|
|
4374 |
|
4375 |
return true;
|
4376 |
}
|
4377 |
-
|
4378 |
-
|
4379 |
-
|
4380 |
-
|
4381 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4382 |
return $vault;
|
4383 |
}
|
4384 |
|
4385 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4386 |
public function http_get($uri = null, $curl = false) {
|
4387 |
|
4388 |
if (!preg_match('/^https?/', $uri)) return json_encode(array('e' => 'Non-http URL specified'));
|
@@ -4398,7 +4596,7 @@ ENDHERE;
|
|
4398 |
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
4399 |
curl_setopt($ch, CURLOPT_HEADER, false);
|
4400 |
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
4401 |
-
curl_setopt($ch, CURLOPT_STDERR, $output=fopen('php://temp', "w+"));
|
4402 |
$response = curl_exec($ch);
|
4403 |
$error = curl_error($ch);
|
4404 |
$getinfo = curl_getinfo($ch);
|
@@ -4415,13 +4613,12 @@ ENDHERE;
|
|
4415 |
|
4416 |
if (!empty($verb)) $resp['r'] = htmlspecialchars($verb)."\n\n".$resp['r'];
|
4417 |
|
4418 |
-
//
|
4419 |
$resp['verb'] = $verb;
|
4420 |
$resp['response'] = $response;
|
4421 |
$resp['status'] = $getinfo;
|
4422 |
|
4423 |
return json_encode($resp);
|
4424 |
-
// echo json_encode(array('r' => htmlspecialchars(substr($response, 0, 2048))));
|
4425 |
} else {
|
4426 |
$response = wp_remote_get($uri, array('timeout' => 10));
|
4427 |
if (is_wp_error($response)) {
|
@@ -4454,7 +4651,7 @@ ENDHERE;
|
|
4454 |
ob_start();
|
4455 |
$history = UpdraftPlus_Backup_History::get_history();
|
4456 |
var_dump($history);
|
4457 |
-
$response["html"] .= ob_get_clean();
|
4458 |
$response['html'] .= '</pre>';
|
4459 |
|
4460 |
$response['html'] .= '<h3 id="ud-debuginfo-files">'.__('Files', 'updraftplus').'</h3><pre>';
|
@@ -4478,7 +4675,11 @@ ENDHERE;
|
|
4478 |
}
|
4479 |
@$d->close();
|
4480 |
krsort($raw_output, SORT_NUMERIC);
|
4481 |
-
|
|
|
|
|
|
|
|
|
4482 |
$response['html'] .= '</pre>';
|
4483 |
|
4484 |
$response['html'] .= '<h3 id="ud-debuginfo-options">'.__('Options (raw)', 'updraftplus').'</h3>';
|
@@ -4496,14 +4697,20 @@ ENDHERE;
|
|
4496 |
$response['html'] .= ob_get_clean();
|
4497 |
|
4498 |
if (true == $no_pre_tags) {
|
4499 |
-
$response['html'] = str_replace('<pre>',''
|
4500 |
-
$response['html'] = str_replace('</pre>',''
|
4501 |
}
|
4502 |
|
4503 |
return $response;
|
4504 |
}
|
4505 |
|
4506 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4507 |
public function call_wp_action($data = null, $close_connection_callable = false) {
|
4508 |
global $updraftplus;
|
4509 |
|
@@ -4527,7 +4734,7 @@ ENDHERE;
|
|
4527 |
|
4528 |
$ret = ob_get_clean();
|
4529 |
|
4530 |
-
//
|
4531 |
if ($close_connection_callable) {
|
4532 |
if (is_callable($close_connection_callable)) {
|
4533 |
call_user_func($close_connection_callable, array('r' => $res));
|
@@ -4553,22 +4760,25 @@ ENDHERE;
|
|
4553 |
$response['response'] = $res;
|
4554 |
$response['log'] = $output;
|
4555 |
|
4556 |
-
//Check if response is empty
|
4557 |
if (!empty($returned)) $response['status'] = $returned;
|
4558 |
|
4559 |
return $response;
|
4560 |
}
|
4561 |
|
|
|
|
|
|
|
4562 |
public function enqueue_jstree() {
|
4563 |
|
4564 |
static $already_enqueued = false;
|
4565 |
if ($already_enqueued) return;
|
4566 |
|
4567 |
-
$already_enqueued = true;
|
4568 |
$jstree_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '3.3'.'.'.time() : '3.3';
|
4569 |
$min_or_not = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
|
4570 |
-
|
4571 |
wp_enqueue_script('jstree', UPDRAFTPLUS_URL.'/includes/jstree/jstree'.$min_or_not.'.js', array('jquery'), $jstree_enqueue_version);
|
4572 |
-
wp_enqueue_style('jstree', UPDRAFTPLUS_URL.'/includes/jstree/themes/default/style'.$min_or_not.'.css', array(), $jstree_enqueue_version);
|
4573 |
}
|
4574 |
}
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTPLUS_DIR')) die('No direct access allowed');
|
4 |
|
5 |
// Admin-area code lives here. This gets called in admin_menu, earlier than admin_init
|
6 |
|
15 |
|
16 |
private $backups_instance_ids;
|
17 |
|
18 |
+
private $auth_instance_ids = array('dropbox' => array(), 'onedrive' => array(), 'googledrive' => array(), 'googlecloud' => array());
|
19 |
+
|
20 |
public function __construct() {
|
21 |
$this->admin_init();
|
22 |
}
|
33 |
return $path;
|
34 |
}
|
35 |
|
36 |
+
/**
|
37 |
+
* Get the path to the UI templates directory
|
38 |
+
*
|
39 |
+
* @return String - a filesystem directory path
|
40 |
+
*/
|
41 |
public function get_templates_dir() {
|
42 |
return apply_filters('updraftplus_templates_dir', $this->wp_normalize_path(UPDRAFTPLUS_DIR.'/templates'));
|
43 |
}
|
44 |
|
|
|
|
|
|
|
|
|
45 |
private function register_template_directories() {
|
46 |
|
47 |
$template_directories = array();
|
121 |
$clientid = $storage_options['clientid'];
|
122 |
$token = empty($storage_options['token']) ? '' : $storage_options['token'];
|
123 |
}
|
124 |
+
if (!empty($clientid) && '' == $token) {
|
125 |
+
if (!in_array($instance_id, $this->auth_instance_ids['googledrive'])) $this->auth_instance_ids['googledrive'][] = $instance_id;
|
126 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_googledrive'))) add_action('all_admin_notices', array($this, 'show_admin_warning_googledrive'));
|
127 |
+
}
|
128 |
unset($clientid);
|
129 |
unset($token);
|
130 |
} else {
|
131 |
+
if (empty($storage_options['user_id'])) {
|
132 |
+
if (!in_array($instance_id, $this->auth_instance_ids['googledrive'])) $this->auth_instance_ids['googledrive'][] = $instance_id;
|
133 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_googledrive'))) add_action('all_admin_notices', array($this, 'show_admin_warning_googledrive'));
|
134 |
+
}
|
135 |
}
|
136 |
}
|
137 |
}
|
149 |
$clientid = $storage_options['clientid'];
|
150 |
$token = (empty($storage_options['token'])) ? '' : $storage_options['token'];
|
151 |
|
152 |
+
if (!empty($clientid) && empty($token)) {
|
153 |
+
if (!in_array($instance_id, $this->auth_instance_ids['googlecloud'])) $this->auth_instance_ids['googlecloud'][] = $instance_id;
|
154 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_googlecloud'))) add_action('all_admin_notices', array($this, 'show_admin_warning_googlecloud'));
|
155 |
+
}
|
156 |
}
|
157 |
}
|
158 |
}
|
168 |
} elseif (!empty($settings['settings'])) {
|
169 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
170 |
if (empty($storage_options['tk_access_token'])) {
|
171 |
+
if (!in_array($instance_id, $this->auth_instance_ids['dropbox'])) $this->auth_instance_ids['dropbox'][] = $instance_id;
|
172 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_dropbox'))) add_action('all_admin_notices', array($this, 'show_admin_warning_dropbox'));
|
173 |
}
|
174 |
}
|
175 |
}
|
185 |
$updraftplus->log_wp_error($settings, true, true);
|
186 |
} elseif (!empty($settings['settings'])) {
|
187 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
188 |
+
if ((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)) {
|
189 |
+
if (!empty($storage_options['clientid']) && !empty($storage_options['secret']) && empty($storage_options['refresh_token'])) {
|
190 |
+
if (!in_array($instance_id, $this->auth_instance_ids['onedrive'])) $this->auth_instance_ids['onedrive'][] = $instance_id;
|
191 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'))) add_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'));
|
192 |
} elseif (empty($storage_options['refresh_token'])) {
|
193 |
+
if (!in_array($instance_id, $this->auth_instance_ids['onedrive'])) $this->auth_instance_ids['onedrive'][] = $instance_id;
|
194 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'))) add_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'));
|
195 |
+
}
|
196 |
+
} else {
|
197 |
+
if (empty($storage_options['refresh_token'])) {
|
198 |
+
if (!in_array($instance_id, $this->auth_instance_ids['onedrive'])) $this->auth_instance_ids['onedrive'][] = $instance_id;
|
199 |
+
if (false === has_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'))) add_action('all_admin_notices', array($this, 'show_admin_warning_onedrive'));
|
200 |
}
|
|
|
|
|
201 |
}
|
202 |
}
|
203 |
}
|
214 |
} elseif (!empty($settings['settings'])) {
|
215 |
foreach ($settings['settings'] as $instance_id => $storage_options) {
|
216 |
if (empty($storage_options['token']) && empty($storage_options['email'])) {
|
217 |
+
add_action('all_admin_notices', array($this, 'show_admin_warning_updraftvault'));
|
218 |
}
|
219 |
}
|
220 |
}
|
223 |
if ($this->disk_space_check(1048576*35) === false) add_action('all_admin_notices', array($this, 'show_admin_warning_diskspace'));
|
224 |
}
|
225 |
|
226 |
+
private function setup_all_admin_notices_udonly($service, $override = false) {
|
227 |
global $wp_version;
|
228 |
|
229 |
if (UpdraftPlus_Options::user_can_manage() && defined('DISABLE_WP_CRON') && DISABLE_WP_CRON && (!defined('UPDRAFTPLUS_DISABLE_WP_CRON_NOTICE') || !UPDRAFTPLUS_DISABLE_WP_CRON_NOTICE)) {
|
231 |
}
|
232 |
|
233 |
if (UpdraftPlus_Options::get_updraft_option('updraft_debug_mode')) {
|
234 |
+
@ini_set('display_errors', 1);
|
235 |
@error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
|
236 |
add_action('all_admin_notices', array($this, 'show_admin_debug_warning'));
|
237 |
}
|
241 |
$this->no_settings_warning = true;
|
242 |
}
|
243 |
|
244 |
+
// Avoid false positives, by attempting to raise the limit (as happens when we actually do a backup)
|
245 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
246 |
+
$max_execution_time = (int) @ini_get('max_execution_time');
|
247 |
if ($max_execution_time>0 && $max_execution_time<20) {
|
248 |
add_action('all_admin_notices', array($this, 'show_admin_warning_execution_time'));
|
249 |
}
|
258 |
if (version_compare($wp_version, '3.2', '<')) add_action('all_admin_notices', array($this, 'show_admin_warning_wordpressversion'));
|
259 |
}
|
260 |
|
261 |
+
/**
|
262 |
+
* Used to output the information for the next scheduled backup.
|
263 |
+
* moved to function for the ajax saves
|
264 |
+
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
265 |
public function next_scheduled_backups_output() {
|
266 |
// UNIX timestamp
|
267 |
$next_scheduled_backup = wp_next_scheduled('updraft_backup');
|
270 |
$next_scheduled_backup_gmt = gmdate('Y-m-d H:i:s', $next_scheduled_backup);
|
271 |
// Convert to blog time zone
|
272 |
$next_scheduled_backup = get_date_from_gmt($next_scheduled_backup_gmt, 'D, F j, Y H:i');
|
273 |
+
// $next_scheduled_backup = date_i18n('D, F j, Y H:i', $next_scheduled_backup);
|
274 |
} else {
|
275 |
$next_scheduled_backup = __('Nothing currently scheduled', 'updraftplus');
|
276 |
$files_not_scheduled = true;
|
277 |
}
|
278 |
|
279 |
$next_scheduled_backup_database = wp_next_scheduled('updraft_backup_database');
|
280 |
+
if (UpdraftPlus_Options::get_updraft_option('updraft_interval_database', UpdraftPlus_Options::get_updraft_option('updraft_interval')) == UpdraftPlus_Options::get_updraft_option('updraft_interval')) {
|
281 |
if (isset($files_not_scheduled)) {
|
282 |
$next_scheduled_backup_database = $next_scheduled_backup;
|
283 |
$database_not_scheduled = true;
|
291 |
$next_scheduled_backup_database_gmt = gmdate('Y-m-d H:i:s', $next_scheduled_backup_database);
|
292 |
// Convert to blog time zone
|
293 |
$next_scheduled_backup_database = get_date_from_gmt($next_scheduled_backup_database_gmt, 'D, F j, Y H:i');
|
294 |
+
// $next_scheduled_backup_database = date_i18n('D, F j, Y H:i', $next_scheduled_backup_database);
|
295 |
} else {
|
296 |
$next_scheduled_backup_database = __('Nothing currently scheduled', 'updraftplus');
|
297 |
$database_not_scheduled = true;
|
313 |
}
|
314 |
}
|
315 |
|
316 |
+
/**
|
317 |
+
* Run upon the WP admin_init action
|
318 |
+
*/
|
319 |
private function admin_init() {
|
320 |
|
321 |
add_action('core_upgrade_preamble', array($this, 'core_upgrade_preamble'));
|
322 |
add_action('admin_action_upgrade-plugin', array($this, 'admin_action_upgrade_pluginortheme'));
|
323 |
add_action('admin_action_upgrade-theme', array($this, 'admin_action_upgrade_pluginortheme'));
|
324 |
|
325 |
+
add_action('admin_head', array($this, 'admin_head'));
|
326 |
add_filter((is_multisite() ? 'network_admin_' : '').'plugin_action_links', array($this, 'plugin_action_links'), 10, 2);
|
327 |
add_action('wp_ajax_updraft_download_backup', array($this, 'updraft_download_backup'));
|
328 |
add_action('wp_ajax_updraft_ajax', array($this, 'updraft_ajax_handler'));
|
337 |
// Add a new Ajax action for saving settings
|
338 |
add_action('wp_ajax_updraft_savesettings', array($this, 'updraft_ajax_savesettings'));
|
339 |
|
340 |
+
// Ajax for settings import and export
|
341 |
+
add_action('wp_ajax_updraft_importsettings', array($this, 'updraft_ajax_importsettings'));
|
342 |
|
343 |
// UpdraftPlus templates
|
344 |
$this->register_template_directories();
|
357 |
|
358 |
// Main dashboard page advert
|
359 |
// Since our nonce is printed, make sure they have sufficient credentials
|
360 |
+
if ('index.php' == $pagenow && current_user_can('update_plugins') && (!file_exists(UPDRAFTPLUS_DIR.'/udaddons') || (defined('UPDRAFTPLUS_FORCE_DASHNOTICE') && UPDRAFTPLUS_FORCE_DASHNOTICE))) {
|
361 |
|
362 |
$dismissed_until = UpdraftPlus_Options::get_updraft_option('updraftplus_dismisseddashnotice', 0);
|
363 |
|
366 |
$installed = @filemtime($backup_dir.'/index.html');
|
367 |
$installed_for = time() - $installed;
|
368 |
|
369 |
+
if (($installed && time() > $dismissed_until && $installed_for > 28*86400 && !defined('UPDRAFTPLUS_NOADS_B')) || (defined('UPDRAFTPLUS_FORCE_DASHNOTICE') && UPDRAFTPLUS_FORCE_DASHNOTICE)) {
|
370 |
add_action('all_admin_notices', array($this, 'show_admin_notice_upgradead'));
|
371 |
}
|
372 |
}
|
373 |
|
374 |
+
// Moved out for use with Ajax saving
|
375 |
$this->setup_all_admin_notices_global($service);
|
376 |
}
|
377 |
|
378 |
// Next, the actions that only come on the UpdraftPlus page
|
379 |
+
if (UpdraftPlus_Options::admin_page() != $pagenow || empty($_REQUEST['page']) || 'updraftplus' != $_REQUEST['page']) return;
|
380 |
$this->setup_all_admin_notices_udonly($service);
|
381 |
|
382 |
add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'), 99999);
|
385 |
/**
|
386 |
* Sets up what is needed to allow an in-page backup to be run. Will enqueue scripts and output appropriate HTML (so, should be run when at a suitable place). Not intended for use on the UpdraftPlus settings page.
|
387 |
*
|
388 |
+
* @param string $title Text to use for the title of the modal
|
389 |
* @param callable $callback Callable function to output the contents of the updraft_inpage_prebackup element - i.e. what shows in the modal before a backup beings.
|
|
|
390 |
*/
|
391 |
public function add_backup_scaffolding($title, $callback) {
|
392 |
$this->admin_enqueue_scripts();
|
434 |
die();
|
435 |
}
|
436 |
|
437 |
+
$restore_nonce = (string) $_POST['restorenonce'];
|
438 |
|
439 |
if (empty($_POST['ajaxauth'])) {
|
440 |
echo json_encode(array('e' => 'Illegitimate data sent (2)'));
|
471 |
$updraftplus->backup_time_nonce($restore_nonce);
|
472 |
$updraftplus->logfile_open($restore_nonce);
|
473 |
|
474 |
+
$timestamp = empty($_POST['timestamp']) ? false : (int) $_POST['timestamp'];
|
475 |
+
$multisite = empty($_POST['multisite']) ? false : (bool) $_POST['multisite'];
|
476 |
+
$created_by_version = empty($_POST['created_by_version']) ? false : (int) $_POST['created_by_version'];
|
477 |
|
478 |
// TODO: We need to know about first_one (not yet sent), as well as last_one
|
479 |
|
480 |
// TODO: Verify the values of these
|
481 |
+
$type = empty($_POST['type']) ? false : (int) $_POST['type'];
|
482 |
+
$backupfile = empty($_POST['backupfile']) ? false : (string) $_POST['backupfile'];
|
483 |
|
484 |
$updraftplus->log("Deferred restore resumption: $type: $backupfile (timestamp=$timestamp, last_one=$last_one)");
|
485 |
|
567 |
'id' => 'updraft_admin_node_premium',
|
568 |
'title' => 'UpdraftPlus Premium',
|
569 |
'parent' => 'updraft_admin_node',
|
570 |
+
'href' => apply_filters('updraftplus_com_link', 'https://updraftplus.com/shop/updraftplus-premium/')
|
571 |
);
|
572 |
$wp_admin_bar->add_node($args);
|
573 |
}
|
574 |
}
|
575 |
|
576 |
+
/**
|
577 |
+
* Output HTML for a dashboard notice highlighting the benefits of upgrading to Premium
|
578 |
+
*/
|
|
|
|
|
|
|
579 |
public function show_admin_notice_upgradead() {
|
580 |
$this->include_template('wp-admin/notices/thanks-for-using-main-dash.php');
|
581 |
}
|
600 |
|
601 |
}
|
602 |
|
603 |
+
/**
|
604 |
+
* This is also called directly from the auto-backup add-on
|
605 |
+
*/
|
606 |
public function admin_enqueue_scripts() {
|
607 |
|
608 |
global $updraftplus, $wp_locale;
|
613 |
// Defeat other plugins/themes which dump their jQuery UI CSS onto our settings page
|
614 |
wp_deregister_style('jquery-ui');
|
615 |
$jquery_ui_css_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '1.11.4'.'.'.time() : '1.11.4';
|
616 |
+
wp_enqueue_style('jquery-ui', UPDRAFTPLUS_URL.'/includes/jquery-ui.custom'.$min_or_not.'.css', array(), $jquery_ui_css_enqueue_version);
|
617 |
|
618 |
wp_enqueue_style('updraft-admin-css', UPDRAFTPLUS_URL.'/css/admin'.$min_or_not.'.css', array(), $enqueue_version);
|
619 |
+
// add_filter('style_loader_tag', array($this, 'style_loader_tag'), 10, 2);
|
620 |
|
621 |
$this->ensure_sufficient_jquery_and_enqueue();
|
622 |
$jquery_blockui_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '2.70.0'.'.'.time() : '2.70.0';
|
633 |
|
634 |
$day_selector = '';
|
635 |
for ($day_index = 0; $day_index <= 6; $day_index++) {
|
636 |
+
// $selected = ($opt == $day_index) ? 'selected="selected"' : '';
|
637 |
$selected = '';
|
638 |
$day_selector .= "\n\t<option value='" . $day_index . "' $selected>" . $wp_locale->get_weekday($day_index) . '</option>';
|
639 |
}
|
640 |
|
641 |
$mday_selector = '';
|
642 |
for ($mday_index = 1; $mday_index <= 28; $mday_index++) {
|
643 |
+
// $selected = ($opt == $mday_index) ? 'selected="selected"' : '';
|
644 |
$selected = '';
|
645 |
$mday_selector .= "\n\t<option value='" . $mday_index . "' $selected>" . $mday_index . '</option>';
|
646 |
}
|
655 |
'excludedeverything' => __('If you exclude both the database and the files, then you have excluded everything!', 'updraftplus'),
|
656 |
'nofileschosen' => __('You have chosen to backup files, but no file entities have been selected', 'updraftplus'),
|
657 |
'notableschosen' => __('You have chosen to backup a database, but no tables have been selected', 'updraftplus'),
|
658 |
+
'restore_proceeding' => __('The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished.', 'updraftplus'),
|
659 |
'unexpectedresponse' => __('Unexpected response:', 'updraftplus'),
|
660 |
'servererrorcode' => __('The web server returned an error code (try again, or check your web server logs)', 'updraftplus'),
|
661 |
'newuserpass' => __("The new user's RackSpace console password is (this will not be shown again):", 'updraftplus'),
|
714 |
'updatequotacount' => __('Update quota count', 'updraftplus'),
|
715 |
'addingsite' => __('Adding...', 'updraftplus'),
|
716 |
'addsite' => __('Add site', 'updraftplus'),
|
717 |
+
// 'resetting' => __('Resetting...', 'updraftplus'),
|
718 |
'creating_please_allow' => __('Creating...', 'updraftplus').(function_exists('openssl_encrypt') ? '' : ' ('.__('your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup.', 'updraftplus').')'),
|
719 |
'sendtosite' => __('Send to site:', 'updraftplus'),
|
720 |
'checkrpcsetup' => sprintf(__('You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly.', 'updraftplus'), '2.10.3'),
|
721 |
'pleasenamekey' => __('Please give this key a name (e.g. indicate the site it is for):', 'updraftplus'),
|
722 |
'key' => __('Key', 'updraftplus'),
|
723 |
+
'nokeynamegiven' => sprintf(__("Failure: No %s was given.", 'updraftplus'), __('key name', 'updraftplus')),
|
724 |
'deleting' => __('Deleting...', 'updraftplus'),
|
725 |
'enter_mothership_url' => __('Please enter a valid URL', 'updraftplus'),
|
726 |
'delete_response_not_understood' => __("We requested to delete the file, but could not understand the server's response", 'updraftplus'),
|
748 |
'settings_test_result' => __('%s settings test result:', 'updraftplus'),
|
749 |
'nothing_yet_logged' => __('Nothing yet logged', 'updraftplus'),
|
750 |
'import_select_file' => __('You have not yet selected a file to import.', 'updraftplus'),
|
751 |
+
'import_invalid_json_file' => __('Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file.', 'updraftplus'),
|
752 |
+
'updraft_settings_url' => UpdraftPlus_Options::admin_page_url().'?page=updraftplus',
|
753 |
'network_site_url' => network_site_url(),
|
754 |
'importing' => __('Importing...', 'updraftplus'),
|
755 |
'importing_data_from' => __('This will import data from:', 'updraftplus'),
|
767 |
'loading_log_file' => __('Loading log file', 'updraftplus'),
|
768 |
'updraftplus_version' => $updraftplus->version,
|
769 |
'updraftcentral_wizard_empty_url' => __('Please enter the URL where your UpdraftCentral dashboard is hosted.'),
|
770 |
+
'updraftcentral_wizard_invalid_url' => __('Please enter a valid URL e.g http://example.com', 'updraftplus')
|
771 |
+
));
|
772 |
}
|
773 |
|
774 |
+
/**
|
775 |
+
* Despite the name, this fires irrespective of what capabilities the user has (even none - so be careful)
|
776 |
+
*/
|
777 |
public function core_upgrade_preamble() {
|
778 |
// They need to be able to perform backups, and to perform updates
|
779 |
if (!UpdraftPlus_Options::user_can_manage() || (!current_user_can('update_core') && !current_user_can('update_plugins') && !current_user_can('update_themes'))) return;
|
783 |
}
|
784 |
|
785 |
?>
|
786 |
+
<?php
|
787 |
if (!class_exists('UpdraftPlus_Addon_Autobackup')) {
|
788 |
+
if (!class_exists('UpdraftPlus_Notices')) include_once(UPDRAFTPLUS_DIR.'/includes/updraftplus-notices.php');
|
789 |
global $updraftplus_notices;
|
790 |
+
echo apply_filters('updraftplus_autobackup_blurb', $updraftplus_notices->do_notice('autobackup', 'autobackup', true));
|
791 |
} else {
|
792 |
echo '<div class="updraft-ad-container updated">';
|
793 |
echo '<h3 style="margin-top: 2px;">'. __('Be safe with an automatic backup', 'updraftplus').'</h3>';
|
794 |
+
echo apply_filters('updraftplus_autobackup_blurb', '');
|
795 |
echo '</div>';
|
796 |
}
|
797 |
+
?>
|
798 |
<script>
|
799 |
jQuery(document).ready(function() {
|
800 |
jQuery('.updraft-ad-container').appendTo('.wrap p:first');
|
803 |
<?php
|
804 |
}
|
805 |
|
806 |
+
/**
|
807 |
+
* Run upon the WP admin_head action
|
808 |
+
*/
|
809 |
public function admin_head() {
|
810 |
|
811 |
global $pagenow;
|
812 |
|
813 |
+
if (UpdraftPlus_Options::admin_page() != $pagenow || !isset($_REQUEST['page']) || 'updraftplus' != $_REQUEST['page'] || !UpdraftPlus_Options::user_can_manage()) return;
|
814 |
|
815 |
+
$chunk_size = min(wp_max_upload_size()-1024, 1048576*2);
|
816 |
|
817 |
+
// The multiple_queues argument is ignored in plupload 2.x (WP3.9+) - http://make.wordpress.org/core/2014/04/11/plupload-2-x-in-wordpress-3-9/
|
818 |
+
// max_file_size is also in filters as of plupload 2.x, but in its default position is still supported for backwards-compatibility. Likewise, our use of filters.extensions below is supported by a backwards-compatibility option (the current way is filters.mime-types.extensions
|
819 |
|
820 |
$plupload_init = array(
|
821 |
'runtimes' => 'html5,flash,silverlight,html4',
|
836 |
'action' => 'plupload_action'
|
837 |
)
|
838 |
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
839 |
|
840 |
+
// WP 3.9 updated to plupload 2.0 - https://core.trac.wordpress.org/ticket/25663
|
841 |
if (is_file(ABSPATH.WPINC.'/js/plupload/Moxie.swf')) {
|
842 |
$plupload_init['flash_swf_url'] = includes_url('js/plupload/Moxie.swf');
|
843 |
} else {
|
851 |
}
|
852 |
|
853 |
?><script>
|
854 |
+
var updraft_credentialtest_nonce = '<?php echo wp_create_nonce('updraftplus-credentialtest-nonce');?>';
|
855 |
+
var updraftplus_settings_nonce = '<?php echo wp_create_nonce('updraftplus-settings-nonce');?>';
|
856 |
var updraft_siteurl = '<?php echo esc_js(site_url('', 'relative'));?>';
|
857 |
+
var updraft_plupload_config = <?php echo json_encode($plupload_init); ?>;
|
858 |
+
var updraft_download_nonce = '<?php echo wp_create_nonce('updraftplus_download');?>';
|
859 |
var updraft_accept_archivename = <?php echo apply_filters('updraftplus_accept_archivename_js', "[]");?>;
|
860 |
<?php
|
861 |
$plupload_init['browse_button'] = 'plupload-browse-button2';
|
864 |
$plupload_init['multipart_params']['action'] = 'plupload_action2';
|
865 |
$plupload_init['filters'] = array(array('title' => __('Allowed Files'), 'extensions' => 'crypt'));
|
866 |
?>
|
867 |
+
var updraft_plupload_config2 = <?php echo json_encode($plupload_init); ?>;
|
868 |
var updraft_downloader_nonce = '<?php wp_create_nonce("updraftplus_download"); ?>'
|
869 |
<?php
|
870 |
$overdue = $this->howmany_overdue_crons();
|
871 |
+
if ($overdue >= 4) {
|
872 |
+
?>
|
873 |
+
jQuery(document).ready(function() {
|
874 |
+
setTimeout(function(){ updraft_check_overduecrons(); }, 11000);
|
875 |
});
|
876 |
<?php } ?>
|
877 |
</script>
|
878 |
<?php
|
879 |
}
|
880 |
|
|
|
881 |
private function disk_space_check($space) {
|
882 |
global $updraftplus;
|
883 |
$updraft_dir = $updraftplus->backups_dir_location();
|
884 |
$disk_free_space = @disk_free_space($updraft_dir);
|
885 |
+
if (false == $disk_free_space) return -1;
|
886 |
return ($disk_free_space > $space) ? true : false;
|
887 |
}
|
888 |
|
889 |
+
/**
|
890 |
+
* Adds the settings link under the plugin on the plugin screen.
|
891 |
+
*
|
892 |
+
* @param Array $links Set of links for the plugin, before being filtered
|
893 |
+
* @param String $file File name (relative to the plugin directory)
|
894 |
+
* @return Array filtered results
|
895 |
+
*/
|
896 |
public function plugin_action_links($links, $file) {
|
897 |
+
if (is_array($links) && 'updraftplus/updraftplus.php' == $file) {
|
898 |
$settings_link = '<a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__("Settings", "updraftplus").'</a>';
|
899 |
array_unshift($links, $settings_link);
|
900 |
+
$settings_link = '<a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/").'">'.__("Add-Ons / Pro Support", "updraftplus").'</a>';
|
|
|
|
|
901 |
array_unshift($links, $settings_link);
|
902 |
}
|
903 |
return $links;
|
904 |
}
|
905 |
|
906 |
public function admin_action_upgrade_pluginortheme() {
|
907 |
+
if (isset($_GET['action']) && ('upgrade-plugin' == $_GET['action'] || 'upgrade-theme' == $_GET['action']) && !class_exists('UpdraftPlus_Addon_Autobackup') && !defined('UPDRAFTPLUS_NOADS_B')) {
|
908 |
|
909 |
+
if ('upgrade-plugin' == $_GET['action']) {
|
910 |
if (!current_user_can('update_plugins')) return;
|
911 |
} else {
|
912 |
if (!current_user_can('update_themes')) return;
|
925 |
$submenu_file = 'themes.php';
|
926 |
}
|
927 |
|
928 |
+
include_once(ABSPATH.'wp-admin/admin-header.php');
|
929 |
|
930 |
+
if (!class_exists('UpdraftPlus_Notices')) include_once(UPDRAFTPLUS_DIR.'/includes/updraftplus-notices.php');
|
931 |
global $updraftplus_notices;
|
932 |
$updraftplus_notices->do_notice('autobackup', 'autobackup');
|
933 |
}
|
934 |
}
|
935 |
|
936 |
+
public function show_admin_warning($message, $class = 'updated') {
|
937 |
echo '<div class="updraftmessage '.$class.'">'."<p>$message</p></div>";
|
938 |
}
|
939 |
|
|
|
940 |
public function show_admin_warning_multiple_storage_options() {
|
941 |
$this->show_admin_warning('<strong>UpdraftPlus:</strong> '.__('An error occurred when fetching storage module options: ', 'updraftplus').htmlspecialchars($this->storage_module_option_errors), 'error');
|
942 |
}
|
943 |
|
944 |
+
public function show_admin_warning_unwritable() {
|
945 |
$unwritable_mess = htmlspecialchars(__("The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option).", 'updraftplus'));
|
946 |
$this->show_admin_warning($unwritable_mess, "error");
|
947 |
+
}
|
948 |
|
949 |
public function show_admin_nosettings_warning() {
|
950 |
$this->show_admin_warning('<strong>'.__('Welcome to UpdraftPlus!', 'updraftplus').'</strong> '.__('To make a backup, just press the Backup Now button.', 'updraftplus').' <a href="#" id="updraft-navtab-settings2">'.__('To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab.', 'updraftplus').'</a>', 'updated notice is-dismissible');
|
951 |
}
|
952 |
|
953 |
public function show_admin_warning_execution_time() {
|
954 |
+
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)', 'updraftplus'), (int) @ini_get('max_execution_time'), 90));
|
955 |
}
|
956 |
|
957 |
public function show_admin_warning_disabledcron() {
|
959 |
}
|
960 |
|
961 |
public function show_admin_warning_diskspace() {
|
962 |
+
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue.', 'updraftplus'), '35 MB'));
|
963 |
}
|
964 |
|
965 |
public function show_admin_warning_wordpressversion() {
|
967 |
}
|
968 |
|
969 |
public function show_admin_warning_litespeed() {
|
970 |
+
$this->show_admin_warning('<strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__('Your website is hosted using the %s web server.', 'updraftplus'), 'LiteSpeed').' <a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/faqs/i-am-having-trouble-backing-up-and-my-web-hosting-company-uses-the-litespeed-webserver/").'">'.__('Please consult this FAQ if you have problems backing up.', 'updraftplus').'</a>');
|
971 |
}
|
972 |
|
973 |
public function show_admin_debug_warning() {
|
981 |
return $ret;
|
982 |
}
|
983 |
|
984 |
+
/**
|
985 |
+
* Output authorisation links for any un-authorised Dropbox settings instances
|
986 |
+
*/
|
987 |
public function show_admin_warning_dropbox() {
|
988 |
+
foreach ($this->auth_instance_ids['dropbox'] as $instance_id) {
|
989 |
+
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> <a class="updraft_authlink" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=updraftmethod-dropbox-auth&updraftplus_dropboxauth=doit&updraftplus_instance='.$instance_id.'">'.sprintf(__('Follow this link to authorize access to your %s account (you will not be able to back up to %s without it).', 'updraftplus'), 'Dropbox', 'Dropbox').'</a>', 'updated updraft_authenticate_dropbox');
|
990 |
+
}
|
991 |
}
|
992 |
|
993 |
+
/**
|
994 |
+
* Output authorisation links for any un-authorised OneDrive settings instances
|
995 |
+
*/
|
996 |
public function show_admin_warning_onedrive() {
|
997 |
+
foreach ($this->auth_instance_ids['onedrive'] as $instance_id) {
|
998 |
+
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> <a class="updraft_authlink" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=updraftmethod-onedrive-auth&updraftplus_onedriveauth=doit&updraftplus_instance='.$instance_id.'">'.sprintf(__('Follow this link to authorize access to your %s account (you will not be able to back up to %s without it).', 'updraftplus'), 'OneDrive', 'OneDrive').'</a>', 'updated updraft_authenticate_onedrive');
|
999 |
+
}
|
1000 |
}
|
1001 |
|
1002 |
public function show_admin_warning_updraftvault() {
|
1003 |
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> '.sprintf(__('%s has been chosen for remote storage, but you are not currently connected.', 'updraftplus'), 'UpdraftPlus Vault').' '.__('Go to the remote storage settings in order to connect.', 'updraftplus'), 'updated');
|
1004 |
}
|
1005 |
|
1006 |
+
/**
|
1007 |
+
* Output authorisation links for any un-authorised Google Drive settings instances
|
1008 |
+
*/
|
1009 |
public function show_admin_warning_googledrive() {
|
1010 |
+
foreach ($this->auth_instance_ids['googledrive'] as $instance_id) {
|
1011 |
+
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> <a class="updraft_authlink" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=updraftmethod-googledrive-auth&updraftplus_googleauth=doit&updraftplus_instance='.$instance_id.'">'.sprintf(__('Follow this link to authorize access to your %s account (you will not be able to back up to %s without it).', 'updraftplus'), 'Google Drive', 'Google Drive').'</a>', 'updated updraft_authenticate_googledrive');
|
1012 |
+
}
|
1013 |
}
|
1014 |
|
1015 |
+
/**
|
1016 |
+
* Output authorisation links for any un-authorised Google Cloud settings instances
|
1017 |
+
*/
|
1018 |
public function show_admin_warning_googlecloud() {
|
1019 |
+
foreach ($this->auth_instance_ids['googlecloud'] as $instance_id) {
|
1020 |
+
$this->show_admin_warning('<strong>'.__('UpdraftPlus notice:', 'updraftplus').'</strong> <a class="updraft_authlink" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=updraftmethod-googlecloud-auth&updraftplus_googleauth=doit&updraftplus_instance='.$instance_id.'">'.sprintf(__('Follow this link to authorize access to your %s account (you will not be able to back up to %s without it).', 'updraftplus'), 'Google Cloud', 'Google Cloud').'</a>', 'updated updraft_authenticate_googlecloud');
|
1021 |
+
}
|
1022 |
}
|
1023 |
|
1024 |
+
/**
|
1025 |
+
* This options filter removes ABSPATH off the front of updraft_dir, if it is given absolutely and contained within it
|
1026 |
+
*
|
1027 |
+
* @param string $updraft_dir Directory
|
1028 |
+
* @return string
|
1029 |
+
*/
|
1030 |
public function prune_updraft_dir_prefix($updraft_dir) {
|
1031 |
if ('/' == substr($updraft_dir, 0, 1) || "\\" == substr($updraft_dir, 0, 1) || preg_match('/^[a-zA-Z]:/', $updraft_dir)) {
|
1032 |
$wcd = trailingslashit(WP_CONTENT_DIR);
|
1033 |
if (strpos($updraft_dir, $wcd) === 0) {
|
1034 |
$updraft_dir = substr($updraft_dir, strlen($wcd));
|
1035 |
}
|
|
|
|
|
|
|
|
|
1036 |
}
|
1037 |
return $updraft_dir;
|
1038 |
}
|
1046 |
|
1047 |
if (empty($_REQUEST['timestamp']) || !is_numeric($_REQUEST['timestamp']) || empty($_REQUEST['type'])) exit;
|
1048 |
|
1049 |
+
$findex = empty($_REQUEST['findex']) ? 0 : (int) $_REQUEST['findex'];
|
1050 |
$stage = empty($_REQUEST['stage']) ? '' : $_REQUEST['stage'];
|
1051 |
$file_path = empty($_REQUEST['filepath']) ? '' : $_REQUEST['filepath'];
|
1052 |
|
1161 |
$needs_downloading = false;
|
1162 |
|
1163 |
if (!file_exists($fullpath)) {
|
1164 |
+
// If the file doesn't exist and they're using one of the cloud options, fetch it down from the cloud.
|
1165 |
$needs_downloading = true;
|
1166 |
$updraftplus->log('File does not yet exist locally - needs downloading');
|
1167 |
} elseif ($known_size > 0 && filesize($fullpath) < $known_size) {
|
1168 |
$updraftplus->log("The file was found locally (".filesize($fullpath).") but did not match the size in the backup history ($known_size) - will resume downloading");
|
1169 |
$needs_downloading = true;
|
1170 |
} elseif ($known_size > 0) {
|
1171 |
+
$updraftplus->log('The file was found locally and matched the recorded size from the backup history ('.round($known_size/1024, 1).' KB)');
|
1172 |
} else {
|
1173 |
$updraftplus->log('No file size was found recorded in the backup history. We will assume the local one is complete.');
|
1174 |
$known_size = filesize($fullpath);
|
1251 |
|
1252 |
if ($restore) {
|
1253 |
$service_description = empty($updraftplus->backup_methods[$service]) ? $service : $updraftplus->backup_methods[$service];
|
1254 |
+
$updraftplus->log(__("File is not locally present - needs retrieving from remote storage", 'updraftplus')." ($service_description)", 'notice-restore');
|
1255 |
}
|
1256 |
|
1257 |
$object = $storage_objects_and_ids[$service]['object'];
|
1258 |
|
1259 |
+
if (!$object->supports_feature('multi_options')) {
|
1260 |
+
error_log("UpdraftPlus_Admin::get_remote_file(): Multi-options not supported by: ".$service);
|
1261 |
+
continue;
|
1262 |
}
|
1263 |
|
1264 |
$instance_ids = $storage_objects_and_ids[$service]['instance_settings'];
|
1302 |
/**
|
1303 |
* Downloads a specified file into UD's directory
|
1304 |
*
|
1305 |
+
* @param String $file The name of the file
|
1306 |
+
* @param array $object The object of the service to use to download with. UpdraftPlus_BackupModule.
|
|
|
1307 |
* @return Boolean - Whether the operation succeeded. Inherited from the storage module's download() method. N.B. At the time of writing it looks like not all modules necessarily return true upon success; but false can be relied upon for detecting failure.
|
1308 |
*/
|
1309 |
+
private function download_file($file, $object) {
|
1310 |
|
1311 |
global $updraftplus;
|
1312 |
|
1346 |
|
1347 |
}
|
1348 |
|
1349 |
+
/**
|
1350 |
+
* This is used as a callback
|
1351 |
+
*
|
1352 |
+
* @param Mixed $msg The data to be JSON encoded and sent back
|
1353 |
+
*/
|
1354 |
public function _updraftplus_background_operation_started($msg) {
|
1355 |
global $updraftplus;
|
1356 |
// The extra spaces are because of a bug seen on one server in handling of non-ASCII characters; see HS#11739
|
1380 |
$data_in_get = array('get_log', 'get_fragment');
|
1381 |
|
1382 |
// UpdraftPlus_WPAdmin_Commands extends UpdraftPlus_Commands - i.e. all commands are in there
|
1383 |
+
if (!class_exists('UpdraftPlus_WPAdmin_Commands')) include_once(UPDRAFTPLUS_DIR.'/includes/class-wpadmin-commands.php');
|
1384 |
$commands = new UpdraftPlus_WPAdmin_Commands($this);
|
1385 |
|
1386 |
if (method_exists($commands, $subaction)) {
|
1439 |
/**
|
1440 |
* Run a credentials test for the indicated remote storage module
|
1441 |
*
|
1442 |
+
* @param Array $test_settings The test parameters, including the method itself indicated in the key 'method'
|
1443 |
+
* @param Boolean $return_instead_of_echo Whether to return or echo the results. N.B. More than just the results to echo will be returned
|
|
|
1444 |
* @return Array|Void - the results, if they are being returned (rather than echoed). Keys: 'output' (the output), 'data' (other data)
|
1445 |
*/
|
1446 |
public function do_credentials_test($test_settings, $return_instead_of_echo = false) {
|
1450 |
$objname = "UpdraftPlus_BackupModule_$method";
|
1451 |
|
1452 |
$this->logged = array();
|
1453 |
+
// TODO: Add action for WP HTTP SSL stuff
|
1454 |
set_error_handler(array($this, 'get_php_errors'), E_ALL & ~E_STRICT);
|
1455 |
|
1456 |
if (!class_exists($objname)) include_once(UPDRAFTPLUS_DIR."/methods/$method.php");
|
1458 |
$ret = '';
|
1459 |
$data = null;
|
1460 |
|
1461 |
+
// TODO: Add action for WP HTTP SSL stuff
|
1462 |
if (method_exists($objname, "credentials_test")) {
|
1463 |
$obj = new $objname;
|
1464 |
if ($return_instead_of_echo) ob_start();
|
1483 |
* Delete a backup set, whilst respecting limits on how much to delete in one go
|
1484 |
*
|
1485 |
* @uses remove_backup_set_cleanup()
|
|
|
1486 |
* @param Array $opts - deletion options; with keys backup_timestamp, delete_remote, [remote_delete_limit]
|
|
|
1487 |
* @return Array - as from remove_backup_set_cleanup()
|
1488 |
*/
|
1489 |
public function delete_set($opts) {
|
1491 |
global $updraftplus;
|
1492 |
|
1493 |
$backups = UpdraftPlus_Backup_History::get_history();
|
1494 |
+
$timestamps = (string) $opts['backup_timestamp'];
|
1495 |
|
1496 |
+
$remote_delete_limit = (isset($opts['remote_delete_limit']) && $opts['remote_delete_limit'] > 0) ? (int) $opts['remote_delete_limit'] : PHP_INT_MAX;
|
1497 |
|
1498 |
$timestamps = explode(',', $timestamps);
|
1499 |
$delete_remote = empty($opts['delete_remote']) ? false : true;
|
1533 |
$services = is_string($backups[$timestamp]['service']) ? array($backups[$timestamp]['service']) : $backups[$timestamp]['service'];
|
1534 |
if (is_array($services)) {
|
1535 |
foreach ($services as $service) {
|
1536 |
+
if ($service && 'none' != $service && 'email' != $service) $delete_from_service[] = $service;
|
1537 |
}
|
1538 |
}
|
1539 |
}
|
1546 |
}
|
1547 |
}
|
1548 |
// Delete DB
|
1549 |
+
foreach ($backups[$timestamp] as $key => $value) {
|
1550 |
if ('db' == strtolower(substr($key, 0, 2)) && '-size' != substr($key, -5, 5)) {
|
1551 |
$files_to_delete[$key] = $backups[$timestamp][$key];
|
1552 |
}
|
1601 |
$deleted = $remote_obj->delete($file);
|
1602 |
|
1603 |
if (-1 === $deleted) {
|
1604 |
+
// echo __('Did not know how to delete from this cloud service.', 'updraftplus');
|
1605 |
} elseif (false !== $deleted) {
|
1606 |
$remote_deleted++;
|
1607 |
}
|
1608 |
|
1609 |
+
$itext = $index ? (string) $index : '';
|
1610 |
if ($was_string) {
|
1611 |
unset($backups[$timestamp][$key]);
|
1612 |
if ('db' == strtolower(substr($key, 0, 2))) unset($backups[$timestamp][$key][$index.'-size']);
|
1641 |
/**
|
1642 |
* This function sorts the array of instance ids currently saved so that any instance id that is in both the saved settings and the backup history move to the top of the array, as these are likely to work. Then values that don't appear in the backup history move to the bottom.
|
1643 |
*
|
1644 |
+
* @param String $a - the first instance id
|
1645 |
+
* @param String $b - the second instance id
|
1646 |
+
* @return Integer - returns an integer to indicate what position the $b value should be moved in
|
1647 |
*/
|
1648 |
public function instance_ids_sort($a, $b) {
|
1649 |
if (in_array($a, $this->backups_instance_ids)) {
|
1731 |
));
|
1732 |
}
|
1733 |
|
1734 |
+
/**
|
1735 |
+
* Get information on disk space used by an entity, or by UD's internal directory. Returns as a human-readable string.
|
1736 |
+
*
|
1737 |
+
* @param String $entity - the entity (e.g. 'plugins'; 'all' for all entities, or 'ud' for UD's internal directory)
|
1738 |
+
*
|
1739 |
+
* @return String
|
1740 |
+
*/
|
1741 |
public function get_disk_space_used($entity) {
|
1742 |
global $updraftplus;
|
1743 |
if ('updraft' == $entity) {
|
1747 |
if ('all' == $entity) {
|
1748 |
$total_size = 0;
|
1749 |
foreach ($backupable_entities as $entity => $data) {
|
1750 |
+
// Might be an array
|
1751 |
$basedir = $backupable_entities[$entity];
|
1752 |
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
|
1753 |
$size = $this->recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir, 'numeric');
|
1755 |
}
|
1756 |
return $updraftplus->convert_numeric_size_to_text($total_size);
|
1757 |
} elseif (!empty($backupable_entities[$entity])) {
|
1758 |
+
// Might be an array
|
1759 |
$basedir = $backupable_entities[$entity];
|
1760 |
$dirs = apply_filters('updraftplus_dirlist_'.$entity, $basedir);
|
1761 |
return $this->recursive_directory_size($dirs, $updraftplus->get_exclude($entity), $basedir);
|
1764 |
return __('Error', 'updraftplus');
|
1765 |
}
|
1766 |
|
1767 |
+
/**
|
1768 |
+
* Stop an active backup job
|
1769 |
+
*
|
1770 |
+
* @param String $job_id - job ID of the job to stop
|
1771 |
+
*
|
1772 |
+
* @return Array - information on the outcome of the attempt
|
1773 |
+
*/
|
1774 |
public function activejobs_delete($job_id) {
|
1775 |
|
1776 |
if (preg_match("/^[0-9a-f]{12}$/", $job_id)) {
|
1800 |
|
1801 |
}
|
1802 |
|
1803 |
+
/**
|
1804 |
+
* Input: an array of items
|
1805 |
+
* Each item is in the format: <base>,<timestamp>,<type>(,<findex>)
|
1806 |
+
* The 'base' is not for us: we just pass it straight back
|
1807 |
+
*
|
1808 |
+
* @param array $downloaders Array of Items to download
|
1809 |
+
* @return array
|
1810 |
+
*/
|
1811 |
public function get_download_statuses($downloaders) {
|
1812 |
global $updraftplus;
|
1813 |
$download_status = array();
|
1814 |
foreach ($downloaders as $downloader) {
|
1815 |
+
// prefix, timestamp, entity, index
|
1816 |
if (preg_match('/^([^,]+),(\d+),([-a-z]+|db[0-9]+),(\d+)$/', $downloader, $matches)) {
|
1817 |
$findex = (empty($matches[4])) ? '0' : $matches[4];
|
1818 |
$updraftplus->nonce = dechex($matches[2]).$findex.substr(md5($matches[3]), 0, 3);
|
1834 |
|
1835 |
global $updraftplus;
|
1836 |
|
1837 |
+
$download_status = empty($request['downloaders']) ? array() : $this->get_download_statuses(explode(':', $request['downloaders']));
|
1838 |
|
1839 |
if (!empty($request['oneshot'])) {
|
1840 |
$job_id = get_site_option('updraft_oneshotnonce', false);
|
1928 |
|
1929 |
$potential_log_file = $updraft_dir."/log.".$nonce.".txt";
|
1930 |
|
1931 |
+
if (is_readable($potential_log_file)) {
|
1932 |
|
1933 |
$templog_array = array();
|
1934 |
$log_file = fopen($potential_log_file, "r");
|
1964 |
return $ret_array;
|
1965 |
}
|
1966 |
|
1967 |
+
/**
|
1968 |
+
* Get a count for the number of overdue cron jobs
|
1969 |
+
*
|
1970 |
+
* @return Integer - how many cron jobs are overdue
|
1971 |
+
*/
|
1972 |
public function howmany_overdue_crons() {
|
1973 |
$how_many_overdue = 0;
|
1974 |
if (function_exists('_get_cron_array') || (is_file(ABSPATH.WPINC.'/cron.php') && include_once(ABSPATH.WPINC.'/cron.php') && function_exists('_get_cron_array'))) {
|
1976 |
if (is_array($crons)) {
|
1977 |
$timenow = time();
|
1978 |
foreach ($crons as $jt => $job) {
|
1979 |
+
if ($jt < $timenow) $how_many_overdue++;
|
|
|
|
|
1980 |
}
|
1981 |
}
|
1982 |
}
|
1988 |
if (0 == error_reporting()) return true;
|
1989 |
$logline = $updraftplus->php_error_to_logline($errno, $errstr, $errfile, $errline);
|
1990 |
if (false !== $logline) $this->logged[] = $logline;
|
1991 |
+
// Don't pass it up the chain (since it's going to be output to the user always)
|
1992 |
return true;
|
1993 |
}
|
1994 |
|
2014 |
} elseif (preg_match('/^downloaded:(\d+):(.*)$/', $file, $matches) && file_exists($matches[2])) {
|
2015 |
$response['p'] = 100;
|
2016 |
$response['f'] = $matches[2];
|
2017 |
+
$response['s'] = (int) $matches[1];
|
2018 |
+
$response['t'] = (int) $matches[1];
|
2019 |
$response['m'] = __('File ready.', 'updraftplus');
|
2020 |
if ('db' != substr($type, 0, 2)) $response['can_show_contents'] = true;
|
2021 |
} elseif (preg_match('/^downloading:(\d+):(.*)$/', $file, $matches) && file_exists($matches[2])) {
|
2022 |
// Convert to bytes
|
2023 |
$response['f'] = $matches[2];
|
2024 |
+
$total_size = (int) max($matches[1], 1);
|
2025 |
$cur_size = filesize($matches[2]);
|
2026 |
$response['s'] = $cur_size;
|
2027 |
$file_age = time() - filemtime($matches[2]);
|
2046 |
return $uploads;
|
2047 |
}
|
2048 |
|
2049 |
+
/**
|
2050 |
+
* We do actually want to over-write
|
2051 |
+
*
|
2052 |
+
* @param String $dir Directory
|
2053 |
+
* @param String $name Name
|
2054 |
+
* @param String $ext File extension
|
2055 |
+
* @return String
|
2056 |
+
*/
|
2057 |
public function unique_filename_callback($dir, $name, $ext) {
|
2058 |
return $name.$ext;
|
2059 |
}
|
2105 |
}
|
2106 |
|
2107 |
// If this was the chunk, then we should instead be concatenating onto the final file
|
2108 |
+
if (isset($_POST['chunks']) && isset($_POST['chunk']) && preg_match('/^[0-9]+$/', $_POST['chunk'])) {
|
2109 |
$final_file = basename($_POST['name']);
|
2110 |
if (!rename($status['file'], $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp')) {
|
2111 |
@unlink($status['file']);
|
2117 |
// Final chunk? If so, then stich it all back together
|
2118 |
if ($_POST['chunk'] == $_POST['chunks']-1) {
|
2119 |
if ($wh = fopen($updraft_dir.'/'.$final_file, 'wb')) {
|
2120 |
+
for ($i=0; $i<$_POST['chunks']; $i++) {
|
2121 |
$rf = $updraft_dir.'/'.$final_file.'.'.$i.'.zip.tmp';
|
2122 |
if ($rh = fopen($rf, 'rb')) {
|
2123 |
+
while ($line = fread($rh, 32768)) {
|
2124 |
+
fwrite($wh, $line);
|
2125 |
+
}
|
2126 |
fclose($rh);
|
2127 |
@unlink($rf);
|
2128 |
}
|
2158 |
$response['dm'] = sprintf(__('This backup was created by %s, and can be imported.', 'updraftplus'), $accepted);
|
2159 |
} else {
|
2160 |
@unlink($status['file']);
|
2161 |
+
echo json_encode(array('e' => sprintf(__('Error: %s', 'updraftplus'), __('Bad filename format - this does not look like a file created by UpdraftPlus', 'updraftplus'))));
|
2162 |
exit;
|
2163 |
}
|
2164 |
} else {
|
2166 |
$type = isset($matches[3]) ? $matches[3] : '';
|
2167 |
if (!preg_match('/^log\.[a-f0-9]{12}\.txt/', $file) && 'db' != $type && !isset($backupable_entities[$type])) {
|
2168 |
@unlink($status['file']);
|
2169 |
+
echo json_encode(array('e' => sprintf(__('Error: %s', 'updraftplus'), sprintf(__('This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?', 'updraftplus'), htmlspecialchars($type)))));
|
2170 |
exit;
|
2171 |
}
|
2172 |
}
|
2178 |
exit;
|
2179 |
}
|
2180 |
|
2181 |
+
/**
|
2182 |
+
* Database decrypter
|
2183 |
+
*/
|
2184 |
public function plupload_action2() {
|
2185 |
|
2186 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
2203 |
$farray['type'] = 'application/octet-stream';
|
2204 |
|
2205 |
if (isset($_POST['chunks'])) {
|
2206 |
+
// $farray['ext'] = 'zip';
|
2207 |
+
// $farray['type'] = 'application/zip';
|
2208 |
} else {
|
2209 |
$farray['unique_filename_callback'] = array($this, 'unique_filename_callback');
|
2210 |
}
|
2222 |
}
|
2223 |
|
2224 |
// If this was the chunk, then we should instead be concatenating onto the final file
|
2225 |
+
if (isset($_POST['chunks']) && isset($_POST['chunk']) && preg_match('/^[0-9]+$/', $_POST['chunk'])) {
|
2226 |
$final_file = basename($_POST['name']);
|
2227 |
rename($status['file'], $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp');
|
2228 |
$status['file'] = $updraft_dir.'/'.$final_file.'.'.$_POST['chunk'].'.zip.tmp';
|
2230 |
// Final chunk? If so, then stich it all back together
|
2231 |
if ($_POST['chunk'] == $_POST['chunks']-1) {
|
2232 |
if ($wh = fopen($updraft_dir.'/'.$final_file, 'wb')) {
|
2233 |
+
for ($i=0; $i<$_POST['chunks']; $i++) {
|
2234 |
$rf = $updraft_dir.'/'.$final_file.'.'.$i.'.zip.tmp';
|
2235 |
if ($rh = fopen($rf, 'rb')) {
|
2236 |
+
while ($line = fread($rh, 32768)) {
|
2237 |
+
fwrite($wh, $line);
|
2238 |
+
}
|
2239 |
fclose($rh);
|
2240 |
@unlink($rf);
|
2241 |
}
|
2259 |
}
|
2260 |
|
2261 |
// send the uploaded file url in response
|
|
|
2262 |
echo 'OK:'.$file;
|
2263 |
exit;
|
2264 |
}
|
2265 |
|
2266 |
+
/**
|
2267 |
+
* Include the settings header template
|
2268 |
+
*/
|
2269 |
public function settings_header() {
|
2270 |
$this->include_template('wp-admin/settings/header.php');
|
2271 |
}
|
2281 |
|
2282 |
global $updraftplus;
|
2283 |
|
2284 |
+
/**
|
2285 |
+
* We use request here because the initial restore is triggered by a POSTed form. we then may need to obtain credential for the WP_Filesystem. to do this WP outputs a form, but we don't pass our parameters via that. So the values are passed back in as GET parameters.
|
2286 |
+
*/
|
2287 |
+
if (isset($_REQUEST['action']) && (('updraft_restore' == $_REQUEST['action'] && isset($_REQUEST['backup_timestamp'])) || ('updraft_restore_continue' == $_REQUEST['action'] && !empty($_REQUEST['restoreid'])))) {
|
|
|
|
|
|
|
2288 |
|
2289 |
$is_continuation = ('updraft_restore_continue' == $_REQUEST['action']) ? true : false;
|
2290 |
|
2316 |
$backup_success = false;
|
2317 |
}
|
2318 |
|
2319 |
+
if (empty($updraftplus->errors) && true === $backup_success) {
|
2320 |
+
// TODO: Deal with the case of some of the work having been deferred
|
2321 |
// If we restored the database, then that will have out-of-date information which may confuse the user - so automatically re-scan for them.
|
2322 |
UpdraftPlus_Backup_History::rebuild();
|
2323 |
echo '<p><strong>';
|
2344 |
echo '<strong>'.__('Actions', 'updraftplus').':</strong> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
2345 |
return;
|
2346 |
} elseif (false === $backup_success) {
|
2347 |
+
// This means, "not yet - but stay on the page because we may be able to do it later, e.g. if the user types in the requested information"
|
2348 |
echo '<p>';
|
2349 |
$updraftplus->log_e('Restore failed...');
|
2350 |
echo '</p>';
|
2380 |
|
2381 |
if (isset($_GET['message'])) $this->show_admin_warning(htmlspecialchars($_GET['message']));
|
2382 |
|
2383 |
+
if (isset($_GET['action']) && 'updraft_create_backup_dir' == $_GET['action'] && isset($_GET['nonce']) && wp_verify_nonce($_GET['nonce'], 'create_backup_dir')) {
|
2384 |
$created = $this->create_backup_dir();
|
2385 |
if (is_wp_error($created)) {
|
2386 |
echo '<p>'.__('Backup directory could not be created', 'updraftplus').'...<br>';
|
2389 |
echo '<li>'.htmlspecialchars($msg).'</li>';
|
2390 |
}
|
2391 |
echo '</ul></p>';
|
2392 |
+
} elseif (false !== $created) {
|
2393 |
echo '<p>'.__('Backup directory successfully created.', 'updraftplus').'</p><br>';
|
2394 |
}
|
2395 |
echo '<b>'.__('Actions', 'updraftplus').':</b> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
2425 |
// Opens a div, which needs closing later
|
2426 |
if (isset($_GET['updraft_restore_success'])) {
|
2427 |
|
2428 |
+
if (get_template() === 'optimizePressTheme' || is_plugin_active('optimizePressPlugin') || is_plugin_active_for_network('optimizePressPlugin')) {
|
2429 |
+
$this->show_admin_warning("<a href='https://optimizepress.zendesk.com/hc/en-us/articles/203699826-Update-URL-References-after-moving-domain' target='_blank'>" . __("OptimizePress 2.0 encodes its contents, so search/replace does not work.", "updraftplus") . ' ' . __("To fix this problem go here.", "updraftplus") . "</a>", "notice notice-warning");
|
2430 |
}
|
2431 |
+
$success_advert = (isset($_GET['pval']) && 0 == $_GET['pval'] && !$updraftplus->have_addons) ? '<p>'.__('For even more features and personal support, check out ', 'updraftplus').'<strong><a href="'.apply_filters("updraftplus_com_link", 'https://updraftplus.com/shop/updraftplus-premium/').'" target="_blank">UpdraftPlus Premium</a>.</strong></p>' : "";
|
2432 |
|
2433 |
echo "<div class=\"updated backup-restored\"><span><strong>".__('Your backup has been restored.', 'updraftplus').'</strong></span><br>';
|
2434 |
// Unnecessary - will be advised of this below
|
2435 |
+
// if (2 == $_GET['updraft_restore_success']) echo ' '.__('Your old (themes, uploads, plugins, whatever) directories have been retained with "-old" appended to their name. Remove them when you are satisfied that the backup worked properly.');
|
2436 |
echo $success_advert;
|
2437 |
$include_deleteform_div = false;
|
2438 |
|
2439 |
}
|
2440 |
|
|
|
|
|
2441 |
if ($this->scan_old_dirs(true)) $this->print_delete_old_dirs_form(true, $include_deleteform_div);
|
2442 |
|
2443 |
// Close the div opened by the earlier section
|
2444 |
if (isset($_GET['updraft_restore_success'])) echo '</div>';
|
2445 |
|
2446 |
+
if (empty($success_advert) && empty($this->no_settings_warning)) {
|
2447 |
|
2448 |
+
if (!class_exists('UpdraftPlus_Notices')) include_once(UPDRAFTPLUS_DIR.'/includes/updraftplus-notices.php');
|
2449 |
global $updraftplus_notices;
|
2450 |
$updraftplus_notices->do_notice();
|
2451 |
}
|
2452 |
|
2453 |
if (!$updraftplus->memory_check(64)) {
|
2454 |
+
// HS8390 - A case where UpdraftPlus::memory_check_current() returns -1
|
2455 |
+
$memory_check_current = $updraftplus->memory_check_current();
|
2456 |
+
if ($memory_check_current > 0) {
|
2457 |
+
?>
|
2458 |
+
<div class="updated memory-limit"><?php _e('Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary).', 'updraftplus');?> <?php _e('Current limit is:', 'updraftplus');?> <?php echo $updraftplus->memory_check_current(); ?> MB</div>
|
2459 |
+
<?php }
|
2460 |
+
}
|
2461 |
|
2462 |
|
2463 |
if (!empty($updraftplus->errors)) {
|
2475 |
|
2476 |
?>
|
2477 |
|
2478 |
+
<?php
|
2479 |
|
2480 |
$tabflag = 1;
|
2481 |
|
2482 |
+
if (isset($_REQUEST['tab'])) {
|
2483 |
+
switch ($_REQUEST['tab']) {
|
2484 |
+
case 'status':
|
2485 |
+
$tabflag = 1;
|
2486 |
+
break;
|
2487 |
+
case 'backups':
|
2488 |
+
$tabflag = 2;
|
2489 |
+
break;
|
2490 |
+
case 'settings':
|
2491 |
+
$tabflag = 3;
|
2492 |
+
break;
|
2493 |
+
case 'expert':
|
2494 |
+
$tabflag = 4;
|
2495 |
+
break;
|
2496 |
+
case 'addons':
|
2497 |
+
$tabflag = 5;
|
2498 |
+
break;
|
2499 |
+
default:
|
2500 |
+
$tabflag = 1;
|
2501 |
}
|
2502 |
}
|
2503 |
|
2573 |
}
|
2574 |
|
2575 |
$restore_jobdata = $this->restore_in_progress_jobdata;
|
2576 |
+
$seconds_ago = time() - (int) $restore_jobdata['job_time_ms'];
|
2577 |
$minutes_ago = floor($seconds_ago/60);
|
2578 |
$seconds_ago = $seconds_ago - $minutes_ago*60;
|
2579 |
$time_ago = sprintf(__("%s minutes, %s seconds", 'updraftplus'), $minutes_ago, $seconds_ago);
|
2591 |
|
2592 |
}
|
2593 |
|
2594 |
+
/**
|
2595 |
+
* Return widgetry for the 'backup now' modal
|
2596 |
+
*
|
2597 |
+
* @return String
|
2598 |
+
*/
|
2599 |
public function backupnow_modal_contents() {
|
2600 |
+
return $this->backup_now_widgetry();
|
|
|
|
|
|
|
|
|
|
|
2601 |
}
|
2602 |
|
2603 |
private function backup_now_widgetry() {
|
2610 |
|
2611 |
$ret .= '<div id="backupnow_database_moreoptions" class="updraft-hidden" style="display:none;">';
|
2612 |
|
2613 |
+
$premium_link = apply_filters('updraftplus_com_link', 'https://updraftplus.com/landing/updraftplus-premium');
|
2614 |
|
2615 |
$free_ret = '<em>'.__('All WordPress tables will be backed up.', 'updraftplus').' <a href="'.$premium_link.'">'. __('With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too.', 'updraftplus').'</a></em>';
|
2616 |
|
2629 |
return $ret;
|
2630 |
}
|
2631 |
|
2632 |
+
/**
|
2633 |
+
* Also used by the auto-backups add-on
|
2634 |
+
*
|
2635 |
+
* @param Boolean $wide_format Whether to return data in a wide format
|
2636 |
+
* @param Boolean $print_active_jobs Whether to include currently active jobs
|
2637 |
+
* @return String - the HTML output
|
2638 |
+
*/
|
2639 |
public function render_active_jobs_and_log_table($wide_format = false, $print_active_jobs = true) {
|
2640 |
?>
|
2641 |
<table class="form-table" id="updraft_activejobs_table">
|
2642 |
|
2643 |
<?php $active_jobs = ($print_active_jobs) ? $this->print_active_jobs() : '';?>
|
2644 |
<tr id="updraft_activejobsrow" class="<?php
|
2645 |
+
if (!$active_jobs && !$wide_format) {
|
2646 |
+
echo 'hidden';
|
2647 |
+
}
|
2648 |
+
if ($wide_format) {
|
2649 |
+
echo ".minimum-height";
|
2650 |
+
}
|
2651 |
?>">
|
2652 |
<?php if ($wide_format) { ?>
|
2653 |
<td id="updraft_activejobs" colspan="2">
|
2677 |
</tr>
|
2678 |
|
2679 |
<?php
|
2680 |
+
// Currently disabled - not sure who we want to show this to
|
2681 |
if (1==0 && !defined('UPDRAFTPLUS_NOADS_B')) {
|
2682 |
$feed = $updraftplus->get_updraftplus_rssfeed();
|
2683 |
if (is_a($feed, 'SimplePie')) {
|
2687 |
echo '<li>';
|
2688 |
echo '<a href="'.esc_attr($item->get_permalink()).'">';
|
2689 |
echo htmlspecialchars($item->get_title());
|
2690 |
+
// D, F j, Y H:i
|
2691 |
echo "</a> (".htmlspecialchars($item->get_date('j F Y')).")";
|
2692 |
echo '</li>';
|
2693 |
}
|
2699 |
<?php
|
2700 |
}
|
2701 |
|
2702 |
+
/**
|
2703 |
+
* Output directly a link allowing download of the most recently modified log file
|
2704 |
+
*/
|
2705 |
private function most_recently_modified_log_link() {
|
2706 |
|
2707 |
global $updraftplus;
|
2708 |
list($mod_time, $log_file, $nonce) = $updraftplus->last_modified_log();
|
2709 |
|
2710 |
?>
|
2711 |
+
<a href="?page=updraftplus&action=downloadlatestmodlog&wpnonce=<?php echo wp_create_nonce('updraftplus_download'); ?>" <?php if (!$mod_time) echo 'style="display:none;"'; ?> class="updraft-log-link" onclick="event.preventDefault(); updraft_popuplog('');"><?php _e('Download most recently modified log file', 'updraftplus');?></a>
|
2712 |
<?php
|
2713 |
}
|
2714 |
|
2725 |
}
|
2726 |
|
2727 |
private function print_delete_old_dirs_form($include_blurb = true, $include_div = true) {
|
2728 |
+
if ($include_blurb) {
|
2729 |
if ($include_div) {
|
2730 |
echo '<div id="updraft_delete_old_dirs_pagediv" class="updated delete-old-directories">';
|
2731 |
}
|
2741 |
if ($include_blurb && $include_div) echo '</div>';
|
2742 |
}
|
2743 |
|
2744 |
+
/**
|
2745 |
+
* Return cron status information about a specified in-progress job
|
2746 |
+
*
|
2747 |
+
* @param Boolean|String $job_id - the job to get information about; or, if not specified, all jobs
|
2748 |
+
*
|
2749 |
+
* @return Array|Boolean - the requested information, or false if it was not found. Format differs depending on whether info on all jobs, or a single job, was requested.
|
2750 |
+
*/
|
2751 |
public function get_cron($job_id = false) {
|
2752 |
+
|
2753 |
$cron = get_option('cron');
|
2754 |
if (!is_array($cron)) $cron = array();
|
2755 |
if (false === $job_id) return $cron;
|
2756 |
|
2757 |
foreach ($cron as $time => $job) {
|
2758 |
+
if (!isset($job['updraft_backup_resume'])) continue;
|
2759 |
+
foreach ($job['updraft_backup_resume'] as $hook => $info) {
|
2760 |
+
if (isset($info['args'][1]) && $job_id == $info['args'][1]) {
|
2761 |
+
global $updraftplus;
|
2762 |
+
$jobdata = $updraftplus->jobdata_getarray($job_id);
|
2763 |
+
return is_array($jobdata) ? array($time, $jobdata) : false;
|
|
|
2764 |
}
|
2765 |
}
|
2766 |
}
|
2767 |
}
|
2768 |
|
2769 |
+
/**
|
2770 |
+
* Print active Jobs
|
2771 |
+
*
|
2772 |
+
* @param boolean $this_job_only A value for $this_job_only also causes something to always be returned (to allow detection of the job having started on the front-end)
|
2773 |
+
* @return [type] [description]
|
2774 |
+
*/
|
2775 |
private function print_active_jobs($this_job_only = false) {
|
2776 |
$cron = $this->get_cron();
|
|
|
2777 |
$ret = '';
|
2778 |
|
2779 |
foreach ($cron as $time => $job) {
|
2780 |
if (isset($job['updraft_backup_resume'])) {
|
2781 |
foreach ($job['updraft_backup_resume'] as $hook => $info) {
|
2782 |
if (isset($info['args'][1])) {
|
|
|
2783 |
$job_id = $info['args'][1];
|
2784 |
if (false === $this_job_only || $job_id == $this_job_only) {
|
2785 |
$ret .= $this->print_active_job($job_id, false, $time, $info['args'][0]);
|
2798 |
}
|
2799 |
}
|
2800 |
|
|
|
2801 |
return $ret;
|
2802 |
}
|
2803 |
|
2810 |
|
2811 |
if (false == apply_filters('updraftplus_print_active_job_continue', true, $is_oneshot, $next_resumption, $jobdata)) return '';
|
2812 |
|
|
|
2813 |
if (!isset($jobdata['backup_time'])) return '';
|
2814 |
|
2815 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
2816 |
|
2817 |
+
$began_at = (isset($jobdata['backup_time'])) ? get_date_from_gmt(gmdate('Y-m-d H:i:s', (int) $jobdata['backup_time']), 'D, F j, Y H:i') : '?';
|
2818 |
|
2819 |
$jobstatus = empty($jobdata['jobstatus']) ? 'unknown' : $jobdata['jobstatus'];
|
2820 |
$stage = 0;
|
2821 |
switch ($jobstatus) {
|
2822 |
+
// Stage 0
|
2823 |
case 'begun':
|
2824 |
$curstage = __('Backup begun', 'updraftplus');
|
2825 |
+
break;
|
2826 |
+
// Stage 1
|
2827 |
case 'filescreating':
|
2828 |
$stage = 1;
|
2829 |
$curstage = __('Creating file backup zips', 'updraftplus');
|
2833 |
if (strlen($sdescrip) > 20 && isset($jobdata['filecreating_substatus']['e']) && is_array($jobdata['filecreating_substatus']['e']) && isset($backupable_entities[$jobdata['filecreating_substatus']['e']]['shortdescription'])) $sdescrip = $backupable_entities[$jobdata['filecreating_substatus']['e']]['shortdescription'];
|
2834 |
$curstage .= ' ('.$sdescrip.')';
|
2835 |
if (isset($jobdata['filecreating_substatus']['i']) && isset($jobdata['filecreating_substatus']['t'])) {
|
2836 |
+
$stage = min(2, 1 + ($jobdata['filecreating_substatus']['i']/max($jobdata['filecreating_substatus']['t'], 1)));
|
2837 |
}
|
2838 |
}
|
2839 |
+
break;
|
2840 |
case 'filescreated':
|
2841 |
$stage = 2;
|
2842 |
$curstage = __('Created file backup zips', 'updraftplus');
|
2843 |
+
break;
|
2844 |
+
// Stage 4
|
|
|
2845 |
case 'clouduploading':
|
2846 |
$stage = 4;
|
2847 |
$curstage = __('Uploading files to remote storage', 'updraftplus');
|
2848 |
if (isset($jobdata['uploading_substatus']['t']) && isset($jobdata['uploading_substatus']['i'])) {
|
2849 |
+
$t = max((int) $jobdata['uploading_substatus']['t'], 1);
|
2850 |
$i = min($jobdata['uploading_substatus']['i']/$t, 1);
|
2851 |
$p = min($jobdata['uploading_substatus']['p'], 1);
|
2852 |
$pd = $i + $p/$t;
|
2853 |
$stage = 4 + $pd;
|
2854 |
$curstage .= ' '.sprintf(__('(%s%%, file %s of %s)', 'updraftplus'), floor(100*$pd), $jobdata['uploading_substatus']['i']+1, $t);
|
2855 |
}
|
2856 |
+
break;
|
2857 |
case 'pruning':
|
2858 |
$stage = 5;
|
2859 |
$curstage = __('Pruning old backup sets', 'updraftplus');
|
2860 |
+
break;
|
2861 |
case 'resumingforerrors':
|
2862 |
$stage = -1;
|
2863 |
$curstage = __('Waiting until scheduled time to retry because of errors', 'updraftplus');
|
2864 |
+
break;
|
2865 |
+
// Stage 6
|
2866 |
case 'finished':
|
2867 |
$stage = 6;
|
2868 |
$curstage = __('Backup finished', 'updraftplus');
|
2869 |
+
break;
|
2870 |
default:
|
2871 |
+
// Database creation and encryption occupies the space from 2 to 4. Databases are created then encrypted, then the next databae is created/encrypted, etc.
|
|
|
2872 |
if ('dbcreated' == substr($jobstatus, 0, 9)) {
|
2873 |
$jobstatus = 'dbcreated';
|
2874 |
$whichdb = substr($jobstatus, 9);
|
2893 |
if (!empty($jobdata['dbcreating_substatus']['t'])) {
|
2894 |
$curstage .= ' ('.sprintf(__('table: %s', 'updraftplus'), $jobdata['dbcreating_substatus']['t']).')';
|
2895 |
if (!empty($jobdata['dbcreating_substatus']['i']) && !empty($jobdata['dbcreating_substatus']['a'])) {
|
2896 |
+
$substage = max(0.001, ($jobdata['dbcreating_substatus']['i'] / max($jobdata['dbcreating_substatus']['a'], 1)));
|
2897 |
$stage += $substage * $perdbspace * 0.5;
|
2898 |
}
|
2899 |
}
|
2925 |
foreach ($time_passed as $run => $passed) {
|
2926 |
if (isset($runs_started[$run])) {
|
2927 |
$time_ago = microtime(true) - ($runs_started[$run] + $time_passed[$run]);
|
2928 |
+
if ($time_ago < $last_checkin_ago || -1 == $last_checkin_ago) $last_checkin_ago = $time_ago;
|
2929 |
}
|
2930 |
}
|
2931 |
}
|
2932 |
|
2933 |
+
$next_res_after = (int) $time-time();
|
2934 |
$next_res_txt = ($is_oneshot) ? '' : ' - '.sprintf(__("next resumption: %d (after %ss)", 'updraftplus'), $next_resumption, $next_res_after). ' ';
|
2935 |
$last_activity_txt = ($last_checkin_ago >= 0) ? ' - '.sprintf(__('last activity: %ss ago', 'updraftplus'), floor($last_checkin_ago)).' ' : '';
|
2936 |
|
2947 |
|
2948 |
if (!empty($jobdata['is_autobackup'])) $ret .= ' isautobackup';
|
2949 |
|
2950 |
+
$ret .= '" data-jobid="'.$job_id.'" data-lastactivity="'.(int) $last_checkin_ago.'" data-nextresumption="'.$next_resumption.'" data-nextresumptionafter="'.$next_res_after.'" title="'.esc_attr(sprintf(__('Job ID: %s', 'updraftplus'), $job_id)).$title_info.'">'.$began_at.'</span> ';
|
2951 |
|
2952 |
$ret .= $show_inline_info;
|
2953 |
$ret .= '- <a data-jobid="'.$job_id.'" href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus&action=downloadlog&updraftplus_backup_nonce='.$job_id.'" class="updraft-log-link">'.__('show log', 'updraftplus').'</a>';
|
2966 |
|
2967 |
$ret .= '<div class="curstage">';
|
2968 |
$ret .= htmlspecialchars($curstage);
|
2969 |
+
// we need to add this data-progress attribute in order to be able to update the progress bar in UDC
|
2970 |
$ret .= '<div class="updraft_percentage" data-info="'.esc_attr($curstage).'" data-progress="'.(($stage>0) ? (ceil((100/6)*$stage)) : '0').'" style="height: 100%; width:'.(($stage>0) ? (ceil((100/6)*$stage)) : '0').'%"></div>';
|
2971 |
$ret .= '</div></div>';
|
2972 |
|
2977 |
}
|
2978 |
|
2979 |
private function delete_old_dirs_go($show_return = true) {
|
2980 |
+
echo $show_return ? '<h1>UpdraftPlus - '.__('Remove old directories', 'updraftplus').'</h1>' : '<h2>'.__('Remove old directories', 'updraftplus').'</h2>';
|
2981 |
|
2982 |
if ($this->delete_old_dirs()) {
|
2983 |
echo '<p>'.__('Old directories successfully removed.', 'updraftplus').'</p><br>';
|
2987 |
if ($show_return) echo '<b>'.__('Actions', 'updraftplus').':</b> <a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__('Return to UpdraftPlus Configuration', 'updraftplus').'</a>';
|
2988 |
}
|
2989 |
|
2990 |
+
/**
|
2991 |
+
* deletes the -old directories that are created when a backup is restored.
|
2992 |
+
*
|
2993 |
+
* @return String. Can also exit (something we ought to probably review)
|
2994 |
+
*/
|
2995 |
private function delete_old_dirs() {
|
2996 |
global $wp_filesystem, $updraftplus;
|
2997 |
+
$credentials = request_filesystem_credentials(wp_nonce_url(UpdraftPlus_Options::admin_page_url()."?page=updraftplus&action=updraft_delete_old_dirs", 'updraftplus-credentialtest-nonce'));
|
2998 |
WP_Filesystem($credentials);
|
2999 |
+
if ($wp_filesystem->errors->get_error_code()) {
|
3000 |
+
foreach ($wp_filesystem->errors->get_error_messages() as $message) show_message($message);
|
3001 |
+
exit;
|
|
|
3002 |
}
|
3003 |
// From WP_CONTENT_DIR - which contains 'themes'
|
3004 |
$ret = $this->delete_old_dirs_dir($wp_filesystem->wp_content_dir());
|
3005 |
|
3006 |
$updraft_dir = $updraftplus->backups_dir_location();
|
3007 |
if ($updraft_dir) {
|
3008 |
+
$ret4 = $updraft_dir ? $this->delete_old_dirs_dir($updraft_dir, false) : true;
|
3009 |
} else {
|
3010 |
$ret4 = true;
|
3011 |
}
|
3012 |
|
|
|
3013 |
$plugs = untrailingslashit($wp_filesystem->wp_plugins_dir());
|
3014 |
if ($wp_filesystem->is_dir($plugs.'-old')) {
|
3015 |
+
echo "<strong>".__('Delete', 'updraftplus').": </strong>plugins-old: ";
|
3016 |
if (!$wp_filesystem->delete($plugs.'-old', true)) {
|
3017 |
$ret3 = false;
|
3018 |
+
echo "<strong>".__('Failed', 'updraftplus')."</strong><br>";
|
3019 |
} else {
|
3020 |
$ret3 = true;
|
3021 |
+
echo "<strong>".__('OK', 'updraftplus')."</strong><br>";
|
3022 |
}
|
3023 |
} else {
|
3024 |
$ret3 = true;
|
3044 |
foreach ($list as $item) {
|
3045 |
$name = (is_array($item)) ? $item['name'] : $item;
|
3046 |
if ("-old" == substr($name, -4, 4)) {
|
3047 |
+
// recursively delete
|
3048 |
print "<strong>".__('Delete', 'updraftplus').": </strong>".htmlspecialchars($name).": ";
|
3049 |
|
3050 |
if ($wpfs) {
|
3067 |
return $ret;
|
3068 |
}
|
3069 |
|
3070 |
+
/**
|
3071 |
+
* The aim is to get a directory that is writable by the webserver, because that's the only way we can create zip files
|
3072 |
+
*
|
3073 |
+
* @return Boolean|WP_Error true if successful, otherwise false or a WP_Error
|
3074 |
+
*/
|
3075 |
private function create_backup_dir() {
|
3076 |
|
3077 |
global $wp_filesystem, $updraftplus;
|
3094 |
|
3095 |
if (!$wp_filesystem->is_dir($default_backup_dir) && !$wp_filesystem->mkdir($default_backup_dir, 0775)) {
|
3096 |
$wperr = new WP_Error;
|
3097 |
+
if ($wp_filesystem->errors->get_error_code()) {
|
3098 |
foreach ($wp_filesystem->errors->get_error_messages() as $message) {
|
3099 |
$wperr->add('mkdir_error', $message);
|
3100 |
}
|
3101 |
+
return $wperr;
|
3102 |
} else {
|
3103 |
return new WP_Error('mkdir_error', __('The request to the filesystem to create the directory failed.', 'updraftplus'));
|
3104 |
}
|
3126 |
return true;
|
3127 |
}
|
3128 |
|
3129 |
+
/**
|
3130 |
+
* scans the content dir to see if any -old dirs are present
|
3131 |
+
*
|
3132 |
+
* @param Boolean $print_as_comment Echo information in an HTML comment
|
3133 |
+
* @return Boolean
|
3134 |
+
*/
|
3135 |
private function scan_old_dirs($print_as_comment = false) {
|
3136 |
global $updraftplus;
|
3137 |
$dirs = scandir(untrailingslashit(WP_CONTENT_DIR));
|
3144 |
return true;
|
3145 |
}
|
3146 |
}
|
3147 |
+
// No need to scan ABSPATH - we don't backup there
|
3148 |
if (is_dir(untrailingslashit(WP_PLUGIN_DIR).'-old')) {
|
3149 |
if ($print_as_comment) echo '<!--'.htmlspecialchars(untrailingslashit(WP_PLUGIN_DIR).'-old').'-->';
|
3150 |
return true;
|
3154 |
|
3155 |
/**
|
3156 |
* Outputs html for a storage method using the parameters passed in, this version should be removed when all remote storages use the multi version
|
3157 |
+
*
|
3158 |
+
* @param String $method a list of methods to be used when
|
3159 |
+
* @param String $header the table header content
|
3160 |
+
* @param String $contents the table contents
|
3161 |
*/
|
3162 |
public function storagemethod_row($method, $header, $contents) {
|
3163 |
?>
|
3169 |
}
|
3170 |
|
3171 |
/**
|
3172 |
+
* Outputs html for a storage method using the parameters passed in, this version of the method is compatible with multi storage options
|
3173 |
+
*
|
3174 |
+
* @param string $classes a list of classes to be used when
|
3175 |
+
* @param string $header the table header content
|
3176 |
+
* @param string $contents the table contents
|
3177 |
*/
|
3178 |
public function storagemethod_row_multi($classes, $header, $contents) {
|
3179 |
?>
|
3183 |
</tr>
|
3184 |
<?php
|
3185 |
}
|
3186 |
+
|
3187 |
+
/**
|
3188 |
+
* Returns html for a storage method using the parameters passed in, this version of the method is compatible with multi storage options
|
3189 |
+
*
|
3190 |
+
* @param string $classes a list of classes to be used when
|
3191 |
+
* @param string $header the table header content
|
3192 |
+
* @param string $contents the table contents
|
3193 |
+
* @return string handlebars html template
|
3194 |
+
*/
|
3195 |
+
public function get_storagemethod_row_multi_configuration_template($classes, $header, $contents) {
|
3196 |
+
return '<tr class="'.esc_attr($classes).'">
|
3197 |
+
<th>'.$header.'</th>
|
3198 |
+
<td>'.$contents.'</td>
|
3199 |
+
</tr>';
|
3200 |
+
}
|
3201 |
|
3202 |
+
/**
|
3203 |
+
* Get HTML suitable for the admin area for the status of the last backup
|
3204 |
+
*
|
3205 |
+
* @return String
|
3206 |
+
*/
|
3207 |
public function last_backup_html() {
|
3208 |
|
3209 |
global $updraftplus;
|
3213 |
if ($updraft_last_backup) {
|
3214 |
|
3215 |
// Convert to GMT, then to blog time
|
3216 |
+
$backup_time = (int) $updraft_last_backup['backup_time'];
|
3217 |
|
3218 |
$print_time = get_date_from_gmt(gmdate('Y-m-d H:i:s', $backup_time), 'D, F j, Y H:i');
|
|
|
3219 |
|
3220 |
if (empty($updraft_last_backup['backup_time_incremental'])) {
|
3221 |
$last_backup_text = "<span style=\"color:".(($updraft_last_backup['success']) ? 'green' : 'black').";\">".$print_time.'</span>';
|
3222 |
} else {
|
3223 |
$inc_time = get_date_from_gmt(gmdate('Y-m-d H:i:s', $updraft_last_backup['backup_time_incremental']), 'D, F j, Y H:i');
|
|
|
3224 |
$last_backup_text = "<span style=\"color:".(($updraft_last_backup['success']) ? 'green' : 'black').";\">$inc_time</span> (".sprintf(__('incremental backup; base backup: %s', 'updraftplus'), $print_time).')';
|
3225 |
}
|
3226 |
|
3251 |
}
|
3252 |
|
3253 |
} else {
|
3254 |
+
$last_backup_text = "<span style=\"color:blue;\">".__('No backup has been completed', 'updraftplus')."</span>";
|
3255 |
}
|
3256 |
|
3257 |
return $last_backup_text;
|
3258 |
|
3259 |
}
|
3260 |
|
3261 |
+
/**
|
3262 |
+
* Get a list of backup intervals
|
3263 |
+
*
|
3264 |
+
* @return Array - keys are used as identifiers in the UI drop-down; values are user-displayed text describing the interval
|
3265 |
+
*/
|
3266 |
public function get_intervals() {
|
3267 |
return apply_filters('updraftplus_backup_intervals', array(
|
3268 |
'manual' => _x("Manual", 'i.e. Non-automatic', 'updraftplus'),
|
3276 |
));
|
3277 |
}
|
3278 |
|
3279 |
+
public function really_writable_message($really_is_writable, $updraft_dir) {
|
3280 |
if ($really_is_writable) {
|
3281 |
$dir_info = '<span style="color:green;">'.__('Backup directory specified is writable, which is good.', 'updraftplus').'</span>';
|
3282 |
} else {
|
3291 |
return $dir_info;
|
3292 |
}
|
3293 |
|
3294 |
+
/**
|
3295 |
+
* Directly output the settings form (suitable for the admin area)
|
3296 |
+
*
|
3297 |
+
* @param Array $options - current options (passed on to the template)
|
3298 |
+
*/
|
3299 |
public function settings_formcontents($options = array()) {
|
3300 |
$this->include_template('wp-admin/settings/form-contents.php', false, array('options' => $options));
|
3301 |
}
|
3337 |
return $ret;
|
3338 |
}
|
3339 |
|
3340 |
+
/**
|
3341 |
+
* This is the files selector widget
|
3342 |
+
*
|
3343 |
+
* @param string $prefix Prefix for the ID
|
3344 |
+
* @param boolean $show_exclusion_options True or False for exclusion options
|
3345 |
+
* @param boolean $include_more $include_more can be (bool) or (string)"sometimes"
|
3346 |
+
* @return string
|
3347 |
+
*/
|
3348 |
public function files_selector_widgetry($prefix = '', $show_exclusion_options = true, $include_more = true) {
|
3349 |
|
3350 |
$ret = '';
|
3351 |
|
3352 |
global $updraftplus;
|
3353 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
3354 |
+
// The true (default value if non-existent) here has the effect of forcing a default of on.
|
3355 |
$include_more_paths = UpdraftPlus_Options::get_updraft_option('updraft_include_more_path');
|
3356 |
foreach ($backupable_entities as $key => $info) {
|
3357 |
$included = (UpdraftPlus_Options::get_updraft_option("updraft_include_$key", apply_filters("updraftplus_defaultoption_include_".$key, true))) ? 'checked="checked"' : "";
|
3377 |
|
3378 |
} else {
|
3379 |
|
3380 |
+
if ('more' != $key || true === $include_more || ('sometimes' === $include_more && !empty($include_more_paths))) {
|
3381 |
|
3382 |
$data_toggle_exclude_field = $show_exclusion_options ? 'data-toggle_exclude_field="'.$key.'"' : '';
|
3383 |
|
3392 |
return $ret;
|
3393 |
}
|
3394 |
|
3395 |
+
/**
|
3396 |
+
* Output or echo HTML for an error condition relating to a remote storage method
|
3397 |
+
*
|
3398 |
+
* @param String $text - the text of the message; this should already be escaped (no more is done)
|
3399 |
+
* @param String $extraclass - a CSS class for the resulting DOM node
|
3400 |
+
* @param Integer $echo - if set, then the results will be echoed as well as returned
|
3401 |
+
*
|
3402 |
+
* @return String - the results
|
3403 |
+
*/
|
3404 |
public function show_double_warning($text, $extraclass = '', $echo = true) {
|
3405 |
|
3406 |
$ret = "<div class=\"error updraftplusmethod $extraclass\"><p>$text</p></div>";
|
3412 |
}
|
3413 |
|
3414 |
public function optionfilter_split_every($value) {
|
3415 |
+
return max(absint($value), UPDRAFTPLUS_SPLIT_MIN);
|
|
|
|
|
3416 |
}
|
3417 |
|
3418 |
/**
|
3419 |
* Check if curl exists; if not, print or return appropriate error messages
|
3420 |
*
|
3421 |
+
* @param String $service the service description (used only for user-visible messages - so, use the description)
|
3422 |
+
* @param Boolean $has_fallback set as true if the lack of Curl only affects the ability to connect over SSL
|
3423 |
+
* @param String $extraclass an extra CSS class for any resulting message, passed on to show_double_warning()
|
3424 |
+
* @param Boolean $echo_instead_of_return whether the result should be echoed or returned
|
3425 |
+
* @return String any resulting message, if $echo_instead_of_return was set
|
|
|
3426 |
*/
|
3427 |
public function curl_check($service, $has_fallback = false, $extraclass = '', $echo_instead_of_return = true) {
|
3428 |
|
3438 |
$curl_ssl_supported= ($curl_version['features'] & CURL_VERSION_SSL);
|
3439 |
if (!$curl_ssl_supported) {
|
3440 |
if ($has_fallback) {
|
3441 |
+
$ret .= '<p><strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__("Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on).", 'updraftplus'), $service).'</p>';
|
3442 |
} else {
|
3443 |
+
$ret .= $this->show_double_warning('<p><strong>'.__('Warning', 'updraftplus').':</strong> '.sprintf(__("Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative.", 'updraftplus'), $service, $service).'</p>', $extraclass, false);
|
3444 |
}
|
3445 |
} else {
|
3446 |
+
$ret .= '<p><em>'.sprintf(__("Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help.", 'updraftplus'), $service).'</em></p>';
|
3447 |
}
|
3448 |
}
|
3449 |
if ($echo_instead_of_return) {
|
3453 |
}
|
3454 |
}
|
3455 |
|
3456 |
+
/**
|
3457 |
+
* If $basedirs is passed as an array, then $directorieses must be too
|
3458 |
+
* Note: Reason $directorieses is being used because $directories is used within the foreach-within-a-foreach further down
|
3459 |
+
*
|
3460 |
+
* @param Array|String $directorieses List of of directories, or a single one
|
3461 |
+
* @param Array $exclude An exclusion array of directories
|
3462 |
+
* @param Array|String $basedirs A list of base directories, or a single one
|
3463 |
+
* @param String $format Return format - 'text' or 'numeric'
|
3464 |
+
* @return String|Integer
|
3465 |
+
*/
|
3466 |
+
private function recursive_directory_size($directorieses, $exclude = array(), $basedirs = '', $format = 'text') {
|
3467 |
|
|
|
3468 |
$size = 0;
|
3469 |
|
3470 |
+
if (is_string($directorieses)) {
|
3471 |
+
$basedirs = $directorieses;
|
3472 |
+
$directorieses = array($directorieses);
|
3473 |
}
|
3474 |
|
3475 |
if (is_string($basedirs)) $basedirs = array($basedirs);
|
3476 |
|
3477 |
+
foreach ($directorieses as $ind => $directories) {
|
3478 |
+
if (!is_array($directories)) $directories = array($directories);
|
3479 |
|
3480 |
$basedir = empty($basedirs[$ind]) ? $basedirs[0] : $basedirs[$ind];
|
3481 |
|
3501 |
|
3502 |
$directory = $prefix_directory.('' == $suffix_directory ? '' : '/'.$suffix_directory);
|
3503 |
$size = 0;
|
3504 |
+
if (substr($directory, -1) == '/') $directory = substr($directory, 0, -1);
|
3505 |
|
3506 |
if (!file_exists($directory) || !is_dir($directory) || !is_readable($directory)) return -1;
|
3507 |
if (file_exists($directory.'/.donotbackup')) return 0;
|
3508 |
|
3509 |
if ($handle = opendir($directory)) {
|
3510 |
while (($file = readdir($handle)) !== false) {
|
3511 |
+
if ('.' != $file && '..' != $file) {
|
3512 |
$spath = ('' == $suffix_directory) ? $file : $suffix_directory.'/'.$file;
|
3513 |
if (false !== ($fkey = array_search($spath, $exclude))) {
|
3514 |
unset($exclude[$fkey]);
|
3519 |
$size += filesize($path);
|
3520 |
} elseif (is_dir($path)) {
|
3521 |
$handlesize = $this->recursive_directory_size_raw($prefix_directory, $exclude, $suffix_directory.('' == $suffix_directory ? '' : '/').$file);
|
3522 |
+
if ($handlesize >= 0) {
|
3523 |
+
$size += $handlesize;
|
3524 |
+
}
|
3525 |
}
|
3526 |
}
|
3527 |
}
|
3538 |
|
3539 |
$backup = $backup_history[$key];
|
3540 |
|
3541 |
+
$pretty_date = get_date_from_gmt(gmdate('Y-m-d H:i:s', (int) $key), 'M d, Y G:i');
|
3542 |
|
3543 |
$rawbackup = "<h2 title=\"$key\">$pretty_date</h2>";
|
3544 |
|
3560 |
if (!isset($backup[$type])) continue;
|
3561 |
|
3562 |
$rawbackup .= $updraftplus->printfile($info['description'], $backup, $type, $checksums, $jd, true);
|
|
|
|
|
|
|
|
|
|
|
|
|
3563 |
}
|
3564 |
|
3565 |
$total_size = 0;
|
3594 |
|
3595 |
$rawbackup .= $show_services;
|
3596 |
|
3597 |
+
if (false !== $total_size) {
|
3598 |
$rawbackup .= '</p><strong>'.__('Total backup size:', 'updraftplus').'</strong> '.$updraftplus->convert_numeric_size_to_text($total_size).'<p>';
|
3599 |
}
|
3600 |
|
3655 |
return $ret;
|
3656 |
}
|
3657 |
|
3658 |
+
/**
|
3659 |
+
* Go through each of the file entities
|
3660 |
+
*
|
3661 |
+
* @param Array $backup An array of meta information
|
3662 |
+
* @param Integer $key Backup timestamp (epoch time)
|
3663 |
+
* @param Array $accept An array of values to be accepted from vaules within $backup
|
3664 |
+
* @param String $entities Entities to be added
|
3665 |
+
* @param String $esc_pretty_date Whether the button needs to escape the pretty date format
|
3666 |
+
* @return String - the resulting HTML
|
3667 |
+
*/
|
3668 |
public function download_buttons($backup, $key, $accept, &$entities, $esc_pretty_date) {
|
3669 |
global $updraftplus;
|
3670 |
$ret = '';
|
3695 |
if ('wpcore' == $type) $wpcore_restore_descrip = $sdescrip;
|
3696 |
}
|
3697 |
if (isset($backup[$type])) {
|
3698 |
+
if (!is_array($backup[$type])) $backup[$type] = array($backup[$type]);
|
3699 |
$howmanyinset = count($backup[$type]);
|
3700 |
$expected_index = 0;
|
3701 |
$index_missing = false;
|
3704 |
$whatfiles = $backup[$type];
|
3705 |
ksort($whatfiles);
|
3706 |
foreach ($whatfiles as $findex => $bfile) {
|
3707 |
+
$set_contents .= ('' == $set_contents) ? $findex : ",$findex";
|
3708 |
if ($findex != $expected_index) $index_missing = true;
|
3709 |
$expected_index++;
|
3710 |
}
|
3729 |
}
|
3730 |
|
3731 |
if (!$first_entity) {
|
|
|
3732 |
} else {
|
3733 |
$first_entity = false;
|
3734 |
+
}
|
3735 |
|
3736 |
$ret .= $this->download_button($type, $key, $findex, $info, $ide, $pdescrip, $esc_pretty_date, $set_contents);
|
3737 |
|
3747 |
}
|
3748 |
|
3749 |
public function date_label($pretty_date, $key, $backup, $jobdata, $nonce, $simple_format = false) {
|
|
|
3750 |
|
3751 |
$pretty_date = $simple_format ? $pretty_date : '<div class="clear-right">'.$pretty_date.'</div>';
|
3752 |
|
3753 |
+
$ret = apply_filters('updraftplus_showbackup_date', $pretty_date, $backup, $jobdata, (int) $key, $simple_format);
|
3754 |
if (is_array($jobdata) && !empty($jobdata['resume_interval']) && (empty($jobdata['jobstatus']) || 'finished' != $jobdata['jobstatus'])) {
|
3755 |
if ($simple_format) {
|
3756 |
$ret .= ' '.__('(Not finished)', 'updraftplus');
|
3789 |
return $ret;
|
3790 |
}
|
3791 |
|
3792 |
+
/**
|
3793 |
+
* Get HTML for the 'Delete' button for a particular backup in the 'Existing Backups' tab
|
3794 |
+
*
|
3795 |
+
* @param Integer $backup_time - backup timestamp (epoch time)
|
3796 |
+
* @param String $nonce - backup nonce
|
3797 |
+
* @param Array $backup - backup information array
|
3798 |
+
*
|
3799 |
+
* @return String - the resulting HTML
|
3800 |
+
*/
|
3801 |
+
public function delete_button($backup_time, $nonce, $backup) {
|
3802 |
+
$sval = (!empty($backup['service']) && 'email' != $backup['service'] && 'none' != $backup['service'] && array('email') !== $backup['service'] && array('none') !== $backup['service']) ? '1' : '0';
|
3803 |
return '<div class="updraftplus-remove" style="float: left; clear: none;" data-hasremote="'.$sval.'">
|
3804 |
+
<a data-hasremote="'.$sval.'" data-nonce="'.$nonce.'" data-key="'.$backup_time.'" class="no-decoration updraft-delete-link" href="#" title="'.esc_attr(__('Delete this backup set', 'updraftplus')).'">'.__('Delete', 'updraftplus').'</a>
|
3805 |
+
</div>';
|
3806 |
}
|
3807 |
|
3808 |
public function log_button($backup) {
|
3809 |
global $updraftplus;
|
3810 |
$updraft_dir = $updraftplus->backups_dir_location();
|
3811 |
$ret = '';
|
3812 |
+
if (isset($backup['nonce']) && preg_match("/^[0-9a-f]{12}$/", $backup['nonce']) && is_readable($updraft_dir.'/log.'.$backup['nonce'].'.txt')) {
|
3813 |
$nval = $backup['nonce'];
|
|
|
3814 |
$lt = __('View Log', 'updraftplus');
|
3815 |
$url = esc_attr(UpdraftPlus_Options::admin_page()."?page=updraftplus&action=downloadlog&updraftplus_backup_nonce=$nval");
|
3816 |
$ret .= <<<ENDHERE
|
3835 |
/**
|
3836 |
* Carry out the restore process
|
3837 |
*
|
3838 |
+
* @param Integer $timestamp Identifying the backup to be restored
|
3839 |
+
* @param Array|null $continuation_data For continuing a multi-stage restore (code believed to be incomplete)
|
3840 |
+
* @return Boolean|WP_Error WP_Error indicates a terminal failure; false indicates not-yet complete (not necessarily terminal); true indicates complete.
|
|
|
3841 |
*/
|
3842 |
private function restore_backup($timestamp, $continuation_data = null) {
|
3843 |
|
3877 |
|
3878 |
$credentials = request_filesystem_credentials(UpdraftPlus_Options::admin_page()."?page=updraftplus&action=updraft_restore&backup_timestamp=$timestamp", '', false, false, $extra_fields);
|
3879 |
WP_Filesystem($credentials);
|
3880 |
+
if ($wp_filesystem->errors->get_error_code()) {
|
3881 |
echo '<p><em><a href="'.apply_filters('updraftplus_com_link', "https://updraftplus.com/faqs/asked-ftp-details-upon-restorationmigration-updates/").'">'.__('Why am I seeing this?', 'updraftplus').'</a></em></p>';
|
3882 |
+
foreach ($wp_filesystem->errors->get_error_messages() as $message) show_message($message);
|
3883 |
exit;
|
3884 |
}
|
3885 |
|
3886 |
// If we make it this far then WP_Filesystem has been instantiated and is functional
|
3887 |
|
3888 |
+
// Set up logging
|
3889 |
$updraftplus->backup_time_nonce();
|
3890 |
$updraftplus->jobdata_set('job_type', 'restore');
|
3891 |
$updraftplus->jobdata_set('job_time_ms', $updraftplus->job_time_ms);
|
3892 |
$updraftplus->logfile_open($updraftplus->nonce);
|
3893 |
|
3894 |
+
// Provide download link for the log file
|
3895 |
+
// TODO: Automatic purging of old log files
|
3896 |
+
// TODO: Provide option to auto-email the log file
|
|
|
3897 |
|
3898 |
echo '<h1>'.__('UpdraftPlus Restoration: Progress', 'updraftplus').'</h1><div id="updraft-restore-progress">';
|
3899 |
|
3961 |
parse_str(stripslashes($_POST['updraft_restorer_restore_options']), $restore_options);
|
3962 |
}
|
3963 |
$restore_options['updraft_restorer_replacesiteurl'] = empty($_POST['updraft_restorer_replacesiteurl']) ? false : true;
|
3964 |
+
$restore_options['updraft_encryptionphrase'] = empty($_POST['updraft_encryptionphrase']) ? '' : (string) stripslashes($_POST['updraft_encryptionphrase']);
|
3965 |
$restore_options['updraft_restorer_wpcore_includewpconfig'] = empty($_POST['updraft_restorer_wpcore_includewpconfig']) ? false : true;
|
3966 |
$updraftplus->jobdata_set('restore_options', $restore_options);
|
3967 |
}
|
3982 |
$backupable_entities = apply_filters('updraft_backupable_file_entities_on_restore', $backupable_entities, $restore_options, $backup_set);
|
3983 |
|
3984 |
// We use a single object for each entity, because we want to store information about the backup set
|
3985 |
+
include_once(UPDRAFTPLUS_DIR.'/restorer.php');
|
3986 |
|
3987 |
global $updraftplus_restorer;
|
3988 |
|
4012 |
foreach ($backup_set as $type => $files) {
|
4013 |
// All restorable entities must be given explicitly, as we can store other arbitrary data in the history array
|
4014 |
if (!isset($backupable_entities[$type]) && 'db' != $type) continue;
|
4015 |
+
if (isset($backupable_entities[$type]['restorable']) && false == $backupable_entities[$type]['restorable']) continue;
|
4016 |
|
4017 |
if (!isset($entities_to_download[$type])) continue;
|
4018 |
if ('wpcore' == $type && is_multisite() && 0 === $updraftplus_restorer->ud_backup_is_multisite) {
|
4019 |
echo "<p>$type: <strong>";
|
4020 |
$updraftplus->log(__('Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file.', 'updraftplus'), 'notice-restore');
|
4021 |
+
// TODO
|
4022 |
+
// $updraftplus->log_e('Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file.');
|
4023 |
echo "</strong></p>";
|
4024 |
continue;
|
4025 |
}
|
4040 |
|
4041 |
$this->get_remote_file($service, $file, $timestamp, true);
|
4042 |
|
4043 |
+
$index = (0 == $ind) ? '' : $ind;
|
4044 |
// If a file size is stored in the backup data, then verify correctness of the local file
|
4045 |
if (isset($backup_set[$type.$index.'-size'])) {
|
4046 |
$fs = $backup_set[$type.$index.'-size'];
|
4047 |
+
$print_message = __("Archive is expected to be size:", 'updraftplus')." ".round($fs/1024, 1)." KB: ";
|
4048 |
$as = @filesize($fullpath);
|
4049 |
if ($as == $fs) {
|
4050 |
$updraftplus->log($print_message.__('OK', 'updraftplus'), 'notice-restore');
|
4052 |
$updraftplus->log($print_message.__('Error:', 'updraftplus')." ".__('file is size:', 'updraftplus')." ".round($as/1024)." ($fs, $as)", 'warning-restore');
|
4053 |
}
|
4054 |
} else {
|
4055 |
+
$updraftplus->log(__("The backup records do not contain information about the proper size of this file.", 'updraftplus'), 'notice-restore');
|
4056 |
}
|
4057 |
if (!is_readable($fullpath)) {
|
4058 |
$updraftplus->log(__('Could not find one of the files for restoration', 'updraftplus')." ($file)", 'warning-restore');
|
4084 |
foreach ($val->get_error_codes() as $code) {
|
4085 |
if ('already_exists' == $code) $this->print_delete_old_dirs_form(false);
|
4086 |
}
|
4087 |
+
echo '</div>'; // close the updraft_restore_progress div even if we error
|
4088 |
restore_error_handler();
|
4089 |
return $val;
|
4090 |
} elseif (false === $val) {
|
4091 |
+
echo '</div>'; // close the updraft_restore_progress div even if we error
|
4092 |
restore_error_handler();
|
4093 |
return false;
|
4094 |
}
|
4184 |
}
|
4185 |
}
|
4186 |
}
|
4187 |
+
echo '</div>'; // close the updraft_restore_progress div even if we error
|
4188 |
restore_error_handler();
|
4189 |
return $val;
|
4190 |
}
|
4191 |
} elseif (false === $val) {
|
4192 |
+
echo '</div>'; // close the updraft_restore_progress div even if we error
|
4193 |
restore_error_handler();
|
4194 |
return false;
|
4195 |
}
|
4217 |
// Clear any cached pages after the restore
|
4218 |
$updraftplus_restorer->clear_cache();
|
4219 |
|
4220 |
+
if (!function_exists('validate_current_theme')) include_once(ABSPATH.WPINC.'/themes');
|
4221 |
|
4222 |
// Have seen a case where the current theme in the DB began with a capital, but not on disk - and this breaks migrating from Windows to a case-sensitive system
|
4223 |
$template = get_option('template');
|
4224 |
+
if (!empty($template) && WP_DEFAULT_THEME != $template && strtolower($template) != $template) {
|
4225 |
|
4226 |
$theme_root = get_theme_root($template);
|
4227 |
$theme_root2 = get_theme_root(strtolower($template));
|
4246 |
return true;
|
4247 |
}
|
4248 |
|
4249 |
+
public function option_filter_template($val) {
|
4250 |
+
global $updraftplus;
|
4251 |
+
return $updraftplus->option_filter_get('template');
|
4252 |
+
}
|
4253 |
|
4254 |
+
public function option_filter_stylesheet($val) {
|
4255 |
+
global $updraftplus;
|
4256 |
+
return $updraftplus->option_filter_get('stylesheet');
|
4257 |
+
}
|
4258 |
|
4259 |
+
public function option_filter_template_root($val) {
|
4260 |
+
global $updraftplus;
|
4261 |
+
return $updraftplus->option_filter_get('template_root');
|
4262 |
+
}
|
4263 |
|
4264 |
+
public function option_filter_stylesheet_root($val) {
|
4265 |
+
global $updraftplus;
|
4266 |
+
return $updraftplus->option_filter_get('stylesheet_root');
|
4267 |
+
}
|
4268 |
|
4269 |
public function sort_restoration_entities($a, $b) {
|
4270 |
if ($a == $b) return 0;
|
4302 |
die;
|
4303 |
}
|
4304 |
|
4305 |
+
public function updraft_ajax_importsettings() {
|
4306 |
+
global $updraftplus;
|
4307 |
+
|
4308 |
+
if (empty($_POST) || empty($_POST['subaction']) || 'importsettings' != $_POST['subaction'] || !isset($_POST['nonce']) || !is_user_logged_in() || !UpdraftPlus_Options::user_can_manage() || !wp_verify_nonce($_POST['nonce'], 'updraftplus-settings-nonce')) die('Security check');
|
4309 |
+
|
4310 |
+
if (empty($_POST['settings']) || !is_string($_POST['settings'])) die('Invalid data');
|
4311 |
|
4312 |
$this->import_settings($_POST);
|
4313 |
+
}
|
4314 |
|
4315 |
/**
|
4316 |
* This method handles the imported json settings it will convert them into a readable format for the existing save settings function, it will also update some of the options to match the new remote storage options format (Apr 2017)
|
4350 |
if (empty($posted_settings['updraft_azure']['settings'])) $posted_settings['updraft_azure'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_azure']);
|
4351 |
if (empty($posted_settings['updraft_dropbox']['settings'])) $posted_settings['updraft_dropbox'] = $updraftplus->wrap_remote_storage_options($posted_settings['updraft_dropbox']);
|
4352 |
|
4353 |
+
echo json_encode($this->save_settings($posted_settings));
|
4354 |
|
4355 |
+
die;
|
4356 |
}
|
4357 |
|
4358 |
private function backup_now_remote_message() {
|
4370 |
return '<input type="checkbox" id="backupnow_includecloud" checked="checked"> <label for="backupnow_includecloud">'.__("Send this backup to remote storage", 'updraftplus').'</label>';
|
4371 |
}
|
4372 |
}
|
4373 |
+
|
4374 |
+
/**
|
4375 |
+
* This method works through the passed in settings array and saves the settings to the database clearing old data and setting up a return array with content to update the page via ajax
|
4376 |
+
*
|
4377 |
+
* @param array $settings An array of settings taking from the admin page ready to be saved to the database
|
4378 |
+
* @return array An array response containing the status of the update along with content to be used to update the admin page.
|
4379 |
+
*/
|
4380 |
public function save_settings($settings) {
|
4381 |
|
4382 |
global $updraftplus;
|
4392 |
|
4393 |
$add_to_post_keys = array('updraft_interval', 'updraft_interval_database', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_startday_files', 'updraft_startday_db');
|
4394 |
|
4395 |
+
// If database and files are on same schedule, override the db day/time settings
|
4396 |
if (isset($settings['updraft_interval_database']) && isset($settings['updraft_interval_database']) && $settings['updraft_interval_database'] == $settings['updraft_interval'] && isset($settings['updraft_starttime_files'])) {
|
4397 |
$settings['updraft_starttime_db'] = $settings['updraft_starttime_files'];
|
4398 |
$settings['updraft_startday_db'] = $settings['updraft_startday_files'];
|
4399 |
+
}
|
4400 |
foreach ($add_to_post_keys as $key) {
|
4401 |
// For add-ons that look at $_POST to find saved settings, add the relevant keys to $_POST so that they find them there
|
4402 |
if (isset($settings[$key])) {
|
4431 |
foreach ($settings as $key => $value) {
|
4432 |
|
4433 |
if (in_array($key, $relevant_keys)) {
|
4434 |
+
if ('updraft_service' == $key && is_array($value)) {
|
4435 |
+
foreach ($value as $subkey => $subvalue) {
|
4436 |
+
if ('0' == $subvalue) unset($value[$subkey]);
|
4437 |
}
|
4438 |
}
|
4439 |
|
4440 |
// This flag indicates that either the stored database option was changed, or that the supplied option was changed before being stored. It isn't comprehensive - it's only used to update some UI elements with invalid input.
|
4441 |
+
$updated = empty($mass_updated) ? (is_string($value) && UpdraftPlus_Options::get_updraft_option($key) != $value) : (is_string($value) && (!isset($original_settings[$key]) || $original_settings[$key] != $value));
|
4442 |
|
4443 |
$db_updated = empty($mass_updated) ? UpdraftPlus_Options::update_updraft_option($key, $value) : true;
|
4444 |
|
4448 |
$value = UpdraftPlus_Options::get_updraft_option($key);
|
4449 |
if (is_string($value)) $return_array['changed'][$key] = $value;
|
4450 |
}
|
4451 |
+
// @codingStandardsIgnoreLine
|
4452 |
} else {
|
4453 |
+
// This section is ignored by CI otherwise it will complain the ELSE is empty.
|
4454 |
+
|
4455 |
// When last active, it was catching: option_page, action, _wpnonce, _wp_http_referer, updraft_s3_endpoint, updraft_dreamobjects_endpoint. The latter two are empty; probably don't need to be in the page at all.
|
4456 |
+
// error_log("Non-UD key when saving from POSTed data: ".$key);
|
4457 |
}
|
4458 |
}
|
4459 |
} else {
|
4472 |
|
4473 |
// Check if $more_files_path_updated is true, is so then there's a change and we should update the backup modal
|
4474 |
if ($more_files_path_updated) {
|
4475 |
+
$return_array['updraft_include_more_path'] = $this->files_selector_widgetry('backupnow_files_', false, 'sometimes');
|
4476 |
}
|
4477 |
|
4478 |
+
// Because of the single AJAX call, we need to remove the existing UD messages from the 'all_admin_notices' action
|
4479 |
remove_all_actions('all_admin_notices');
|
4480 |
|
4481 |
+
// Moving from 2 to 1 ajax call
|
4482 |
ob_start();
|
4483 |
|
4484 |
$service = UpdraftPlus_Options::get_updraft_option('updraft_service');
|
4488 |
|
4489 |
do_action('all_admin_notices');
|
4490 |
|
4491 |
+
if (!$really_is_writable) { // Check if writable
|
4492 |
$this->show_admin_warning_unwritable();
|
4493 |
}
|
4494 |
|
4514 |
$return_array['messages'] = $messages_output;
|
4515 |
$return_array['scheduled'] = $scheduled_output;
|
4516 |
|
4517 |
+
// Add the updated options to the return message, so we can update on screen
|
|
|
|
|
4518 |
return $return_array;
|
4519 |
|
4520 |
}
|
4521 |
|
4522 |
/**
|
4523 |
* A method to remove UpdraftPlus settings from the options table.
|
4524 |
+
*
|
4525 |
* @param boolean $wipe_all_settings Set to true as default as we want to remove all options, set to false if calling from UpdraftCentral, as we do not want to remove the UpdraftCentral key or we will lose connection to the site.
|
4526 |
+
* @return boolean
|
4527 |
*/
|
4528 |
public function updraft_wipe_settings($wipe_all_settings = true) {
|
4529 |
|
4550 |
|
4551 |
return true;
|
4552 |
}
|
4553 |
+
|
4554 |
+
/**
|
4555 |
+
* This get the details for updraft vault and to be used globally
|
4556 |
+
*
|
4557 |
+
* @param string $instance_id - the instance_id of the current instance being used
|
4558 |
+
* @return object - the UpdraftVault option setup to use the passed in instance id or if one wasn't passed then use the default set of options
|
4559 |
+
*/
|
4560 |
+
public function get_updraftvault($instance_id = '') {
|
4561 |
+
global $updraftplus;
|
4562 |
+
|
4563 |
+
$storage_objects_and_ids = $updraftplus->get_storage_objects_and_ids(array('updraftvault'));
|
4564 |
+
|
4565 |
+
if (isset($storage_objects_and_ids['updraftvault']['instance_settings'][$instance_id])) {
|
4566 |
+
$opts = $storage_objects_and_ids['updraftvault']['instance_settings'][$instance_id];
|
4567 |
+
$vault = $storage_objects_and_ids['updraftvault']['object'];
|
4568 |
+
$vault->set_options($opts, false, $instance_id);
|
4569 |
+
} else {
|
4570 |
+
include_once(UPDRAFTPLUS_DIR.'/methods/updraftvault.php');
|
4571 |
+
$vault = new UpdraftPlus_BackupModule_updraftvault();
|
4572 |
+
}
|
4573 |
+
|
4574 |
return $vault;
|
4575 |
}
|
4576 |
|
4577 |
+
/**
|
4578 |
+
* http_get will allow the HTTP Fetch execute available in advanced tools
|
4579 |
+
*
|
4580 |
+
* @param String $uri Specific URL passed to curl
|
4581 |
+
* @param Boolean $curl True or False if cURL is to be used
|
4582 |
+
* @return String - JSON encoded results
|
4583 |
+
*/
|
4584 |
public function http_get($uri = null, $curl = false) {
|
4585 |
|
4586 |
if (!preg_match('/^https?/', $uri)) return json_encode(array('e' => 'Non-http URL specified'));
|
4596 |
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
4597 |
curl_setopt($ch, CURLOPT_HEADER, false);
|
4598 |
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
4599 |
+
curl_setopt($ch, CURLOPT_STDERR, $output = fopen('php://temp', "w+"));
|
4600 |
$response = curl_exec($ch);
|
4601 |
$error = curl_error($ch);
|
4602 |
$getinfo = curl_getinfo($ch);
|
4613 |
|
4614 |
if (!empty($verb)) $resp['r'] = htmlspecialchars($verb)."\n\n".$resp['r'];
|
4615 |
|
4616 |
+
// Extra info returned for Central
|
4617 |
$resp['verb'] = $verb;
|
4618 |
$resp['response'] = $response;
|
4619 |
$resp['status'] = $getinfo;
|
4620 |
|
4621 |
return json_encode($resp);
|
|
|
4622 |
} else {
|
4623 |
$response = wp_remote_get($uri, array('timeout' => 10));
|
4624 |
if (is_wp_error($response)) {
|
4651 |
ob_start();
|
4652 |
$history = UpdraftPlus_Backup_History::get_history();
|
4653 |
var_dump($history);
|
4654 |
+
$response["html"] .= ob_get_clean();
|
4655 |
$response['html'] .= '</pre>';
|
4656 |
|
4657 |
$response['html'] .= '<h3 id="ud-debuginfo-files">'.__('Files', 'updraftplus').'</h3><pre>';
|
4675 |
}
|
4676 |
@$d->close();
|
4677 |
krsort($raw_output, SORT_NUMERIC);
|
4678 |
+
|
4679 |
+
foreach ($raw_output as $line) {
|
4680 |
+
$response['html'] .= $line;
|
4681 |
+
}
|
4682 |
+
|
4683 |
$response['html'] .= '</pre>';
|
4684 |
|
4685 |
$response['html'] .= '<h3 id="ud-debuginfo-options">'.__('Options (raw)', 'updraftplus').'</h3>';
|
4697 |
$response['html'] .= ob_get_clean();
|
4698 |
|
4699 |
if (true == $no_pre_tags) {
|
4700 |
+
$response['html'] = str_replace('<pre>', '', $response['html']);
|
4701 |
+
$response['html'] = str_replace('</pre>', '', $response['html']);
|
4702 |
}
|
4703 |
|
4704 |
return $response;
|
4705 |
}
|
4706 |
|
4707 |
+
/**
|
4708 |
+
* This will call any wp_action
|
4709 |
+
*
|
4710 |
+
* @param Array $data The array of data with the vaules for wpaction
|
4711 |
+
* @param Callable|Boolean $close_connection_callable A callable to call to close the browser connection, or true for a default suitable for internal use, or false for none
|
4712 |
+
* @return Array - results
|
4713 |
+
*/
|
4714 |
public function call_wp_action($data = null, $close_connection_callable = false) {
|
4715 |
global $updraftplus;
|
4716 |
|
4734 |
|
4735 |
$ret = ob_get_clean();
|
4736 |
|
4737 |
+
// Need to add this as the close browser should only work for UDP
|
4738 |
if ($close_connection_callable) {
|
4739 |
if (is_callable($close_connection_callable)) {
|
4740 |
call_user_func($close_connection_callable, array('r' => $res));
|
4760 |
$response['response'] = $res;
|
4761 |
$response['log'] = $output;
|
4762 |
|
4763 |
+
// Check if response is empty
|
4764 |
if (!empty($returned)) $response['status'] = $returned;
|
4765 |
|
4766 |
return $response;
|
4767 |
}
|
4768 |
|
4769 |
+
/**
|
4770 |
+
* Enqueue JSTree JavaScript and CSS, taking into account whether it is already enqueued, and current debug settings
|
4771 |
+
*/
|
4772 |
public function enqueue_jstree() {
|
4773 |
|
4774 |
static $already_enqueued = false;
|
4775 |
if ($already_enqueued) return;
|
4776 |
|
4777 |
+
$already_enqueued = true;
|
4778 |
$jstree_enqueue_version = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '3.3'.'.'.time() : '3.3';
|
4779 |
$min_or_not = (defined('SCRIPT_DEBUG') && SCRIPT_DEBUG) ? '' : '.min';
|
4780 |
+
|
4781 |
wp_enqueue_script('jstree', UPDRAFTPLUS_URL.'/includes/jstree/jstree'.$min_or_not.'.js', array('jquery'), $jstree_enqueue_version);
|
4782 |
+
wp_enqueue_style('jstree', UPDRAFTPLUS_URL.'/includes/jstree/themes/default/style'.$min_or_not.'.css', array(), $jstree_enqueue_version);
|
4783 |
}
|
4784 |
}
|
@@ -3,42 +3,62 @@
|
|
3 |
if (!defined('UPDRAFTPLUS_DIR')) die('No direct access allowed');
|
4 |
if (!class_exists('UpdraftPlus_PclZip')) require_once(UPDRAFTPLUS_DIR.'/class-zip.php');
|
5 |
|
6 |
-
|
7 |
-
|
|
|
8 |
class UpdraftPlus_Backup {
|
9 |
|
10 |
public $index = 0;
|
11 |
|
|
|
|
|
12 |
private $zipfiles_added;
|
|
|
13 |
private $zipfiles_added_thisrun = 0;
|
|
|
14 |
public $zipfiles_dirbatched;
|
|
|
15 |
public $zipfiles_batched;
|
|
|
16 |
public $zipfiles_skipped_notaltered;
|
17 |
-
|
|
|
|
|
18 |
private $zip_last_ratio = 1;
|
|
|
19 |
private $whichone;
|
|
|
20 |
private $zip_basename = '';
|
|
|
21 |
private $backup_basename = '';
|
|
|
22 |
private $zipfiles_lastwritetime;
|
|
|
23 |
// 0 = unknown; false = failed
|
24 |
public $binzip = 0;
|
25 |
|
26 |
private $dbhandle;
|
|
|
27 |
private $dbhandle_isgz;
|
28 |
|
29 |
-
|
30 |
private $altered_since = -1;
|
31 |
-
|
|
|
32 |
private $makezip_if_altered_since = -1;
|
33 |
|
34 |
private $excluded_extensions = false;
|
35 |
|
36 |
private $use_zip_object = 'UpdraftPlus_ZipArchive';
|
|
|
37 |
public $debug = false;
|
38 |
|
39 |
public $updraft_dir;
|
|
|
40 |
private $blog_name;
|
|
|
41 |
private $wpdb_obj;
|
|
|
42 |
private $job_file_entities = array();
|
43 |
|
44 |
private $first_run = 0;
|
@@ -60,20 +80,20 @@ class UpdraftPlus_Backup {
|
|
60 |
global $updraftplus;
|
61 |
|
62 |
// Get the blog name and rip out known-problematic characters. Remember that we may need to be able to upload this to any FTP server or cloud storage, where filename support may be unknown
|
63 |
-
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/','', str_replace(' ','_', substr(get_bloginfo(), 0, 32))));
|
64 |
if (!$blog_name || preg_match('#^_+$#', $blog_name)) {
|
65 |
// Try again...
|
66 |
$parsed_url = parse_url(home_url(), PHP_URL_HOST);
|
67 |
$parsed_subdir = untrailingslashit(parse_url(home_url(), PHP_URL_PATH));
|
68 |
if ($parsed_subdir && '/' != $parsed_subdir) $parsed_url .= str_replace(array('/', '\\'), '_', $parsed_subdir);
|
69 |
-
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/','', str_replace(' ','_', substr($parsed_url, 0, 32))));
|
70 |
if (!$blog_name || preg_match('#^_+$#', $blog_name)) $blog_name = 'WordPress_Backup';
|
71 |
}
|
72 |
|
73 |
// Allow an over-ride. Careful about introducing characters not supported by your filesystem or cloud storage.
|
74 |
$this->blog_name = apply_filters('updraftplus_blog_name', $blog_name);
|
75 |
|
76 |
-
|
77 |
$this->debug = UpdraftPlus_Options::get_updraft_option('updraft_debug_mode');
|
78 |
$this->updraft_dir = $updraftplus->backups_dir_location();
|
79 |
$this->updraft_dir_realpath = realpath($this->updraft_dir);
|
@@ -91,13 +111,13 @@ class UpdraftPlus_Backup {
|
|
91 |
|
92 |
// false means 'tried + failed'; whereas 0 means 'not yet tried'
|
93 |
// Disallow binzip on OpenVZ when we're not sure there's plenty of memory
|
94 |
-
if ($this->binzip
|
95 |
|
96 |
if (@file_exists('/proc/user_beancounters') && @file_exists('/proc/meminfo') && @is_readable('/proc/meminfo')) {
|
97 |
$meminfo = @file_get_contents('/proc/meminfo', false, null, -1, 200);
|
98 |
if (is_string($meminfo) && preg_match('/MemTotal:\s+(\d+) kB/', $meminfo, $matches)) {
|
99 |
$memory_mb = $matches[1]/1024;
|
100 |
-
|
101 |
$vz_log = "OpenVZ; reported memory: ".round($memory_mb, 1)." MB";
|
102 |
if ($memory_mb < 1024 || $memory_mb > 8192) {
|
103 |
$openvz_lowmem = true;
|
@@ -117,8 +137,8 @@ class UpdraftPlus_Backup {
|
|
117 |
}
|
118 |
}
|
119 |
|
120 |
-
|
121 |
-
if ($this->use_zip_object
|
122 |
global $updraftplus;
|
123 |
$updraftplus->log("Zip engine: ZipArchive is not available or is disabled (will use PclZip if needed)");
|
124 |
$this->use_zip_object = 'UpdraftPlus_PclZip';
|
@@ -130,7 +150,16 @@ class UpdraftPlus_Backup {
|
|
130 |
$this->remotestorage_extrainfo[$service] = array('pretty' => $info_html, 'plain' => $info_plain);
|
131 |
}
|
132 |
|
133 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
public function create_zip($create_from_dir, $whichone, $backup_file_basename, $index, $first_linked_index = false) {
|
135 |
// Note: $create_from_dir can be an array or a string
|
136 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
@@ -142,15 +171,15 @@ class UpdraftPlus_Backup {
|
|
142 |
|
143 |
global $updraftplus;
|
144 |
|
145 |
-
$this->zip_split_every = max((int)$updraftplus->jobdata_get('split_every'), UPDRAFTPLUS_SPLIT_MIN)*1048576;
|
146 |
|
147 |
-
if ('others' != $whichone) $updraftplus->log("Beginning creation of dump of $whichone (split every: ".round($this->zip_split_every/1048576,1)." MB)");
|
148 |
|
149 |
if (is_string($create_from_dir) && !file_exists($create_from_dir)) {
|
150 |
$flag_error = true;
|
151 |
$updraftplus->log("Does not exist: $create_from_dir");
|
152 |
if ('mu-plugins' == $whichone) {
|
153 |
-
if (!function_exists('get_mu_plugins'))
|
154 |
$mu_plugins = get_mu_plugins();
|
155 |
if (count($mu_plugins) == 0) {
|
156 |
$updraftplus->log("There appear to be no mu-plugins to back up. Will not raise an error.");
|
@@ -166,19 +195,19 @@ class UpdraftPlus_Backup {
|
|
166 |
$full_path = $this->updraft_dir.'/'.$base_path;
|
167 |
$time_now = time();
|
168 |
|
169 |
-
|
170 |
if (file_exists($full_path)) {
|
171 |
-
|
172 |
$files_existing = array();
|
173 |
while (file_exists($full_path)) {
|
174 |
$files_existing[] = $base_path;
|
175 |
-
$time_mod = (int)@filemtime($full_path);
|
176 |
-
$updraftplus->log($base_path.": this file has already been created (age: ".round($time_now-$time_mod,1)." s)");
|
177 |
if ($time_mod>100 && ($time_now-$time_mod)<30) {
|
178 |
$updraftplus->terminate_due_to_activity($base_path, $time_now, $time_mod);
|
179 |
}
|
180 |
$index++;
|
181 |
-
|
182 |
$base_path = $backup_file_basename.'-'.$whichone.($index+1).'.zip';
|
183 |
$full_path = $this->updraft_dir.'/'.$base_path;
|
184 |
}
|
@@ -191,7 +220,7 @@ class UpdraftPlus_Backup {
|
|
191 |
|
192 |
// Firstly, make sure that the temporary file is not already being written to - which can happen if a resumption takes place whilst an old run is still active
|
193 |
$zip_name = $full_path.'.tmp';
|
194 |
-
$time_mod = (int)@filemtime($zip_name);
|
195 |
if (file_exists($zip_name) && $time_mod>100 && ($time_now-$time_mod)<30) {
|
196 |
$updraftplus->terminate_due_to_activity($zip_name, $time_now, $time_mod);
|
197 |
}
|
@@ -216,8 +245,8 @@ class UpdraftPlus_Backup {
|
|
216 |
clearstatcache();
|
217 |
|
218 |
if (isset($files_existing)) {
|
219 |
-
|
220 |
-
|
221 |
return $files_existing;
|
222 |
}
|
223 |
|
@@ -225,12 +254,12 @@ class UpdraftPlus_Backup {
|
|
225 |
|
226 |
$this->zip_microtime_start = microtime(true);
|
227 |
|
228 |
-
|
229 |
$zipcode = $this->make_zipfile($create_from_dir, $backup_file_basename, $whichone);
|
230 |
-
if (
|
231 |
$updraftplus->log("ERROR: Zip failure: Could not create $whichone zip (".$this->index." / $index)");
|
232 |
-
$updraftplus->log(sprintf(__("Could not create %s zip. Consult the log file for more information.",'updraftplus')
|
233 |
-
|
234 |
return false;
|
235 |
} else {
|
236 |
$itext = (empty($this->index)) ? '' : ($this->index+1);
|
@@ -258,12 +287,12 @@ class UpdraftPlus_Backup {
|
|
258 |
$timetaken = max(microtime(true)-$this->zip_microtime_start, 0.000001);
|
259 |
$kbsize = filesize($full_path)/1024;
|
260 |
$rate = round($kbsize/$timetaken, 1);
|
261 |
-
$updraftplus->log("Created $whichone zip (".$this->index.") - ".round($kbsize,1)." KB in ".round($timetaken,1)." s ($rate KB/s) ($checksum_description)");
|
262 |
// We can now remove any left-over temporary files from this job
|
263 |
}
|
264 |
} elseif ($this->index > $original_index) {
|
265 |
$updraftplus->log("Did not create $whichone zip (".$this->index.") - not needed (2)");
|
266 |
-
|
267 |
$this->index--;
|
268 |
} else {
|
269 |
$updraftplus->log("Looked-for $whichone zip (".$this->index.") was not found (".basename($full_path).".tmp)", 'warning');
|
@@ -274,7 +303,7 @@ class UpdraftPlus_Backup {
|
|
274 |
// Remove cache list files as well, if there are any
|
275 |
$updraftplus->clean_temporary_files('_'.$updraftplus->nonce."-$whichone", 0, true);
|
276 |
|
277 |
-
|
278 |
$files_existing = array();
|
279 |
$res_index = 0;
|
280 |
for ($i = $original_index; $i<= $this->index; $i++) {
|
@@ -288,7 +317,9 @@ class UpdraftPlus_Backup {
|
|
288 |
return $files_existing;
|
289 |
}
|
290 |
|
291 |
-
|
|
|
|
|
292 |
public function do_prune_standalone() {
|
293 |
global $updraftplus;
|
294 |
|
@@ -298,11 +329,11 @@ class UpdraftPlus_Backup {
|
|
298 |
$prune_services = array();
|
299 |
|
300 |
foreach ($services as $ind => $service) {
|
301 |
-
if (
|
302 |
|
303 |
$objname = "UpdraftPlus_BackupModule_${service}";
|
304 |
if (!class_exists($objname) && file_exists(UPDRAFTPLUS_DIR.'/methods/'.$service.'.php')) {
|
305 |
-
|
306 |
}
|
307 |
if (class_exists($objname)) {
|
308 |
$remote_obj = new $objname;
|
@@ -317,7 +348,11 @@ class UpdraftPlus_Backup {
|
|
317 |
if (!empty($prune_services)) $this->prune_retained_backups($prune_services);
|
318 |
}
|
319 |
|
320 |
-
|
|
|
|
|
|
|
|
|
321 |
public function cloud_backup($backup_array) {
|
322 |
|
323 |
global $updraftplus;
|
@@ -340,7 +375,7 @@ class UpdraftPlus_Backup {
|
|
340 |
|
341 |
$do_prune = array();
|
342 |
|
343 |
-
|
344 |
if (count($services) >1 && !empty($updraftplus->no_checkin_last_time)) {
|
345 |
$updraftplus->log('No check-in last time: will try a different remote service first');
|
346 |
array_push($services, array_shift($services));
|
@@ -352,9 +387,9 @@ class UpdraftPlus_Backup {
|
|
352 |
$errors_before_uploads = $updraftplus->error_count();
|
353 |
|
354 |
foreach ($services as $ind => $service) {
|
355 |
-
|
356 |
$this->current_service = $service;
|
357 |
-
|
358 |
$this->last_service = ($ind+1 >= count($services) && $errors_before_uploads == $updraftplus->error_count()) ? true : false;
|
359 |
|
360 |
$log_extra = ($this->last_service) ? ' (last)' : '';
|
@@ -362,11 +397,11 @@ class UpdraftPlus_Backup {
|
|
362 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
363 |
|
364 |
$method_include = UPDRAFTPLUS_DIR.'/methods/'.$service.'.php';
|
365 |
-
if (file_exists($method_include))
|
366 |
|
367 |
-
if (
|
368 |
$updraftplus->log("No remote despatch: user chose no remote backup service");
|
369 |
-
|
370 |
foreach ($backup_array as $bind => $file) {
|
371 |
if ($updraftplus->is_uploaded($file)) {
|
372 |
$updraftplus->log("Already uploaded: $file");
|
@@ -465,8 +500,8 @@ class UpdraftPlus_Backup {
|
|
465 |
return;
|
466 |
}
|
467 |
|
468 |
-
//
|
469 |
-
//
|
470 |
call_user_func_array(array($updraftplus, 'jobdata_set_multi'), array('jobstatus', 'pruning', 'prune', 'begun'));
|
471 |
|
472 |
// Number of backups to retain - files
|
@@ -737,11 +772,11 @@ class UpdraftPlus_Backup {
|
|
737 |
|
738 |
$backup_to_examine = $this->remove_backup_set_if_empty($backup_to_examine, $backup_datestamp, $backupable_entities, $backup_history);
|
739 |
if (empty($backup_to_examine)) {
|
740 |
-
//
|
741 |
unset($backup_history[$backup_datestamp]);
|
742 |
$this->maybe_save_backup_history_and_reschedule($backup_history);
|
743 |
} else {
|
744 |
-
//
|
745 |
$backup_history[$backup_datestamp] = $backup_to_examine;
|
746 |
}
|
747 |
|
@@ -813,7 +848,7 @@ class UpdraftPlus_Backup {
|
|
813 |
} else {
|
814 |
$updraftplus->log("No nonce record found in the backup set, so cannot delete any remaining log file");
|
815 |
}
|
816 |
-
//
|
817 |
return false;
|
818 |
} else {
|
819 |
$updraftplus->log("This backup set remains non-empty (f=$contains_files/d=$contains_db); will retain in history");
|
@@ -822,10 +857,18 @@ class UpdraftPlus_Backup {
|
|
822 |
|
823 |
}
|
824 |
|
825 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
826 |
private function prune_file($service, $dofiles, $method_object = null, $object_passback = null, $file_sizes = array()) {
|
827 |
global $updraftplus;
|
828 |
-
if (!is_array($dofiles)) $dofiles=array($dofiles);
|
829 |
|
830 |
if (!apply_filters('updraftplus_prune_file', true, $dofiles, $service, $method_object, $object_passback, $file_sizes)) {
|
831 |
$updraftplus->log("Prune: service=$service: skipped via filter");
|
@@ -845,7 +888,12 @@ class UpdraftPlus_Backup {
|
|
845 |
if (!is_null($method_object)) $method_object->delete($dofiles, $object_passback, $file_sizes);
|
846 |
}
|
847 |
|
848 |
-
|
|
|
|
|
|
|
|
|
|
|
849 |
public function send_results_email($final_message, $jobdata) {
|
850 |
|
851 |
global $updraftplus;
|
@@ -870,10 +918,10 @@ class UpdraftPlus_Backup {
|
|
870 |
} elseif ('finished' == $backup_files && ('finished' == $backup_db || 'encrypted' == $backup_db)) {
|
871 |
$backup_contains = __("Files and database", 'updraftplus')." ($backup_type)";
|
872 |
} elseif ('finished' == $backup_files) {
|
873 |
-
$backup_contains = (
|
874 |
$backup_contains .= " ($backup_type)";
|
875 |
-
} elseif (
|
876 |
-
$backup_contains = (
|
877 |
} else {
|
878 |
$updraftplus->log('Unknown/unexpected status: '.serialize($backup_files).'/'.serialize($backup_db));
|
879 |
$backup_contains = __("Unknown/unexpected error - please raise a support request", 'updraftplus');
|
@@ -899,7 +947,7 @@ class UpdraftPlus_Backup {
|
|
899 |
}
|
900 |
$error_count++;
|
901 |
}
|
902 |
-
$append_log.="\r\n";
|
903 |
}
|
904 |
$warnings = (isset($jobdata['warnings'])) ? $jobdata['warnings'] : array();
|
905 |
if (is_array($warnings) && count($warnings) >0) {
|
@@ -908,7 +956,7 @@ class UpdraftPlus_Backup {
|
|
908 |
foreach ($warnings as $err) {
|
909 |
$append_log .= "* ".rtrim($err)."\r\n";
|
910 |
}
|
911 |
-
$append_log.="\r\n";
|
912 |
}
|
913 |
|
914 |
if ($debug_mode && '' != $updraftplus->logfile_name && !in_array($updraftplus->logfile_name, $attachments)) {
|
@@ -920,7 +968,7 @@ class UpdraftPlus_Backup {
|
|
920 |
|
921 |
$subject = apply_filters('updraft_report_subject', sprintf(__('Backed up: %s', 'updraftplus'), get_bloginfo('name')).' (UpdraftPlus '.$updraftplus->version.') '.get_date_from_gmt(gmdate('Y-m-d H:i:s', time()), 'Y-m-d H:i'), $error_count, count($warnings));
|
922 |
|
923 |
-
|
924 |
$feed = '';
|
925 |
if (!class_exists('UpdraftPlus_Addon_Reporting') && !defined('UPDRAFTPLUS_NOADS_B') && !defined('UPDRAFTPLUS_NONEWSFEED')) {
|
926 |
$updraftplus->log('Fetching RSS news feed');
|
@@ -932,7 +980,7 @@ class UpdraftPlus_Backup {
|
|
932 |
$feed .= '* ';
|
933 |
$feed .= $item->get_title();
|
934 |
$feed .= " (".$item->get_date('j F Y').")";
|
935 |
-
|
936 |
$feed .= "\r\n";
|
937 |
}
|
938 |
}
|
@@ -954,7 +1002,7 @@ class UpdraftPlus_Backup {
|
|
954 |
// Make it available to the filter
|
955 |
$jobdata['remotestorage_extrainfo'] = $this->remotestorage_extrainfo;
|
956 |
|
957 |
-
if (!class_exists('UpdraftPlus_Notices'))
|
958 |
global $updraftplus_notices;
|
959 |
$ws_advert = $updraftplus_notices->do_notice(false, 'report-plain', true);
|
960 |
|
@@ -968,7 +1016,11 @@ class UpdraftPlus_Backup {
|
|
968 |
$feed.
|
969 |
$ws_advert."\r\n".
|
970 |
$append_log,
|
971 |
-
|
|
|
|
|
|
|
|
|
972 |
|
973 |
$this->attachments = apply_filters('updraft_report_attachments', $attachments);
|
974 |
|
@@ -1022,7 +1074,13 @@ class UpdraftPlus_Backup {
|
|
1022 |
|
1023 |
}
|
1024 |
|
1025 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1026 |
private function backup_db_sorttables($a_arr, $b_arr) {
|
1027 |
|
1028 |
$a = $a_arr['name'];
|
@@ -1040,15 +1098,15 @@ class UpdraftPlus_Backup {
|
|
1040 |
if ($a == $b) return 0;
|
1041 |
$our_table_prefix = $this->table_prefix_raw;
|
1042 |
if ($a == $our_table_prefix.'options') return -1;
|
1043 |
-
if ($b ==
|
1044 |
if ($a == $our_table_prefix.'site') return -1;
|
1045 |
-
if ($b ==
|
1046 |
if ($a == $our_table_prefix.'blogs') return -1;
|
1047 |
-
if ($b ==
|
1048 |
if ($a == $our_table_prefix.'users') return -1;
|
1049 |
-
if ($b ==
|
1050 |
if ($a == $our_table_prefix.'usermeta') return -1;
|
1051 |
-
if ($b ==
|
1052 |
|
1053 |
if (empty($our_table_prefix)) return strcmp($a, $b);
|
1054 |
|
@@ -1069,7 +1127,7 @@ class UpdraftPlus_Backup {
|
|
1069 |
}
|
1070 |
|
1071 |
private function log_account_space() {
|
1072 |
-
|
1073 |
if (!empty($this->account_space_oodles)) return;
|
1074 |
global $updraftplus;
|
1075 |
$hosting_bytes_free = $updraftplus->get_hosting_disk_quota_free();
|
@@ -1079,7 +1137,12 @@ class UpdraftPlus_Backup {
|
|
1079 |
}
|
1080 |
}
|
1081 |
|
1082 |
-
|
|
|
|
|
|
|
|
|
|
|
1083 |
private function get_backup_file_basename_from_time($use_time) {
|
1084 |
global $updraftplus;
|
1085 |
return 'backup_'.get_date_from_gmt(gmdate('Y-m-d H:i:s', $use_time), 'Y-m-d-Hi').'_'.$this->blog_name.'_'.$updraftplus->nonce;
|
@@ -1089,12 +1152,12 @@ class UpdraftPlus_Backup {
|
|
1089 |
$zips = array();
|
1090 |
if ($handle = opendir($dir)) {
|
1091 |
while (false !== ($entry = readdir($handle))) {
|
1092 |
-
if (
|
1093 |
if (preg_match('/^backup_(\d{4})-(\d{2})-(\d{2})-(\d{2})(\d{2})_.*_([0-9a-f]{12})-([\-a-z]+)([0-9]+)?\.zip$/i', $entry, $matches)) {
|
1094 |
if ($matches[6] !== $match_nonce) continue;
|
1095 |
$timestamp = mktime($matches[4], $matches[5], 0, $matches[2], $matches[3], $matches[1]);
|
1096 |
$entity = $matches[7];
|
1097 |
-
$index = empty($matches[8]) ? '0': $matches[8];
|
1098 |
$zips[$entity][$index] = array($timestamp, $entry);
|
1099 |
}
|
1100 |
}
|
@@ -1103,7 +1166,14 @@ class UpdraftPlus_Backup {
|
|
1103 |
return $zips;
|
1104 |
}
|
1105 |
|
1106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1107 |
private function file_exists($files, $entity, $index = 0) {
|
1108 |
if (isset($files[$entity]) && isset($files[$entity][$index])) {
|
1109 |
$file = $files[$entity][$index];
|
@@ -1114,7 +1184,12 @@ class UpdraftPlus_Backup {
|
|
1114 |
}
|
1115 |
}
|
1116 |
|
1117 |
-
|
|
|
|
|
|
|
|
|
|
|
1118 |
private function backup_dirs($job_status) {
|
1119 |
|
1120 |
global $updraftplus;
|
@@ -1129,9 +1204,9 @@ class UpdraftPlus_Backup {
|
|
1129 |
$possible_backups = $updraftplus->get_backupable_file_entities(true);
|
1130 |
|
1131 |
// Was there a check-in last time? If not, then reduce the amount of data attempted
|
1132 |
-
if (
|
1133 |
|
1134 |
-
|
1135 |
|
1136 |
|
1137 |
// 03-Sep-2015 - came across a case (HS#2052) where there apparently was a check-in 'last time', but no resumption was scheduled because the 'useful_checkin' jobdata was *not* last time - which must indicate dying at a very unfortunate/unlikely point in the code. As a result, the split was not auto-reduced. Consequently, we've added !$updraftplus->newresumption_scheduled as a condition on the first check here (it was already on the second), as if no resumption is scheduled then whatever checkin there was last time was only partial. This was on GoDaddy, for which a number of curious I/O event combinations have been seen in recent months - their platform appears to have some odd behaviour when PHP is killed off.
|
@@ -1142,7 +1217,7 @@ class UpdraftPlus_Backup {
|
|
1142 |
$this->try_split = true;
|
1143 |
} elseif ($updraftplus->current_resumption<=10) {
|
1144 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
1145 |
-
if ((int)$maxzipbatch < 1) $maxzipbatch = 26214400;
|
1146 |
|
1147 |
$new_maxzipbatch = max(floor($maxzipbatch * 0.75), 20971520);
|
1148 |
if ($new_maxzipbatch < $maxzipbatch) {
|
@@ -1154,34 +1229,34 @@ class UpdraftPlus_Backup {
|
|
1154 |
}
|
1155 |
}
|
1156 |
|
1157 |
-
if(
|
1158 |
$updraftplus->log("Backup directory (".$this->updraft_dir.") is not writable, or does not exist");
|
1159 |
$updraftplus->log(sprintf(__("Backup directory (%s) is not writable, or does not exist.", 'updraftplus'), $this->updraft_dir), 'error');
|
1160 |
return array();
|
1161 |
}
|
1162 |
|
1163 |
$this->job_file_entities = $updraftplus->jobdata_get('job_file_entities');
|
1164 |
-
|
1165 |
$which_entity = 0;
|
1166 |
-
|
1167 |
-
|
1168 |
|
1169 |
-
|
1170 |
$existing_zips = $this->find_existing_zips($this->updraft_dir, $updraftplus->nonce);
|
1171 |
|
1172 |
foreach ($possible_backups as $youwhat => $whichdir) {
|
1173 |
|
1174 |
if (isset($this->job_file_entities[$youwhat])) {
|
1175 |
|
1176 |
-
$index = (int)$this->job_file_entities[$youwhat]['index'];
|
1177 |
if (empty($index)) $index=0;
|
1178 |
$indextext = (0 == $index) ? '' : (1+$index);
|
1179 |
|
1180 |
$zip_file = $this->updraft_dir.'/'.$backup_file_basename.'-'.$youwhat.$indextext.'.zip';
|
1181 |
|
1182 |
-
|
1183 |
-
$split_every = max((int)$updraftplus->jobdata_get('split_every'), 250);
|
1184 |
-
//if (file_exists($zip_file) && filesize($zip_file) > $split_every*1048576) {
|
1185 |
if (false != ($existing_file = $this->file_exists($existing_zips, $youwhat, $index)) && filesize($this->updraft_dir.'/'.$existing_file) > $split_every*1048576) {
|
1186 |
$index++;
|
1187 |
$this->job_file_entities[$youwhat]['index'] = $index;
|
@@ -1215,7 +1290,7 @@ class UpdraftPlus_Backup {
|
|
1215 |
if ($index > 0) {
|
1216 |
$zip_file = (isset($this->backup_files_array[$youwhat]) && isset($this->backup_files_array[$youwhat][$index])) ? $this->backup_files_array[$youwhat][$index] : $backup_file_basename.'-'.$youwhat.($index+1).'.zip';
|
1217 |
|
1218 |
-
|
1219 |
$z = $this->updraft_dir.'/'.$zip_file;
|
1220 |
$fs_key = $youwhat.$index.'-size';
|
1221 |
if (file_exists($z)) {
|
@@ -1244,9 +1319,9 @@ class UpdraftPlus_Backup {
|
|
1244 |
|
1245 |
if ('others' == $youwhat) $updraftplus->log("Beginning backup of other directories found in the content directory (index: $index)");
|
1246 |
|
1247 |
-
|
1248 |
$created = apply_filters('updraftplus_backup_makezip_'.$youwhat, $whichdir, $backup_file_basename, $index);
|
1249 |
-
|
1250 |
if ($created === $whichdir) {
|
1251 |
|
1252 |
// http://www.phpconcept.net/pclzip/user-guide/53
|
@@ -1264,12 +1339,12 @@ class UpdraftPlus_Backup {
|
|
1264 |
$dirlist = $updraftplus->backup_uploads_dirlist(true);
|
1265 |
} else {
|
1266 |
$dirlist = $whichdir;
|
1267 |
-
if (is_array($dirlist)) $dirlist=array_shift($dirlist);
|
1268 |
}
|
1269 |
|
1270 |
if (count($dirlist)>0) {
|
1271 |
$created = $this->create_zip($dirlist, $youwhat, $backup_file_basename, $index);
|
1272 |
-
|
1273 |
if (!is_string($created) && !is_array($created)) $updraftplus->log("$youwhat: create_zip returned an error");
|
1274 |
} else {
|
1275 |
$updraftplus->log("No backup of $youwhat: there was nothing found to back up");
|
@@ -1277,10 +1352,10 @@ class UpdraftPlus_Backup {
|
|
1277 |
}
|
1278 |
|
1279 |
if ($created != $whichdir && (is_string($created) || is_array($created))) {
|
1280 |
-
if (is_string($created)) $created=array($created);
|
1281 |
foreach ($created as $findex => $fname) {
|
1282 |
$backup_array[$youwhat][$index] = $fname;
|
1283 |
-
$itext = (
|
1284 |
$index++;
|
1285 |
$backup_array[$youwhat.$itext.'-size'] = filesize($this->updraft_dir.'/'.$fname);
|
1286 |
}
|
@@ -1298,18 +1373,24 @@ class UpdraftPlus_Backup {
|
|
1298 |
return $backup_array;
|
1299 |
}
|
1300 |
|
1301 |
-
|
|
|
|
|
|
|
|
|
|
|
1302 |
public function resumable_backup_of_files($resumption_no) {
|
1303 |
global $updraftplus;
|
1304 |
// Backup directories and return a numerically indexed array of file paths to the backup files
|
1305 |
$bfiles_status = $updraftplus->jobdata_get('backup_files');
|
1306 |
-
$this->backup_files_array = $updraftplus->jobdata_get('backup_files_array')
|
|
|
1307 |
if (!is_array($this->backup_files_array)) $this->backup_files_array = array();
|
1308 |
if ('finished' == $bfiles_status) {
|
1309 |
$updraftplus->log("Creation of backups of directories: already finished");
|
1310 |
-
|
1311 |
foreach ($this->backup_files_array as $files) {
|
1312 |
-
if (!is_array($files)) $files=array($files);
|
1313 |
foreach ($files as $file) $updraftplus->check_recent_modification($this->updraft_dir.'/'.$file);
|
1314 |
}
|
1315 |
} elseif ('begun' == $bfiles_status) {
|
@@ -1325,7 +1406,7 @@ class UpdraftPlus_Backup {
|
|
1325 |
$updraftplus->jobdata_set('backup_files', 'finished');
|
1326 |
$updraftplus->jobdata_set('jobstatus', 'filescreated');
|
1327 |
} else {
|
1328 |
-
|
1329 |
$updraftplus->log('This backup run is not intended for files - skipping');
|
1330 |
return array();
|
1331 |
}
|
@@ -1357,12 +1438,17 @@ class UpdraftPlus_Backup {
|
|
1357 |
return $this->backup_files_array;
|
1358 |
}
|
1359 |
|
1360 |
-
|
1361 |
-
|
1362 |
-
|
1363 |
-
|
1364 |
-
|
1365 |
-
|
|
|
|
|
|
|
|
|
|
|
1366 |
public function backup_db($already_done = 'begun', $whichdb = 'wp', $dbinfo = array()) {
|
1367 |
|
1368 |
global $updraftplus, $wpdb;
|
@@ -1375,9 +1461,9 @@ class UpdraftPlus_Backup {
|
|
1375 |
|
1376 |
if ('wp' == $this->whichdb) {
|
1377 |
$this->wpdb_obj = $wpdb;
|
1378 |
-
|
1379 |
$this->table_prefix = $updraftplus->get_table_prefix(true);
|
1380 |
-
|
1381 |
$this->table_prefix_raw = $updraftplus->get_table_prefix(false);
|
1382 |
$dbinfo['host'] = DB_HOST;
|
1383 |
$dbinfo['name'] = DB_NAME;
|
@@ -1385,7 +1471,7 @@ class UpdraftPlus_Backup {
|
|
1385 |
$dbinfo['pass'] = DB_PASSWORD;
|
1386 |
} else {
|
1387 |
if (!is_array($dbinfo) || empty($dbinfo['host'])) return false;
|
1388 |
-
|
1389 |
$this->wpdb_obj = new UpdraftPlus_WPDB_OtherDB($dbinfo['user'], $dbinfo['pass'], $dbinfo['name'], $dbinfo['host']);
|
1390 |
if (!empty($this->wpdb_obj->error)) {
|
1391 |
$updraftplus->log($dbinfo['user'].'@'.$dbinfo['host'].'/'.$dbinfo['name'].' : database connection attempt failed');
|
@@ -1413,7 +1499,7 @@ class UpdraftPlus_Backup {
|
|
1413 |
|
1414 |
$total_tables = 0;
|
1415 |
|
1416 |
-
|
1417 |
if ('wp' == $whichdb && method_exists($this->wpdb_obj, 'check_connection') && (!defined('UPDRAFTPLUS_SUPPRESS_CONNECTION_CHECKS') || !UPDRAFTPLUS_SUPPRESS_CONNECTION_CHECKS)) {
|
1418 |
if (!$this->wpdb_obj->check_connection(false)) {
|
1419 |
$updraftplus->reschedule(60);
|
@@ -1433,7 +1519,7 @@ class UpdraftPlus_Backup {
|
|
1433 |
$all_tables = array_map(array($this, 'cb_get_name_type'), $all_tables);
|
1434 |
}
|
1435 |
|
1436 |
-
|
1437 |
if ('wp' == $whichdb && 0 == count($all_tables)) {
|
1438 |
$extra = ($updraftplus->newresumption_scheduled) ? ' - '.__('please wait for the rescheduled attempt', 'updraftplus') : '';
|
1439 |
$updraftplus->log("Error: No WordPress database tables found (SHOW TABLES returned nothing)".$extra);
|
@@ -1449,10 +1535,10 @@ class UpdraftPlus_Backup {
|
|
1449 |
if (!$updraftplus->really_is_writable($this->updraft_dir)) {
|
1450 |
$updraftplus->log("The backup directory (".$this->updraft_dir.") could not be written to (could be account/disk space full, or wrong permissions).");
|
1451 |
$updraftplus->log($this->updraft_dir.": ".__('The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail.', 'updraftplus'), 'warning');
|
1452 |
-
|
1453 |
}
|
1454 |
|
1455 |
-
|
1456 |
$this->duplicate_tables_exist = false;
|
1457 |
foreach ($all_table_names as $table) {
|
1458 |
if (strtolower($table) != $table && in_array(strtolower($table), $all_table_names)) {
|
@@ -1488,7 +1574,7 @@ class UpdraftPlus_Backup {
|
|
1488 |
$stitch_files[] = $table_file_prefix;
|
1489 |
} else {
|
1490 |
// === is needed, otherwise 'false' matches (i.e. prefix does not match)
|
1491 |
-
if (empty($this->table_prefix) || ($this->duplicate_tables_exist
|
1492 |
|
1493 |
if (!apply_filters('updraftplus_backup_table', true, $table, $this->table_prefix, $whichdb, $dbinfo)) {
|
1494 |
$updraftplus->log("Skipping table (filtered): $table");
|
@@ -1516,7 +1602,7 @@ class UpdraftPlus_Backup {
|
|
1516 |
if (false === $opened) return false;
|
1517 |
|
1518 |
// Create the SQL statements
|
1519 |
-
$this->stow("# " . sprintf('Table: %s'
|
1520 |
$updraftplus->jobdata_set('dbcreating_substatus', array('t' => $table, 'i' => $total_tables, 'a' => $how_many_tables));
|
1521 |
|
1522 |
$table_status = $this->wpdb_obj->get_row("SHOW TABLE STATUS WHERE Name='$table'");
|
@@ -1531,7 +1617,7 @@ class UpdraftPlus_Backup {
|
|
1531 |
}
|
1532 |
|
1533 |
// Don't include the job data for any backups - so that when the database is restored, it doesn't continue an apparently incomplete backup
|
1534 |
-
if
|
1535 |
$where = 'meta_key NOT LIKE "updraft_jobdata_%"';
|
1536 |
} elseif ('wp' == $this->whichdb && (!empty($this->table_prefix) && strtolower($this->table_prefix.'options') == strtolower($table))) {
|
1537 |
if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
|
@@ -1550,7 +1636,7 @@ class UpdraftPlus_Backup {
|
|
1550 |
// If no check-in last time, then we could in future try the other method (but - any point in retrying slow method on large tables??)
|
1551 |
|
1552 |
// New Jul 2014: This attempt to use bindump instead at a lower threshold is quite conservative - only if the last successful run was exactly two resumptions ago - may be useful to expand
|
1553 |
-
$bindump_threshold = (!$updraftplus->something_useful_happened && !empty($updraftplus->current_resumption) && ($updraftplus->current_resumption - $updraftplus->last_successful_resumption
|
1554 |
|
1555 |
$bindump = (isset($rows) && ($rows>$bindump_threshold || (defined('UPDRAFTPLUS_ALWAYS_TRY_MYSQLDUMP') && UPDRAFTPLUS_ALWAYS_TRY_MYSQLDUMP)) && is_string($binsqldump)) ? $this->backup_table_bindump($binsqldump, $table, $where) : false;
|
1556 |
if (true !== $bindump) $this->backup_table($table, $where, 'none', $table_type);
|
@@ -1582,8 +1668,8 @@ class UpdraftPlus_Backup {
|
|
1582 |
}
|
1583 |
$time_this_run = time()-$updraftplus->opened_log_time;
|
1584 |
if ($time_this_run > 2000) {
|
1585 |
-
|
1586 |
-
|
1587 |
$updraftplus->reschedule(60);
|
1588 |
$updraftplus->log("Have been running very long, and it seems the database went away; scheduling a resumption and terminating for now");
|
1589 |
$updraftplus->record_still_alive();
|
@@ -1597,7 +1683,7 @@ class UpdraftPlus_Backup {
|
|
1597 |
// Race detection - with zip files now being resumable, these can more easily occur, with two running side-by-side
|
1598 |
$backup_final_file_name = $backup_file_base.'-db'.$this->whichdb_suffix.'.gz';
|
1599 |
$time_now = time();
|
1600 |
-
$time_mod = (int)@filemtime($backup_final_file_name);
|
1601 |
if (file_exists($backup_final_file_name) && $time_mod>100 && ($time_now-$time_mod)<30) {
|
1602 |
$updraftplus->terminate_due_to_activity($backup_final_file_name, $time_now, $time_mod);
|
1603 |
}
|
@@ -1629,13 +1715,15 @@ class UpdraftPlus_Backup {
|
|
1629 |
$updraftplus->log(__("Failed to open database file for reading:", 'updraftplus').' '.$table_file.'.gz', 'error');
|
1630 |
$errors++;
|
1631 |
} else {
|
1632 |
-
while ($line = gzgets($handle, 65536)) {
|
|
|
|
|
1633 |
gzclose($handle);
|
1634 |
$unlink_files[] = $this->updraft_dir.'/'.$table_file.'.gz';
|
1635 |
}
|
1636 |
$sind++;
|
1637 |
// Came across a database with 7600 tables... adding them all took over 500 seconds; and so when the resumption started up, no activity was detected
|
1638 |
-
if ($sind % 100
|
1639 |
}
|
1640 |
|
1641 |
if (defined('DB_CHARSET') && DB_CHARSET) {
|
@@ -1685,13 +1773,13 @@ class UpdraftPlus_Backup {
|
|
1685 |
|
1686 |
// Deal with Windows/old MySQL setups with erroneous table prefixes differing in case
|
1687 |
// Can't get binary mysqldump to make this transformation
|
1688 |
-
//
|
1689 |
|
1690 |
$pfile = md5(time().rand()).'.tmp';
|
1691 |
file_put_contents($this->updraft_dir.'/'.$pfile, "[mysqldump]\npassword=".$this->dbinfo['pass']."\n");
|
1692 |
|
1693 |
// Note: escapeshellarg() adds quotes around the string
|
1694 |
-
if ($where) $where="--where=".escapeshellarg($where);
|
1695 |
|
1696 |
if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
|
1697 |
$exec = "cd ".escapeshellarg(str_replace('/', '\\', $this->updraft_dir))." & ";
|
@@ -1715,12 +1803,12 @@ class UpdraftPlus_Backup {
|
|
1715 |
}
|
1716 |
}
|
1717 |
$ret = pclose($handle);
|
1718 |
-
if (
|
1719 |
$updraftplus->log("Binary mysqldump: error (code: $ret)");
|
1720 |
// Keep counter of failures? Change value of binsqldump?
|
1721 |
} else {
|
1722 |
if ($any_output) {
|
1723 |
-
$updraftplus->log("Table $table_name: binary mysqldump finished (writes: $writes) in ".sprintf("%.02f",max(microtime(true)-$microtime,0.00001))." seconds");
|
1724 |
$ret = true;
|
1725 |
}
|
1726 |
}
|
@@ -1736,16 +1824,15 @@ class UpdraftPlus_Backup {
|
|
1736 |
}
|
1737 |
|
1738 |
/**
|
1739 |
-
* Taken partially from phpMyAdmin and partially from
|
1740 |
-
* Alain Wolf, Zurich - Switzerland
|
1741 |
* Website: http://restkultur.ch/personal/wolf/scripts/db_backup/
|
1742 |
-
* Modified by Scott Merrill (http://www.skippy.net/)
|
1743 |
-
*
|
1744 |
-
* @param String $table
|
1745 |
-
* @param String $where
|
1746 |
-
* @param String $segment
|
1747 |
-
* @param String $table_type
|
1748 |
-
* @return
|
1749 |
*/
|
1750 |
private function backup_table($table, $where = '', $segment = 'none', $table_type = 'BASE TABLE') {
|
1751 |
global $updraftplus;
|
@@ -1754,15 +1841,15 @@ class UpdraftPlus_Backup {
|
|
1754 |
$total_rows = 0;
|
1755 |
|
1756 |
// Deal with Windows/old MySQL setups with erroneous table prefixes differing in case
|
1757 |
-
$dump_as_table = ($this->duplicate_tables_exist
|
1758 |
|
1759 |
$table_structure = $this->wpdb_obj->get_results("DESCRIBE ".$updraftplus->backquote($table));
|
1760 |
if (!$table_structure) {
|
1761 |
-
|
1762 |
return false;
|
1763 |
}
|
1764 |
|
1765 |
-
if ('none' == $segment|| 0 == $segment) {
|
1766 |
// Add SQL statement to drop existing table
|
1767 |
$this->stow("\n# Delete any existing table ".$updraftplus->backquote($table)."\n\n");
|
1768 |
$this->stow("DROP TABLE IF EXISTS " . $updraftplus->backquote($dump_as_table) . ";\n");
|
@@ -1781,12 +1868,12 @@ class UpdraftPlus_Backup {
|
|
1781 |
$create_table = $this->wpdb_obj->get_results("SHOW CREATE TABLE ".$updraftplus->backquote($table), ARRAY_N);
|
1782 |
if (false === $create_table) {
|
1783 |
$err_msg ='Error with SHOW CREATE TABLE for '.$table;
|
1784 |
-
|
1785 |
$this->stow("#\n# $err_msg\n#\n");
|
1786 |
}
|
1787 |
$create_line = $updraftplus->str_lreplace('TYPE=', 'ENGINE=', $create_table[0][1]);
|
1788 |
|
1789 |
-
|
1790 |
if (preg_match('/ENGINE=([^\s;]+)/', $create_line, $eng_match)) {
|
1791 |
$engine = $eng_match[1];
|
1792 |
if ('myisam' == strtolower($engine)) {
|
@@ -1808,7 +1895,7 @@ class UpdraftPlus_Backup {
|
|
1808 |
|
1809 |
}
|
1810 |
|
1811 |
-
|
1812 |
$table_sans_prefix = substr($table, strlen($this->table_prefix_raw));
|
1813 |
$data_optional_tables = ('wp' == $this->whichdb) ? apply_filters('updraftplus_data_optional_tables', explode(',', UPDRAFTPLUS_DATA_OPTIONAL_TABLES)) : array();
|
1814 |
if (in_array($table_sans_prefix, $data_optional_tables)) {
|
@@ -1819,13 +1906,14 @@ class UpdraftPlus_Backup {
|
|
1819 |
}
|
1820 |
|
1821 |
// In UpdraftPlus, segment is always 'none'
|
1822 |
-
if ('VIEW' != $table_type && ('none' == $segment|| 0 <= $segment)) {
|
1823 |
$defs = array();
|
1824 |
$integer_fields = array();
|
1825 |
// $table_structure was from "DESCRIBE $table"
|
1826 |
foreach ($table_structure as $struct) {
|
1827 |
-
if ((0 === strpos($struct->Type, 'tinyint')) || (0 === strpos(strtolower($struct->Type), 'smallint'))
|
1828 |
-
(0 === strpos(strtolower($struct->Type), 'mediumint')) || (0 === strpos(strtolower($struct->Type), 'int')) || (0 === strpos(strtolower($struct->Type), 'bigint'))
|
|
|
1829 |
$defs[strtolower($struct->Field)] = (null === $struct->Default ) ? 'NULL' : $struct->Default;
|
1830 |
$integer_fields[strtolower($struct->Field)] = "1";
|
1831 |
}
|
@@ -1835,7 +1923,7 @@ class UpdraftPlus_Backup {
|
|
1835 |
|
1836 |
$increment = 1000;
|
1837 |
if (!$updraftplus->something_useful_happened && !empty($updraftplus->current_resumption) && ($updraftplus->current_resumption - $updraftplus->last_successful_resumption > 1)) {
|
1838 |
-
|
1839 |
$increment = ($updraftplus->current_resumption - $updraftplus->last_successful_resumption > 2) ? 350 : 500;
|
1840 |
}
|
1841 |
|
@@ -1857,8 +1945,8 @@ class UpdraftPlus_Backup {
|
|
1857 |
|
1858 |
$table_data = $this->wpdb_obj->get_results("SELECT * FROM ".$updraftplus->backquote($table)." $where LIMIT {$row_start}, {$row_inc}", ARRAY_A);
|
1859 |
$entries = 'INSERT INTO '.$updraftplus->backquote($dump_as_table).' VALUES ';
|
1860 |
-
//
|
1861 |
-
if($table_data) {
|
1862 |
$thisentry = "";
|
1863 |
foreach ($table_data as $row) {
|
1864 |
$total_rows++;
|
@@ -1888,17 +1976,22 @@ class UpdraftPlus_Backup {
|
|
1888 |
} while (count($table_data) > 0 && 'none' == $segment);
|
1889 |
}
|
1890 |
|
1891 |
-
if (
|
1892 |
// Create footer/closing comment in SQL-file
|
1893 |
$this->stow("\n# End of data contents of table ".$updraftplus->backquote($table)."\n\n");
|
1894 |
}
|
1895 |
-
|
1896 |
|
1897 |
}
|
1898 |
|
1899 |
/*END OF WP-DB-BACKUP BLOCK */
|
1900 |
|
1901 |
-
|
|
|
|
|
|
|
|
|
|
|
1902 |
public function encrypt_file($file) {
|
1903 |
global $updraftplus;
|
1904 |
$encryption = UpdraftPlus_Options::get_updraft_option('updraft_encryptionphrase');
|
@@ -1925,8 +2018,8 @@ class UpdraftPlus_Backup {
|
|
1925 |
die();
|
1926 |
}
|
1927 |
if (null === $result) {
|
1928 |
-
//
|
1929 |
-
//
|
1930 |
return basename($file);
|
1931 |
}
|
1932 |
return $result;
|
@@ -1939,19 +2032,25 @@ class UpdraftPlus_Backup {
|
|
1939 |
return ($this->dbhandle_isgz) ? gzclose($this->dbhandle) : fclose($this->dbhandle);
|
1940 |
}
|
1941 |
|
1942 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1943 |
public function backup_db_open($file, $allow_gz = true) {
|
1944 |
-
if (function_exists('gzopen') &&
|
1945 |
$this->dbhandle = @gzopen($file, 'w');
|
1946 |
$this->dbhandle_isgz = true;
|
1947 |
} else {
|
1948 |
$this->dbhandle = @fopen($file, 'w');
|
1949 |
$this->dbhandle_isgz = false;
|
1950 |
}
|
1951 |
-
if(false === $this->dbhandle) {
|
1952 |
global $updraftplus;
|
1953 |
$updraftplus->log("ERROR: $file: Could not open the backup file for writing");
|
1954 |
-
$updraftplus->log($file.": ".__("Could not open the backup file for writing",'updraftplus'), 'error');
|
1955 |
}
|
1956 |
return $this->dbhandle;
|
1957 |
}
|
@@ -1966,11 +2065,11 @@ class UpdraftPlus_Backup {
|
|
1966 |
public function stow($query_line) {
|
1967 |
if ($this->dbhandle_isgz) {
|
1968 |
if (false == ($ret = @gzwrite($this->dbhandle, $query_line))) {
|
1969 |
-
|
1970 |
}
|
1971 |
} else {
|
1972 |
if (false == ($ret = @fwrite($this->dbhandle, $query_line))) {
|
1973 |
-
|
1974 |
}
|
1975 |
}
|
1976 |
return $ret;
|
@@ -1982,7 +2081,7 @@ class UpdraftPlus_Backup {
|
|
1982 |
include(ABSPATH.WPINC.'/version.php');
|
1983 |
|
1984 |
$mysql_version = $this->wpdb_obj->db_version();
|
1985 |
-
|
1986 |
|
1987 |
if ('wp' == $this->whichdb) {
|
1988 |
$wp_upload_dir = wp_upload_dir();
|
@@ -2010,8 +2109,7 @@ class UpdraftPlus_Backup {
|
|
2010 |
$label = $updraftplus->jobdata_get('label');
|
2011 |
if (!empty($label)) $this->stow("# Label: $label\n");
|
2012 |
|
2013 |
-
$this->stow("
|
2014 |
-
$this->stow("# Generated: ".date("l j. F Y H:i T")."\n");
|
2015 |
$this->stow("# Hostname: ".$this->dbinfo['host']."\n");
|
2016 |
$this->stow("# Database: ".$updraftplus->backquote($this->dbinfo['name'])."\n");
|
2017 |
|
@@ -2034,6 +2132,7 @@ class UpdraftPlus_Backup {
|
|
2034 |
$this->stow("/*!40101 SET foreign_key_checks = 0 */;\n\n");
|
2035 |
}
|
2036 |
|
|
|
2037 |
public function phpmailer_init($phpmailer) {
|
2038 |
global $updraftplus;
|
2039 |
if (empty($this->attachments) || !is_array($this->attachments)) return;
|
@@ -2047,11 +2146,19 @@ class UpdraftPlus_Backup {
|
|
2047 |
}
|
2048 |
}
|
2049 |
|
2050 |
-
|
2051 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2052 |
private function makezip_recursive_add($fullpath, $use_path_when_storing, $original_fullpath, $startlevels = 1, &$exclude) {
|
2053 |
|
2054 |
-
//
|
2055 |
|
2056 |
global $updraftplus;
|
2057 |
|
@@ -2068,11 +2175,11 @@ class UpdraftPlus_Backup {
|
|
2068 |
// Is the place we've ended up above the original base? That leads to infinite recursion
|
2069 |
if (($fullpath !== $original_fullpath && strpos($original_fullpath, $fullpath) === 0) || ($original_fullpath == $fullpath && ((1== $startlevels && strpos($use_path_when_storing, '/') !== false) || (2 == $startlevels && substr_count($use_path_when_storing, '/') >1)))) {
|
2070 |
$updraftplus->log("Infinite recursion: symlink led us to $fullpath, which is within $original_fullpath");
|
2071 |
-
$updraftplus->log(__("Infinite recursion: consult your log for more information",'updraftplus'), 'error');
|
2072 |
return false;
|
2073 |
}
|
2074 |
|
2075 |
-
|
2076 |
$stripped_storage_path = (1 == $startlevels) ? $use_path_when_storing : substr($use_path_when_storing, strpos($use_path_when_storing, '/') + 1);
|
2077 |
if (false !== ($fkey = array_search($stripped_storage_path, $exclude))) {
|
2078 |
$updraftplus->log("Entity excluded by configuration option: $stripped_storage_path");
|
@@ -2095,7 +2202,7 @@ class UpdraftPlus_Backup {
|
|
2095 |
if ($mtime > 0 && $mtime > $if_altered_since) {
|
2096 |
$this->zipfiles_batched[$fullpath] = $key;
|
2097 |
$this->makezip_recursive_batchedbytes += @filesize($fullpath);
|
2098 |
-
|
2099 |
} else {
|
2100 |
$this->zipfiles_skipped_notaltered[$fullpath] = $key;
|
2101 |
}
|
@@ -2123,7 +2230,7 @@ class UpdraftPlus_Backup {
|
|
2123 |
|
2124 |
if (!$dir_handle = @opendir($fullpath)) {
|
2125 |
$updraftplus->log("Failed to open directory: $fullpath");
|
2126 |
-
$updraftplus->log(sprintf(__("Failed to open directory (check the file permissions and ownership): %s",'updraftplus'), $fullpath), 'error');
|
2127 |
return false;
|
2128 |
}
|
2129 |
|
@@ -2149,7 +2256,7 @@ class UpdraftPlus_Backup {
|
|
2149 |
if ($mtime > 0 && $mtime > $if_altered_since) {
|
2150 |
$this->zipfiles_batched[$deref] = $use_path_when_storing.'/'.$e;
|
2151 |
$this->makezip_recursive_batchedbytes += @filesize($deref);
|
2152 |
-
|
2153 |
} else {
|
2154 |
$this->zipfiles_skipped_notaltered[$deref] = $use_path_when_storing.'/'.$e;
|
2155 |
}
|
@@ -2160,8 +2267,8 @@ class UpdraftPlus_Backup {
|
|
2160 |
}
|
2161 |
} elseif (is_dir($deref)) {
|
2162 |
|
2163 |
-
//
|
2164 |
-
//
|
2165 |
|
2166 |
$this->makezip_recursive_add($deref, $use_path_when_storing.'/'.$e, $original_fullpath, $startlevels, $exclude);
|
2167 |
}
|
@@ -2278,8 +2385,17 @@ class UpdraftPlus_Backup {
|
|
2278 |
return unserialize($var);
|
2279 |
}
|
2280 |
|
2281 |
-
|
2282 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2283 |
private function make_zipfile($source, $backup_file_basename, $whichone, $retry_on_error = true) {
|
2284 |
|
2285 |
global $updraftplus;
|
@@ -2291,7 +2407,7 @@ class UpdraftPlus_Backup {
|
|
2291 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
2292 |
|
2293 |
// Legacy/redundant
|
2294 |
-
//if (empty($whichone) && is_string($whichone)) $whichone = basename($source);
|
2295 |
|
2296 |
// When to prefer PCL:
|
2297 |
// - We were asked to
|
@@ -2300,21 +2416,21 @@ class UpdraftPlus_Backup {
|
|
2300 |
|
2301 |
// We need meta-info about $whichone
|
2302 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, false);
|
2303 |
-
|
2304 |
-
|
2305 |
$this->make_zipfile_source = (is_array($source) && isset($backupable_entities[$whichone])) ? (('uploads' == $whichone) ? dirname($backupable_entities[$whichone]) : $backupable_entities[$whichone]) : dirname($source);
|
2306 |
|
2307 |
$this->existing_files = array();
|
2308 |
-
|
2309 |
$this->existing_files_rawsize = 0;
|
2310 |
$this->existing_zipfiles_size = 0;
|
2311 |
|
2312 |
// Enumerate existing files
|
2313 |
// Usually first_linked_index is zero; the exception being with more files, where previous zips' contents are irrelevant
|
2314 |
for ($j=$this->first_linked_index; $j<=$this->index; $j++) {
|
2315 |
-
$jtext = (
|
2316 |
-
|
2317 |
-
|
2318 |
$examine_zip = $this->updraft_dir.'/'.$backup_file_basename.'-'.$whichone.$jtext.'.zip'.(($j == $this->index) ? '.tmp' : '');
|
2319 |
|
2320 |
// This comes from https://wordpress.org/support/topic/updraftplus-not-moving-all-files-to-remote-server - where it appears that the jobdata's record of the split was done (i.e. database write), but the *earlier* rename of the .tmp file was not done (i.e. I/O lost). i.e. In theory, this should be impossible; but, the sychnronicity apparently cannot be fully relied upon in some setups. The check for the index being one behind is being conservative - there's no inherent reason why it couldn't be done for other indexes.
|
@@ -2341,8 +2457,7 @@ class UpdraftPlus_Backup {
|
|
2341 |
$updraftplus->log("Could not open zip file to examine (".$zip->last_error."); will remove: ".basename($examine_zip));
|
2342 |
@unlink($examine_zip);
|
2343 |
} else {
|
2344 |
-
|
2345 |
-
# Don't put this in the for loop, or the magic __get() method gets called and opens the zip file every time the loop goes round
|
2346 |
$numfiles = $zip->numFiles;
|
2347 |
|
2348 |
for ($i=0; $i < $numfiles; $i++) {
|
@@ -2357,17 +2472,17 @@ class UpdraftPlus_Backup {
|
|
2357 |
|
2358 |
$updraftplus->log(basename($examine_zip).": Zip file already exists, with ".count($this->existing_files)." files");
|
2359 |
|
2360 |
-
|
2361 |
if ($j == $this->index) {
|
2362 |
if (isset($this->try_split)) {
|
2363 |
if (filesize($examine_zip) > 50*1048576) {
|
2364 |
-
|
2365 |
$this->zip_split_every = max(
|
2366 |
-
(int)$this->zip_split_every/2,
|
2367 |
UPDRAFTPLUS_SPLIT_MIN*1048576,
|
2368 |
min(filesize($examine_zip)-1048576, $this->zip_split_every)
|
2369 |
);
|
2370 |
-
$updraftplus->jobdata_set('split_every', (int)($this->zip_split_every/1048576));
|
2371 |
$updraftplus->log("No check-in on last two runs; bumping index and reducing zip split to: ".round($this->zip_split_every/1048576, 1)." MB");
|
2372 |
$do_bump_index = true;
|
2373 |
}
|
@@ -2398,10 +2513,10 @@ class UpdraftPlus_Backup {
|
|
2398 |
|
2399 |
$error_occurred = false;
|
2400 |
|
2401 |
-
|
2402 |
$this->source = $source;
|
2403 |
|
2404 |
-
|
2405 |
$this->makezip_recursive_batchedbytes = 0;
|
2406 |
if (!is_array($source)) $source=array($source);
|
2407 |
|
@@ -2427,7 +2542,9 @@ class UpdraftPlus_Backup {
|
|
2427 |
// Cache files exist; shall we use them?
|
2428 |
$mtime = filemtime($cache_file_base.'-zfd.gz.tmp');
|
2429 |
// Require < 30 minutes old
|
2430 |
-
if (time() - $mtime < 1800) {
|
|
|
|
|
2431 |
$any_failures = false;
|
2432 |
if ($use_cache_files) {
|
2433 |
$var = $this->unserialize_gz_cache_file($cache_file_base.'-zfd.gz.tmp');
|
@@ -2440,7 +2557,7 @@ class UpdraftPlus_Backup {
|
|
2440 |
$var = maybe_unserialize(file_get_contents($cache_file_base.'-info.tmp'));
|
2441 |
if (is_array($var) && isset($var['makezip_recursive_batchedbytes'])) {
|
2442 |
$this->makezip_recursive_batchedbytes = $var['makezip_recursive_batchedbytes'];
|
2443 |
-
if (file_exists($cache_file_base.'-zfs.gz.tmp')) {
|
2444 |
$var = $this->unserialize_gz_cache_file($cache_file_base.'-zfs.gz.tmp');
|
2445 |
if (is_array($var)) {
|
2446 |
$this->zipfiles_skipped_notaltered = $var;
|
@@ -2481,7 +2598,7 @@ class UpdraftPlus_Backup {
|
|
2481 |
$this->excluded_prefixes = $this->get_excluded_prefixes($exclude);
|
2482 |
|
2483 |
foreach ($source as $element) {
|
2484 |
-
|
2485 |
if ('uploads' == $whichone) {
|
2486 |
if (empty($got_uploads_from_cache)) {
|
2487 |
$dirname = dirname($element);
|
@@ -2504,13 +2621,15 @@ class UpdraftPlus_Backup {
|
|
2504 |
|
2505 |
// Cache the file scan, if it looks like it'll be useful
|
2506 |
// We use gzip to reduce the size as on hosts which limit disk I/O, the cacheing may make things worse
|
2507 |
-
//
|
2508 |
-
if (('uploads' == $whichone|| 'others' == $whichone) && !$error_occurred && function_exists('gzopen') && function_exists('gzwrite')) {
|
2509 |
$cache_file_base = $this->zip_basename.'-cachelist-'.$this->makezip_if_altered_since;
|
2510 |
|
2511 |
// Just approximate - we're trying to avoid an otherwise-unpredictable PHP fatal error. Cacheing only happens if file enumeration took a long time - so presumably there are very many.
|
2512 |
$memory_needed_estimate = 0;
|
2513 |
-
foreach ($this->zipfiles_batched as $k => $v) {
|
|
|
|
|
2514 |
|
2515 |
// We haven't bothered to check if we just fetched the files from cache, as that shouldn't take a long time and so shouldn't trigger this
|
2516 |
// Let us suppose we need 15% overhead for gzipping
|
@@ -2536,9 +2655,9 @@ class UpdraftPlus_Backup {
|
|
2536 |
$final = gzwrite($whandle, $buf);
|
2537 |
unset($buf);
|
2538 |
|
2539 |
-
//
|
2540 |
-
//
|
2541 |
-
//
|
2542 |
if (!$final) {
|
2543 |
@unlink($cache_file_base.'-zfb.gz.tmp');
|
2544 |
@gzclose($whandle);
|
@@ -2576,6 +2695,7 @@ class UpdraftPlus_Backup {
|
|
2576 |
@unlink($cache_file_base.'-zfd.gz.tmp');
|
2577 |
@unlink($cache_file_base.'-zfb.gz.tmp');
|
2578 |
@unlink($cache_file_base.'-info.tmp');
|
|
|
2579 |
} else {
|
2580 |
// Success.
|
2581 |
}
|
@@ -2606,7 +2726,7 @@ class UpdraftPlus_Backup {
|
|
2606 |
|
2607 |
if (count($this->zipfiles_dirbatched) > 0 || count($this->zipfiles_batched) > 0) {
|
2608 |
|
2609 |
-
$updraftplus->log(sprintf("Total entities for the zip file: %d directories, %d files (%d skipped as non-modified), %s MB", count($this->zipfiles_dirbatched), count($this->zipfiles_batched), count($this->zipfiles_skipped_notaltered), round($this->makezip_recursive_batchedbytes/1048576,1)));
|
2610 |
|
2611 |
// No need to warn if we're going to retry anyway. (And if we get killed, the zip will be rescanned for its contents upon resumption).
|
2612 |
$warn_on_failures = ($retry_on_error) ? false : true;
|
@@ -2644,8 +2764,8 @@ class UpdraftPlus_Backup {
|
|
2644 |
|
2645 |
// zipfiles_added > 0 means that $zip->close() has been called. i.e. An attempt was made to add something: something _should_ be there.
|
2646 |
// Why return true even if $error_occurred may be set? 1) Because in that case, a warning has already been logged. 2) Because returning false causes an error to be logged, which means it'll all be retried again. Also 3) this has been the pattern of the code for a long time, and the algorithm has been proven in the real-world: don't change what's not broken.
|
2647 |
-
//
|
2648 |
-
if (
|
2649 |
return true;
|
2650 |
} else {
|
2651 |
$updraftplus->log("makezip failure: zipfiles_added=".$this->zipfiles_added.", error_occurred=".$error_occurred." (method=".$this->use_zip_object.")");
|
@@ -2655,7 +2775,7 @@ class UpdraftPlus_Backup {
|
|
2655 |
}
|
2656 |
|
2657 |
private function basename($element) {
|
2658 |
-
|
2659 |
$dirname = dirname($element);
|
2660 |
$basename_manual = preg_replace('#^[\\/]+#', '', substr($element, strlen($dirname)));
|
2661 |
$basename = basename($element);
|
@@ -2680,73 +2800,162 @@ class UpdraftPlus_Backup {
|
|
2680 |
return false;
|
2681 |
}
|
2682 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2683 |
// Q. Why don't we only open and close the zip file just once?
|
2684 |
// A. Because apparently PHP doesn't write out until the final close, and it will return an error if anything file has vanished in the meantime. So going directory-by-directory reduces our chances of hitting an error if the filesystem is changing underneath us (which is very possible if dealing with e.g. 1GB of files)
|
2685 |
|
2686 |
-
|
2687 |
-
|
|
|
|
|
|
|
|
|
|
|
2688 |
private function makezip_addfiles($warn_on_failures) {
|
2689 |
|
2690 |
global $updraftplus;
|
2691 |
|
2692 |
-
|
2693 |
$bump_index = false;
|
2694 |
$ret = true;
|
2695 |
|
2696 |
-
$zipfile = $this->zip_basename.(($this->index
|
2697 |
|
2698 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
2699 |
-
if ((int)$maxzipbatch < 1024) $maxzipbatch = 26214400;
|
2700 |
|
2701 |
// Short-circuit the null case, because we want to detect later if something useful happenned
|
2702 |
if (count($this->zipfiles_dirbatched) == 0 && count($this->zipfiles_batched) == 0) return true;
|
2703 |
|
2704 |
-
|
2705 |
-
|
2706 |
-
|
2707 |
$force_allinone = false;
|
2708 |
if (0 == $this->index && $this->makezip_recursive_batchedbytes < $this->zip_split_every) {
|
2709 |
-
|
2710 |
-
|
2711 |
-
|
2712 |
if ('UpdraftPlus_PclZip' == $this->use_zip_object && ($this->makezip_recursive_batchedbytes < 512*1048576 || (defined('UPDRAFTPLUS_PCLZIP_FORCEALLINONE') && UPDRAFTPLUS_PCLZIP_FORCEALLINONE == true && 'UpdraftPlus_PclZip' == $this->use_zip_object))) {
|
2713 |
$updraftplus->log("Only one archive required (".$this->use_zip_object.") - will attempt to do in single operation (data: ".round($this->makezip_recursive_batchedbytes/1024, 1)." KB, split: ".round($this->zip_split_every/1024, 1)." KB)");
|
2714 |
-
//
|
2715 |
$force_allinone = true;
|
2716 |
-
//
|
2717 |
-
//
|
2718 |
-
//
|
2719 |
-
//
|
2720 |
-
//
|
2721 |
-
//
|
2722 |
-
//
|
2723 |
-
//
|
2724 |
-
//
|
2725 |
-
//
|
2726 |
-
//
|
2727 |
-
//
|
2728 |
-
//
|
2729 |
-
//
|
2730 |
-
//
|
2731 |
-
//
|
2732 |
-
//
|
2733 |
-
//
|
2734 |
-
//
|
2735 |
-
//
|
2736 |
-
//
|
2737 |
-
//
|
2738 |
-
//
|
2739 |
-
//
|
2740 |
-
//
|
2741 |
-
//
|
2742 |
-
//
|
2743 |
}
|
2744 |
}
|
2745 |
|
2746 |
// 05-Mar-2013 - added a new check on the total data added; it appears that things fall over if too much data is contained in the cumulative total of files that were addFile'd without a close-open cycle; presumably data is being stored in memory. In the case in question, it was a batch of MP3 files of around 100MB each - 25 of those equals 2.5GB!
|
2747 |
|
2748 |
$data_added_since_reopen = 0;
|
2749 |
-
|
2750 |
$files_zipadded_since_open = array();
|
2751 |
|
2752 |
$zip = new $this->use_zip_object;
|
@@ -2760,12 +2969,16 @@ class UpdraftPlus_Backup {
|
|
2760 |
$original_size = 0;
|
2761 |
}
|
2762 |
|
2763 |
-
if (
|
2764 |
-
|
2765 |
-
|
|
|
|
|
2766 |
|
2767 |
// Make sure all directories are created before we start creating files
|
2768 |
-
while ($dir = array_pop($this->zipfiles_dirbatched))
|
|
|
|
|
2769 |
$zipfiles_added_thisbatch = 0;
|
2770 |
|
2771 |
// Go through all those batched files
|
@@ -2810,8 +3023,8 @@ class UpdraftPlus_Backup {
|
|
2810 |
- more than 500 files batched (should perhaps intelligently lower this as the zip file gets bigger - not yet needed)
|
2811 |
*/
|
2812 |
|
2813 |
-
|
2814 |
-
|
2815 |
$reaching_split_limit = ($this->zip_last_ratio > 0 && $original_size>0 && ($original_size + 1.1*$data_added_since_reopen*$this->zip_last_ratio) > $this->zip_split_every) ? true : false;
|
2816 |
|
2817 |
if (!$force_allinone && ($zipfiles_added_thisbatch > UPDRAFTPLUS_MAXBATCHFILES || $reaching_split_limit || $data_added_since_reopen > $maxzipbatch || (time() - $this->zipfiles_lastwritetime) > 2)) {
|
@@ -2821,13 +3034,13 @@ class UpdraftPlus_Backup {
|
|
2821 |
|
2822 |
if ($data_added_since_reopen > $maxzipbatch) {
|
2823 |
$something_useful_sizetest = true;
|
2824 |
-
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over ".round($maxzipbatch/1048576,1)." MB added on this batch (".round($data_added_since_reopen/1048576,1)." MB, ".count($this->zipfiles_batched)." files batched, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
2825 |
} elseif ($zipfiles_added_thisbatch > UPDRAFTPLUS_MAXBATCHFILES) {
|
2826 |
-
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over ".UPDRAFTPLUS_MAXBATCHFILES." files added on this batch (".round($data_added_since_reopen/1048576,1)." MB, ".count($this->zipfiles_batched)." files batched, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
2827 |
} elseif (!$reaching_split_limit) {
|
2828 |
-
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over 2.0 seconds have passed since the last write (".round($data_added_since_reopen/1048576,1)." MB, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") files added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
2829 |
} else {
|
2830 |
-
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): possibly approaching split limit (".round($data_added_since_reopen/1048576,1)." MB, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") files added so far); last ratio: ".round($this->zip_last_ratio,4)."; re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
2831 |
}
|
2832 |
|
2833 |
if (!$zip->close()) {
|
@@ -2838,28 +3051,28 @@ class UpdraftPlus_Backup {
|
|
2838 |
|
2839 |
$zipfiles_added_thisbatch = 0;
|
2840 |
|
2841 |
-
|
2842 |
unset($zip);
|
2843 |
$files_zipadded_since_open = array();
|
2844 |
// Call here, in case we've got so many big files that we don't complete the whole routine
|
2845 |
if (filesize($zipfile) > $original_size) {
|
2846 |
|
2847 |
-
|
2848 |
$this->zip_last_ratio = ($data_added_since_reopen > 0) ? min((filesize($zipfile) - $original_size)/$data_added_since_reopen, 1) : 1;
|
2849 |
|
2850 |
-
|
2851 |
$original_size = filesize($zipfile);
|
2852 |
|
2853 |
-
|
2854 |
if ($reaching_split_limit || filesize($zipfile) > $this->zip_split_every) {
|
2855 |
$bump_index = true;
|
2856 |
-
|
2857 |
$bumped_at = round(filesize($zipfile)/1048576, 1);
|
2858 |
}
|
2859 |
|
2860 |
-
|
2861 |
|
2862 |
-
|
2863 |
if (!$something_useful_sizetest) {
|
2864 |
$updraftplus->something_useful_happened();
|
2865 |
} else {
|
@@ -2901,12 +3114,9 @@ class UpdraftPlus_Backup {
|
|
2901 |
// How much can we increase it by?
|
2902 |
if ($normalised_time_since_began <6) {
|
2903 |
if ($run_times_known > 0 && $max_time >0) {
|
2904 |
-
$new_maxzipbatch = min(floor(max(
|
2905 |
-
$maxzipbatch*6/$normalised_time_since_began, $maxzipbatch*((0.6*$max_time)/$normalised_time_since_began))),
|
2906 |
-
200*1024*1024
|
2907 |
-
);
|
2908 |
} else {
|
2909 |
-
|
2910 |
$new_maxzipbatch = min(floor($maxzipbatch*6/$normalised_time_since_began), 200*1024*1024);
|
2911 |
}
|
2912 |
} else {
|
@@ -2914,15 +3124,15 @@ class UpdraftPlus_Backup {
|
|
2914 |
$new_maxzipbatch = min(floor($maxzipbatch*((0.6*$max_time)/$normalised_time_since_began)), 200*1024*1024);
|
2915 |
}
|
2916 |
|
2917 |
-
|
2918 |
-
|
2919 |
-
|
2920 |
-
|
2921 |
|
2922 |
-
|
2923 |
$new_maxzipbatch = min($new_maxzipbatch, $this->zip_split_every);
|
2924 |
|
2925 |
-
|
2926 |
$maxzipbatch_ceiling = $updraftplus->jobdata_get('maxzipbatch_ceiling');
|
2927 |
if (is_numeric($maxzipbatch_ceiling) && $maxzipbatch_ceiling > 20*1024*1024 && $new_maxzipbatch > $maxzipbatch_ceiling) {
|
2928 |
$updraftplus->log("Was going to raise maxzipbytes to $new_maxzipbatch, but this is too high: a previous failure led to the ceiling being set at $maxzipbatch_ceiling, which we will use instead");
|
@@ -2973,7 +3183,7 @@ class UpdraftPlus_Backup {
|
|
2973 |
}
|
2974 |
$data_added_since_reopen = 0;
|
2975 |
} else {
|
2976 |
-
|
2977 |
$updraftplus->record_still_alive();
|
2978 |
}
|
2979 |
|
@@ -3014,26 +3224,30 @@ class UpdraftPlus_Backup {
|
|
3014 |
$original_size = 0;
|
3015 |
}
|
3016 |
|
3017 |
-
if (
|
3018 |
}
|
3019 |
|
3020 |
}
|
3021 |
|
3022 |
-
|
3023 |
$this->zipfiles_batched = array();
|
3024 |
$this->zipfiles_skipped_notaltered = array();
|
3025 |
|
3026 |
if (false == ($nret = $zip->close())) $this->record_zip_error($files_zipadded_since_open, $zip->last_error, $warn_on_failures);
|
3027 |
|
3028 |
-
|
|
|
|
|
|
|
|
|
3029 |
|
3030 |
$this->zipfiles_lastwritetime = time();
|
3031 |
-
|
3032 |
if (file_exists($zipfile) && filesize($zipfile) > $original_size) $updraftplus->something_useful_happened();
|
3033 |
|
3034 |
-
|
3035 |
if (file_exists($zipfile) && filesize($zipfile) > $this->zip_split_every) {
|
3036 |
-
$updraftplus->log(sprintf("Zip size has gone over split limit (%s, %s) - bumping index (%d)", round(filesize($zipfile)/1048576,1), round($this->zip_split_every/1048576, 1), $this->index));
|
3037 |
$this->bump_index();
|
3038 |
}
|
3039 |
|
3 |
if (!defined('UPDRAFTPLUS_DIR')) die('No direct access allowed');
|
4 |
if (!class_exists('UpdraftPlus_PclZip')) require_once(UPDRAFTPLUS_DIR.'/class-zip.php');
|
5 |
|
6 |
+
/**
|
7 |
+
* This file contains functions that are only needed/loaded when a backup is running (reduces memory usage on other pages)
|
8 |
+
*/
|
9 |
class UpdraftPlus_Backup {
|
10 |
|
11 |
public $index = 0;
|
12 |
|
13 |
+
private $manifest_path;
|
14 |
+
|
15 |
private $zipfiles_added;
|
16 |
+
|
17 |
private $zipfiles_added_thisrun = 0;
|
18 |
+
|
19 |
public $zipfiles_dirbatched;
|
20 |
+
|
21 |
public $zipfiles_batched;
|
22 |
+
|
23 |
public $zipfiles_skipped_notaltered;
|
24 |
+
|
25 |
+
private $zip_split_every = 419430400; // 400MB
|
26 |
+
|
27 |
private $zip_last_ratio = 1;
|
28 |
+
|
29 |
private $whichone;
|
30 |
+
|
31 |
private $zip_basename = '';
|
32 |
+
|
33 |
private $backup_basename = '';
|
34 |
+
|
35 |
private $zipfiles_lastwritetime;
|
36 |
+
|
37 |
// 0 = unknown; false = failed
|
38 |
public $binzip = 0;
|
39 |
|
40 |
private $dbhandle;
|
41 |
+
|
42 |
private $dbhandle_isgz;
|
43 |
|
44 |
+
// Array of entities => times
|
45 |
private $altered_since = -1;
|
46 |
+
|
47 |
+
// Time for the current entity
|
48 |
private $makezip_if_altered_since = -1;
|
49 |
|
50 |
private $excluded_extensions = false;
|
51 |
|
52 |
private $use_zip_object = 'UpdraftPlus_ZipArchive';
|
53 |
+
|
54 |
public $debug = false;
|
55 |
|
56 |
public $updraft_dir;
|
57 |
+
|
58 |
private $blog_name;
|
59 |
+
|
60 |
private $wpdb_obj;
|
61 |
+
|
62 |
private $job_file_entities = array();
|
63 |
|
64 |
private $first_run = 0;
|
80 |
global $updraftplus;
|
81 |
|
82 |
// Get the blog name and rip out known-problematic characters. Remember that we may need to be able to upload this to any FTP server or cloud storage, where filename support may be unknown
|
83 |
+
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr(get_bloginfo(), 0, 32))));
|
84 |
if (!$blog_name || preg_match('#^_+$#', $blog_name)) {
|
85 |
// Try again...
|
86 |
$parsed_url = parse_url(home_url(), PHP_URL_HOST);
|
87 |
$parsed_subdir = untrailingslashit(parse_url(home_url(), PHP_URL_PATH));
|
88 |
if ($parsed_subdir && '/' != $parsed_subdir) $parsed_url .= str_replace(array('/', '\\'), '_', $parsed_subdir);
|
89 |
+
$blog_name = str_replace('__', '_', preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', substr($parsed_url, 0, 32))));
|
90 |
if (!$blog_name || preg_match('#^_+$#', $blog_name)) $blog_name = 'WordPress_Backup';
|
91 |
}
|
92 |
|
93 |
// Allow an over-ride. Careful about introducing characters not supported by your filesystem or cloud storage.
|
94 |
$this->blog_name = apply_filters('updraftplus_blog_name', $blog_name);
|
95 |
|
96 |
+
// Decide which zip engine to begin with
|
97 |
$this->debug = UpdraftPlus_Options::get_updraft_option('updraft_debug_mode');
|
98 |
$this->updraft_dir = $updraftplus->backups_dir_location();
|
99 |
$this->updraft_dir_realpath = realpath($this->updraft_dir);
|
111 |
|
112 |
// false means 'tried + failed'; whereas 0 means 'not yet tried'
|
113 |
// Disallow binzip on OpenVZ when we're not sure there's plenty of memory
|
114 |
+
if (0 === $this->binzip && (!defined('UPDRAFTPLUS_PREFERPCLZIP') || UPDRAFTPLUS_PREFERPCLZIP != true) && (!defined('UPDRAFTPLUS_NO_BINZIP') || !UPDRAFTPLUS_NO_BINZIP) && $updraftplus->current_resumption <9) {
|
115 |
|
116 |
if (@file_exists('/proc/user_beancounters') && @file_exists('/proc/meminfo') && @is_readable('/proc/meminfo')) {
|
117 |
$meminfo = @file_get_contents('/proc/meminfo', false, null, -1, 200);
|
118 |
if (is_string($meminfo) && preg_match('/MemTotal:\s+(\d+) kB/', $meminfo, $matches)) {
|
119 |
$memory_mb = $matches[1]/1024;
|
120 |
+
// If the report is of a large amount, then we're probably getting the total memory on the hypervisor (this has been observed), and don't really know the VPS's memory
|
121 |
$vz_log = "OpenVZ; reported memory: ".round($memory_mb, 1)." MB";
|
122 |
if ($memory_mb < 1024 || $memory_mb > 8192) {
|
123 |
$openvz_lowmem = true;
|
137 |
}
|
138 |
}
|
139 |
|
140 |
+
// In tests, PclZip was found to be 25% slower than ZipArchive
|
141 |
+
if ('UpdraftPlus_PclZip' != $this->use_zip_object && empty($this->binzip) && ((defined('UPDRAFTPLUS_PREFERPCLZIP') && UPDRAFTPLUS_PREFERPCLZIP == true) || !class_exists('ZipArchive') || !class_exists('UpdraftPlus_ZipArchive') || (!extension_loaded('zip') && !method_exists('ZipArchive', 'AddFile')))) {
|
142 |
global $updraftplus;
|
143 |
$updraftplus->log("Zip engine: ZipArchive is not available or is disabled (will use PclZip if needed)");
|
144 |
$this->use_zip_object = 'UpdraftPlus_PclZip';
|
150 |
$this->remotestorage_extrainfo[$service] = array('pretty' => $info_html, 'plain' => $info_plain);
|
151 |
}
|
152 |
|
153 |
+
/**
|
154 |
+
* Public, because called from the 'More Files' add-on
|
155 |
+
*
|
156 |
+
* @param String $create_from_dir Directory to create the zip
|
157 |
+
* @param String $whichone Entity being backed up (e.g. 'plugins', 'uploads')
|
158 |
+
* @param String $backup_file_basename Name of backup file
|
159 |
+
* @param Integer $index Index of zip in the sequence
|
160 |
+
* @param Integer|Boolean $first_linked_index First linked index in the sequence, or false
|
161 |
+
* @return Boolean
|
162 |
+
*/
|
163 |
public function create_zip($create_from_dir, $whichone, $backup_file_basename, $index, $first_linked_index = false) {
|
164 |
// Note: $create_from_dir can be an array or a string
|
165 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
171 |
|
172 |
global $updraftplus;
|
173 |
|
174 |
+
$this->zip_split_every = max((int) $updraftplus->jobdata_get('split_every'), UPDRAFTPLUS_SPLIT_MIN)*1048576;
|
175 |
|
176 |
+
if ('others' != $whichone) $updraftplus->log("Beginning creation of dump of $whichone (split every: ".round($this->zip_split_every/1048576, 1)." MB)");
|
177 |
|
178 |
if (is_string($create_from_dir) && !file_exists($create_from_dir)) {
|
179 |
$flag_error = true;
|
180 |
$updraftplus->log("Does not exist: $create_from_dir");
|
181 |
if ('mu-plugins' == $whichone) {
|
182 |
+
if (!function_exists('get_mu_plugins')) include_once(ABSPATH.'wp-admin/includes/plugin.php');
|
183 |
$mu_plugins = get_mu_plugins();
|
184 |
if (count($mu_plugins) == 0) {
|
185 |
$updraftplus->log("There appear to be no mu-plugins to back up. Will not raise an error.");
|
195 |
$full_path = $this->updraft_dir.'/'.$base_path;
|
196 |
$time_now = time();
|
197 |
|
198 |
+
// This is compatible with filenames which indicate increments, as it is looking only for the current increment
|
199 |
if (file_exists($full_path)) {
|
200 |
+
// Gather any further files that may also exist
|
201 |
$files_existing = array();
|
202 |
while (file_exists($full_path)) {
|
203 |
$files_existing[] = $base_path;
|
204 |
+
$time_mod = (int) @filemtime($full_path);
|
205 |
+
$updraftplus->log($base_path.": this file has already been created (age: ".round($time_now-$time_mod, 1)." s)");
|
206 |
if ($time_mod>100 && ($time_now-$time_mod)<30) {
|
207 |
$updraftplus->terminate_due_to_activity($base_path, $time_now, $time_mod);
|
208 |
}
|
209 |
$index++;
|
210 |
+
// This is compatible with filenames which indicate increments, as it is looking only for the current increment
|
211 |
$base_path = $backup_file_basename.'-'.$whichone.($index+1).'.zip';
|
212 |
$full_path = $this->updraft_dir.'/'.$base_path;
|
213 |
}
|
220 |
|
221 |
// Firstly, make sure that the temporary file is not already being written to - which can happen if a resumption takes place whilst an old run is still active
|
222 |
$zip_name = $full_path.'.tmp';
|
223 |
+
$time_mod = (int) @filemtime($zip_name);
|
224 |
if (file_exists($zip_name) && $time_mod>100 && ($time_now-$time_mod)<30) {
|
225 |
$updraftplus->terminate_due_to_activity($zip_name, $time_now, $time_mod);
|
226 |
}
|
245 |
clearstatcache();
|
246 |
|
247 |
if (isset($files_existing)) {
|
248 |
+
// Because of zip-splitting, the mere fact that files exist is not enough to indicate that the entity is finished. For that, we need to also see that no subsequent file has been started.
|
249 |
+
// Q. What if the previous runner died in between zips, and it is our job to start the next one? A. The next temporary file is created before finishing the former zip, so we are safe (and we are also safe-guarded by the updated value of the index being stored in the database).
|
250 |
return $files_existing;
|
251 |
}
|
252 |
|
254 |
|
255 |
$this->zip_microtime_start = microtime(true);
|
256 |
|
257 |
+
// The paths in the zip should then begin with '$whichone', having removed WP_CONTENT_DIR from the front
|
258 |
$zipcode = $this->make_zipfile($create_from_dir, $backup_file_basename, $whichone);
|
259 |
+
if (true !== $zipcode) {
|
260 |
$updraftplus->log("ERROR: Zip failure: Could not create $whichone zip (".$this->index." / $index)");
|
261 |
+
$updraftplus->log(sprintf(__("Could not create %s zip. Consult the log file for more information.", 'updraftplus'), $whichone), 'error');
|
262 |
+
// The caller is required to update $index from $this->index
|
263 |
return false;
|
264 |
} else {
|
265 |
$itext = (empty($this->index)) ? '' : ($this->index+1);
|
287 |
$timetaken = max(microtime(true)-$this->zip_microtime_start, 0.000001);
|
288 |
$kbsize = filesize($full_path)/1024;
|
289 |
$rate = round($kbsize/$timetaken, 1);
|
290 |
+
$updraftplus->log("Created $whichone zip (".$this->index.") - ".round($kbsize, 1)." KB in ".round($timetaken, 1)." s ($rate KB/s) ($checksum_description)");
|
291 |
// We can now remove any left-over temporary files from this job
|
292 |
}
|
293 |
} elseif ($this->index > $original_index) {
|
294 |
$updraftplus->log("Did not create $whichone zip (".$this->index.") - not needed (2)");
|
295 |
+
// Added 12-Feb-2014 (to help multiple morefiles)
|
296 |
$this->index--;
|
297 |
} else {
|
298 |
$updraftplus->log("Looked-for $whichone zip (".$this->index.") was not found (".basename($full_path).".tmp)", 'warning');
|
303 |
// Remove cache list files as well, if there are any
|
304 |
$updraftplus->clean_temporary_files('_'.$updraftplus->nonce."-$whichone", 0, true);
|
305 |
|
306 |
+
// Create the results array to send back (just the new ones, not any prior ones)
|
307 |
$files_existing = array();
|
308 |
$res_index = 0;
|
309 |
for ($i = $original_index; $i<= $this->index; $i++) {
|
317 |
return $files_existing;
|
318 |
}
|
319 |
|
320 |
+
/**
|
321 |
+
* This method is for calling outside of a cloud_backup() context. It constructs a list of services for which prune operations should be attempted, and then calls prune_retained_backups() if necessary upon them.
|
322 |
+
*/
|
323 |
public function do_prune_standalone() {
|
324 |
global $updraftplus;
|
325 |
|
329 |
$prune_services = array();
|
330 |
|
331 |
foreach ($services as $ind => $service) {
|
332 |
+
if ("none" == $service || '' == $service) continue;
|
333 |
|
334 |
$objname = "UpdraftPlus_BackupModule_${service}";
|
335 |
if (!class_exists($objname) && file_exists(UPDRAFTPLUS_DIR.'/methods/'.$service.'.php')) {
|
336 |
+
include_once(UPDRAFTPLUS_DIR.'/methods/'.$service.'.php');
|
337 |
}
|
338 |
if (class_exists($objname)) {
|
339 |
$remote_obj = new $objname;
|
348 |
if (!empty($prune_services)) $this->prune_retained_backups($prune_services);
|
349 |
}
|
350 |
|
351 |
+
/**
|
352 |
+
* Dispatch to the relevant function
|
353 |
+
*
|
354 |
+
* @param Array $backup_array List of archives for the backup
|
355 |
+
*/
|
356 |
public function cloud_backup($backup_array) {
|
357 |
|
358 |
global $updraftplus;
|
375 |
|
376 |
$do_prune = array();
|
377 |
|
378 |
+
// If there was no check-in last time, then attempt a different service first - in case a time-out on the attempted service leads to no activity and everything stopping
|
379 |
if (count($services) >1 && !empty($updraftplus->no_checkin_last_time)) {
|
380 |
$updraftplus->log('No check-in last time: will try a different remote service first');
|
381 |
array_push($services, array_shift($services));
|
387 |
$errors_before_uploads = $updraftplus->error_count();
|
388 |
|
389 |
foreach ($services as $ind => $service) {
|
390 |
+
// Used for logging by record_upload_chunk()
|
391 |
$this->current_service = $service;
|
392 |
+
// Used when deciding whether to delete the local file
|
393 |
$this->last_service = ($ind+1 >= count($services) && $errors_before_uploads == $updraftplus->error_count()) ? true : false;
|
394 |
|
395 |
$log_extra = ($this->last_service) ? ' (last)' : '';
|
397 |
@set_time_limit(UPDRAFTPLUS_SET_TIME_LIMIT);
|
398 |
|
399 |
$method_include = UPDRAFTPLUS_DIR.'/methods/'.$service.'.php';
|
400 |
+
if (file_exists($method_include)) include_once($method_include);
|
401 |
|
402 |
+
if ("none" == $service || '' == $service) {
|
403 |
$updraftplus->log("No remote despatch: user chose no remote backup service");
|
404 |
+
// Still want to mark as "uploaded", to signal that nothing more needs doing. (Important on incremental runs with no cloud storage).
|
405 |
foreach ($backup_array as $bind => $file) {
|
406 |
if ($updraftplus->is_uploaded($file)) {
|
407 |
$updraftplus->log("Already uploaded: $file");
|
500 |
return;
|
501 |
}
|
502 |
|
503 |
+
// $updraftplus->jobdata_set('jobstatus', 'pruning');
|
504 |
+
// $updraftplus->jobdata_set('prune', 'begun');
|
505 |
call_user_func_array(array($updraftplus, 'jobdata_set_multi'), array('jobstatus', 'pruning', 'prune', 'begun'));
|
506 |
|
507 |
// Number of backups to retain - files
|
772 |
|
773 |
$backup_to_examine = $this->remove_backup_set_if_empty($backup_to_examine, $backup_datestamp, $backupable_entities, $backup_history);
|
774 |
if (empty($backup_to_examine)) {
|
775 |
+
// unset($functional_backup_history[$backup_datestamp]);
|
776 |
unset($backup_history[$backup_datestamp]);
|
777 |
$this->maybe_save_backup_history_and_reschedule($backup_history);
|
778 |
} else {
|
779 |
+
// $functional_backup_history[$backup_datestamp] = $backup_to_examine;
|
780 |
$backup_history[$backup_datestamp] = $backup_to_examine;
|
781 |
}
|
782 |
|
848 |
} else {
|
849 |
$updraftplus->log("No nonce record found in the backup set, so cannot delete any remaining log file");
|
850 |
}
|
851 |
+
// unset($backup_history[$backup_datestamp]);
|
852 |
return false;
|
853 |
} else {
|
854 |
$updraftplus->log("This backup set remains non-empty (f=$contains_files/d=$contains_db); will retain in history");
|
857 |
|
858 |
}
|
859 |
|
860 |
+
/**
|
861 |
+
* Prune files from local or remote storage
|
862 |
+
*
|
863 |
+
* @param String $service Service to prune
|
864 |
+
* @param Array $dofiles An array of files (or a single string for one file)
|
865 |
+
* @param Array $method_object specific method object
|
866 |
+
* @param Array $object_passback specific passback object
|
867 |
+
* @param Array $file_sizes size of files
|
868 |
+
*/
|
869 |
private function prune_file($service, $dofiles, $method_object = null, $object_passback = null, $file_sizes = array()) {
|
870 |
global $updraftplus;
|
871 |
+
if (!is_array($dofiles)) $dofiles =array($dofiles);
|
872 |
|
873 |
if (!apply_filters('updraftplus_prune_file', true, $dofiles, $service, $method_object, $object_passback, $file_sizes)) {
|
874 |
$updraftplus->log("Prune: service=$service: skipped via filter");
|
888 |
if (!is_null($method_object)) $method_object->delete($dofiles, $object_passback, $file_sizes);
|
889 |
}
|
890 |
|
891 |
+
/**
|
892 |
+
* The jobdata is passed in instead of fetched, because the live jobdata may now differ from that which should be reported on (e.g. an incremental run was subsequently scheduled)
|
893 |
+
*
|
894 |
+
* @param String $final_message The final message to be sent
|
895 |
+
* @param Array $jobdata Full job data
|
896 |
+
*/
|
897 |
public function send_results_email($final_message, $jobdata) {
|
898 |
|
899 |
global $updraftplus;
|
918 |
} elseif ('finished' == $backup_files && ('finished' == $backup_db || 'encrypted' == $backup_db)) {
|
919 |
$backup_contains = __("Files and database", 'updraftplus')." ($backup_type)";
|
920 |
} elseif ('finished' == $backup_files) {
|
921 |
+
$backup_contains = ('begun' == $backup_db) ? __("Files (database backup has not completed)", 'updraftplus') : __("Files only (database was not part of this particular schedule)", 'updraftplus');
|
922 |
$backup_contains .= " ($backup_type)";
|
923 |
+
} elseif ('finished' == $backup_db || 'encrypted' == $backup_db) {
|
924 |
+
$backup_contains = ('begun' == $backup_files) ? __("Database (files backup has not completed)", 'updraftplus') : __("Database only (files were not part of this particular schedule)", 'updraftplus');
|
925 |
} else {
|
926 |
$updraftplus->log('Unknown/unexpected status: '.serialize($backup_files).'/'.serialize($backup_db));
|
927 |
$backup_contains = __("Unknown/unexpected error - please raise a support request", 'updraftplus');
|
947 |
}
|
948 |
$error_count++;
|
949 |
}
|
950 |
+
$append_log .="\r\n";
|
951 |
}
|
952 |
$warnings = (isset($jobdata['warnings'])) ? $jobdata['warnings'] : array();
|
953 |
if (is_array($warnings) && count($warnings) >0) {
|
956 |
foreach ($warnings as $err) {
|
957 |
$append_log .= "* ".rtrim($err)."\r\n";
|
958 |
}
|
959 |
+
$append_log .="\r\n";
|
960 |
}
|
961 |
|
962 |
if ($debug_mode && '' != $updraftplus->logfile_name && !in_array($updraftplus->logfile_name, $attachments)) {
|
968 |
|
969 |
$subject = apply_filters('updraft_report_subject', sprintf(__('Backed up: %s', 'updraftplus'), get_bloginfo('name')).' (UpdraftPlus '.$updraftplus->version.') '.get_date_from_gmt(gmdate('Y-m-d H:i:s', time()), 'Y-m-d H:i'), $error_count, count($warnings));
|
970 |
|
971 |
+
// The class_exists() check here is a micro-optimization to prevent a possible HTTP call whose results may be disregarded by the filter
|
972 |
$feed = '';
|
973 |
if (!class_exists('UpdraftPlus_Addon_Reporting') && !defined('UPDRAFTPLUS_NOADS_B') && !defined('UPDRAFTPLUS_NONEWSFEED')) {
|
974 |
$updraftplus->log('Fetching RSS news feed');
|
980 |
$feed .= '* ';
|
981 |
$feed .= $item->get_title();
|
982 |
$feed .= " (".$item->get_date('j F Y').")";
|
983 |
+
// $feed .= ' - '.$item->get_permalink();
|
984 |
$feed .= "\r\n";
|
985 |
}
|
986 |
}
|
1002 |
// Make it available to the filter
|
1003 |
$jobdata['remotestorage_extrainfo'] = $this->remotestorage_extrainfo;
|
1004 |
|
1005 |
+
if (!class_exists('UpdraftPlus_Notices')) include_once(UPDRAFTPLUS_DIR.'/includes/updraftplus-notices.php');
|
1006 |
global $updraftplus_notices;
|
1007 |
$ws_advert = $updraftplus_notices->do_notice(false, 'report-plain', true);
|
1008 |
|
1016 |
$feed.
|
1017 |
$ws_advert."\r\n".
|
1018 |
$append_log,
|
1019 |
+
$final_message,
|
1020 |
+
$backup_contains,
|
1021 |
+
$updraftplus->errors,
|
1022 |
+
$warnings,
|
1023 |
+
$jobdata);
|
1024 |
|
1025 |
$this->attachments = apply_filters('updraft_report_attachments', $attachments);
|
1026 |
|
1074 |
|
1075 |
}
|
1076 |
|
1077 |
+
/**
|
1078 |
+
* The purpose of this function is to make sure that the options table is put in the database first, then the users table, then the site + blogs tables (if present - multisite), then the usermeta table; and after that the core WP tables - so that when restoring we restore the core tables first
|
1079 |
+
*
|
1080 |
+
* @param Array $a_arr First array to be compared
|
1081 |
+
* @param Array $b_arr Second array to be compared
|
1082 |
+
* @return Integer - according to the rules of usort()
|
1083 |
+
*/
|
1084 |
private function backup_db_sorttables($a_arr, $b_arr) {
|
1085 |
|
1086 |
$a = $a_arr['name'];
|
1098 |
if ($a == $b) return 0;
|
1099 |
$our_table_prefix = $this->table_prefix_raw;
|
1100 |
if ($a == $our_table_prefix.'options') return -1;
|
1101 |
+
if ($b == $our_table_prefix.'options') return 1;
|
1102 |
if ($a == $our_table_prefix.'site') return -1;
|
1103 |
+
if ($b == $our_table_prefix.'site') return 1;
|
1104 |
if ($a == $our_table_prefix.'blogs') return -1;
|
1105 |
+
if ($b == $our_table_prefix.'blogs') return 1;
|
1106 |
if ($a == $our_table_prefix.'users') return -1;
|
1107 |
+
if ($b == $our_table_prefix.'users') return 1;
|
1108 |
if ($a == $our_table_prefix.'usermeta') return -1;
|
1109 |
+
if ($b == $our_table_prefix.'usermeta') return 1;
|
1110 |
|
1111 |
if (empty($our_table_prefix)) return strcmp($a, $b);
|
1112 |
|
1127 |
}
|
1128 |
|
1129 |
private function log_account_space() {
|
1130 |
+
// Don't waste time if space is huge
|
1131 |
if (!empty($this->account_space_oodles)) return;
|
1132 |
global $updraftplus;
|
1133 |
$hosting_bytes_free = $updraftplus->get_hosting_disk_quota_free();
|
1137 |
}
|
1138 |
}
|
1139 |
|
1140 |
+
/**
|
1141 |
+
* Returns the basename up to and including the nonce (but not the entity)
|
1142 |
+
*
|
1143 |
+
* @param Integer $use_time epoch time to use
|
1144 |
+
* @return String
|
1145 |
+
*/
|
1146 |
private function get_backup_file_basename_from_time($use_time) {
|
1147 |
global $updraftplus;
|
1148 |
return 'backup_'.get_date_from_gmt(gmdate('Y-m-d H:i:s', $use_time), 'Y-m-d-Hi').'_'.$this->blog_name.'_'.$updraftplus->nonce;
|
1152 |
$zips = array();
|
1153 |
if ($handle = opendir($dir)) {
|
1154 |
while (false !== ($entry = readdir($handle))) {
|
1155 |
+
if ("." != $entry && ".." != $entry) {
|
1156 |
if (preg_match('/^backup_(\d{4})-(\d{2})-(\d{2})-(\d{2})(\d{2})_.*_([0-9a-f]{12})-([\-a-z]+)([0-9]+)?\.zip$/i', $entry, $matches)) {
|
1157 |
if ($matches[6] !== $match_nonce) continue;
|
1158 |
$timestamp = mktime($matches[4], $matches[5], 0, $matches[2], $matches[3], $matches[1]);
|
1159 |
$entity = $matches[7];
|
1160 |
+
$index = empty($matches[8]) ? '0' : $matches[8];
|
1161 |
$zips[$entity][$index] = array($timestamp, $entry);
|
1162 |
}
|
1163 |
}
|
1166 |
return $zips;
|
1167 |
}
|
1168 |
|
1169 |
+
/**
|
1170 |
+
* Get information on whether a particular file exists in a set
|
1171 |
+
*
|
1172 |
+
* @param Array $files should be an array as returned by find_existing_zips()]
|
1173 |
+
* @param String $entity entty of the file (e.g. 'plugins')
|
1174 |
+
* @param Integer $index Index within the files array
|
1175 |
+
* @return String|Boolean - false if the file does not exist; otherwise, the basename
|
1176 |
+
*/
|
1177 |
private function file_exists($files, $entity, $index = 0) {
|
1178 |
if (isset($files[$entity]) && isset($files[$entity][$index])) {
|
1179 |
$file = $files[$entity][$index];
|
1184 |
}
|
1185 |
}
|
1186 |
|
1187 |
+
/**
|
1188 |
+
* This function is resumable
|
1189 |
+
*
|
1190 |
+
* @param String $job_status Current status
|
1191 |
+
* @return Array - array of backed-up files
|
1192 |
+
*/
|
1193 |
private function backup_dirs($job_status) {
|
1194 |
|
1195 |
global $updraftplus;
|
1204 |
$possible_backups = $updraftplus->get_backupable_file_entities(true);
|
1205 |
|
1206 |
// Was there a check-in last time? If not, then reduce the amount of data attempted
|
1207 |
+
if ('finished' != $job_status && $updraftplus->current_resumption >= 2) {
|
1208 |
|
1209 |
+
// NOTYET: Possible amendment to original algorithm; not just no check-in, but if the check in was very early (can happen if we get a very early checkin for some trivial operation, then attempt something too big)
|
1210 |
|
1211 |
|
1212 |
// 03-Sep-2015 - came across a case (HS#2052) where there apparently was a check-in 'last time', but no resumption was scheduled because the 'useful_checkin' jobdata was *not* last time - which must indicate dying at a very unfortunate/unlikely point in the code. As a result, the split was not auto-reduced. Consequently, we've added !$updraftplus->newresumption_scheduled as a condition on the first check here (it was already on the second), as if no resumption is scheduled then whatever checkin there was last time was only partial. This was on GoDaddy, for which a number of curious I/O event combinations have been seen in recent months - their platform appears to have some odd behaviour when PHP is killed off.
|
1217 |
$this->try_split = true;
|
1218 |
} elseif ($updraftplus->current_resumption<=10) {
|
1219 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
1220 |
+
if ((int) $maxzipbatch < 1) $maxzipbatch = 26214400;
|
1221 |
|
1222 |
$new_maxzipbatch = max(floor($maxzipbatch * 0.75), 20971520);
|
1223 |
if ($new_maxzipbatch < $maxzipbatch) {
|
1229 |
}
|
1230 |
}
|
1231 |
|
1232 |
+
if ('finished' != $job_status && !$updraftplus->really_is_writable($this->updraft_dir)) {
|
1233 |
$updraftplus->log("Backup directory (".$this->updraft_dir.") is not writable, or does not exist");
|
1234 |
$updraftplus->log(sprintf(__("Backup directory (%s) is not writable, or does not exist.", 'updraftplus'), $this->updraft_dir), 'error');
|
1235 |
return array();
|
1236 |
}
|
1237 |
|
1238 |
$this->job_file_entities = $updraftplus->jobdata_get('job_file_entities');
|
1239 |
+
// This is just used for the visual feedback (via the 'substatus' key)
|
1240 |
$which_entity = 0;
|
1241 |
+
// e.g. plugins, themes, uploads, others
|
1242 |
+
// $whichdir might be an array (if $youwhat is 'more')
|
1243 |
|
1244 |
+
// Returns an array (keyed off the entity) of ($timestamp, $filename) arrays
|
1245 |
$existing_zips = $this->find_existing_zips($this->updraft_dir, $updraftplus->nonce);
|
1246 |
|
1247 |
foreach ($possible_backups as $youwhat => $whichdir) {
|
1248 |
|
1249 |
if (isset($this->job_file_entities[$youwhat])) {
|
1250 |
|
1251 |
+
$index = (int) $this->job_file_entities[$youwhat]['index'];
|
1252 |
if (empty($index)) $index=0;
|
1253 |
$indextext = (0 == $index) ? '' : (1+$index);
|
1254 |
|
1255 |
$zip_file = $this->updraft_dir.'/'.$backup_file_basename.'-'.$youwhat.$indextext.'.zip';
|
1256 |
|
1257 |
+
// Split needed?
|
1258 |
+
$split_every = max((int) $updraftplus->jobdata_get('split_every'), 250);
|
1259 |
+
// if (file_exists($zip_file) && filesize($zip_file) > $split_every*1048576) {
|
1260 |
if (false != ($existing_file = $this->file_exists($existing_zips, $youwhat, $index)) && filesize($this->updraft_dir.'/'.$existing_file) > $split_every*1048576) {
|
1261 |
$index++;
|
1262 |
$this->job_file_entities[$youwhat]['index'] = $index;
|
1290 |
if ($index > 0) {
|
1291 |
$zip_file = (isset($this->backup_files_array[$youwhat]) && isset($this->backup_files_array[$youwhat][$index])) ? $this->backup_files_array[$youwhat][$index] : $backup_file_basename.'-'.$youwhat.($index+1).'.zip';
|
1292 |
|
1293 |
+
// $fbase = $backup_file_basename.'-'.$youwhat.($index+1).'.zip';
|
1294 |
$z = $this->updraft_dir.'/'.$zip_file;
|
1295 |
$fs_key = $youwhat.$index.'-size';
|
1296 |
if (file_exists($z)) {
|
1319 |
|
1320 |
if ('others' == $youwhat) $updraftplus->log("Beginning backup of other directories found in the content directory (index: $index)");
|
1321 |
|
1322 |
+
// Apply a filter to allow add-ons to provide their own method for creating a zip of the entity
|
1323 |
$created = apply_filters('updraftplus_backup_makezip_'.$youwhat, $whichdir, $backup_file_basename, $index);
|
1324 |
+
// If the filter did not lead to something being created, then use the default method
|
1325 |
if ($created === $whichdir) {
|
1326 |
|
1327 |
// http://www.phpconcept.net/pclzip/user-guide/53
|
1339 |
$dirlist = $updraftplus->backup_uploads_dirlist(true);
|
1340 |
} else {
|
1341 |
$dirlist = $whichdir;
|
1342 |
+
if (is_array($dirlist)) $dirlist =array_shift($dirlist);
|
1343 |
}
|
1344 |
|
1345 |
if (count($dirlist)>0) {
|
1346 |
$created = $this->create_zip($dirlist, $youwhat, $backup_file_basename, $index);
|
1347 |
+
// Now, store the results
|
1348 |
if (!is_string($created) && !is_array($created)) $updraftplus->log("$youwhat: create_zip returned an error");
|
1349 |
} else {
|
1350 |
$updraftplus->log("No backup of $youwhat: there was nothing found to back up");
|
1352 |
}
|
1353 |
|
1354 |
if ($created != $whichdir && (is_string($created) || is_array($created))) {
|
1355 |
+
if (is_string($created)) $created =array($created);
|
1356 |
foreach ($created as $findex => $fname) {
|
1357 |
$backup_array[$youwhat][$index] = $fname;
|
1358 |
+
$itext = (0 == $index) ? '' : $index;
|
1359 |
$index++;
|
1360 |
$backup_array[$youwhat.$itext.'-size'] = filesize($this->updraft_dir.'/'.$fname);
|
1361 |
}
|
1373 |
return $backup_array;
|
1374 |
}
|
1375 |
|
1376 |
+
/**
|
1377 |
+
* This uses a saved status indicator; its only purpose is to indicate *total* completion; there is no actual danger, just wasted time, in resuming when it was not needed. So the saved status indicator just helps save resources.
|
1378 |
+
*
|
1379 |
+
* @param integer $resumption_no Check for first run
|
1380 |
+
* @return array
|
1381 |
+
*/
|
1382 |
public function resumable_backup_of_files($resumption_no) {
|
1383 |
global $updraftplus;
|
1384 |
// Backup directories and return a numerically indexed array of file paths to the backup files
|
1385 |
$bfiles_status = $updraftplus->jobdata_get('backup_files');
|
1386 |
+
$this->backup_files_array = $updraftplus->jobdata_get('backup_files_array');
|
1387 |
+
|
1388 |
if (!is_array($this->backup_files_array)) $this->backup_files_array = array();
|
1389 |
if ('finished' == $bfiles_status) {
|
1390 |
$updraftplus->log("Creation of backups of directories: already finished");
|
1391 |
+
// Check for recent activity
|
1392 |
foreach ($this->backup_files_array as $files) {
|
1393 |
+
if (!is_array($files)) $files =array($files);
|
1394 |
foreach ($files as $file) $updraftplus->check_recent_modification($this->updraft_dir.'/'.$file);
|
1395 |
}
|
1396 |
} elseif ('begun' == $bfiles_status) {
|
1406 |
$updraftplus->jobdata_set('backup_files', 'finished');
|
1407 |
$updraftplus->jobdata_set('jobstatus', 'filescreated');
|
1408 |
} else {
|
1409 |
+
// This is not necessarily a backup run which is meant to contain files at all
|
1410 |
$updraftplus->log('This backup run is not intended for files - skipping');
|
1411 |
return array();
|
1412 |
}
|
1438 |
return $this->backup_files_array;
|
1439 |
}
|
1440 |
|
1441 |
+
/**
|
1442 |
+
* This function is resumable, using the following method:
|
1443 |
+
* Each table is written out to ($final_filename).table.tmp
|
1444 |
+
* When the writing finishes, it is renamed to ($final_filename).table
|
1445 |
+
* When all tables are finished, they are concatenated into the final file
|
1446 |
+
*
|
1447 |
+
* @param String $already_done Status of backup
|
1448 |
+
* @param String $whichdb Indicated which database is being backed up
|
1449 |
+
* @param Array $dbinfo is only used when whichdb != 'wp'; and the keys should be: user, pass, name, host, prefix
|
1450 |
+
* @return Boolean|String - the basename of the database backup, or false for failure
|
1451 |
+
*/
|
1452 |
public function backup_db($already_done = 'begun', $whichdb = 'wp', $dbinfo = array()) {
|
1453 |
|
1454 |
global $updraftplus, $wpdb;
|
1461 |
|
1462 |
if ('wp' == $this->whichdb) {
|
1463 |
$this->wpdb_obj = $wpdb;
|
1464 |
+
// The table prefix after being filtered - i.e. what filters what we'll actually back up
|
1465 |
$this->table_prefix = $updraftplus->get_table_prefix(true);
|
1466 |
+
// The unfiltered table prefix - i.e. the real prefix that things are relative to
|
1467 |
$this->table_prefix_raw = $updraftplus->get_table_prefix(false);
|
1468 |
$dbinfo['host'] = DB_HOST;
|
1469 |
$dbinfo['name'] = DB_NAME;
|
1471 |
$dbinfo['pass'] = DB_PASSWORD;
|
1472 |
} else {
|
1473 |
if (!is_array($dbinfo) || empty($dbinfo['host'])) return false;
|
1474 |
+
// The methods that we may use: check_connection (WP>=3.9), get_results, get_row, query
|
1475 |
$this->wpdb_obj = new UpdraftPlus_WPDB_OtherDB($dbinfo['user'], $dbinfo['pass'], $dbinfo['name'], $dbinfo['host']);
|
1476 |
if (!empty($this->wpdb_obj->error)) {
|
1477 |
$updraftplus->log($dbinfo['user'].'@'.$dbinfo['host'].'/'.$dbinfo['name'].' : database connection attempt failed');
|
1499 |
|
1500 |
$total_tables = 0;
|
1501 |
|
1502 |
+
// WP 3.9 onwards - https://core.trac.wordpress.org/browser/trunk/src/wp-includes/wp-db.php?rev=27925 - check_connection() allows us to get the database connection back if it had dropped
|
1503 |
if ('wp' == $whichdb && method_exists($this->wpdb_obj, 'check_connection') && (!defined('UPDRAFTPLUS_SUPPRESS_CONNECTION_CHECKS') || !UPDRAFTPLUS_SUPPRESS_CONNECTION_CHECKS)) {
|
1504 |
if (!$this->wpdb_obj->check_connection(false)) {
|
1505 |
$updraftplus->reschedule(60);
|
1519 |
$all_tables = array_map(array($this, 'cb_get_name_type'), $all_tables);
|
1520 |
}
|
1521 |
|
1522 |
+
// If this is not the WP database, then we do not consider it a fatal error if there are no tables
|
1523 |
if ('wp' == $whichdb && 0 == count($all_tables)) {
|
1524 |
$extra = ($updraftplus->newresumption_scheduled) ? ' - '.__('please wait for the rescheduled attempt', 'updraftplus') : '';
|
1525 |
$updraftplus->log("Error: No WordPress database tables found (SHOW TABLES returned nothing)".$extra);
|
1535 |
if (!$updraftplus->really_is_writable($this->updraft_dir)) {
|
1536 |
$updraftplus->log("The backup directory (".$this->updraft_dir.") could not be written to (could be account/disk space full, or wrong permissions).");
|
1537 |
$updraftplus->log($this->updraft_dir.": ".__('The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail.', 'updraftplus'), 'warning');
|
1538 |
+
// Why not just fail now? We saw a bizarre case when the results of really_is_writable() changed during the run.
|
1539 |
}
|
1540 |
|
1541 |
+
// This check doesn't strictly get all possible duplicates; it's only designed for the case that can happen when moving between deprecated Windows setups and Linux
|
1542 |
$this->duplicate_tables_exist = false;
|
1543 |
foreach ($all_table_names as $table) {
|
1544 |
if (strtolower($table) != $table && in_array(strtolower($table), $all_table_names)) {
|
1574 |
$stitch_files[] = $table_file_prefix;
|
1575 |
} else {
|
1576 |
// === is needed, otherwise 'false' matches (i.e. prefix does not match)
|
1577 |
+
if (empty($this->table_prefix) || (false == $this->duplicate_tables_exist && stripos($table, $this->table_prefix) === 0 ) || (true == $this->duplicate_tables_exist && strpos($table, $this->table_prefix) === 0)) {
|
1578 |
|
1579 |
if (!apply_filters('updraftplus_backup_table', true, $table, $this->table_prefix, $whichdb, $dbinfo)) {
|
1580 |
$updraftplus->log("Skipping table (filtered): $table");
|
1602 |
if (false === $opened) return false;
|
1603 |
|
1604 |
// Create the SQL statements
|
1605 |
+
$this->stow("# " . sprintf('Table: %s', $updraftplus->backquote($table)) . "\n");
|
1606 |
$updraftplus->jobdata_set('dbcreating_substatus', array('t' => $table, 'i' => $total_tables, 'a' => $how_many_tables));
|
1607 |
|
1608 |
$table_status = $this->wpdb_obj->get_row("SHOW TABLE STATUS WHERE Name='$table'");
|
1617 |
}
|
1618 |
|
1619 |
// Don't include the job data for any backups - so that when the database is restored, it doesn't continue an apparently incomplete backup
|
1620 |
+
if ('wp' == $this->whichdb && (!empty($this->table_prefix) && strtolower($this->table_prefix.'sitemeta') == strtolower($table))) {
|
1621 |
$where = 'meta_key NOT LIKE "updraft_jobdata_%"';
|
1622 |
} elseif ('wp' == $this->whichdb && (!empty($this->table_prefix) && strtolower($this->table_prefix.'options') == strtolower($table))) {
|
1623 |
if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
|
1636 |
// If no check-in last time, then we could in future try the other method (but - any point in retrying slow method on large tables??)
|
1637 |
|
1638 |
// New Jul 2014: This attempt to use bindump instead at a lower threshold is quite conservative - only if the last successful run was exactly two resumptions ago - may be useful to expand
|
1639 |
+
$bindump_threshold = (!$updraftplus->something_useful_happened && !empty($updraftplus->current_resumption) && (2 == $updraftplus->current_resumption - $updraftplus->last_successful_resumption)) ? 1000 : 8000;
|
1640 |
|
1641 |
$bindump = (isset($rows) && ($rows>$bindump_threshold || (defined('UPDRAFTPLUS_ALWAYS_TRY_MYSQLDUMP') && UPDRAFTPLUS_ALWAYS_TRY_MYSQLDUMP)) && is_string($binsqldump)) ? $this->backup_table_bindump($binsqldump, $table, $where) : false;
|
1642 |
if (true !== $bindump) $this->backup_table($table, $where, 'none', $table_type);
|
1668 |
}
|
1669 |
$time_this_run = time()-$updraftplus->opened_log_time;
|
1670 |
if ($time_this_run > 2000) {
|
1671 |
+
// Have seen this happen; not sure how, but it was apparently deterministic; if the current process had been running for a long time, then apparently all database commands silently failed.
|
1672 |
+
// If we have been running that long, then the resumption may be far off; bring it closer
|
1673 |
$updraftplus->reschedule(60);
|
1674 |
$updraftplus->log("Have been running very long, and it seems the database went away; scheduling a resumption and terminating for now");
|
1675 |
$updraftplus->record_still_alive();
|
1683 |
// Race detection - with zip files now being resumable, these can more easily occur, with two running side-by-side
|
1684 |
$backup_final_file_name = $backup_file_base.'-db'.$this->whichdb_suffix.'.gz';
|
1685 |
$time_now = time();
|
1686 |
+
$time_mod = (int) @filemtime($backup_final_file_name);
|
1687 |
if (file_exists($backup_final_file_name) && $time_mod>100 && ($time_now-$time_mod)<30) {
|
1688 |
$updraftplus->terminate_due_to_activity($backup_final_file_name, $time_now, $time_mod);
|
1689 |
}
|
1715 |
$updraftplus->log(__("Failed to open database file for reading:", 'updraftplus').' '.$table_file.'.gz', 'error');
|
1716 |
$errors++;
|
1717 |
} else {
|
1718 |
+
while ($line = gzgets($handle, 65536)) {
|
1719 |
+
$this->stow($line);
|
1720 |
+
}
|
1721 |
gzclose($handle);
|
1722 |
$unlink_files[] = $this->updraft_dir.'/'.$table_file.'.gz';
|
1723 |
}
|
1724 |
$sind++;
|
1725 |
// Came across a database with 7600 tables... adding them all took over 500 seconds; and so when the resumption started up, no activity was detected
|
1726 |
+
if (0 == $sind % 100) $updraftplus->something_useful_happened();
|
1727 |
}
|
1728 |
|
1729 |
if (defined('DB_CHARSET') && DB_CHARSET) {
|
1773 |
|
1774 |
// Deal with Windows/old MySQL setups with erroneous table prefixes differing in case
|
1775 |
// Can't get binary mysqldump to make this transformation
|
1776 |
+
// $dump_as_table = ($this->duplicate_tables_exist == false && stripos($table, $this->table_prefix) === 0 && strpos($table, $this->table_prefix) !== 0) ? $this->table_prefix.substr($table, strlen($this->table_prefix)) : $table;
|
1777 |
|
1778 |
$pfile = md5(time().rand()).'.tmp';
|
1779 |
file_put_contents($this->updraft_dir.'/'.$pfile, "[mysqldump]\npassword=".$this->dbinfo['pass']."\n");
|
1780 |
|
1781 |
// Note: escapeshellarg() adds quotes around the string
|
1782 |
+
if ($where) $where = "--where=".escapeshellarg($where);
|
1783 |
|
1784 |
if (strtolower(substr(PHP_OS, 0, 3)) == 'win') {
|
1785 |
$exec = "cd ".escapeshellarg(str_replace('/', '\\', $this->updraft_dir))." & ";
|
1803 |
}
|
1804 |
}
|
1805 |
$ret = pclose($handle);
|
1806 |
+
if (0 != $ret) {
|
1807 |
$updraftplus->log("Binary mysqldump: error (code: $ret)");
|
1808 |
// Keep counter of failures? Change value of binsqldump?
|
1809 |
} else {
|
1810 |
if ($any_output) {
|
1811 |
+
$updraftplus->log("Table $table_name: binary mysqldump finished (writes: $writes) in ".sprintf("%.02f", max(microtime(true)-$microtime, 0.00001))." seconds");
|
1812 |
$ret = true;
|
1813 |
}
|
1814 |
}
|
1824 |
}
|
1825 |
|
1826 |
/**
|
1827 |
+
* Taken partially from phpMyAdmin and partially from Alain Wolf, Zurich - Switzerland to use the WordPress $wpdb object
|
|
|
1828 |
* Website: http://restkultur.ch/personal/wolf/scripts/db_backup/
|
1829 |
+
* Modified by Scott Merrill (http://www.skippy.net/)
|
1830 |
+
*
|
1831 |
+
* @param String $table Table to backup
|
1832 |
+
* @param String $where If there is a where clause to use
|
1833 |
+
* @param String $segment Specify a segment (not used in UD)
|
1834 |
+
* @param String $table_type Table type
|
1835 |
+
* @return Boolean
|
1836 |
*/
|
1837 |
private function backup_table($table, $where = '', $segment = 'none', $table_type = 'BASE TABLE') {
|
1838 |
global $updraftplus;
|
1841 |
$total_rows = 0;
|
1842 |
|
1843 |
// Deal with Windows/old MySQL setups with erroneous table prefixes differing in case
|
1844 |
+
$dump_as_table = (false == $this->duplicate_tables_exist && stripos($table, $this->table_prefix) === 0 && strpos($table, $this->table_prefix) !== 0) ? $this->table_prefix.substr($table, strlen($this->table_prefix)) : $table;
|
1845 |
|
1846 |
$table_structure = $this->wpdb_obj->get_results("DESCRIBE ".$updraftplus->backquote($table));
|
1847 |
if (!$table_structure) {
|
1848 |
+
// $updraftplus->log(__('Error getting table details','wp-db-backup') . ": $table", 'error');
|
1849 |
return false;
|
1850 |
}
|
1851 |
|
1852 |
+
if ('none' == $segment || 0 == $segment) {
|
1853 |
// Add SQL statement to drop existing table
|
1854 |
$this->stow("\n# Delete any existing table ".$updraftplus->backquote($table)."\n\n");
|
1855 |
$this->stow("DROP TABLE IF EXISTS " . $updraftplus->backquote($dump_as_table) . ";\n");
|
1868 |
$create_table = $this->wpdb_obj->get_results("SHOW CREATE TABLE ".$updraftplus->backquote($table), ARRAY_N);
|
1869 |
if (false === $create_table) {
|
1870 |
$err_msg ='Error with SHOW CREATE TABLE for '.$table;
|
1871 |
+
// $updraftplus->log($err_msg, 'error');
|
1872 |
$this->stow("#\n# $err_msg\n#\n");
|
1873 |
}
|
1874 |
$create_line = $updraftplus->str_lreplace('TYPE=', 'ENGINE=', $create_table[0][1]);
|
1875 |
|
1876 |
+
// Remove PAGE_CHECKSUM parameter from MyISAM - was internal, undocumented, later removed (so causes errors on import)
|
1877 |
if (preg_match('/ENGINE=([^\s;]+)/', $create_line, $eng_match)) {
|
1878 |
$engine = $eng_match[1];
|
1879 |
if ('myisam' == strtolower($engine)) {
|
1895 |
|
1896 |
}
|
1897 |
|
1898 |
+
// Some tables have optional data, and should be skipped if they do not work
|
1899 |
$table_sans_prefix = substr($table, strlen($this->table_prefix_raw));
|
1900 |
$data_optional_tables = ('wp' == $this->whichdb) ? apply_filters('updraftplus_data_optional_tables', explode(',', UPDRAFTPLUS_DATA_OPTIONAL_TABLES)) : array();
|
1901 |
if (in_array($table_sans_prefix, $data_optional_tables)) {
|
1906 |
}
|
1907 |
|
1908 |
// In UpdraftPlus, segment is always 'none'
|
1909 |
+
if ('VIEW' != $table_type && ('none' == $segment || 0 <= $segment)) {
|
1910 |
$defs = array();
|
1911 |
$integer_fields = array();
|
1912 |
// $table_structure was from "DESCRIBE $table"
|
1913 |
foreach ($table_structure as $struct) {
|
1914 |
+
if ((0 === strpos($struct->Type, 'tinyint')) || (0 === strpos(strtolower($struct->Type), 'smallint'))
|
1915 |
+
|| (0 === strpos(strtolower($struct->Type), 'mediumint')) || (0 === strpos(strtolower($struct->Type), 'int')) || (0 === strpos(strtolower($struct->Type), 'bigint'))
|
1916 |
+
) {
|
1917 |
$defs[strtolower($struct->Field)] = (null === $struct->Default ) ? 'NULL' : $struct->Default;
|
1918 |
$integer_fields[strtolower($struct->Field)] = "1";
|
1919 |
}
|
1923 |
|
1924 |
$increment = 1000;
|
1925 |
if (!$updraftplus->something_useful_happened && !empty($updraftplus->current_resumption) && ($updraftplus->current_resumption - $updraftplus->last_successful_resumption > 1)) {
|
1926 |
+
// This used to be fixed at 500; but we (after a long time) saw a case that looked like an out-of-memory even at this level. We must be careful about going too low, though - otherwise we increase the risks of timeouts.
|
1927 |
$increment = ($updraftplus->current_resumption - $updraftplus->last_successful_resumption > 2) ? 350 : 500;
|
1928 |
}
|
1929 |
|
1945 |
|
1946 |
$table_data = $this->wpdb_obj->get_results("SELECT * FROM ".$updraftplus->backquote($table)." $where LIMIT {$row_start}, {$row_inc}", ARRAY_A);
|
1947 |
$entries = 'INSERT INTO '.$updraftplus->backquote($dump_as_table).' VALUES ';
|
1948 |
+
// \x08\\x09, not required
|
1949 |
+
if ($table_data) {
|
1950 |
$thisentry = "";
|
1951 |
foreach ($table_data as $row) {
|
1952 |
$total_rows++;
|
1976 |
} while (count($table_data) > 0 && 'none' == $segment);
|
1977 |
}
|
1978 |
|
1979 |
+
if ('none' == $segment || $segment < 0) {
|
1980 |
// Create footer/closing comment in SQL-file
|
1981 |
$this->stow("\n# End of data contents of table ".$updraftplus->backquote($table)."\n\n");
|
1982 |
}
|
1983 |
+
$updraftplus->log("Table $table: Total rows added: $total_rows in ".sprintf("%.02f", max(microtime(true)-$microtime, 0.00001))." seconds");
|
1984 |
|
1985 |
}
|
1986 |
|
1987 |
/*END OF WP-DB-BACKUP BLOCK */
|
1988 |
|
1989 |
+
/**
|
1990 |
+
* Encrypts the file if the option is set; returns the basename of the file (according to whether it was encrypted or nto)
|
1991 |
+
*
|
1992 |
+
* @param string $file file to encrypt
|
1993 |
+
* @return array
|
1994 |
+
*/
|
1995 |
public function encrypt_file($file) {
|
1996 |
global $updraftplus;
|
1997 |
$encryption = UpdraftPlus_Options::get_updraft_option('updraft_encryptionphrase');
|
2018 |
die();
|
2019 |
}
|
2020 |
if (null === $result) {
|
2021 |
+
// $updraftplus->log(sprintf(__("As previously warned (see: %s), encryption is no longer a feature of the free edition of UpdraftPlus", 'updraftplus'), 'https://updraftplus.com/next-updraftplus-release-ready-testing/ + https://updraftplus.com/shop/updraftplus-premium/'), 'warning', 'needpremiumforcrypt');
|
2022 |
+
// UpdraftPlus_Options::update_updraft_option('updraft_encryptionphrase', '');
|
2023 |
return basename($file);
|
2024 |
}
|
2025 |
return $result;
|
2032 |
return ($this->dbhandle_isgz) ? gzclose($this->dbhandle) : fclose($this->dbhandle);
|
2033 |
}
|
2034 |
|
2035 |
+
/**
|
2036 |
+
* Open a file, store its filehandle
|
2037 |
+
*
|
2038 |
+
* @param String $file Full path to the file to open
|
2039 |
+
* @param Boolean $allow_gz Use gzopen() if available, instead of fopen()
|
2040 |
+
* @return Resource - the opened file handle
|
2041 |
+
*/
|
2042 |
public function backup_db_open($file, $allow_gz = true) {
|
2043 |
+
if (function_exists('gzopen') && true == $allow_gz) {
|
2044 |
$this->dbhandle = @gzopen($file, 'w');
|
2045 |
$this->dbhandle_isgz = true;
|
2046 |
} else {
|
2047 |
$this->dbhandle = @fopen($file, 'w');
|
2048 |
$this->dbhandle_isgz = false;
|
2049 |
}
|
2050 |
+
if (false === $this->dbhandle) {
|
2051 |
global $updraftplus;
|
2052 |
$updraftplus->log("ERROR: $file: Could not open the backup file for writing");
|
2053 |
+
$updraftplus->log($file.": ".__("Could not open the backup file for writing", 'updraftplus'), 'error');
|
2054 |
}
|
2055 |
return $this->dbhandle;
|
2056 |
}
|
2065 |
public function stow($query_line) {
|
2066 |
if ($this->dbhandle_isgz) {
|
2067 |
if (false == ($ret = @gzwrite($this->dbhandle, $query_line))) {
|
2068 |
+
// $updraftplus->log(__('There was an error writing a line to the backup script:','wp-db-backup').' '.$query_line.' '.$php_errormsg, 'error');
|
2069 |
}
|
2070 |
} else {
|
2071 |
if (false == ($ret = @fwrite($this->dbhandle, $query_line))) {
|
2072 |
+
// $updraftplus->log(__('There was an error writing a line to the backup script:','wp-db-backup').' '.$query_line.' '.$php_errormsg, 'error');
|
2073 |
}
|
2074 |
}
|
2075 |
return $ret;
|
2081 |
include(ABSPATH.WPINC.'/version.php');
|
2082 |
|
2083 |
$mysql_version = $this->wpdb_obj->db_version();
|
2084 |
+
// (function_exists('mysql_get_server_info')) ? @mysql_get_server_info() : '?';
|
2085 |
|
2086 |
if ('wp' == $this->whichdb) {
|
2087 |
$wp_upload_dir = wp_upload_dir();
|
2109 |
$label = $updraftplus->jobdata_get('label');
|
2110 |
if (!empty($label)) $this->stow("# Label: $label\n");
|
2111 |
|
2112 |
+
$this->stow("\n# Generated: ".date("l j. F Y H:i T")."\n");
|
|
|
2113 |
$this->stow("# Hostname: ".$this->dbinfo['host']."\n");
|
2114 |
$this->stow("# Database: ".$updraftplus->backquote($this->dbinfo['name'])."\n");
|
2115 |
|
2132 |
$this->stow("/*!40101 SET foreign_key_checks = 0 */;\n\n");
|
2133 |
}
|
2134 |
|
2135 |
+
|
2136 |
public function phpmailer_init($phpmailer) {
|
2137 |
global $updraftplus;
|
2138 |
if (empty($this->attachments) || !is_array($this->attachments)) return;
|
2146 |
}
|
2147 |
}
|
2148 |
|
2149 |
+
/**
|
2150 |
+
* This function recursively packs the zip, dereferencing symlinks but packing into a single-parent tree for universal unpacking
|
2151 |
+
*
|
2152 |
+
* @param String $fullpath Full path
|
2153 |
+
* @param String $use_path_when_storing Controls the path to use when storing in the zip file
|
2154 |
+
* @param String $original_fullpath Original path
|
2155 |
+
* @param Integer $startlevels How deep within the directory structure the recursive operation has gone
|
2156 |
+
* @param Array $exclude passed by reference so that we can remove elements as they are matched - saves time checking against already-dealt-with objects]
|
2157 |
+
* @return Boolean
|
2158 |
+
*/
|
2159 |
private function makezip_recursive_add($fullpath, $use_path_when_storing, $original_fullpath, $startlevels = 1, &$exclude) {
|
2160 |
|
2161 |
+
// $zipfile = $this->zip_basename.(($this->index == 0) ? '' : ($this->index+1)).'.zip.tmp';
|
2162 |
|
2163 |
global $updraftplus;
|
2164 |
|
2175 |
// Is the place we've ended up above the original base? That leads to infinite recursion
|
2176 |
if (($fullpath !== $original_fullpath && strpos($original_fullpath, $fullpath) === 0) || ($original_fullpath == $fullpath && ((1== $startlevels && strpos($use_path_when_storing, '/') !== false) || (2 == $startlevels && substr_count($use_path_when_storing, '/') >1)))) {
|
2177 |
$updraftplus->log("Infinite recursion: symlink led us to $fullpath, which is within $original_fullpath");
|
2178 |
+
$updraftplus->log(__("Infinite recursion: consult your log for more information", 'updraftplus'), 'error');
|
2179 |
return false;
|
2180 |
}
|
2181 |
|
2182 |
+
// This is sufficient for the ones we have exclude options for - uploads, others, wpcore
|
2183 |
$stripped_storage_path = (1 == $startlevels) ? $use_path_when_storing : substr($use_path_when_storing, strpos($use_path_when_storing, '/') + 1);
|
2184 |
if (false !== ($fkey = array_search($stripped_storage_path, $exclude))) {
|
2185 |
$updraftplus->log("Entity excluded by configuration option: $stripped_storage_path");
|
2202 |
if ($mtime > 0 && $mtime > $if_altered_since) {
|
2203 |
$this->zipfiles_batched[$fullpath] = $key;
|
2204 |
$this->makezip_recursive_batchedbytes += @filesize($fullpath);
|
2205 |
+
// @touch($zipfile);
|
2206 |
} else {
|
2207 |
$this->zipfiles_skipped_notaltered[$fullpath] = $key;
|
2208 |
}
|
2230 |
|
2231 |
if (!$dir_handle = @opendir($fullpath)) {
|
2232 |
$updraftplus->log("Failed to open directory: $fullpath");
|
2233 |
+
$updraftplus->log(sprintf(__("Failed to open directory (check the file permissions and ownership): %s", 'updraftplus'), $fullpath), 'error');
|
2234 |
return false;
|
2235 |
}
|
2236 |
|
2256 |
if ($mtime > 0 && $mtime > $if_altered_since) {
|
2257 |
$this->zipfiles_batched[$deref] = $use_path_when_storing.'/'.$e;
|
2258 |
$this->makezip_recursive_batchedbytes += @filesize($deref);
|
2259 |
+
// @touch($zipfile);
|
2260 |
} else {
|
2261 |
$this->zipfiles_skipped_notaltered[$deref] = $use_path_when_storing.'/'.$e;
|
2262 |
}
|
2267 |
}
|
2268 |
} elseif (is_dir($deref)) {
|
2269 |
|
2270 |
+
// $link_target = readlink($deref);
|
2271 |
+
// $updraftplus->log("Symbolic link $use_path_when_storing/$e -> $link_target");
|
2272 |
|
2273 |
$this->makezip_recursive_add($deref, $use_path_when_storing.'/'.$e, $original_fullpath, $startlevels, $exclude);
|
2274 |
}
|
2385 |
return unserialize($var);
|
2386 |
}
|
2387 |
|
2388 |
+
|
2389 |
+
|
2390 |
+
/**
|
2391 |
+
* Make Zip File. $destination is the temporary file (ending in .tmp)
|
2392 |
+
*
|
2393 |
+
* @param Array|String $source Caution: $source is allowed to be an array, not just a filename
|
2394 |
+
* @param String $backup_file_basename Name of backup file
|
2395 |
+
* @param String $whichone Backup entity type (e.g. 'plugins')
|
2396 |
+
* @param Boolean $retry_on_error Set to retry upon error
|
2397 |
+
* @return Boolean
|
2398 |
+
*/
|
2399 |
private function make_zipfile($source, $backup_file_basename, $whichone, $retry_on_error = true) {
|
2400 |
|
2401 |
global $updraftplus;
|
2407 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
2408 |
|
2409 |
// Legacy/redundant
|
2410 |
+
// if (empty($whichone) && is_string($whichone)) $whichone = basename($source);
|
2411 |
|
2412 |
// When to prefer PCL:
|
2413 |
// - We were asked to
|
2416 |
|
2417 |
// We need meta-info about $whichone
|
2418 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, false);
|
2419 |
+
// This is only used by one corner-case in BinZip
|
2420 |
+
// $this->make_zipfile_source = (isset($backupable_entities[$whichone])) ? $backupable_entities[$whichone] : $source;
|
2421 |
$this->make_zipfile_source = (is_array($source) && isset($backupable_entities[$whichone])) ? (('uploads' == $whichone) ? dirname($backupable_entities[$whichone]) : $backupable_entities[$whichone]) : dirname($source);
|
2422 |
|
2423 |
$this->existing_files = array();
|
2424 |
+
// Used for tracking compression ratios
|
2425 |
$this->existing_files_rawsize = 0;
|
2426 |
$this->existing_zipfiles_size = 0;
|
2427 |
|
2428 |
// Enumerate existing files
|
2429 |
// Usually first_linked_index is zero; the exception being with more files, where previous zips' contents are irrelevant
|
2430 |
for ($j=$this->first_linked_index; $j<=$this->index; $j++) {
|
2431 |
+
$jtext = (0 == $j) ? '' : ($j+1);
|
2432 |
+
// This is, in a non-obvious way, compatible with filenames which indicate increments
|
2433 |
+
// $j does not need to start at zero; it should start at the index which the current entity split at. However, this is not directly known, and can only be deduced from examining the filenames. And, for other indexes from before the current increment, the searched-for filename won't exist (even if there is no cloud storage). So, this indirectly results in the desired outcome when we start from $j=0.
|
2434 |
$examine_zip = $this->updraft_dir.'/'.$backup_file_basename.'-'.$whichone.$jtext.'.zip'.(($j == $this->index) ? '.tmp' : '');
|
2435 |
|
2436 |
// This comes from https://wordpress.org/support/topic/updraftplus-not-moving-all-files-to-remote-server - where it appears that the jobdata's record of the split was done (i.e. database write), but the *earlier* rename of the .tmp file was not done (i.e. I/O lost). i.e. In theory, this should be impossible; but, the sychnronicity apparently cannot be fully relied upon in some setups. The check for the index being one behind is being conservative - there's no inherent reason why it couldn't be done for other indexes.
|
2457 |
$updraftplus->log("Could not open zip file to examine (".$zip->last_error."); will remove: ".basename($examine_zip));
|
2458 |
@unlink($examine_zip);
|
2459 |
} else {
|
2460 |
+
// Don't put this in the for loop, or the magic __get() method gets called and opens the zip file every time the loop goes round
|
|
|
2461 |
$numfiles = $zip->numFiles;
|
2462 |
|
2463 |
for ($i=0; $i < $numfiles; $i++) {
|
2472 |
|
2473 |
$updraftplus->log(basename($examine_zip).": Zip file already exists, with ".count($this->existing_files)." files");
|
2474 |
|
2475 |
+
// try_split is set if there have been no check-ins recently - or if it needs to be split anyway
|
2476 |
if ($j == $this->index) {
|
2477 |
if (isset($this->try_split)) {
|
2478 |
if (filesize($examine_zip) > 50*1048576) {
|
2479 |
+
// We could, as a future enhancement, save this back to the job data, if we see a case that needs it
|
2480 |
$this->zip_split_every = max(
|
2481 |
+
(int) $this->zip_split_every/2,
|
2482 |
UPDRAFTPLUS_SPLIT_MIN*1048576,
|
2483 |
min(filesize($examine_zip)-1048576, $this->zip_split_every)
|
2484 |
);
|
2485 |
+
$updraftplus->jobdata_set('split_every', (int) ($this->zip_split_every/1048576));
|
2486 |
$updraftplus->log("No check-in on last two runs; bumping index and reducing zip split to: ".round($this->zip_split_every/1048576, 1)." MB");
|
2487 |
$do_bump_index = true;
|
2488 |
}
|
2513 |
|
2514 |
$error_occurred = false;
|
2515 |
|
2516 |
+
// Store this in its original form
|
2517 |
$this->source = $source;
|
2518 |
|
2519 |
+
// Reset. This counter is used only with PcLZip, to decide if it's better to do it all-in-one
|
2520 |
$this->makezip_recursive_batchedbytes = 0;
|
2521 |
if (!is_array($source)) $source=array($source);
|
2522 |
|
2542 |
// Cache files exist; shall we use them?
|
2543 |
$mtime = filemtime($cache_file_base.'-zfd.gz.tmp');
|
2544 |
// Require < 30 minutes old
|
2545 |
+
if (time() - $mtime < 1800) {
|
2546 |
+
$use_cache_files = true;
|
2547 |
+
}
|
2548 |
$any_failures = false;
|
2549 |
if ($use_cache_files) {
|
2550 |
$var = $this->unserialize_gz_cache_file($cache_file_base.'-zfd.gz.tmp');
|
2557 |
$var = maybe_unserialize(file_get_contents($cache_file_base.'-info.tmp'));
|
2558 |
if (is_array($var) && isset($var['makezip_recursive_batchedbytes'])) {
|
2559 |
$this->makezip_recursive_batchedbytes = $var['makezip_recursive_batchedbytes'];
|
2560 |
+
if (file_exists($cache_file_base.'-zfs.gz.tmp')) {
|
2561 |
$var = $this->unserialize_gz_cache_file($cache_file_base.'-zfs.gz.tmp');
|
2562 |
if (is_array($var)) {
|
2563 |
$this->zipfiles_skipped_notaltered = $var;
|
2598 |
$this->excluded_prefixes = $this->get_excluded_prefixes($exclude);
|
2599 |
|
2600 |
foreach ($source as $element) {
|
2601 |
+
// makezip_recursive_add($fullpath, $use_path_when_storing, $original_fullpath, $startlevels = 1, $exclude_array)
|
2602 |
if ('uploads' == $whichone) {
|
2603 |
if (empty($got_uploads_from_cache)) {
|
2604 |
$dirname = dirname($element);
|
2621 |
|
2622 |
// Cache the file scan, if it looks like it'll be useful
|
2623 |
// We use gzip to reduce the size as on hosts which limit disk I/O, the cacheing may make things worse
|
2624 |
+
// || 'others' == $whichone
|
2625 |
+
if (('uploads' == $whichone || 'others' == $whichone) && !$error_occurred && function_exists('gzopen') && function_exists('gzwrite')) {
|
2626 |
$cache_file_base = $this->zip_basename.'-cachelist-'.$this->makezip_if_altered_since;
|
2627 |
|
2628 |
// Just approximate - we're trying to avoid an otherwise-unpredictable PHP fatal error. Cacheing only happens if file enumeration took a long time - so presumably there are very many.
|
2629 |
$memory_needed_estimate = 0;
|
2630 |
+
foreach ($this->zipfiles_batched as $k => $v) {
|
2631 |
+
$memory_needed_estimate += strlen($k)+strlen($v)+12;
|
2632 |
+
}
|
2633 |
|
2634 |
// We haven't bothered to check if we just fetched the files from cache, as that shouldn't take a long time and so shouldn't trigger this
|
2635 |
// Let us suppose we need 15% overhead for gzipping
|
2655 |
$final = gzwrite($whandle, $buf);
|
2656 |
unset($buf);
|
2657 |
|
2658 |
+
// $serialised = serialize($this->zipfiles_batched);
|
2659 |
+
// $updraftplus->log("Actual uncompressed bytes: ".round(strlen($serialised)/1024, 1)." Kb");
|
2660 |
+
// if (!gzwrite($whandle, $serialised)) {
|
2661 |
if (!$final) {
|
2662 |
@unlink($cache_file_base.'-zfb.gz.tmp');
|
2663 |
@gzclose($whandle);
|
2695 |
@unlink($cache_file_base.'-zfd.gz.tmp');
|
2696 |
@unlink($cache_file_base.'-zfb.gz.tmp');
|
2697 |
@unlink($cache_file_base.'-info.tmp');
|
2698 |
+
// @codingStandardsIgnoreLine
|
2699 |
} else {
|
2700 |
// Success.
|
2701 |
}
|
2726 |
|
2727 |
if (count($this->zipfiles_dirbatched) > 0 || count($this->zipfiles_batched) > 0) {
|
2728 |
|
2729 |
+
$updraftplus->log(sprintf("Total entities for the zip file: %d directories, %d files (%d skipped as non-modified), %s MB", count($this->zipfiles_dirbatched), count($this->zipfiles_batched), count($this->zipfiles_skipped_notaltered), round($this->makezip_recursive_batchedbytes/1048576, 1)));
|
2730 |
|
2731 |
// No need to warn if we're going to retry anyway. (And if we get killed, the zip will be rescanned for its contents upon resumption).
|
2732 |
$warn_on_failures = ($retry_on_error) ? false : true;
|
2764 |
|
2765 |
// zipfiles_added > 0 means that $zip->close() has been called. i.e. An attempt was made to add something: something _should_ be there.
|
2766 |
// Why return true even if $error_occurred may be set? 1) Because in that case, a warning has already been logged. 2) Because returning false causes an error to be logged, which means it'll all be retried again. Also 3) this has been the pattern of the code for a long time, and the algorithm has been proven in the real-world: don't change what's not broken.
|
2767 |
+
// (file_exists($destination) || $this->index == $original_index) might be an alternative to $this->zipfiles_added > 0 - ? But, don't change what's not broken.
|
2768 |
+
if (false == $error_occurred || $this->zipfiles_added > 0) {
|
2769 |
return true;
|
2770 |
} else {
|
2771 |
$updraftplus->log("makezip failure: zipfiles_added=".$this->zipfiles_added.", error_occurred=".$error_occurred." (method=".$this->use_zip_object.")");
|
2775 |
}
|
2776 |
|
2777 |
private function basename($element) {
|
2778 |
+
// This function is an ugly, conservative workaround for https://bugs.php.net/bug.php?id=62119. It does not aim to always work-around, but to ensure that nothing is made worse.
|
2779 |
$dirname = dirname($element);
|
2780 |
$basename_manual = preg_replace('#^[\\/]+#', '', substr($element, strlen($dirname)));
|
2781 |
$basename = basename($element);
|
2800 |
return false;
|
2801 |
}
|
2802 |
|
2803 |
+
/**
|
2804 |
+
* This method will add a manifest file to the backup zip
|
2805 |
+
*
|
2806 |
+
* @param String $whichone - the type of backup (e.g. 'plugins', 'themes')
|
2807 |
+
*
|
2808 |
+
* @return Boolean - success/failure status
|
2809 |
+
*/
|
2810 |
+
private function updraftplus_include_manifest($whichone) {
|
2811 |
+
global $updraftplus;
|
2812 |
+
|
2813 |
+
if ('incremental' != $updraftplus->jobdata_get('job_type')) return;
|
2814 |
+
|
2815 |
+
$manifest_name = "updraftplus-manifest.json";
|
2816 |
+
$manifest = trailingslashit($this->updraft_dir).$manifest_name;
|
2817 |
+
|
2818 |
+
$updraftplus->log(sprintf("Creating file manifest ($manifest_name) for incremental backup (included: %d, skipped: %d)", count($this->zipfiles_batched), count($this->zipfiles_skipped_notaltered)));
|
2819 |
+
|
2820 |
+
if (false === ($handle = fopen($manifest, 'w+'))) return $updraftplus->log("Failed to open manifest file ($manifest_name)");
|
2821 |
+
|
2822 |
+
$this->manifest_path = $manifest;
|
2823 |
+
|
2824 |
+
$version = 1;
|
2825 |
+
|
2826 |
+
$go_to_levels = array(
|
2827 |
+
'plugins' => 2,
|
2828 |
+
'themes' => 2,
|
2829 |
+
'uploads' => 3,
|
2830 |
+
'others' => 3
|
2831 |
+
);
|
2832 |
+
|
2833 |
+
$go_to_levels = apply_filters('updraftplus_manifest_go_to_level', $go_to_levels, $whichone);
|
2834 |
+
|
2835 |
+
$go_to_level = isset($go_to_levels[$whichone]) ? $go_to_levels[$whichone] : 'all';
|
2836 |
+
|
2837 |
+
if (false === fwrite($handle, '{"version":'.$version.',"type":"'.$whichone.'","listed_levels":"'.$go_to_level.'","contents":{"directories":[')) $updraftplus->log("First write to manifest file failed ($manifest_name)");
|
2838 |
+
|
2839 |
+
// First loop: find out which is the last entry, so that we don't write the comma after it
|
2840 |
+
$last_file_index = false;
|
2841 |
+
foreach ($this->zipfiles_dirbatched as $index => $dir) {
|
2842 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2843 |
+
$last_file_index = $index;
|
2844 |
+
}
|
2845 |
+
|
2846 |
+
// Second loop: write out the entry
|
2847 |
+
foreach ($this->zipfiles_dirbatched as $index => $dir) {
|
2848 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2849 |
+
fwrite($handle, json_encode($dir).(($index != $last_file_index) ? ',' : ''));
|
2850 |
+
}
|
2851 |
+
|
2852 |
+
// Now do the same for files
|
2853 |
+
fwrite($handle, '],"files":[');
|
2854 |
+
|
2855 |
+
$last_file_index = false;
|
2856 |
+
foreach ($this->zipfiles_batched as $index => $dir) {
|
2857 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2858 |
+
$last_file_index = $index;
|
2859 |
+
}
|
2860 |
+
|
2861 |
+
foreach ($this->zipfiles_batched as $index => $dir) {
|
2862 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2863 |
+
fwrite($handle, json_encode($dir).(($index != $last_file_index) ? ',' : ''));
|
2864 |
+
}
|
2865 |
+
|
2866 |
+
$last_file_index = false;
|
2867 |
+
foreach ($this->zipfiles_skipped_notaltered as $index => $dir) {
|
2868 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2869 |
+
$last_file_index = $index;
|
2870 |
+
}
|
2871 |
+
|
2872 |
+
foreach ($this->zipfiles_skipped_notaltered as $index => $dir) {
|
2873 |
+
if ('all' !== $go_to_level && substr_count($dir, '/') > $go_to_level - 1) continue;
|
2874 |
+
fwrite($handle, json_encode($dir).(($index != $last_file_index) ? ',' : ''));
|
2875 |
+
}
|
2876 |
+
|
2877 |
+
fwrite($handle, ']}}');
|
2878 |
+
fclose($handle);
|
2879 |
+
|
2880 |
+
$this->zipfiles_batched[$manifest] = $manifest_name;
|
2881 |
+
|
2882 |
+
$updraftplus->log("Successfully created file manifest (size: ".filesize($manifest).")");
|
2883 |
+
|
2884 |
+
return true;
|
2885 |
+
}
|
2886 |
+
|
2887 |
// Q. Why don't we only open and close the zip file just once?
|
2888 |
// A. Because apparently PHP doesn't write out until the final close, and it will return an error if anything file has vanished in the meantime. So going directory-by-directory reduces our chances of hitting an error if the filesystem is changing underneath us (which is very possible if dealing with e.g. 1GB of files)
|
2889 |
|
2890 |
+
/**
|
2891 |
+
* We batch up the files, rather than do them one at a time. So we are more efficient than open,one-write,close.
|
2892 |
+
* To call into here, the array $this->zipfiles_batched must be populated (keys=paths, values=add-to-zip-as values). It gets reset upon exit from here.
|
2893 |
+
*
|
2894 |
+
* @param Boolean $warn_on_failures See if it warns on faliures or not
|
2895 |
+
* @return Boolean|WP_Error
|
2896 |
+
*/
|
2897 |
private function makezip_addfiles($warn_on_failures) {
|
2898 |
|
2899 |
global $updraftplus;
|
2900 |
|
2901 |
+
// Used to detect requests to bump the size
|
2902 |
$bump_index = false;
|
2903 |
$ret = true;
|
2904 |
|
2905 |
+
$zipfile = $this->zip_basename.((0 == $this->index) ? '' : ($this->index+1)).'.zip.tmp';
|
2906 |
|
2907 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
2908 |
+
if ((int) $maxzipbatch < 1024) $maxzipbatch = 26214400;
|
2909 |
|
2910 |
// Short-circuit the null case, because we want to detect later if something useful happenned
|
2911 |
if (count($this->zipfiles_dirbatched) == 0 && count($this->zipfiles_batched) == 0) return true;
|
2912 |
|
2913 |
+
// If on PclZip, then if possible short-circuit to a quicker method (makes a huge time difference - on a folder of 1500 small files, 2.6s instead of 76.6)
|
2914 |
+
// This assumes that makezip_addfiles() is only called once so that we know about all needed files (the new style)
|
2915 |
+
// This is rather conservative - because it assumes zero compression. But we can't know that in advance.
|
2916 |
$force_allinone = false;
|
2917 |
if (0 == $this->index && $this->makezip_recursive_batchedbytes < $this->zip_split_every) {
|
2918 |
+
// So far, we only have a processor for this for PclZip; but that check can be removed - need to address the below items
|
2919 |
+
// TODO: Is this really what we want? Always go all-in-one for < 500MB???? Should be more conservative? Or, is it always faster to go all-in-one? What about situations where we might want to auto-split because of slowness - check that that is still working.
|
2920 |
+
// TODO: Test this new method for PclZip - are we still getting the performance gains? Test for ZipArchive too.
|
2921 |
if ('UpdraftPlus_PclZip' == $this->use_zip_object && ($this->makezip_recursive_batchedbytes < 512*1048576 || (defined('UPDRAFTPLUS_PCLZIP_FORCEALLINONE') && UPDRAFTPLUS_PCLZIP_FORCEALLINONE == true && 'UpdraftPlus_PclZip' == $this->use_zip_object))) {
|
2922 |
$updraftplus->log("Only one archive required (".$this->use_zip_object.") - will attempt to do in single operation (data: ".round($this->makezip_recursive_batchedbytes/1024, 1)." KB, split: ".round($this->zip_split_every/1024, 1)." KB)");
|
2923 |
+
// $updraftplus->log("PclZip, and only one archive required - will attempt to do in single operation (data: ".round($this->makezip_recursive_batchedbytes/1024, 1)." KB, split: ".round($this->zip_split_every/1024, 1)." KB)");
|
2924 |
$force_allinone = true;
|
2925 |
+
// if(!class_exists('PclZip')) require_once(ABSPATH.'/wp-admin/includes/class-pclzip.php');
|
2926 |
+
// $zip = new PclZip($zipfile);
|
2927 |
+
// $remove_path = ($this->whichone == 'wpcore') ? untrailingslashit(ABSPATH) : WP_CONTENT_DIR;
|
2928 |
+
// $add_path = false;
|
2929 |
+
// Remove prefixes
|
2930 |
+
// $backupable_entities = $updraftplus->get_backupable_file_entities(true);
|
2931 |
+
// if (isset($backupable_entities[$this->whichone])) {
|
2932 |
+
// if ('plugins' == $this->whichone || 'themes' == $this->whichone || 'uploads' == $this->whichone) {
|
2933 |
+
// $remove_path = dirname($backupable_entities[$this->whichone]);
|
2934 |
+
// To normalise instead of removing (which binzip doesn't support, so we don't do it), you'd remove the dirname() in the above line, and uncomment the below one.
|
2935 |
+
// #$add_path = $this->whichone;
|
2936 |
+
// } else {
|
2937 |
+
// $remove_path = $backupable_entities[$this->whichone];
|
2938 |
+
// }
|
2939 |
+
// }
|
2940 |
+
// if ($add_path) {
|
2941 |
+
// $zipcode = $zip->create($this->source, PCLZIP_OPT_REMOVE_PATH, $remove_path, PCLZIP_OPT_ADD_PATH, $add_path);
|
2942 |
+
// } else {
|
2943 |
+
// $zipcode = $zip->create($this->source, PCLZIP_OPT_REMOVE_PATH, $remove_path);
|
2944 |
+
// }
|
2945 |
+
// if ($zipcode == 0) {
|
2946 |
+
// $updraftplus->log("PclZip Error: ".$zip->errorInfo(true), 'warning');
|
2947 |
+
// return $zip->errorCode();
|
2948 |
+
// } else {
|
2949 |
+
// $updraftplus->something_useful_happened();
|
2950 |
+
// return true;
|
2951 |
+
// }
|
2952 |
}
|
2953 |
}
|
2954 |
|
2955 |
// 05-Mar-2013 - added a new check on the total data added; it appears that things fall over if too much data is contained in the cumulative total of files that were addFile'd without a close-open cycle; presumably data is being stored in memory. In the case in question, it was a batch of MP3 files of around 100MB each - 25 of those equals 2.5GB!
|
2956 |
|
2957 |
$data_added_since_reopen = 0;
|
2958 |
+
// The following array is used only for error reporting if ZipArchive::close fails (since that method itself reports no error messages - we have to track manually what we were attempting to add)
|
2959 |
$files_zipadded_since_open = array();
|
2960 |
|
2961 |
$zip = new $this->use_zip_object;
|
2969 |
$original_size = 0;
|
2970 |
}
|
2971 |
|
2972 |
+
if (true !== $opencode) return new WP_Error('no_open', sprintf(__('Failed to open the zip file (%s) - %s', 'updraftplus'), $zipfile, $zip->last_error));
|
2973 |
+
|
2974 |
+
if (apply_filters('updraftplus_include_manifest', false, $this->whichone, $this)) {
|
2975 |
+
$this->updraftplus_include_manifest($this->whichone);
|
2976 |
+
}
|
2977 |
|
2978 |
// Make sure all directories are created before we start creating files
|
2979 |
+
while ($dir = array_pop($this->zipfiles_dirbatched)) {
|
2980 |
+
$zip->addEmptyDir($dir);
|
2981 |
+
}
|
2982 |
$zipfiles_added_thisbatch = 0;
|
2983 |
|
2984 |
// Go through all those batched files
|
3023 |
- more than 500 files batched (should perhaps intelligently lower this as the zip file gets bigger - not yet needed)
|
3024 |
*/
|
3025 |
|
3026 |
+
// Add 10% margin. It only really matters when the OS has a file size limit, exceeding which causes failure (e.g. 2GB on 32-bit)
|
3027 |
+
// Since we don't test before the file has been created (so that zip_last_ratio has meaningful data), we rely on max_zip_batch being less than zip_split_every - which should always be the case
|
3028 |
$reaching_split_limit = ($this->zip_last_ratio > 0 && $original_size>0 && ($original_size + 1.1*$data_added_since_reopen*$this->zip_last_ratio) > $this->zip_split_every) ? true : false;
|
3029 |
|
3030 |
if (!$force_allinone && ($zipfiles_added_thisbatch > UPDRAFTPLUS_MAXBATCHFILES || $reaching_split_limit || $data_added_since_reopen > $maxzipbatch || (time() - $this->zipfiles_lastwritetime) > 2)) {
|
3034 |
|
3035 |
if ($data_added_since_reopen > $maxzipbatch) {
|
3036 |
$something_useful_sizetest = true;
|
3037 |
+
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over ".round($maxzipbatch/1048576, 1)." MB added on this batch (".round($data_added_since_reopen/1048576, 1)." MB, ".count($this->zipfiles_batched)." files batched, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
3038 |
} elseif ($zipfiles_added_thisbatch > UPDRAFTPLUS_MAXBATCHFILES) {
|
3039 |
+
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over ".UPDRAFTPLUS_MAXBATCHFILES." files added on this batch (".round($data_added_since_reopen/1048576, 1)." MB, ".count($this->zipfiles_batched)." files batched, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
3040 |
} elseif (!$reaching_split_limit) {
|
3041 |
+
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): over 2.0 seconds have passed since the last write (".round($data_added_since_reopen/1048576, 1)." MB, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") files added so far); re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
3042 |
} else {
|
3043 |
+
$updraftplus->log("Adding batch to zip file (".$this->use_zip_object."): possibly approaching split limit (".round($data_added_since_reopen/1048576, 1)." MB, $zipfiles_added_thisbatch (".$this->zipfiles_added_thisrun.") files added so far); last ratio: ".round($this->zip_last_ratio, 4)."; re-opening (prior size: ".round($original_size/1024, 1).' KB)');
|
3044 |
}
|
3045 |
|
3046 |
if (!$zip->close()) {
|
3051 |
|
3052 |
$zipfiles_added_thisbatch = 0;
|
3053 |
|
3054 |
+
// This triggers a re-open, later
|
3055 |
unset($zip);
|
3056 |
$files_zipadded_since_open = array();
|
3057 |
// Call here, in case we've got so many big files that we don't complete the whole routine
|
3058 |
if (filesize($zipfile) > $original_size) {
|
3059 |
|
3060 |
+
// It is essential that this does not go above 1, even though in reality (and this can happen at the start, if just 1 file is added (e.g. due to >2.0s detection) the 'compressed' zip file may be *bigger* than the files stored in it. When that happens, if the ratio is big enough, it can then fire the "approaching split limit" detection (very) prematurely
|
3061 |
$this->zip_last_ratio = ($data_added_since_reopen > 0) ? min((filesize($zipfile) - $original_size)/$data_added_since_reopen, 1) : 1;
|
3062 |
|
3063 |
+
// We need a rolling update of this
|
3064 |
$original_size = filesize($zipfile);
|
3065 |
|
3066 |
+
// Move on to next zip?
|
3067 |
if ($reaching_split_limit || filesize($zipfile) > $this->zip_split_every) {
|
3068 |
$bump_index = true;
|
3069 |
+
// Take the filesize now because later we wanted to know we did clearstatcache()
|
3070 |
$bumped_at = round(filesize($zipfile)/1048576, 1);
|
3071 |
}
|
3072 |
|
3073 |
+
// Need to make sure that something_useful_happened() is always called
|
3074 |
|
3075 |
+
// How long since the current run began? If it's taken long (and we're in danger of not making it at all), or if that is forseeable in future because of general slowness, then we should reduce the parameters.
|
3076 |
if (!$something_useful_sizetest) {
|
3077 |
$updraftplus->something_useful_happened();
|
3078 |
} else {
|
3114 |
// How much can we increase it by?
|
3115 |
if ($normalised_time_since_began <6) {
|
3116 |
if ($run_times_known > 0 && $max_time >0) {
|
3117 |
+
$new_maxzipbatch = min(floor(max($maxzipbatch*6/$normalised_time_since_began, $maxzipbatch*((0.6*$max_time)/$normalised_time_since_began))), 200*1024*1024);
|
|
|
|
|
|
|
3118 |
} else {
|
3119 |
+
// Maximum of 200MB in a batch
|
3120 |
$new_maxzipbatch = min(floor($maxzipbatch*6/$normalised_time_since_began), 200*1024*1024);
|
3121 |
}
|
3122 |
} else {
|
3124 |
$new_maxzipbatch = min(floor($maxzipbatch*((0.6*$max_time)/$normalised_time_since_began)), 200*1024*1024);
|
3125 |
}
|
3126 |
|
3127 |
+
// Throttle increases - don't increase by more than 2x in one go - ???
|
3128 |
+
// $new_maxzipbatch = floor(min(2*$maxzipbatch, $new_maxzipbatch));
|
3129 |
+
// Also don't allow anything that is going to be more than 18 seconds - actually, that's harmful because of the basically fixed time taken to copy the file
|
3130 |
+
// $new_maxzipbatch = floor(min(18*$rate ,$new_maxzipbatch));
|
3131 |
|
3132 |
+
// Don't go above the split amount (though we expect that to be higher anyway, unless sending via email)
|
3133 |
$new_maxzipbatch = min($new_maxzipbatch, $this->zip_split_every);
|
3134 |
|
3135 |
+
// Don't raise it above a level that failed on a previous run
|
3136 |
$maxzipbatch_ceiling = $updraftplus->jobdata_get('maxzipbatch_ceiling');
|
3137 |
if (is_numeric($maxzipbatch_ceiling) && $maxzipbatch_ceiling > 20*1024*1024 && $new_maxzipbatch > $maxzipbatch_ceiling) {
|
3138 |
$updraftplus->log("Was going to raise maxzipbytes to $new_maxzipbatch, but this is too high: a previous failure led to the ceiling being set at $maxzipbatch_ceiling, which we will use instead");
|
3183 |
}
|
3184 |
$data_added_since_reopen = 0;
|
3185 |
} else {
|
3186 |
+
// ZipArchive::close() can take a very long time, which we want to know about
|
3187 |
$updraftplus->record_still_alive();
|
3188 |
}
|
3189 |
|
3224 |
$original_size = 0;
|
3225 |
}
|
3226 |
|
3227 |
+
if (true !== $opencode) return new WP_Error('no_open', sprintf(__('Failed to open the zip file (%s) - %s', 'updraftplus'), $zipfile, $zip->last_error));
|
3228 |
}
|
3229 |
|
3230 |
}
|
3231 |
|
3232 |
+
// Reset array
|
3233 |
$this->zipfiles_batched = array();
|
3234 |
$this->zipfiles_skipped_notaltered = array();
|
3235 |
|
3236 |
if (false == ($nret = $zip->close())) $this->record_zip_error($files_zipadded_since_open, $zip->last_error, $warn_on_failures);
|
3237 |
|
3238 |
+
if (apply_filters('updraftplus_include_manifest', false, $this->whichone, $this)) {
|
3239 |
+
if (!empty($this->manifest_path) && file_exists($this->manifest_path)) {
|
3240 |
+
$updraftplus->log('Removing manifest file: '.basename($this->manifest_path).': '.(@unlink($this->manifest_path) ? 'OK' : 'failed'));
|
3241 |
+
}
|
3242 |
+
}
|
3243 |
|
3244 |
$this->zipfiles_lastwritetime = time();
|
3245 |
+
// May not exist if the last thing we did was bump
|
3246 |
if (file_exists($zipfile) && filesize($zipfile) > $original_size) $updraftplus->something_useful_happened();
|
3247 |
|
3248 |
+
// Move on to next archive?
|
3249 |
if (file_exists($zipfile) && filesize($zipfile) > $this->zip_split_every) {
|
3250 |
+
$updraftplus->log(sprintf("Zip size has gone over split limit (%s, %s) - bumping index (%d)", round(filesize($zipfile)/1048576, 1), round($this->zip_split_every/1048576, 1), $this->index));
|
3251 |
$this->bump_index();
|
3252 |
}
|
3253 |
|
@@ -2,6 +2,10 @@
|
|
2 |
|
3 |
if (!defined('UPDRAFTPLUS_DIR')) die('No access.');
|
4 |
|
|
|
|
|
|
|
|
|
5 |
// This file is included during plugins_loaded
|
6 |
|
7 |
// Load the listener class that we rely on to pick up messages
|
@@ -24,8 +28,8 @@ class UpdraftPlus_UpdraftCentral_Main {
|
|
24 |
'updates' => 'UpdraftCentral_Updates_Commands',
|
25 |
'users' => 'UpdraftCentral_Users_Commands',
|
26 |
'comments' => 'UpdraftCentral_Comments_Commands',
|
27 |
-
'
|
28 |
-
'
|
29 |
));
|
30 |
|
31 |
// If nothing was sent, then there is no incoming message, so no need to set up a listener (or CORS request, etc.). This avoids a DB SELECT query on the option below in the case where it didn't get autoloaded, which is the case when there are no keys.
|
@@ -233,7 +237,7 @@ class UpdraftPlus_UpdraftCentral_Main {
|
|
233 |
$created['keys_guide'] = '<h2 class="updraftcentral_wizard_success">'. __('UpdraftCentral key created successfully') .'</h2>';
|
234 |
|
235 |
if ('__updraftpluscom' != $where_send) {
|
236 |
-
$created['keys_guide'] .= '<div class="updraftcentral_wizard_success"><p>'.sprintf(__('You now need to copy the key below and enter it at your %s.', 'updraftplus'), '<a href="'.$where_send.'">UpdraftCentral dashboard</a>').'</p><p>'.sprintf(__('Detailed instructions for this can be found at %s', 'updraftplus'), '<a target="_blank" href="https://updraftplus.com/updraftcentral-how-to-add-a-site/">UpdraftPlus.com</a>').'</p></div>';
|
237 |
} else {
|
238 |
$created['keys_guide'] .= '<div class="updraftcentral_wizard_success"><p>'. sprintf(__('You can now control this site via your UpdraftCentral dashboard at %s.', 'updraftplus'), '<a target="_blank" href="http://updraftplus.com/my-account/remote-control/">UpdraftPlus.com</a>').'</p></div>';
|
239 |
}
|
@@ -446,7 +450,7 @@ class UpdraftPlus_UpdraftCentral_Main {
|
|
446 |
|
447 |
ob_start();
|
448 |
?>
|
449 |
-
<div id="updraftcentral_keys_content">
|
450 |
<?php if (!empty($our_keys)) { ?>
|
451 |
<a href="#" class="updraftcentral_keys_show hidden-in-updraftcentral"><?php printf(__('Manage existing keys (%d)...', 'updraftplus'), count($our_keys)); ?></a>
|
452 |
<?php } ?>
|
@@ -470,36 +474,43 @@ class UpdraftPlus_UpdraftCentral_Main {
|
|
470 |
return ob_get_clean();
|
471 |
}
|
472 |
|
473 |
-
private function create_key_markup(){
|
474 |
ob_start();
|
475 |
?>
|
476 |
<div class="create_key_container">
|
477 |
<h4 class="updraftcentral_wizard_stage1"> <?php _e('Connect this site to an UpdraftCentral dashboard found at...', 'updraftplus'); ?></h4>
|
478 |
-
<table style="width:
|
479 |
<thead></thead>
|
480 |
<tbody>
|
481 |
-
<tr class="
|
482 |
<td>
|
483 |
-
<
|
484 |
-
<
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
497 |
</td>
|
498 |
</tr>
|
499 |
|
500 |
<tr class="updraft_debugrow updraftcentral_wizard_stage2" style="display: none;">
|
501 |
<h4 class="updraftcentral_wizard_stage2" style="display: none;"><?php _e('UpdraftCentral dashboard connection details', 'updraftplus'); ?></h4>
|
502 |
-
<td>
|
503 |
<?php _e('Description', 'updraftplus'); ?>:
|
504 |
<input id="updraftcentral_keycreate_description" type="text" size="20" placeholder="<?php _e('Enter any description', 'updraftplus'); ?>" value="" >
|
505 |
</td>
|
@@ -547,12 +558,12 @@ class UpdraftPlus_UpdraftCentral_Main {
|
|
547 |
return ob_get_clean();
|
548 |
}
|
549 |
|
550 |
-
private function create_log_markup(){
|
551 |
ob_start();
|
552 |
?>
|
553 |
-
<div id="updraftcentral_view_log_container">
|
554 |
<a href="#" id="updraftcentral_view_log"><?php _e('View recent UpdraftCentral log events', 'updraftplus'); ?>...</a><br>
|
555 |
-
<pre id="updraftcentral_view_log_contents" style="padding: 0 4px;">
|
556 |
</pre>
|
557 |
</div>
|
558 |
<?php
|
2 |
|
3 |
if (!defined('UPDRAFTPLUS_DIR')) die('No access.');
|
4 |
|
5 |
+
if (defined('UPDRAFTCENTRAL_CLIENT_DIR')) return;
|
6 |
+
|
7 |
+
define('UPDRAFTCENTRAL_CLIENT_DIR', dirname(__FILE__));
|
8 |
+
|
9 |
// This file is included during plugins_loaded
|
10 |
|
11 |
// Load the listener class that we rely on to pick up messages
|
28 |
'updates' => 'UpdraftCentral_Updates_Commands',
|
29 |
'users' => 'UpdraftCentral_Users_Commands',
|
30 |
'comments' => 'UpdraftCentral_Comments_Commands',
|
31 |
+
'analytics' => 'UpdraftCentral_Analytics_Commands',
|
32 |
+
'plugin' => 'UpdraftCentral_Plugin_Commands'
|
33 |
));
|
34 |
|
35 |
// If nothing was sent, then there is no incoming message, so no need to set up a listener (or CORS request, etc.). This avoids a DB SELECT query on the option below in the case where it didn't get autoloaded, which is the case when there are no keys.
|
237 |
$created['keys_guide'] = '<h2 class="updraftcentral_wizard_success">'. __('UpdraftCentral key created successfully') .'</h2>';
|
238 |
|
239 |
if ('__updraftpluscom' != $where_send) {
|
240 |
+
$created['keys_guide'] .= '<div class="updraftcentral_wizard_success"><p>'.sprintf(__('You now need to copy the key below and enter it at your %s.', 'updraftplus'), '<a href="'.$where_send.'" target="_blank">UpdraftCentral dashboard</a>').'</p><p>'.__('At your UpdraftCentral dashboard you should press the "Add Site" button then paste the key in the input box.', 'updraftplus').'</p><p>'.sprintf(__('Detailed instructions for this can be found at %s', 'updraftplus'), '<a target="_blank" href="https://updraftplus.com/updraftcentral-how-to-add-a-site/">UpdraftPlus.com</a>').'</p></div>';
|
241 |
} else {
|
242 |
$created['keys_guide'] .= '<div class="updraftcentral_wizard_success"><p>'. sprintf(__('You can now control this site via your UpdraftCentral dashboard at %s.', 'updraftplus'), '<a target="_blank" href="http://updraftplus.com/my-account/remote-control/">UpdraftPlus.com</a>').'</p></div>';
|
243 |
}
|
450 |
|
451 |
ob_start();
|
452 |
?>
|
453 |
+
<div id="updraftcentral_keys_content" style="margin: 10px 0;">
|
454 |
<?php if (!empty($our_keys)) { ?>
|
455 |
<a href="#" class="updraftcentral_keys_show hidden-in-updraftcentral"><?php printf(__('Manage existing keys (%d)...', 'updraftplus'), count($our_keys)); ?></a>
|
456 |
<?php } ?>
|
474 |
return ob_get_clean();
|
475 |
}
|
476 |
|
477 |
+
private function create_key_markup() {
|
478 |
ob_start();
|
479 |
?>
|
480 |
<div class="create_key_container">
|
481 |
<h4 class="updraftcentral_wizard_stage1"> <?php _e('Connect this site to an UpdraftCentral dashboard found at...', 'updraftplus'); ?></h4>
|
482 |
+
<table style="width: 100%; table-layout:fixed;">
|
483 |
<thead></thead>
|
484 |
<tbody>
|
485 |
+
<tr class="updraftcentral_wizard_stage1">
|
486 |
<td>
|
487 |
+
<div class="updraftcentral_wizard_mothership updraftcentral_wizard_option">
|
488 |
+
<label class="button-primary">
|
489 |
+
<input checked="checked" type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_updraftpluscom" style="display: none;">
|
490 |
+
<?php _e('UpdraftPlus.Com', 'updraftplus');?>
|
491 |
+
</label><br>
|
492 |
+
<div><?php printf(__('i.e. if you have %s there', 'updraftplus'), '<a target="_blank" href="https://updraftplus.com/my-account/">'.__('an account', 'updraftplus').'</a>'); ?></div>
|
493 |
+
|
494 |
+
</div>
|
495 |
+
<div class="updraftcentral_wizard_self_hosted_stage1 updraftcentral_wizard_option">
|
496 |
+
<label class="button-primary">
|
497 |
+
<input type="radio" name="updraftcentral_mothership" id="updraftcentral_mothership_other" style="display: none;">
|
498 |
+
<?php _e('Self-hosted dashboard', 'updraftplus');?>
|
499 |
+
</label><br>
|
500 |
+
<div><?php printf(__('A website where you have installed %s', 'updraftplus'), '<a target="_blank" href="https://wordpress.org/plugins/updraftcentral/">UpdraftCentral</a>'); ?></div>
|
501 |
+
</div>
|
502 |
+
<div class="updraftcentral_wizard_self_hosted_stage2" style="float:left; clear:left;display:none;">
|
503 |
+
<p style="font-size: 13px;"><?php echo __('Enter the URL where your self-hosted install of UpdraftCentral is located:', 'updraftplus');?></p>
|
504 |
+
<p style="font-size: 13px;" id="updraftcentral_wizard_stage1_error"></p>
|
505 |
+
<input disabled="disabled" id="updraftcentral_keycreate_mothership" type="text" size="40" placeholder="<?php _e('URL for the site of your UpdraftCentral dashboard', 'updraftplus'); ?>" value="">
|
506 |
+
<button type="button" class="button button-primary" id="updraftcentral_stage2_go"><?php _e('Next', 'updraftplus'); ?></button>
|
507 |
+
</div>
|
508 |
</td>
|
509 |
</tr>
|
510 |
|
511 |
<tr class="updraft_debugrow updraftcentral_wizard_stage2" style="display: none;">
|
512 |
<h4 class="updraftcentral_wizard_stage2" style="display: none;"><?php _e('UpdraftCentral dashboard connection details', 'updraftplus'); ?></h4>
|
513 |
+
<td class="updraftcentral_keycreate_description">
|
514 |
<?php _e('Description', 'updraftplus'); ?>:
|
515 |
<input id="updraftcentral_keycreate_description" type="text" size="20" placeholder="<?php _e('Enter any description', 'updraftplus'); ?>" value="" >
|
516 |
</td>
|
558 |
return ob_get_clean();
|
559 |
}
|
560 |
|
561 |
+
private function create_log_markup() {
|
562 |
ob_start();
|
563 |
?>
|
564 |
+
<div id="updraftcentral_view_log_container" style="margin: 10px 0;">
|
565 |
<a href="#" id="updraftcentral_view_log"><?php _e('View recent UpdraftCentral log events', 'updraftplus'); ?>...</a><br>
|
566 |
+
<pre id="updraftcentral_view_log_contents" style="min-height: 110px; padding: 0 4px;">
|
567 |
</pre>
|
568 |
</div>
|
569 |
<?php
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
/**
|
6 |
* - A container for all the RPC commands implemented. Commands map exactly onto method names (and hence this class should not implement anything else, beyond the constructor, and private methods)
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
/**
|
6 |
* - A container for all the RPC commands implemented. Commands map exactly onto method names (and hence this class should not implement anything else, beyond the constructor, and private methods)
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
/**
|
6 |
* This class is the basic glue between the lower-level UpdraftPlus_Remote_Communications (UDRPC) class, and UpdraftPlus. It does not contain actual commands themselves; the class names to use for actual commands are passed in as a parameter to the constructor.
|
@@ -125,7 +125,7 @@ class UpdraftPlus_UpdraftCentral_Listener {
|
|
125 |
|
126 |
$command_php_class = $this->command_classes[$class_prefix];
|
127 |
|
128 |
-
$command_base_class_at = apply_filters('updraftcentral_command_base_class_at',
|
129 |
|
130 |
if (!class_exists('UpdraftCentral_Commands')) include_once($command_base_class_at);
|
131 |
|
@@ -133,8 +133,8 @@ class UpdraftPlus_UpdraftCentral_Listener {
|
|
133 |
do_action('updraftcentral_command_class_wanted', $command_php_class);
|
134 |
|
135 |
if (!class_exists($command_php_class)) {
|
136 |
-
if (file_exists(
|
137 |
-
include_once(
|
138 |
}
|
139 |
}
|
140 |
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
/**
|
6 |
* This class is the basic glue between the lower-level UpdraftPlus_Remote_Communications (UDRPC) class, and UpdraftPlus. It does not contain actual commands themselves; the class names to use for actual commands are passed in as a parameter to the constructor.
|
125 |
|
126 |
$command_php_class = $this->command_classes[$class_prefix];
|
127 |
|
128 |
+
$command_base_class_at = apply_filters('updraftcentral_command_base_class_at', UPDRAFTCENTRAL_CLIENT_DIR.'/commands.php');
|
129 |
|
130 |
if (!class_exists('UpdraftCentral_Commands')) include_once($command_base_class_at);
|
131 |
|
133 |
do_action('updraftcentral_command_class_wanted', $command_php_class);
|
134 |
|
135 |
if (!class_exists($command_php_class)) {
|
136 |
+
if (file_exists(UPDRAFTCENTRAL_CLIENT_DIR.'/modules/'.$class_prefix.'.php')) {
|
137 |
+
include_once(UPDRAFTCENTRAL_CLIENT_DIR.'/modules/'.$class_prefix.'.php');
|
138 |
}
|
139 |
}
|
140 |
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
/**
|
6 |
* Handles Analytics Commands
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
/**
|
6 |
* Handles Analytics Commands
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
class UpdraftCentral_Comments_Commands extends UpdraftCentral_Commands {
|
6 |
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
class UpdraftCentral_Comments_Commands extends UpdraftCentral_Commands {
|
6 |
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
/**
|
6 |
* - A container for RPC commands (core UpdraftCentral commands). Commands map exactly onto method names (and hence this class should not implement anything else, beyond the constructor, and private methods)
|
@@ -168,16 +168,16 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
168 |
if (is_array($redirect_to) && !empty($redirect_to['module'])) {
|
169 |
switch ($redirect_to['module']) {
|
170 |
case 'updraftplus':
|
171 |
-
|
172 |
$redirect_url = UpdraftPlus_Options::admin_page_url().'?page=updraftplus&udaction=initiate_restore&entities='.urlencode($redirect_to['data']['entities']).'&showdata='.urlencode($redirect_to['data']['showdata']).'&backup_timestamp='.(int) $redirect_to['data']['backup_timestamp'];
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
break;
|
179 |
case 'direct_url':
|
180 |
-
|
181 |
break;
|
182 |
}
|
183 |
}
|
@@ -200,6 +200,11 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
200 |
}
|
201 |
}
|
202 |
|
|
|
|
|
|
|
|
|
|
|
203 |
public function phpinfo() {
|
204 |
$phpinfo = $this->_get_phpinfo_array();
|
205 |
|
@@ -209,14 +214,12 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
209 |
|
210 |
return $this->_generic_error_response('phpinfo_fail');
|
211 |
}
|
212 |
-
|
213 |
-
|
214 |
|
215 |
/**
|
216 |
-
*
|
217 |
*
|
218 |
-
* @param
|
219 |
-
* @return
|
220 |
*/
|
221 |
public function _get_autologin_key($user_id) {
|
222 |
$secure_auth_key = defined('SECURE_AUTH_KEY') ? SECURE_AUTH_KEY : hash('sha256', DB_PASSWORD).'_'.rand(0, 999999999);
|
@@ -254,7 +257,7 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
254 |
* @param array $data Array of Data to be used within call_wp_action
|
255 |
* @return array
|
256 |
*/
|
257 |
-
public function call_wordpress_action($data){
|
258 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return $this->_generic_error_response('no_updraftplus');
|
259 |
|
260 |
$response = $updraftplus_admin->call_wp_action($data);
|
@@ -270,7 +273,17 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
270 |
));
|
271 |
}
|
272 |
|
273 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
274 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return $this->_generic_error_response('no_updraftplus');
|
275 |
|
276 |
$response = $updraftplus_admin->get_disk_space_used($entity);
|
@@ -278,9 +291,6 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
278 |
return $this->_response($response);
|
279 |
}
|
280 |
|
281 |
-
|
282 |
-
/*Private Functions*/
|
283 |
-
|
284 |
/**
|
285 |
* https://secure.php.net/phpinfo
|
286 |
*
|
@@ -310,6 +320,11 @@ class UpdraftCentral_Core_Commands extends UpdraftCentral_Commands {
|
|
310 |
return false;
|
311 |
}
|
312 |
|
|
|
|
|
|
|
|
|
|
|
313 |
private function _load_ud_admin() {
|
314 |
if (!defined('UPDRAFTPLUS_DIR') || !is_file(UPDRAFTPLUS_DIR.'/admin.php')) return false;
|
315 |
include_once(UPDRAFTPLUS_DIR.'/admin.php');
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
/**
|
6 |
* - A container for RPC commands (core UpdraftCentral commands). Commands map exactly onto method names (and hence this class should not implement anything else, beyond the constructor, and private methods)
|
168 |
if (is_array($redirect_to) && !empty($redirect_to['module'])) {
|
169 |
switch ($redirect_to['module']) {
|
170 |
case 'updraftplus':
|
171 |
+
if ('initiate_restore' == $redirect_to['action'] && class_exists('UpdraftPlus_Options')) {
|
172 |
$redirect_url = UpdraftPlus_Options::admin_page_url().'?page=updraftplus&udaction=initiate_restore&entities='.urlencode($redirect_to['data']['entities']).'&showdata='.urlencode($redirect_to['data']['showdata']).'&backup_timestamp='.(int) $redirect_to['data']['backup_timestamp'];
|
173 |
+
} elseif ('download_file' == $redirect_to['action']) {
|
174 |
+
$findex = empty($redirect_to['data']['findex']) ? 0 : (int) $redirect_to['data']['findex'];
|
175 |
+
// e.g. ?udcentral_action=dl&action=updraftplus_spool_file&backup_timestamp=1455101696&findex=0&what=plugins
|
176 |
+
$redirect_url = site_url().'?udcentral_action=spool_file&action=updraftplus_spool_file&findex='.$findex.'&what='.urlencode($redirect_to['data']['what']).'&backup_timestamp='.(int) $redirect_to['data']['backup_timestamp'];
|
177 |
+
}
|
178 |
break;
|
179 |
case 'direct_url':
|
180 |
+
$redirect_url = $redirect_to['url'];
|
181 |
break;
|
182 |
}
|
183 |
}
|
200 |
}
|
201 |
}
|
202 |
|
203 |
+
/**
|
204 |
+
* Get information derived from phpinfo()
|
205 |
+
*
|
206 |
+
* @return Array
|
207 |
+
*/
|
208 |
public function phpinfo() {
|
209 |
$phpinfo = $this->_get_phpinfo_array();
|
210 |
|
214 |
|
215 |
return $this->_generic_error_response('phpinfo_fail');
|
216 |
}
|
|
|
|
|
217 |
|
218 |
/**
|
219 |
+
* The key obtained is only intended to be short-lived. Hence, there's no intention other than that it is random and only used once - only the most recent one is valid.
|
220 |
*
|
221 |
+
* @param Integer $user_id Specific user ID to get the autologin key
|
222 |
+
* @return Array
|
223 |
*/
|
224 |
public function _get_autologin_key($user_id) {
|
225 |
$secure_auth_key = defined('SECURE_AUTH_KEY') ? SECURE_AUTH_KEY : hash('sha256', DB_PASSWORD).'_'.rand(0, 999999999);
|
257 |
* @param array $data Array of Data to be used within call_wp_action
|
258 |
* @return array
|
259 |
*/
|
260 |
+
public function call_wordpress_action($data) {
|
261 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return $this->_generic_error_response('no_updraftplus');
|
262 |
|
263 |
$response = $updraftplus_admin->call_wp_action($data);
|
273 |
));
|
274 |
}
|
275 |
|
276 |
+
/**
|
277 |
+
* Get disk space used
|
278 |
+
*
|
279 |
+
* @uses UpdraftPlus_Admin::get_disk_space_used()
|
280 |
+
*
|
281 |
+
* @param String $entity - the entity to count (e.g. 'plugins', 'themes')
|
282 |
+
*
|
283 |
+
* @return Array - response
|
284 |
+
*/
|
285 |
+
public function count($entity) {
|
286 |
+
|
287 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return $this->_generic_error_response('no_updraftplus');
|
288 |
|
289 |
$response = $updraftplus_admin->get_disk_space_used($entity);
|
291 |
return $this->_response($response);
|
292 |
}
|
293 |
|
|
|
|
|
|
|
294 |
/**
|
295 |
* https://secure.php.net/phpinfo
|
296 |
*
|
320 |
return false;
|
321 |
}
|
322 |
|
323 |
+
/**
|
324 |
+
* Return an UpdraftPlus_Admin object
|
325 |
+
*
|
326 |
+
* @return UpdraftPlus_Admin|Boolean - false in case of failure
|
327 |
+
*/
|
328 |
private function _load_ud_admin() {
|
329 |
if (!defined('UPDRAFTPLUS_DIR') || !is_file(UPDRAFTPLUS_DIR.'/admin.php')) return false;
|
330 |
include_once(UPDRAFTPLUS_DIR.'/admin.php');
|
@@ -0,0 +1,184 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!defined('UPDRAFTPLUS_DIR')) die('No access.');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles UpdraftCentral Plugin Commands which basically handles
|
7 |
+
* the installation and activation of a plugin
|
8 |
+
*/
|
9 |
+
class UpdraftCentral_Plugin_Commands extends UpdraftCentral_Commands {
|
10 |
+
|
11 |
+
/**
|
12 |
+
* Constructor
|
13 |
+
*/
|
14 |
+
public function __construct() {
|
15 |
+
$this->_admin_include('plugin.php', 'file.php', 'template.php', 'class-wp-upgrader.php', 'plugin-install.php');
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* Checks whether the plugin is currently installed and activated.
|
20 |
+
*
|
21 |
+
* @param array $query Parameter array containing the name of the plugin to check
|
22 |
+
* @return array Contains the result of the current process
|
23 |
+
*/
|
24 |
+
public function is_plugin_installed($query) {
|
25 |
+
|
26 |
+
if (!isset($query['plugin']))
|
27 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_name_required', 'values' => array()));
|
28 |
+
|
29 |
+
|
30 |
+
$result = $this->get_plugin_info($query['plugin']);
|
31 |
+
return $this->_response($result);
|
32 |
+
}
|
33 |
+
|
34 |
+
/**
|
35 |
+
* Activates the plugin
|
36 |
+
*
|
37 |
+
* @param array $query Parameter array containing the name of the plugin to activate
|
38 |
+
* @return array Contains the result of the current process
|
39 |
+
*/
|
40 |
+
public function activate_plugin($query) {
|
41 |
+
|
42 |
+
if (!isset($query['plugin']))
|
43 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_name_required', 'values' => array()));
|
44 |
+
|
45 |
+
if (!current_user_can('activate_plugins'))
|
46 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_insufficient_permission', 'values' => array()));
|
47 |
+
|
48 |
+
|
49 |
+
$info = $this->get_plugin_info($query['plugin']);
|
50 |
+
if ($info['installed']) {
|
51 |
+
$activate = activate_plugin($info['plugin_path']);
|
52 |
+
|
53 |
+
if (is_wp_error($activate)) {
|
54 |
+
$result = array('error' => true, 'message' => 'generic_response_error', 'values' => array($activate->get_error_message()));
|
55 |
+
} else {
|
56 |
+
$result = array('activated' => true);
|
57 |
+
}
|
58 |
+
} else {
|
59 |
+
$result = array('error' => true, 'message' => 'plugin_not_installed', 'values' => array());
|
60 |
+
}
|
61 |
+
|
62 |
+
return $this->_response($result);
|
63 |
+
}
|
64 |
+
|
65 |
+
/**
|
66 |
+
* Download, install and activates the plugin
|
67 |
+
*
|
68 |
+
* @param array $query Parameter array containing the filesystem credentials entered by the user along with the plugin name and slug
|
69 |
+
* @return array Contains the result of the current process
|
70 |
+
*/
|
71 |
+
public function install_activate_plugin($query) {
|
72 |
+
|
73 |
+
if (!isset($query['plugin']))
|
74 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_name_required', 'values' => array()));
|
75 |
+
|
76 |
+
if (!isset($query['slug']))
|
77 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_slug_required', 'values' => array()));
|
78 |
+
|
79 |
+
if (!current_user_can('install_plugins') || !current_user_can('activate_plugins'))
|
80 |
+
return $this->_response(array('error' => true, 'message' => 'plugin_insufficient_permission', 'values' => array()));
|
81 |
+
|
82 |
+
|
83 |
+
if (!empty($query) && isset($query['filesystem_credentials'])) {
|
84 |
+
parse_str($query['filesystem_credentials'], $filesystem_credentials);
|
85 |
+
if (is_array($filesystem_credentials)) {
|
86 |
+
foreach ($filesystem_credentials as $key => $value) {
|
87 |
+
// Put them into $_POST, which is where request_filesystem_credentials() checks for them.
|
88 |
+
$_POST[$key] = $value;
|
89 |
+
}
|
90 |
+
}
|
91 |
+
}
|
92 |
+
|
93 |
+
$api = plugins_api('plugin_information', array(
|
94 |
+
'slug' => $query['slug'],
|
95 |
+
'fields' => array(
|
96 |
+
'short_description' => false,
|
97 |
+
'sections' => false,
|
98 |
+
'requires' => false,
|
99 |
+
'rating' => false,
|
100 |
+
'ratings' => false,
|
101 |
+
'downloaded' => false,
|
102 |
+
'last_updated' => false,
|
103 |
+
'added' => false,
|
104 |
+
'tags' => false,
|
105 |
+
'compatibility' => false,
|
106 |
+
'homepage' => false,
|
107 |
+
'donate_link' => false,
|
108 |
+
)
|
109 |
+
));
|
110 |
+
|
111 |
+
if (is_wp_error($api)) {
|
112 |
+
$result = array('error' => true, 'message' => 'generic_response_error', 'values' => array($api->get_error_message()));
|
113 |
+
} else {
|
114 |
+
$info = $this->get_plugin_info($query['plugin']);
|
115 |
+
$installed = $info['installed'];
|
116 |
+
|
117 |
+
if (!$installed) {
|
118 |
+
// WP < 3.7
|
119 |
+
if (!class_exists('Automatic_Upgrader_Skin')) include_once(UPDRAFTPLUS_DIR.'/central/classes/class-automatic-upgrader-skin.php');
|
120 |
+
|
121 |
+
$skin = new Automatic_Upgrader_Skin();
|
122 |
+
$upgrader = new Plugin_Upgrader($skin);
|
123 |
+
|
124 |
+
$download_link = $api->download_link;
|
125 |
+
$installed = $upgrader->install($download_link);
|
126 |
+
}
|
127 |
+
|
128 |
+
if (!$installed) {
|
129 |
+
$result = array('error' => true, 'message' => 'plugin_install_failed', 'values' => array());
|
130 |
+
} else {
|
131 |
+
// Here, we're pulling the information one more time to verify the installation and to
|
132 |
+
// extract the plugin_path that will be used to activate the plugin in case it did not
|
133 |
+
// get activated after the installation.
|
134 |
+
$info = $this->get_plugin_info($query['plugin']);
|
135 |
+
|
136 |
+
if (!$info['active']) {
|
137 |
+
$activate = activate_plugin($info['plugin_path']);
|
138 |
+
|
139 |
+
if (is_wp_error($activate)) {
|
140 |
+
$result = array('error' => true, 'message' => 'generic_response_error', 'values' => array($activate->get_error_message()));
|
141 |
+
} else {
|
142 |
+
$result = array('installed' => true);
|
143 |
+
}
|
144 |
+
} else {
|
145 |
+
$result = array('installed' => true);
|
146 |
+
}
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
return $this->_response($result);
|
151 |
+
}
|
152 |
+
|
153 |
+
/**
|
154 |
+
* Gets the plugin information along with its active and install status
|
155 |
+
*
|
156 |
+
* @internal
|
157 |
+
* @param array $plugin The name of the plugin to pull the information from
|
158 |
+
* @return array Contains the plugin information
|
159 |
+
*/
|
160 |
+
private function get_plugin_info($plugin) {
|
161 |
+
|
162 |
+
$info = array(
|
163 |
+
'active' => false,
|
164 |
+
'installed' => false
|
165 |
+
);
|
166 |
+
|
167 |
+
// Gets all plugins available.
|
168 |
+
$get_plugins = get_plugins();
|
169 |
+
|
170 |
+
// Loops around each plugin available.
|
171 |
+
foreach ($get_plugins as $key => $value) {
|
172 |
+
// If the plugin name matches that of the specified name, it will gather details.
|
173 |
+
if ($value['Name'] === $plugin) {
|
174 |
+
$info['installed'] = true;
|
175 |
+
$info['active'] = is_plugin_active($key);
|
176 |
+
$info['plugin_path'] = $key;
|
177 |
+
$info['data'] = $value;
|
178 |
+
break;
|
179 |
+
}
|
180 |
+
}
|
181 |
+
|
182 |
+
return $info;
|
183 |
+
}
|
184 |
+
}
|
@@ -1,6 +1,6 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
5 |
class UpdraftCentral_Updates_Commands extends UpdraftCentral_Commands {
|
6 |
|
@@ -100,7 +100,7 @@ class UpdraftCentral_Updates_Commands extends UpdraftCentral_Commands {
|
|
100 |
wp_update_plugins();
|
101 |
|
102 |
// WP < 3.7
|
103 |
-
if (!class_exists('Automatic_Upgrader_Skin')) include_once(
|
104 |
|
105 |
$skin = new Automatic_Upgrader_Skin();
|
106 |
$upgrader = new Plugin_Upgrader($skin);
|
@@ -215,7 +215,7 @@ class UpdraftCentral_Updates_Commands extends UpdraftCentral_Commands {
|
|
215 |
$update = $get_core_updates[$core_update_key];
|
216 |
|
217 |
// WP < 3.7
|
218 |
-
if (!class_exists('Automatic_Upgrader_Skin')) include_once(
|
219 |
|
220 |
$skin = new Automatic_Upgrader_Skin();
|
221 |
$upgrader = new Core_Upgrader($skin);
|
@@ -288,7 +288,7 @@ class UpdraftCentral_Updates_Commands extends UpdraftCentral_Commands {
|
|
288 |
wp_update_themes();
|
289 |
|
290 |
// WP < 3.7
|
291 |
-
if (!class_exists('Automatic_Upgrader_Skin')) include_once(
|
292 |
|
293 |
$skin = new Automatic_Upgrader_Skin();
|
294 |
$upgrader = new Theme_Upgrader($skin);
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
class UpdraftCentral_Updates_Commands extends UpdraftCentral_Commands {
|
6 |
|
100 |
wp_update_plugins();
|
101 |
|
102 |
// WP < 3.7
|
103 |
+
if (!class_exists('Automatic_Upgrader_Skin')) include_once(UPDRAFTCENTRAL_CLIENT_DIR.'/classes/class-automatic-upgrader-skin.php');
|
104 |
|
105 |
$skin = new Automatic_Upgrader_Skin();
|
106 |
$upgrader = new Plugin_Upgrader($skin);
|
215 |
$update = $get_core_updates[$core_update_key];
|
216 |
|
217 |
// WP < 3.7
|
218 |
+
if (!class_exists('Automatic_Upgrader_Skin')) include_once(UPDRAFTCENTRAL_CLIENT_DIR.'/classes/class-automatic-upgrader-skin.php');
|
219 |
|
220 |
$skin = new Automatic_Upgrader_Skin();
|
221 |
$upgrader = new Core_Upgrader($skin);
|
288 |
wp_update_themes();
|
289 |
|
290 |
// WP < 3.7
|
291 |
+
if (!class_exists('Automatic_Upgrader_Skin')) include_once(UPDRAFTCENTRAL_CLIENT_DIR.'/classes/class-automatic-upgrader-skin.php');
|
292 |
|
293 |
$skin = new Automatic_Upgrader_Skin();
|
294 |
$upgrader = new Theme_Upgrader($skin);
|
@@ -1,42 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
if (!defined('UPDRAFTPLUS_DIR')) die('No access.');
|
4 |
-
require_once(UPDRAFTPLUS_DIR.'/methods/updraftvault.php');
|
5 |
-
|
6 |
-
/**
|
7 |
-
* Handles UpdraftVault Commands to pull Amazon S3 Bucket credentials
|
8 |
-
* from user's UpdraftVault and some default filters for per page display
|
9 |
-
*
|
10 |
-
* @method array get_credentials()
|
11 |
-
*/
|
12 |
-
class UpdraftCentral_UpdraftVault_Commands extends UpdraftCentral_Commands {
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Gets the Amazon S3 Credentials
|
16 |
-
*
|
17 |
-
* Extract the needed credentials to connect to the user's Amazon S3 Bucket
|
18 |
-
* by pulling this info from the UpdraftVault server.
|
19 |
-
*
|
20 |
-
* @return array $result - An array containing the Amazon S3 settings/config if successful,
|
21 |
-
* otherwise, it will contain the error details/info of the generated error.
|
22 |
-
*/
|
23 |
-
public function get_credentials() {
|
24 |
-
|
25 |
-
$vault = new UpdraftPlus_BackupModule_updraftvault();
|
26 |
-
$result = $vault->get_config();
|
27 |
-
|
28 |
-
if (isset($result['error']) && !empty($result['error'])) {
|
29 |
-
$result = array('error' => true, 'message' => $result['error']['message'], 'values' => $result['error']['values']);
|
30 |
-
}
|
31 |
-
|
32 |
-
return $this->_response($result);
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Builds a list of options out from an array of preset items
|
37 |
-
* that will serve as a "results per page" option for selection
|
38 |
-
* on the frontend.
|
39 |
-
*
|
40 |
-
* @return array
|
41 |
-
*/
|
42 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,9 +1,35 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
if (!defined('
|
4 |
|
|
|
|
|
|
|
5 |
class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
private function _search_users($query) {
|
8 |
$this->_admin_include('user.php');
|
9 |
$query1 = new WP_User_Query(array(
|
@@ -11,6 +37,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
11 |
'order' => 'ASC',
|
12 |
'role'=> $query["role"],
|
13 |
'search' => '*' . esc_attr($query["search"]) . '*',
|
|
|
14 |
));
|
15 |
$query2 = new WP_User_Query(array(
|
16 |
'orderby' => 'ID',
|
@@ -31,49 +58,47 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
31 |
)
|
32 |
));
|
33 |
|
34 |
-
if (empty($query1->results)) {
|
35 |
-
$query1->results = array();
|
36 |
-
}
|
37 |
-
if (empty($query2->results)) {
|
38 |
-
$query2->results = array();
|
39 |
-
}
|
40 |
if (empty($query1->results) && empty($query2->results)) {
|
41 |
return array("message" => "users_not_found");
|
42 |
-
}
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
foreach ($users as $user) {
|
49 |
-
if ($new_user == $user) {
|
50 |
-
$new = false;
|
51 |
}
|
52 |
};
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
}
|
60 |
|
61 |
-
|
62 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
63 |
$per_page_options = array(10, 20, 30, 40, 50);
|
64 |
|
65 |
if (!empty($query)) {
|
66 |
|
67 |
-
if (!empty($query['search'])) {
|
68 |
-
return array(
|
69 |
-
page_count => 1,
|
70 |
-
page_no => 1
|
71 |
-
);
|
72 |
-
}
|
73 |
-
|
74 |
$pages = array();
|
75 |
-
$
|
76 |
-
$page_count = ceil($page_query->total_users / $query["per_page"]);
|
77 |
if ($page_count > 1) {
|
78 |
|
79 |
for ($i = 0; $i < $page_count; $i++) {
|
@@ -118,7 +143,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
118 |
"pages" => $pages,
|
119 |
"page_next" => $page_next,
|
120 |
"page_prev" => $page_prev,
|
121 |
-
"total_results" => $
|
122 |
"per_page_options" => $per_page_options
|
123 |
);
|
124 |
|
@@ -127,7 +152,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
127 |
"page_no" => $query['page_no'],
|
128 |
"per_page" => $query["per_page"],
|
129 |
"page_count" => $page_count,
|
130 |
-
"total_results" => $
|
131 |
"per_page_options" => $per_page_options
|
132 |
);
|
133 |
}
|
@@ -138,6 +163,12 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
138 |
}
|
139 |
}
|
140 |
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
public function check_username($params) {
|
142 |
$this->_admin_include('user.php');
|
143 |
$username = $params['user_name'];
|
@@ -180,7 +211,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
180 |
* If the site is a multisite, then sites under the network
|
181 |
* will be pulled, otherwise, it will return an empty array.
|
182 |
*
|
183 |
-
* @
|
184 |
*/
|
185 |
private function _get_blog_sites() {
|
186 |
|
@@ -223,6 +254,12 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
223 |
return $sites;
|
224 |
}
|
225 |
|
|
|
|
|
|
|
|
|
|
|
|
|
226 |
public function check_email($params) {
|
227 |
$this->_admin_include('user.php');
|
228 |
$email = $params['email'];
|
@@ -267,13 +304,12 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
267 |
* based on the current search parameters/filters. Please see _search_users
|
268 |
* for the breakdown of these parameters.
|
269 |
*
|
270 |
-
* @param
|
271 |
-
* @return array
|
272 |
*/
|
273 |
public function get_users($query) {
|
274 |
$this->_admin_include('user.php');
|
275 |
|
276 |
-
$users;
|
277 |
// Here, we're getting the current blog id. If blog id
|
278 |
// is passed along with the parameters then we override
|
279 |
// that current (default) value with the parameter blog id value.
|
@@ -288,20 +324,29 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
288 |
if (function_exists('switch_to_blog')) {
|
289 |
$switched = switch_to_blog($blog_id);
|
290 |
}
|
291 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
if (!empty($query["search"])) {
|
293 |
-
$
|
294 |
-
|
295 |
-
if (
|
296 |
-
$
|
297 |
-
|
298 |
-
if (empty($query['page_no'])) {
|
299 |
-
$query['page_no'] = 1;
|
300 |
-
}
|
301 |
-
if (empty($query["role"])) {
|
302 |
-
$query["role"] = "";
|
303 |
}
|
304 |
-
|
305 |
$user_query = new WP_User_Query(array(
|
306 |
'orderby' => 'ID',
|
307 |
'order' => 'ASC',
|
@@ -316,6 +361,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
316 |
}
|
317 |
|
318 |
$users = $user_query->results;
|
|
|
319 |
}
|
320 |
|
321 |
foreach ($users as &$user) {
|
@@ -333,7 +379,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
333 |
|
334 |
$result = array(
|
335 |
"users"=>$users,
|
336 |
-
"paging" => $this->_calculate_pages($query)
|
337 |
);
|
338 |
|
339 |
// Here, we're restoring to the current (default) blog before we
|
@@ -344,7 +390,13 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
344 |
}
|
345 |
return $this->_response($result);
|
346 |
}
|
347 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
348 |
public function add_user($user) {
|
349 |
$this->_admin_include('user.php');
|
350 |
// Here, we're getting the current blog id. If blog id
|
@@ -365,7 +417,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
365 |
}
|
366 |
|
367 |
if (!current_user_can('create_users') && !is_super_admin()) {
|
368 |
-
$result = array(
|
369 |
return $this->_response($result);
|
370 |
}
|
371 |
if (is_email($user["user_email"]) === false) {
|
@@ -447,7 +499,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
447 |
}
|
448 |
|
449 |
if (!current_user_can('delete_users') && !is_super_admin()) {
|
450 |
-
$result = array(
|
451 |
return $this->_response($result);
|
452 |
}
|
453 |
if (get_userdata($user_id) === false) {
|
@@ -471,6 +523,12 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
471 |
return $this->_response($result);
|
472 |
}
|
473 |
|
|
|
|
|
|
|
|
|
|
|
|
|
474 |
public function edit_user($user) {
|
475 |
$this->_admin_include('user.php');
|
476 |
|
@@ -490,7 +548,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
490 |
}
|
491 |
|
492 |
if (!current_user_can('edit_users') && !is_super_admin() && get_current_user_id() !== $user["ID"]) {
|
493 |
-
$result = array(
|
494 |
return $this->_response($result);
|
495 |
}
|
496 |
|
@@ -542,12 +600,22 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
542 |
return $this->_response($result);
|
543 |
}
|
544 |
|
|
|
|
|
|
|
|
|
|
|
545 |
public function get_roles() {
|
546 |
$this->_admin_include('user.php');
|
547 |
$roles = array_reverse(get_editable_roles());
|
548 |
return $this->_response($roles);
|
549 |
}
|
550 |
|
|
|
|
|
|
|
|
|
|
|
551 |
public function get_user_filters() {
|
552 |
$this->_admin_include('user.php');
|
553 |
|
@@ -557,7 +625,7 @@ class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
|
557 |
$result = array(
|
558 |
"sites" => $sites,
|
559 |
"roles" => array_reverse(get_editable_roles()),
|
560 |
-
"paging" => $this->_calculate_pages(null),
|
561 |
);
|
562 |
return $this->_response($result);
|
563 |
}
|
1 |
<?php
|
2 |
|
3 |
+
if (!defined('UPDRAFTCENTRAL_CLIENT_DIR')) die('No access.');
|
4 |
|
5 |
+
/**
|
6 |
+
* Handles Users Commands
|
7 |
+
*/
|
8 |
class UpdraftCentral_Users_Commands extends UpdraftCentral_Commands {
|
9 |
|
10 |
+
/**
|
11 |
+
* Compares two user object whether one is lesser than, equal to, greater than the other
|
12 |
+
*
|
13 |
+
* @internal
|
14 |
+
* @param array $a First user in the comparison
|
15 |
+
* @param array $b Second user in the comparison
|
16 |
+
* @return integer Comparison results (0 = equal, -1 = less than, 1 = greater than)
|
17 |
+
*/
|
18 |
+
private function compare_user_id($a, $b) {
|
19 |
+
if ($a->ID === $b->ID) {
|
20 |
+
return 0;
|
21 |
+
}
|
22 |
+
|
23 |
+
return ($a->ID < $b->ID) ? -1 : 1;
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Searches users based from the keyword submitted
|
28 |
+
*
|
29 |
+
* @internal
|
30 |
+
* @param array $query Parameter array containing the filter and keyword fields
|
31 |
+
* @return array Contains the list of users found as well as the total users count
|
32 |
+
*/
|
33 |
private function _search_users($query) {
|
34 |
$this->_admin_include('user.php');
|
35 |
$query1 = new WP_User_Query(array(
|
37 |
'order' => 'ASC',
|
38 |
'role'=> $query["role"],
|
39 |
'search' => '*' . esc_attr($query["search"]) . '*',
|
40 |
+
'search_columns' => array('user_login', 'user_email')
|
41 |
));
|
42 |
$query2 = new WP_User_Query(array(
|
43 |
'orderby' => 'ID',
|
58 |
)
|
59 |
));
|
60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
if (empty($query1->results) && empty($query2->results)) {
|
62 |
return array("message" => "users_not_found");
|
63 |
+
} else {
|
64 |
+
$found_users = array_merge($query1->results, $query2->results);
|
65 |
+
$temp = array();
|
66 |
+
foreach ($found_users as $new_user) {
|
67 |
+
if (!isset($temp[$new_user->ID])) {
|
68 |
+
$temp[$new_user->ID] = $new_user;
|
|
|
|
|
|
|
69 |
}
|
70 |
};
|
71 |
+
|
72 |
+
$users = array_values($temp);
|
73 |
+
|
74 |
+
// Sort users:
|
75 |
+
usort($users, array($this, 'compare_user_id'));
|
76 |
+
$offset = (intval($query['page_no']) * intval($query['per_page'])) - intval($query['per_page']);
|
77 |
+
$user_list = array_slice($users, $offset, $query['per_page']);
|
78 |
+
|
79 |
+
return array(
|
80 |
+
'users' => $user_list,
|
81 |
+
'total_users' => count($users)
|
82 |
+
);
|
83 |
+
}
|
84 |
}
|
85 |
|
86 |
+
/**
|
87 |
+
* Calculates the number of pages needed to construct the pagination links
|
88 |
+
*
|
89 |
+
* @internal
|
90 |
+
* @param array $query
|
91 |
+
* @param array $total_users The total number of users found from the WP_User_Query query
|
92 |
+
* @return array Contains information needed to construct the pagination links
|
93 |
+
*/
|
94 |
+
private function _calculate_pages($query, $total_users) {
|
95 |
+
|
96 |
$per_page_options = array(10, 20, 30, 40, 50);
|
97 |
|
98 |
if (!empty($query)) {
|
99 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
100 |
$pages = array();
|
101 |
+
$page_count = ceil($total_users / $query["per_page"]);
|
|
|
102 |
if ($page_count > 1) {
|
103 |
|
104 |
for ($i = 0; $i < $page_count; $i++) {
|
143 |
"pages" => $pages,
|
144 |
"page_next" => $page_next,
|
145 |
"page_prev" => $page_prev,
|
146 |
+
"total_results" => $total_users,
|
147 |
"per_page_options" => $per_page_options
|
148 |
);
|
149 |
|
152 |
"page_no" => $query['page_no'],
|
153 |
"per_page" => $query["per_page"],
|
154 |
"page_count" => $page_count,
|
155 |
+
"total_results" => $total_users,
|
156 |
"per_page_options" => $per_page_options
|
157 |
);
|
158 |
}
|
163 |
}
|
164 |
}
|
165 |
|
166 |
+
/**
|
167 |
+
* Validates whether the username exists
|
168 |
+
*
|
169 |
+
* @param array $params Contains the user name to check and validate
|
170 |
+
* @return array An array containing the result of the current process
|
171 |
+
*/
|
172 |
public function check_username($params) {
|
173 |
$this->_admin_include('user.php');
|
174 |
$username = $params['user_name'];
|
211 |
* If the site is a multisite, then sites under the network
|
212 |
* will be pulled, otherwise, it will return an empty array.
|
213 |
*
|
214 |
+
* @return Array - an array of sites
|
215 |
*/
|
216 |
private function _get_blog_sites() {
|
217 |
|
254 |
return $sites;
|
255 |
}
|
256 |
|
257 |
+
/**
|
258 |
+
* Validates whether the email exists
|
259 |
+
*
|
260 |
+
* @param array $params Contains the email to check and validate
|
261 |
+
* @return array An array containing the result of the current process
|
262 |
+
*/
|
263 |
public function check_email($params) {
|
264 |
$this->_admin_include('user.php');
|
265 |
$email = $params['email'];
|
304 |
* based on the current search parameters/filters. Please see _search_users
|
305 |
* for the breakdown of these parameters.
|
306 |
*
|
307 |
+
* @param array $query Parameter array containing the filter and keyword fields
|
308 |
+
* @return array An array containing the result of the current process
|
309 |
*/
|
310 |
public function get_users($query) {
|
311 |
$this->_admin_include('user.php');
|
312 |
|
|
|
313 |
// Here, we're getting the current blog id. If blog id
|
314 |
// is passed along with the parameters then we override
|
315 |
// that current (default) value with the parameter blog id value.
|
324 |
if (function_exists('switch_to_blog')) {
|
325 |
$switched = switch_to_blog($blog_id);
|
326 |
}
|
327 |
+
|
328 |
+
// Set default:
|
329 |
+
if (empty($query["per_page"])) {
|
330 |
+
$query["per_page"] = 10;
|
331 |
+
}
|
332 |
+
if (empty($query['page_no'])) {
|
333 |
+
$query['page_no'] = 1;
|
334 |
+
}
|
335 |
+
if (empty($query["role"])) {
|
336 |
+
$query["role"] = "";
|
337 |
+
}
|
338 |
+
|
339 |
+
$users = array();
|
340 |
+
$total_users = 0;
|
341 |
+
|
342 |
if (!empty($query["search"])) {
|
343 |
+
$search_results = $this->_search_users($query);
|
344 |
+
|
345 |
+
if (isset($search_results['users'])) {
|
346 |
+
$users = $search_results['users'];
|
347 |
+
$total_users = $search_results['total_users'];
|
|
|
|
|
|
|
|
|
|
|
348 |
}
|
349 |
+
} else {
|
350 |
$user_query = new WP_User_Query(array(
|
351 |
'orderby' => 'ID',
|
352 |
'order' => 'ASC',
|
361 |
}
|
362 |
|
363 |
$users = $user_query->results;
|
364 |
+
$total_users = $user_query->get_total();
|
365 |
}
|
366 |
|
367 |
foreach ($users as &$user) {
|
379 |
|
380 |
$result = array(
|
381 |
"users"=>$users,
|
382 |
+
"paging" => $this->_calculate_pages($query, $total_users)
|
383 |
);
|
384 |
|
385 |
// Here, we're restoring to the current (default) blog before we
|
390 |
}
|
391 |
return $this->_response($result);
|
392 |
}
|
393 |
+
|
394 |
+
/**
|
395 |
+
* Creates new user for the current blog
|
396 |
+
*
|
397 |
+
* @param array $user User information to add
|
398 |
+
* @return array An array containing the result of the current process
|
399 |
+
*/
|
400 |
public function add_user($user) {
|
401 |
$this->_admin_include('user.php');
|
402 |
// Here, we're getting the current blog id. If blog id
|
417 |
}
|
418 |
|
419 |
if (!current_user_can('create_users') && !is_super_admin()) {
|
420 |
+
$result = array('error' => true, 'message' => 'user_create_no_permission', 'data' => array('multisite' => is_multisite()));
|
421 |
return $this->_response($result);
|
422 |
}
|
423 |
if (is_email($user["user_email"]) === false) {
|
499 |
}
|
500 |
|
501 |
if (!current_user_can('delete_users') && !is_super_admin()) {
|
502 |
+
$result = array('error' => true, 'message' => 'user_delete_no_permission', 'data' => array('multisite' => is_multisite()));
|
503 |
return $this->_response($result);
|
504 |
}
|
505 |
if (get_userdata($user_id) === false) {
|
523 |
return $this->_response($result);
|
524 |
}
|
525 |
|
526 |
+
/**
|
527 |
+
* Edits existing user information
|
528 |
+
*
|
529 |
+
* @param array $user User information to save
|
530 |
+
* @return array An array containing the result of the current process
|
531 |
+
*/
|
532 |
public function edit_user($user) {
|
533 |
$this->_admin_include('user.php');
|
534 |
|
548 |
}
|
549 |
|
550 |
if (!current_user_can('edit_users') && !is_super_admin() && get_current_user_id() !== $user["ID"]) {
|
551 |
+
$result = array('error' => true, 'message' => 'user_edit_no_permission', 'data' => array('multisite' => is_multisite()));
|
552 |
return $this->_response($result);
|
553 |
}
|
554 |
|
600 |
return $this->_response($result);
|
601 |
}
|
602 |
|
603 |
+
/**
|
604 |
+
* Retrieves available roles to be used as filter options
|
605 |
+
*
|
606 |
+
* @return array An array containing all available roles
|
607 |
+
*/
|
608 |
public function get_roles() {
|
609 |
$this->_admin_include('user.php');
|
610 |
$roles = array_reverse(get_editable_roles());
|
611 |
return $this->_response($roles);
|
612 |
}
|
613 |
|
614 |
+
/**
|
615 |
+
* Retrieves information to be use as filters
|
616 |
+
*
|
617 |
+
* @return array An array containing the filter fields and their data
|
618 |
+
*/
|
619 |
public function get_user_filters() {
|
620 |
$this->_admin_include('user.php');
|
621 |
|
625 |
$result = array(
|
626 |
"sites" => $sites,
|
627 |
"roles" => array_reverse(get_editable_roles()),
|
628 |
+
"paging" => $this->_calculate_pages(null, 0),
|
629 |
);
|
630 |
return $this->_response($result);
|
631 |
}
|
@@ -455,11 +455,29 @@ class UpdraftPlus {
|
|
455 |
$_GET['page'] = 'updraftplus';
|
456 |
$_REQUEST['page'] = 'updraftplus';
|
457 |
$method = $matches[1];
|
458 |
-
include_once(UPDRAFTPLUS_DIR.'/methods/'.$method.'.php');
|
459 |
-
$call_class = "UpdraftPlus_BackupModule_".$method;
|
460 |
$call_method = "action_".$matches[2];
|
461 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
462 |
$this->register_wp_http_option_hooks();
|
|
|
463 |
try {
|
464 |
if (method_exists($backup_obj, $call_method)) {
|
465 |
call_user_func(array($backup_obj, $call_method));
|
@@ -594,6 +612,7 @@ class UpdraftPlus {
|
|
594 |
*/
|
595 |
public function updraftplus_remotecontrol_command_classes($command_classes) {
|
596 |
if (is_array($command_classes)) $command_classes['updraftplus'] = 'UpdraftCentral_UpdraftPlus_Commands';
|
|
|
597 |
return $command_classes;
|
598 |
}
|
599 |
|
@@ -605,6 +624,8 @@ class UpdraftPlus {
|
|
605 |
public function updraftcentral_command_class_wanted($command_php_class) {
|
606 |
if ('UpdraftCentral_UpdraftPlus_Commands' == $command_php_class) {
|
607 |
include_once(UPDRAFTPLUS_DIR.'/includes/class-updraftcentral-updraftplus-commands.php');
|
|
|
|
|
608 |
}
|
609 |
}
|
610 |
|
@@ -647,7 +668,7 @@ class UpdraftPlus {
|
|
647 |
$files_deleted = 0;
|
648 |
if ($handle = opendir($updraft_dir)) {
|
649 |
while (false !== ($entry = readdir($handle))) {
|
650 |
-
$manifest_match = preg_match("
|
651 |
// This match is for files created internally by zipArchive::addFile
|
652 |
$ziparchive_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.([A-Za-z0-9]){6}?$/i", $entry);
|
653 |
// zi followed by 6 characters is the pattern used by /usr/bin/zip on Linux systems. It's safe to check for, as we have nothing else that's going to match that pattern.
|
@@ -3454,13 +3475,15 @@ class UpdraftPlus {
|
|
3454 |
/**
|
3455 |
* Replace last occurence
|
3456 |
*
|
3457 |
-
* @param string
|
3458 |
-
* @param string
|
3459 |
-
* @param string
|
|
|
|
|
3460 |
* @return string
|
3461 |
*/
|
3462 |
-
public function str_lreplace($search, $replace, $subject) {
|
3463 |
-
$pos = strrpos($subject, $search);
|
3464 |
if (false !== $pos) $subject = substr_replace($subject, $replace, $pos, strlen($search));
|
3465 |
return $subject;
|
3466 |
}
|
@@ -3746,7 +3769,7 @@ class UpdraftPlus {
|
|
3746 |
$old_client_id = (empty($opts['settings'][$instance_id]['clientid'])) ? '' : $opts['settings'][$instance_id]['clientid'];
|
3747 |
$old_client_secret = (empty($opts['settings'][$instance_id]['secret'])) ? '' : $opts['settings'][$instance_id]['secret'];
|
3748 |
|
3749 |
-
if ($old_client_id == $google['settings'][$instance_id]['clientid'] && $old_client_secret == $google['settings'][$instance_id]['secret']) {
|
3750 |
$google['settings'][$instance_id]['token'] = $old_token;
|
3751 |
}
|
3752 |
if (!empty($opts['settings'][$instance_id]['token']) && $old_client_id != $google['settings'][$instance_id]['clientid']) {
|
@@ -3779,7 +3802,7 @@ class UpdraftPlus {
|
|
3779 |
if (is_array($settings) && !empty($settings['version']) && !empty($settings['settings'])) {
|
3780 |
foreach ($settings['settings'] as $instance_id => $instance_settings) {
|
3781 |
if (!empty($instance_settings['host']) && preg_match('#ftp(es|s)?://(.*)#i', $instance_settings['host'], $matches)) {
|
3782 |
-
$settings['settings'][$instance_id]['host'] = rtrim($matches[2], "/ \t\n\r\
|
3783 |
}
|
3784 |
if (isset($instance_settings['pass'])) {
|
3785 |
$settings['settings'][$instance_id]['pass'] = trim($instance_settings['pass'], "\n\r\0\x0B");
|
@@ -4260,7 +4283,6 @@ class UpdraftPlus {
|
|
4260 |
$warn = array();
|
4261 |
$err = array();
|
4262 |
$info = array();
|
4263 |
-
|
4264 |
$wp_version = $this->get_wordpress_version();
|
4265 |
global $wpdb;
|
4266 |
|
@@ -4348,12 +4370,18 @@ class UpdraftPlus {
|
|
4348 |
@set_time_limit($dbscan_timeout);
|
4349 |
|
4350 |
// We limit the time that we spend scanning the file for character sets
|
4351 |
-
$
|
4352 |
$charset_scan_start_time = microtime(true);
|
4353 |
$db_supported_character_sets_res = $GLOBALS['wpdb']->get_results('SHOW CHARACTER SET', OBJECT_K);
|
4354 |
$db_supported_character_sets = (null !== $db_supported_character_sets_res) ? $db_supported_character_sets_res : array();
|
4355 |
$db_charsets_found = array();
|
4356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
4357 |
$line++;
|
4358 |
// Up to 1MB
|
4359 |
$buffer = ($is_plain) ? rtrim(fgets($dbhandle, 1048576)) : rtrim(gzgets($dbhandle, 1048576));
|
@@ -4388,11 +4416,11 @@ class UpdraftPlus {
|
|
4388 |
}
|
4389 |
// Explicitly set it, allowing the consumer to detect when the result was unknown
|
4390 |
$info['same_url'] = false;
|
4391 |
-
|
4392 |
if ($this->mod_rewrite_unavailable(false)) {
|
4393 |
$warn[] = sprintf(__('You are using the %s webserver, but do not seem to have the %s module loaded.', 'updraftplus'), 'Apache', 'mod_rewrite').' '.sprintf(__('You should enable %s to make any pretty permalinks (e.g. %s) work', 'updraftplus'), 'mod_rewrite', 'http://example.com/my-page/');
|
4394 |
}
|
4395 |
-
|
4396 |
} else {
|
4397 |
$info['same_url'] = true;
|
4398 |
}
|
@@ -4434,14 +4462,14 @@ class UpdraftPlus {
|
|
4434 |
if (isset($old_siteinfo['multisite']) && !$old_siteinfo['multisite'] && is_multisite()) {
|
4435 |
// Just need to check that you're crazy
|
4436 |
// if (!defined('UPDRAFTPLUS_EXPERIMENTAL_IMPORTINTOMULTISITE') || !UPDRAFTPLUS_EXPERIMENTAL_IMPORTINTOMULTISITE) {
|
4437 |
-
|
4438 |
-
|
4439 |
// } else {
|
4440 |
-
|
4441 |
// }
|
4442 |
// Got the needed code?
|
4443 |
if (!class_exists('UpdraftPlusAddOn_MultiSite') || !class_exists('UpdraftPlus_Addons_Migrator')) {
|
4444 |
-
|
4445 |
return array($mess, $warn, $err, $info);
|
4446 |
}
|
4447 |
} elseif (isset($old_siteinfo['multisite']) && $old_siteinfo['multisite'] && !is_multisite()) {
|
@@ -4470,12 +4498,43 @@ class UpdraftPlus {
|
|
4470 |
$wanted_tables = array_diff($wanted_tables, array($table));
|
4471 |
}
|
4472 |
}
|
4473 |
-
if (substr($buffer, -1, 1)
|
|
|
|
|
|
|
4474 |
} elseif ($processing_create) {
|
4475 |
-
if (!empty($
|
4476 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4477 |
}
|
4478 |
-
if (substr($buffer, -1, 1) == ';') $processing_create = false;
|
4479 |
static $mysql_version_warned = false;
|
4480 |
if (!$mysql_version_warned && version_compare($db_version, '5.2.0', '<') && preg_match('/(CHARSET|COLLATE)[= ]utf8mb4/', $buffer)) {
|
4481 |
$mysql_version_warned = true;
|
@@ -4500,18 +4559,21 @@ class UpdraftPlus {
|
|
4500 |
}
|
4501 |
if ($db_charset_forbidden) {
|
4502 |
$db_unsupported_charset_unique = array_unique($db_unsupported_charset);
|
4503 |
-
$warn[] = sprintf(_n("The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import.", "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import.", count($db_unsupported_charset_unique), 'updraftplus'), implode(', ', $db_unsupported_charset_unique)).' '.__('You can choose another suitable character set instead and continue with the restoration at your own risk.', 'updraftplus').' <a target="_blank" href="https://updraftplus.com/faqs/implications-changing-tables-character-set/">'.__('Go here for more information.', 'updraftplus').'</a>';
|
4504 |
$db_supported_character_sets = array_keys($db_supported_character_sets);
|
4505 |
-
$similar_type_charset = $this->get_matching_str_from_array_elems($db_unsupported_charset_unique, $db_supported_character_sets);
|
4506 |
if (empty($similar_type_charset)) {
|
4507 |
$row = $GLOBALS['wpdb']->get_row('show variables like "character_set_database"');
|
4508 |
$similar_type_charset = (null !== $row) ? $row->Value : '';
|
4509 |
}
|
|
|
|
|
|
|
4510 |
$charset_select_html = '<label>'.__('Your chosen character set to use instead:', 'updraftplus').'</label> ';
|
4511 |
$charset_select_html .= '<select name="updraft_restorer_charset" id="updraft_restorer_charset">';
|
4512 |
if (is_array($db_supported_character_sets)) {
|
4513 |
foreach ($db_supported_character_sets as $character_set) {
|
4514 |
-
$charset_select_html .= '<option value="'.esc_attr($character_set).'" '.selected($character_set, $similar_type_charset).'>'.esc_html($character_set).'</option>';
|
4515 |
}
|
4516 |
}
|
4517 |
$charset_select_html .= '</select>';
|
@@ -4519,25 +4581,86 @@ class UpdraftPlus {
|
|
4519 |
$info['addui'] .= $charset_select_html;
|
4520 |
}
|
4521 |
}
|
4522 |
-
|
4523 |
-
|
4524 |
-
|
4525 |
-
|
4526 |
-
|
4527 |
-
|
4528 |
-
|
4529 |
-
|
4530 |
-
|
4531 |
-
|
4532 |
-
|
4533 |
-
|
4534 |
-
|
4535 |
-
|
4536 |
-
|
4537 |
-
|
4538 |
-
|
4539 |
-
|
4540 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4541 |
if (!isset($skipped_tables)) $skipped_tables = array();
|
4542 |
$missing_tables = array();
|
4543 |
if ($old_table_prefix) {
|
@@ -4570,53 +4693,195 @@ CREATE TABLE $wpdb->signups (
|
|
4570 |
// //need to make sure that we reset the file back to .crypt before clean temp files
|
4571 |
// $db_file = $decrypted_file['fullpath'].'.crypt';
|
4572 |
// unlink($decrypted_file['fullpath']);
|
4573 |
-
|
4574 |
return array($mess, $warn, $err, $info);
|
4575 |
}
|
4576 |
-
|
4577 |
/**
|
4578 |
* Find matching string from $str_arr1 and $str_arr2
|
4579 |
*
|
4580 |
-
* @param array
|
4581 |
-
* @param array
|
|
|
4582 |
* @return string matching str which will be best for replacement
|
4583 |
*/
|
4584 |
-
private function get_matching_str_from_array_elems($str_arr1, $str_arr2) {
|
4585 |
$matching_str = '';
|
4586 |
-
|
4587 |
-
|
4588 |
-
$
|
4589 |
-
|
4590 |
-
|
4591 |
-
|
4592 |
-
|
4593 |
-
|
4594 |
-
|
4595 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4596 |
break;
|
4597 |
}
|
4598 |
-
|
4599 |
-
$
|
|
|
|
|
|
|
4600 |
}
|
4601 |
-
$temp_partial_str .= $temp_str1_chars[$char_position_in_str1];
|
4602 |
-
$char_position_in_str1++;
|
4603 |
}
|
4604 |
-
|
4605 |
-
|
4606 |
-
|
4607 |
-
|
4608 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4609 |
}
|
4610 |
-
|
4611 |
-
if (
|
4612 |
-
$matching_str = $str2;
|
4613 |
break;
|
4614 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4615 |
}
|
4616 |
}
|
4617 |
return $matching_str;
|
4618 |
}
|
4619 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4620 |
private function gzopen_for_read($file, &$warn, &$err) {
|
4621 |
if (!function_exists('gzopen') || !function_exists('gzread')) {
|
4622 |
$missing = '';
|
455 |
$_GET['page'] = 'updraftplus';
|
456 |
$_REQUEST['page'] = 'updraftplus';
|
457 |
$method = $matches[1];
|
|
|
|
|
458 |
$call_method = "action_".$matches[2];
|
459 |
+
$storage_objects_and_ids = $this->get_storage_objects_and_ids(array($method));
|
460 |
+
|
461 |
+
$instance_id = isset($_GET['updraftplus_instance']) ? $_GET['updraftplus_instance'] : '';
|
462 |
+
|
463 |
+
// If we don't have an instance_id but the state is set then we are coming back to finish the auth and should extract the instance_id from the state
|
464 |
+
if ('' == $instance_id && isset($_GET['state']) && false !== strpos($_GET['state'], ':')) {
|
465 |
+
$parts = explode(':', $_GET['state']);
|
466 |
+
$instance_id = $parts[1];
|
467 |
+
}
|
468 |
+
|
469 |
+
if (isset($storage_objects_and_ids[$method]['instance_settings'][$instance_id])) {
|
470 |
+
$opts = $storage_objects_and_ids[$method]['instance_settings'][$instance_id];
|
471 |
+
$backup_obj = $storage_objects_and_ids[$method]['object'];
|
472 |
+
$backup_obj->set_options($opts, false, $instance_id);
|
473 |
+
} else {
|
474 |
+
include_once(UPDRAFTPLUS_DIR.'/methods/'.$method.'.php');
|
475 |
+
$call_class = "UpdraftPlus_BackupModule_".$method;
|
476 |
+
$backup_obj = new $call_class;
|
477 |
+
}
|
478 |
+
|
479 |
$this->register_wp_http_option_hooks();
|
480 |
+
|
481 |
try {
|
482 |
if (method_exists($backup_obj, $call_method)) {
|
483 |
call_user_func(array($backup_obj, $call_method));
|
612 |
*/
|
613 |
public function updraftplus_remotecontrol_command_classes($command_classes) {
|
614 |
if (is_array($command_classes)) $command_classes['updraftplus'] = 'UpdraftCentral_UpdraftPlus_Commands';
|
615 |
+
if (is_array($command_classes)) $command_classes['updraftvault'] = 'UpdraftCentral_UpdraftVault_Commands';
|
616 |
return $command_classes;
|
617 |
}
|
618 |
|
624 |
public function updraftcentral_command_class_wanted($command_php_class) {
|
625 |
if ('UpdraftCentral_UpdraftPlus_Commands' == $command_php_class) {
|
626 |
include_once(UPDRAFTPLUS_DIR.'/includes/class-updraftcentral-updraftplus-commands.php');
|
627 |
+
} elseif ('UpdraftCentral_UpdraftVault_Commands' == $command_php_class) {
|
628 |
+
include_once(UPDRAFTPLUS_DIR.'/includes/updraftvault.php');
|
629 |
}
|
630 |
}
|
631 |
|
668 |
$files_deleted = 0;
|
669 |
if ($handle = opendir($updraft_dir)) {
|
670 |
while (false !== ($entry = readdir($handle))) {
|
671 |
+
$manifest_match = preg_match("/updraftplus-manifest.json/", $entry);
|
672 |
// This match is for files created internally by zipArchive::addFile
|
673 |
$ziparchive_match = preg_match("/$match([0-9]+)?\.zip\.tmp\.([A-Za-z0-9]){6}?$/i", $entry);
|
674 |
// zi followed by 6 characters is the pattern used by /usr/bin/zip on Linux systems. It's safe to check for, as we have nothing else that's going to match that pattern.
|
3475 |
/**
|
3476 |
* Replace last occurence
|
3477 |
*
|
3478 |
+
* @param string $search The value being searched for, otherwise known as the needle
|
3479 |
+
* @param string $replace The replacement value that replaces found search values
|
3480 |
+
* @param string $subject The string or array being searched and replaced on, otherwise known as the haystack
|
3481 |
+
* @param boolean $case_sensitive whether replacement do in case seitively otr not
|
3482 |
+
*
|
3483 |
* @return string
|
3484 |
*/
|
3485 |
+
public function str_lreplace($search, $replace, $subject, $case_sensitive = true) {
|
3486 |
+
$pos = $case_sensitive ? strrpos($subject, $search) : strripos($subject, $search);
|
3487 |
if (false !== $pos) $subject = substr_replace($subject, $replace, $pos, strlen($search));
|
3488 |
return $subject;
|
3489 |
}
|
3769 |
$old_client_id = (empty($opts['settings'][$instance_id]['clientid'])) ? '' : $opts['settings'][$instance_id]['clientid'];
|
3770 |
$old_client_secret = (empty($opts['settings'][$instance_id]['secret'])) ? '' : $opts['settings'][$instance_id]['secret'];
|
3771 |
|
3772 |
+
if (isset($google['settings'][$instance_id]['clientid']) && $old_client_id == $google['settings'][$instance_id]['clientid'] && $old_client_secret == $google['settings'][$instance_id]['secret']) {
|
3773 |
$google['settings'][$instance_id]['token'] = $old_token;
|
3774 |
}
|
3775 |
if (!empty($opts['settings'][$instance_id]['token']) && $old_client_id != $google['settings'][$instance_id]['clientid']) {
|
3802 |
if (is_array($settings) && !empty($settings['version']) && !empty($settings['settings'])) {
|
3803 |
foreach ($settings['settings'] as $instance_id => $instance_settings) {
|
3804 |
if (!empty($instance_settings['host']) && preg_match('#ftp(es|s)?://(.*)#i', $instance_settings['host'], $matches)) {
|
3805 |
+
$settings['settings'][$instance_id]['host'] = rtrim($matches[2], "/ \t\n\r\0x0B");
|
3806 |
}
|
3807 |
if (isset($instance_settings['pass'])) {
|
3808 |
$settings['settings'][$instance_id]['pass'] = trim($instance_settings['pass'], "\n\r\0\x0B");
|
4283 |
$warn = array();
|
4284 |
$err = array();
|
4285 |
$info = array();
|
|
|
4286 |
$wp_version = $this->get_wordpress_version();
|
4287 |
global $wpdb;
|
4288 |
|
4370 |
@set_time_limit($dbscan_timeout);
|
4371 |
|
4372 |
// We limit the time that we spend scanning the file for character sets
|
4373 |
+
$db_charset_collate_scan_timeout = (defined('UPDRAFTPLUS_DB_CHARSET_COLLATE_SCAN_TIMEOUT') && is_numeric(UPDRAFTPLUS_DB_CHARSET_COLLATE_SCAN_TIMEOUT)) ? UPDRAFTPLUS_DB_CHARSET_COLLATE_SCAN_TIMEOUT : 10;
|
4374 |
$charset_scan_start_time = microtime(true);
|
4375 |
$db_supported_character_sets_res = $GLOBALS['wpdb']->get_results('SHOW CHARACTER SET', OBJECT_K);
|
4376 |
$db_supported_character_sets = (null !== $db_supported_character_sets_res) ? $db_supported_character_sets_res : array();
|
4377 |
$db_charsets_found = array();
|
4378 |
+
$db_supported_collations_res = $GLOBALS['wpdb']->get_results('SHOW COLLATION', OBJECT_K);
|
4379 |
+
$db_supported_collations = (null !== $db_supported_collations_res) ? $db_supported_collations_res : array();
|
4380 |
+
$db_charsets_found = array();
|
4381 |
+
$db_collates_found = array();
|
4382 |
+
$db_supported_charset_related_to_unsupported_collation = false;
|
4383 |
+
$db_supported_charsets_related_to_unsupported_collations = array();
|
4384 |
+
while ((($is_plain && !feof($dbhandle)) || (!$is_plain && !gzeof($dbhandle))) && ($line<100 || (!$header_only && count($wanted_tables)>0) || ((microtime(true) - $charset_scan_start_time) < $db_charset_collate_scan_timeout && !empty($db_supported_character_sets)))) {
|
4385 |
$line++;
|
4386 |
// Up to 1MB
|
4387 |
$buffer = ($is_plain) ? rtrim(fgets($dbhandle, 1048576)) : rtrim(gzgets($dbhandle, 1048576));
|
4416 |
}
|
4417 |
// Explicitly set it, allowing the consumer to detect when the result was unknown
|
4418 |
$info['same_url'] = false;
|
4419 |
+
|
4420 |
if ($this->mod_rewrite_unavailable(false)) {
|
4421 |
$warn[] = sprintf(__('You are using the %s webserver, but do not seem to have the %s module loaded.', 'updraftplus'), 'Apache', 'mod_rewrite').' '.sprintf(__('You should enable %s to make any pretty permalinks (e.g. %s) work', 'updraftplus'), 'mod_rewrite', 'http://example.com/my-page/');
|
4422 |
}
|
4423 |
+
|
4424 |
} else {
|
4425 |
$info['same_url'] = true;
|
4426 |
}
|
4462 |
if (isset($old_siteinfo['multisite']) && !$old_siteinfo['multisite'] && is_multisite()) {
|
4463 |
// Just need to check that you're crazy
|
4464 |
// if (!defined('UPDRAFTPLUS_EXPERIMENTAL_IMPORTINTOMULTISITE') || !UPDRAFTPLUS_EXPERIMENTAL_IMPORTINTOMULTISITE) {
|
4465 |
+
// $err[] = sprintf(__('Error: %s', 'updraftplus'), __('You are running on WordPress multisite - but your backup is not of a multisite site.', 'updraftplus'));
|
4466 |
+
// return array($mess, $warn, $err, $info);
|
4467 |
// } else {
|
4468 |
+
$warn[] = __('You are running on WordPress multisite - but your backup is not of a multisite site.', 'updraftplus').' '.__('It will be imported as a new site.', 'updraftplus').' <a href="https://updraftplus.com/information-on-importing-a-single-site-wordpress-backup-into-a-wordpress-network-i-e-multisite/">'.__('Please read this link for important information on this process.', 'updraftplus').'</a>';
|
4469 |
// }
|
4470 |
// Got the needed code?
|
4471 |
if (!class_exists('UpdraftPlusAddOn_MultiSite') || !class_exists('UpdraftPlus_Addons_Migrator')) {
|
4472 |
+
$err[] = sprintf(__('Error: %s', 'updraftplus'), sprintf(__('To import an ordinary WordPress site into a multisite installation requires %s.', 'updraftplus'), 'UpdraftPlus Premium'));
|
4473 |
return array($mess, $warn, $err, $info);
|
4474 |
}
|
4475 |
} elseif (isset($old_siteinfo['multisite']) && $old_siteinfo['multisite'] && !is_multisite()) {
|
4498 |
$wanted_tables = array_diff($wanted_tables, array($table));
|
4499 |
}
|
4500 |
}
|
4501 |
+
if (';' != substr($buffer, -1, 1)) {
|
4502 |
+
$processing_create = true;
|
4503 |
+
$db_supported_charset_related_to_unsupported_collation = true;
|
4504 |
+
}
|
4505 |
} elseif ($processing_create) {
|
4506 |
+
if (!empty($db_supported_collations)) {
|
4507 |
+
if (preg_match('/ COLLATE=([^\s;]+)/i', $buffer, $collate_match)) {
|
4508 |
+
$db_collates_found[] = $collate_match[1];
|
4509 |
+
if (!isset($db_supported_collations[$collate_match[1]])) {
|
4510 |
+
$db_supported_charset_related_to_unsupported_collation = true;
|
4511 |
+
}
|
4512 |
+
}
|
4513 |
+
if (preg_match('/ COLLATE ([a-zA-Z0-9._-]+),/i', $buffer, $collate_match)) {
|
4514 |
+
$db_collates_found[] = $collate_match[1];
|
4515 |
+
if (!isset($db_supported_collations[$collate_match[1]])) {
|
4516 |
+
$db_supported_charset_related_to_unsupported_collation = true;
|
4517 |
+
}
|
4518 |
+
}
|
4519 |
+
if (preg_match('/ COLLATE ([a-zA-Z0-9._-]+) /i', $buffer, $collate_match)) {
|
4520 |
+
$db_collates_found[] = $collate_match[1];
|
4521 |
+
if (!isset($db_supported_collations[$collate_match[1]])) {
|
4522 |
+
$db_supported_charset_related_to_unsupported_collation = true;
|
4523 |
+
}
|
4524 |
+
}
|
4525 |
+
}
|
4526 |
+
if (!empty($db_supported_character_sets)) {
|
4527 |
+
if (preg_match('/ CHARSET=([^\s;]+)/i', $buffer, $charset_match)) {
|
4528 |
+
$db_charsets_found[] = $charset_match[1];
|
4529 |
+
if ($db_supported_charset_related_to_unsupported_collation && !in_array($charset_match[1], $db_supported_charsets_related_to_unsupported_collations)) {
|
4530 |
+
$db_supported_charsets_related_to_unsupported_collations[] = $charset_match[1];
|
4531 |
+
}
|
4532 |
+
}
|
4533 |
+
}
|
4534 |
+
if (';' == substr($buffer, -1, 1)) {
|
4535 |
+
$processing_create = false;
|
4536 |
+
$db_supported_charset_related_to_unsupported_collation = false;
|
4537 |
}
|
|
|
4538 |
static $mysql_version_warned = false;
|
4539 |
if (!$mysql_version_warned && version_compare($db_version, '5.2.0', '<') && preg_match('/(CHARSET|COLLATE)[= ]utf8mb4/', $buffer)) {
|
4540 |
$mysql_version_warned = true;
|
4559 |
}
|
4560 |
if ($db_charset_forbidden) {
|
4561 |
$db_unsupported_charset_unique = array_unique($db_unsupported_charset);
|
4562 |
+
$warn[] = sprintf(_n("The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import.", "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import.", count($db_unsupported_charset_unique), 'updraftplus'), implode(', ', $db_unsupported_charset_unique)).' '.__('You can choose another suitable character set instead and continue with the restoration at your own risk.', 'updraftplus').' <a target="_blank" href="https://updraftplus.com/faqs/implications-changing-tables-character-set/">'.__('Go here for more information.', 'updraftplus').'</a>'.' <a target="_blank" href="https://updraftplus.com/faqs/implications-changing-tables-character-set/">'.__('Go here for more information.', 'updraftplus').'</a>';
|
4563 |
$db_supported_character_sets = array_keys($db_supported_character_sets);
|
4564 |
+
$similar_type_charset = $this->get_matching_str_from_array_elems($db_unsupported_charset_unique, $db_supported_character_sets, true);
|
4565 |
if (empty($similar_type_charset)) {
|
4566 |
$row = $GLOBALS['wpdb']->get_row('show variables like "character_set_database"');
|
4567 |
$similar_type_charset = (null !== $row) ? $row->Value : '';
|
4568 |
}
|
4569 |
+
if (empty($similar_type_charset) && !empty($db_supported_character_sets[0])) {
|
4570 |
+
$similar_type_charset = $db_supported_character_sets[0];
|
4571 |
+
}
|
4572 |
$charset_select_html = '<label>'.__('Your chosen character set to use instead:', 'updraftplus').'</label> ';
|
4573 |
$charset_select_html .= '<select name="updraft_restorer_charset" id="updraft_restorer_charset">';
|
4574 |
if (is_array($db_supported_character_sets)) {
|
4575 |
foreach ($db_supported_character_sets as $character_set) {
|
4576 |
+
$charset_select_html .= '<option value="'.esc_attr($character_set).'" '.selected($character_set, $similar_type_charset, false).'>'.esc_html($character_set).'</option>';
|
4577 |
}
|
4578 |
}
|
4579 |
$charset_select_html .= '</select>';
|
4581 |
$info['addui'] .= $charset_select_html;
|
4582 |
}
|
4583 |
}
|
4584 |
+
if (!empty($db_supported_collations)) {
|
4585 |
+
$db_collates_found_unique = array_unique($db_collates_found);
|
4586 |
+
$db_unsupported_collate = array();
|
4587 |
+
$db_collate_forbidden = false;
|
4588 |
+
foreach ($db_collates_found_unique as $db_collate) {
|
4589 |
+
if (!isset($db_supported_collations[$db_collate])) {
|
4590 |
+
$db_unsupported_collate[] = $db_collate;
|
4591 |
+
$db_collate_forbidden = true;
|
4592 |
+
}
|
4593 |
+
}
|
4594 |
+
if ($db_collate_forbidden) {
|
4595 |
+
$db_unsupported_collate_unique = array_unique($db_unsupported_collate);
|
4596 |
+
$warn[] = sprintf(_n("The database server that this WordPress site is running on doesn't support the collation (%s) used in the database which you are trying to import.", "The database server that this WordPress site is running on doesn't support multiple collations (%s) used in the database which you are trying to import.", count($db_unsupported_collate_unique), 'updraftplus'), implode(', ', $db_unsupported_collate_unique)).' '.__('You can choose another suitable collation instead and continue with the restoration (at your own risk).', 'updraftplus');
|
4597 |
+
$similar_type_collate = '';
|
4598 |
+
if ($db_charset_forbidden && !empty($similar_type_charset)) {
|
4599 |
+
$similar_type_collate = $this->get_similar_collate_related_to_charset($db_supported_collations, $db_unsupported_collate_unique, $similar_type_charset);
|
4600 |
+
}
|
4601 |
+
if (empty($similar_type_collate) && !empty($db_supported_charsets_related_to_unsupported_collations)) {
|
4602 |
+
$db_supported_collations_related_to_charset = array();
|
4603 |
+
foreach ($db_supported_collations as $db_supported_collation => $db_supported_collations_info_obj) {
|
4604 |
+
if (isset($db_supported_collations_info_obj->Charset) && in_array($db_supported_collations_info_obj->Charset, $db_supported_charsets_related_to_unsupported_collations)) {
|
4605 |
+
$db_supported_collations_related_to_charset[] = $db_supported_collation;
|
4606 |
+
}
|
4607 |
+
}
|
4608 |
+
if (!empty($db_supported_collations_related_to_charset)) {
|
4609 |
+
$similar_type_collate = $this->get_matching_str_from_array_elems($db_unsupported_collate_unique, $db_supported_collations_related_to_charset, false);
|
4610 |
+
}
|
4611 |
+
}
|
4612 |
+
if (empty($similar_type_collate)) {
|
4613 |
+
$similar_type_collate = $this->get_similar_collate_based_on_ocuurence_count($db_collates_found, $db_supported_collations, $db_supported_charsets_related_to_unsupported_collations);
|
4614 |
+
}
|
4615 |
+
if (empty($similar_type_collate)) {
|
4616 |
+
$similar_type_collate = $this->get_matching_str_from_array_elems($db_unsupported_collate_unique, array_keys($db_supported_collations), false);
|
4617 |
+
}
|
4618 |
+
|
4619 |
+
$collate_select_html = '<label>'.__('Your chosen replacement collation', 'updraftplus').':</label>';
|
4620 |
+
$collate_select_html .= '<select name="updraft_restorer_collate" id="updraft_restorer_collate">';
|
4621 |
+
foreach ($db_supported_collations as $collate => $collate_info_obj) {
|
4622 |
+
$option_other_attr = array();
|
4623 |
+
if ($db_charset_forbidden && isset($collate_info_obj->Charset)) {
|
4624 |
+
$option_other_attr[] = 'data-charset='.esc_attr($collate_info_obj->Charset);
|
4625 |
+
if ($similar_type_charset != $collate_info_obj->Charset) {
|
4626 |
+
$option_other_attr[] = 'style="display:none;"';
|
4627 |
+
}
|
4628 |
+
}
|
4629 |
+
$collate_select_html .= '<option value="'.esc_attr($collate).'" '.selected($collate, $similar_type_collate, $echo = false).' '.implode(' ', $option_other_attr).'>'.esc_html($collate).'</option>';
|
4630 |
+
}
|
4631 |
+
$collate_select_html .= '</select>';
|
4632 |
+
|
4633 |
+
$info['addui'] = empty($info['addui']) ? $collate_select_html : $info['addui'].'<br>'.$collate_select_html;
|
4634 |
+
|
4635 |
+
if ($db_charset_forbidden) {
|
4636 |
+
$collate_change_on_charset_selection_data = array(
|
4637 |
+
'db_supported_collations' => $db_supported_collations,
|
4638 |
+
'db_unsupported_collate_unique' => $db_unsupported_collate_unique,
|
4639 |
+
'db_collates_found' => $db_collates_found,
|
4640 |
+
);
|
4641 |
+
$info['addui'] .= '<input type="hidden" name="collate_change_on_charset_selection_data" id="collate_change_on_charset_selection_data" value="'.esc_attr(json_encode($collate_change_on_charset_selection_data)).'">';
|
4642 |
+
}
|
4643 |
+
}
|
4644 |
+
}
|
4645 |
+
/* $blog_tables = "CREATE TABLE $wpdb->terms (
|
4646 |
+
CREATE TABLE $wpdb->term_taxonomy (
|
4647 |
+
CREATE TABLE $wpdb->term_relationships (
|
4648 |
+
CREATE TABLE $wpdb->commentmeta (
|
4649 |
+
CREATE TABLE $wpdb->comments (
|
4650 |
+
CREATE TABLE $wpdb->links (
|
4651 |
+
CREATE TABLE $wpdb->options (
|
4652 |
+
CREATE TABLE $wpdb->postmeta (
|
4653 |
+
CREATE TABLE $wpdb->posts (
|
4654 |
+
$users_single_table = "CREATE TABLE $wpdb->users (
|
4655 |
+
$users_multi_table = "CREATE TABLE $wpdb->users (
|
4656 |
+
$usermeta_table = "CREATE TABLE $wpdb->usermeta (
|
4657 |
+
$ms_global_tables = "CREATE TABLE $wpdb->blogs (
|
4658 |
+
CREATE TABLE $wpdb->blog_versions (
|
4659 |
+
CREATE TABLE $wpdb->registration_log (
|
4660 |
+
CREATE TABLE $wpdb->site (
|
4661 |
+
CREATE TABLE $wpdb->sitemeta (
|
4662 |
+
CREATE TABLE $wpdb->signups (
|
4663 |
+
*/
|
4664 |
if (!isset($skipped_tables)) $skipped_tables = array();
|
4665 |
$missing_tables = array();
|
4666 |
if ($old_table_prefix) {
|
4693 |
// //need to make sure that we reset the file back to .crypt before clean temp files
|
4694 |
// $db_file = $decrypted_file['fullpath'].'.crypt';
|
4695 |
// unlink($decrypted_file['fullpath']);
|
4696 |
+
|
4697 |
return array($mess, $warn, $err, $info);
|
4698 |
}
|
4699 |
+
|
4700 |
/**
|
4701 |
* Find matching string from $str_arr1 and $str_arr2
|
4702 |
*
|
4703 |
+
* @param array $str_arr1 array of strings
|
4704 |
+
* @param array $str_arr2 array of strings
|
4705 |
+
* @param boolean $match_until_first_numeric only match until first numeric occurence
|
4706 |
* @return string matching str which will be best for replacement
|
4707 |
*/
|
4708 |
+
private function get_matching_str_from_array_elems($str_arr1, $str_arr2, $match_until_first_numeric = true) {
|
4709 |
$matching_str = '';
|
4710 |
+
if ($match_until_first_numeric) {
|
4711 |
+
$str_partial_arr = array();
|
4712 |
+
foreach ($str_arr1 as $str1) {
|
4713 |
+
$str1_str_length = strlen($str1);
|
4714 |
+
$temp_str1_chars = str_split($str1);
|
4715 |
+
$temp_partial_str = '';
|
4716 |
+
// The flag is for whether non-numeric character passed after numeric character occurence in str1. For ex. str1 is utf8mb4, the flag wil be true when parsing m after utf8.
|
4717 |
+
$numeric_char_pass_flag = false;
|
4718 |
+
$char_position_in_str1 = 0;
|
4719 |
+
while ($char_position_in_str1 <= $str1_str_length) {
|
4720 |
+
if ($numeric_char_pass_flag && !is_numeric($temp_str1_chars[$char_position_in_str1])) {
|
4721 |
+
break;
|
4722 |
+
}
|
4723 |
+
if (is_numeric($temp_str1_chars[$char_position_in_str1])) {
|
4724 |
+
$numeric_char_pass_flag = true;
|
4725 |
+
}
|
4726 |
+
$temp_partial_str .= $temp_str1_chars[$char_position_in_str1];
|
4727 |
+
$char_position_in_str1++;
|
4728 |
+
}
|
4729 |
+
$str_partial_arr[] = $temp_partial_str;
|
4730 |
+
}
|
4731 |
+
foreach ($str_partial_arr as $str_partial) {
|
4732 |
+
if (!empty($matching_str)) {
|
4733 |
break;
|
4734 |
}
|
4735 |
+
foreach ($str_arr2 as $str2) {
|
4736 |
+
if (0 === stripos($str2, $str_partial)) {
|
4737 |
+
$matching_str = $str2;
|
4738 |
+
break;
|
4739 |
+
}
|
4740 |
}
|
|
|
|
|
4741 |
}
|
4742 |
+
} else {
|
4743 |
+
$str1_partial_first_arr = array();
|
4744 |
+
$str1_partial_first_arr = array();
|
4745 |
+
$str1_partial_start_n_middle_arr = array();
|
4746 |
+
$str1_partial_middle_n_last_arr = array();
|
4747 |
+
$str1_partial_last_arr = array();
|
4748 |
+
foreach ($str_arr1 as $str1) {
|
4749 |
+
$str1_partial_arr = explode('_', $str1);
|
4750 |
+
$str1_parts_count = count($str1_partial_arr);
|
4751 |
+
$str1_partial_first_arr[] = $str1_partial_arr[0];
|
4752 |
+
$str1_last_part_index = $str1_parts_count - 1;
|
4753 |
+
if ($str1_last_part_index > 0) {
|
4754 |
+
$str1_partial_last_arr[] = $str1_partial_arr[$str1_last_part_index];
|
4755 |
+
$str1_partial_start_n_middle_arr[] = substr($str1, 0, stripos($str1, '_'));
|
4756 |
+
$str1_partial_middle_n_last_arr[] = substr($str1, stripos($str1, '_') + 1);
|
4757 |
+
}
|
4758 |
}
|
4759 |
+
for ($case_no = 1; $case_no <= 5; $case_no++) {
|
4760 |
+
if (!empty($matching_str)) {
|
|
|
4761 |
break;
|
4762 |
}
|
4763 |
+
foreach ($str_arr2 as $str2) {
|
4764 |
+
switch ($case_no) {
|
4765 |
+
// Case 1: Both Start and End match
|
4766 |
+
case 1:
|
4767 |
+
$str2_partial_arr = explode('_', $str2);
|
4768 |
+
$str2_first_part = $str2_partial_arr[0];
|
4769 |
+
$str2_parts_count = count($str2_partial_arr);
|
4770 |
+
$str2_last_part_index = $str2_parts_count - 1;
|
4771 |
+
if ($str2_last_part_index > 0) {
|
4772 |
+
$str2_last_part = $str2_partial_arr[$str2_last_part_index];
|
4773 |
+
} else {
|
4774 |
+
$str2_last_part = '';
|
4775 |
+
}
|
4776 |
+
if (!empty($str2_last_part) && !empty($str1_partial_last_arr) && in_array($str2_first_part, $str1_partial_first_arr) && in_array($str2_last_part, $str1_partial_last_arr)) {
|
4777 |
+
$matching_str = $str2;
|
4778 |
+
}
|
4779 |
+
break;
|
4780 |
+
// Case 2: Start Middle Match
|
4781 |
+
case 2:
|
4782 |
+
$str2_partial_first_n_middle_parts = substr($str2, 0, stripos($str2, '_'));
|
4783 |
+
if (in_array($str2_partial_first_n_middle_parts, $str1_partial_start_n_middle_arr)) {
|
4784 |
+
$matching_str = $str2;
|
4785 |
+
}
|
4786 |
+
break;
|
4787 |
+
// Case 3: End Middle Match
|
4788 |
+
case 3:
|
4789 |
+
$str2_partial_middle_n_last_parts = stripos($str2, '_') !== false ? substr($str2, stripos($str2, '_') + 1) : '';
|
4790 |
+
if (!empty($str2_partial_middle_n_last_parts) && in_array($str2_partial_middle_n_last_parts, $str1_partial_middle_n_last_arr)) {
|
4791 |
+
$matching_str = $str2;
|
4792 |
+
}
|
4793 |
+
break;
|
4794 |
+
// Case 4: Start Match (low possibilities)
|
4795 |
+
case 4:
|
4796 |
+
$str2_partial_arr = explode('_', $str2);
|
4797 |
+
$str2_first_part = $str2_partial_arr[0];
|
4798 |
+
if (in_array($str2_first_part, $str1_partial_first_arr)) {
|
4799 |
+
$matching_str = $str2;
|
4800 |
+
}
|
4801 |
+
break;
|
4802 |
+
// Case 5: End Match (low possibilities)
|
4803 |
+
case 5:
|
4804 |
+
$str2_partial_arr = explode('_', $str2);
|
4805 |
+
$str2_parts_count = count($str2_partial_arr);
|
4806 |
+
$str2_last_part_index = $str2_parts_count - 1;
|
4807 |
+
if ($str2_last_part_index > 0) {
|
4808 |
+
$str2_last_part = $str2_partial_arr[$str2_last_part_index];
|
4809 |
+
} else {
|
4810 |
+
$str2_last_part = '';
|
4811 |
+
}
|
4812 |
+
if (!empty($str2_last_part) && in_array($str2_last_part, $str1_partial_last_arr)) {
|
4813 |
+
$matching_str = $str2;
|
4814 |
+
}
|
4815 |
+
break;
|
4816 |
+
}
|
4817 |
+
if (!empty($matching_str)) {
|
4818 |
+
break;
|
4819 |
+
}
|
4820 |
+
}
|
4821 |
}
|
4822 |
}
|
4823 |
return $matching_str;
|
4824 |
}
|
4825 |
+
|
4826 |
+
/**
|
4827 |
+
* Get default substitute similar collate related to charset
|
4828 |
+
*
|
4829 |
+
* @param array $db_supported_collations Supported collations. It should contain result of 'SHOW COLLATION' query
|
4830 |
+
* @param array $db_unsupported_collate_unique Unsupported unique collates collection
|
4831 |
+
* @param string $similar_type_charset Charset for which need to get default collate substitution
|
4832 |
+
* @return string $similar_type_collate default substitute collate which is best suitable or blank string
|
4833 |
+
*/
|
4834 |
+
public function get_similar_collate_related_to_charset($db_supported_collations, $db_unsupported_collate_unique, $similar_type_charset) {
|
4835 |
+
$similar_type_collate = '';
|
4836 |
+
$db_supported_collations_related_to_charset = array();
|
4837 |
+
foreach ($db_supported_collations as $db_supported_collation => $db_supported_collations_info_obj) {
|
4838 |
+
if (isset($db_supported_collations_info_obj->Charset) && $db_supported_collations_info_obj->Charset == $similar_type_charset) {
|
4839 |
+
$db_supported_collations_related_to_charset[] = $db_supported_collation;
|
4840 |
+
}
|
4841 |
+
}
|
4842 |
+
if (!empty($db_supported_collations_related_to_charset)) {
|
4843 |
+
$similar_type_collate = $this->get_matching_str_from_array_elems($db_unsupported_collate_unique, $db_supported_collations_related_to_charset, false);
|
4844 |
+
}
|
4845 |
+
return $similar_type_collate;
|
4846 |
+
}
|
4847 |
+
|
4848 |
+
/**
|
4849 |
+
* Get default substitute similar collate based on existing supported collates count in database backup file
|
4850 |
+
*
|
4851 |
+
* @param array $db_collates_found All collates which have found in database backup file regardless whether they are supported or unsupported
|
4852 |
+
* @param array $db_supported_collations Supported collations. It should contain result of 'SHOW COLLATION' query
|
4853 |
+
* @param array $db_supported_charsets_related_to_unsupported_collations All charset which are related to unsupported collation
|
4854 |
+
*
|
4855 |
+
* @return string $similar_type_collate default substitute collate which is best suitable or blank string
|
4856 |
+
*/
|
4857 |
+
public function get_similar_collate_based_on_ocuurence_count($db_collates_found, $db_supported_collations, $db_supported_charsets_related_to_unsupported_collations) {
|
4858 |
+
$similar_type_collate = '';
|
4859 |
+
$db_supported_collates_found_with_occurrence = array();
|
4860 |
+
foreach ($db_collates_found as $db_collate_found) {
|
4861 |
+
if (isset($db_supported_collations[$db_collate_found])) {
|
4862 |
+
if (isset($db_supported_collates_found_with_occurrence[$db_collate_found])) {
|
4863 |
+
$db_supported_collates_found_with_occurrence[$db_collate_found] = intval($db_supported_collates_found_with_occurrence[$db_collate_found]) + 1;
|
4864 |
+
} else {
|
4865 |
+
$db_supported_collates_found_with_occurrence[$db_collate_found] = 1;
|
4866 |
+
}
|
4867 |
+
}
|
4868 |
+
}
|
4869 |
+
if (!empty($db_supported_collates_found_with_occurrence)) {
|
4870 |
+
arsort($db_supported_collates_found_with_occurrence);
|
4871 |
+
if (!empty($db_supported_charsets_related_to_unsupported_collations)) {
|
4872 |
+
foreach ($db_supported_collates_found_with_occurrence as $db_supported_collate_with_occurrence => $occurrence_count) {
|
4873 |
+
if (isset($db_supported_collations[$db_supported_collate_with_occurrence]) && isset($db_supported_collations[$db_supported_collate_with_occurrence]->Charset) && in_array($db_supported_collations[$db_supported_collate_with_occurrence]->Charset, $db_supported_charsets_related_to_unsupported_collations)) {
|
4874 |
+
$similar_type_collate = $db_supported_collate_with_occurrence;
|
4875 |
+
break;
|
4876 |
+
}
|
4877 |
+
}
|
4878 |
+
} else {
|
4879 |
+
$similar_type_collate = array_search(max($db_supported_collates_found_with_occurrence), $db_supported_collates_found_with_occurrence);
|
4880 |
+
}
|
4881 |
+
}
|
4882 |
+
return $similar_type_collate;
|
4883 |
+
}
|
4884 |
+
|
4885 |
private function gzopen_for_read($file, &$warn, &$err) {
|
4886 |
if (!function_exists('gzopen') || !function_exists('gzread')) {
|
4887 |
$missing = '';
|
@@ -1710,6 +1710,16 @@ div#updraft-wrap a {
|
|
1710 |
cursor: pointer !important;
|
1711 |
}
|
1712 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1713 |
#updraftcentral_keys_table {
|
1714 |
display: none;
|
1715 |
}
|
@@ -1721,10 +1731,6 @@ div#updraft-wrap a {
|
|
1721 |
margin-bottom: 8px;
|
1722 |
}
|
1723 |
|
1724 |
-
#updraftcentral_keycreate_mothership {
|
1725 |
-
margin-left: 24px;
|
1726 |
-
}
|
1727 |
-
|
1728 |
@media screen and (min-width: 670px) {
|
1729 |
|
1730 |
.expertmode .advanced_settings_container .advanced_settings_menu {
|
1710 |
cursor: pointer !important;
|
1711 |
}
|
1712 |
|
1713 |
+
.updraftcentral_wizard_option {
|
1714 |
+
width: 45%;
|
1715 |
+
float: left;
|
1716 |
+
text-align: center;
|
1717 |
+
}
|
1718 |
+
|
1719 |
+
.updraftcentral_wizard_option label {
|
1720 |
+
margin-bottom: 8px;
|
1721 |
+
}
|
1722 |
+
|
1723 |
#updraftcentral_keys_table {
|
1724 |
display: none;
|
1725 |
}
|
1731 |
margin-bottom: 8px;
|
1732 |
}
|
1733 |
|
|
|
|
|
|
|
|
|
1734 |
@media screen and (min-width: 670px) {
|
1735 |
|
1736 |
.expertmode .advanced_settings_container .advanced_settings_menu {
|
@@ -1,2 +1,2 @@
|
|
1 |
-
.max-width-600{max-width:600px}.width-900{width:900px}.width-80{width:80%}.no-decoration{text-decoration:none}.bold{font-weight:bold}.center-align-td{text-align:center}.remove-padding{padding:0 !important}.updraft-text-center{text-align:center}.autobackup{padding:6px;margin:8px 0}ul .disc{list-style:disc inside}.dashicons-log-fix{display:inherit}input{border-radius:4px;line-height:1.42;border:1px solid #CCC;height:27px;padding:2px 6px;color:#555}input[type="text"]{font-size:14px}input[type="number"]{height:31px}select{border-radius:4px}.main-dashboard-buttons{border-width:4px;border-radius:12px;letter-spacing:0;font-size:17px;font-weight:bold;padding-left:.7em;padding-right:2em;padding:.3em 1em;line-height:1.7em;background:transparent;position:relative;border:2px solid;transition:all .2s;vertical-align:baseline;box-sizing:border-box;text-align:center;line-height:1.3em;margin-left:.3em;text-transform:none;line-height:1;text-decoration:none}.button-restore{border-color:#629ec0;color:#629ec0}.dashboard-main-sizing{border-width:4px;width:190px;line-height:1.7em}.button-restore:hover,.button-migrate:hover,.button-backup:hover,.button-view-log:hover,.button-mass-selectors:hover,.button-delete:hover,.button-entity-backup:hover,.udp-button-primary:hover{border-color:#df6926;color:#df6926}.button-migrate{color:#eea920;border-color:#eea920}.button-backup{border-color:#84ca1b;color:#84ca1b}.existing-backups-buttons{font-size:11px;line-height:1.4em;border-width:3px}.existing-backups-restore-buttons{font-size:11px;line-height:1.4em;border-width:3px}.button-delete{color:#e23900;border-color:#e23900;font-size:14px;line-height:1.4em;border-width:2px;margin-right:10px}.button-view-log,.button-mass-selectors{color:darkgrey;border-color:darkgrey;font-size:14px;line-height:1.4em;border-width:2px;margin-top:-1px}.button-view-log{width:120px}.button-existing-restore{font-size:14px;line-height:1.4em;border-width:2px;width:110px}.main-restore{margin-right:3%;margin-left:3%}.button-entity-backup{color:#555;border-color:#555;font-size:11px;line-height:1.4em;border-width:2px;margin-right:5px}.button-select-all{width:122px}.button-deselect{width:92px}#ud_massactions>.display-flex>.mass-selectors-margins{margin-right:-4px}.udp-button-primary{border-width:4px;color:#0073aa;border-color:#0073aa;font-size:14px;height:40px}#ud_massactions .button-delete{margin-right:0}.stored_local{border-radius:5px;background-color:#007fe7;padding:3px 5px 5px 5px;color:#FFF;font-size:75%}.form-table td.updraft_existingbackup_date{padding-bottom:5px}span#updraft_lastlogcontainer{word-break:break-all}.stored_icon{height:1.3em;position:relative;top:.2em}.backup_date_label .clear-right{clear:right}.udp-logo-70{width:70px;height:70px;float:left;padding-right:25px}h3 .thank-you{margin-top:0}.ws_advert{max-width:800px;font-size:140%;line-height:140%;padding:14px;clear:left}.dismiss-dash-notice{float:right;position:relative;top:-20px}#updraft_report_cell .updraft_reportbox{padding:8px;margin:8px 0;border:1px dotted;clear:left;float:left}#updraft_report_cell button.updraft_reportbox_delete{font-size:50%;float:right;padding:0 3px;position:relative;top:-4px;left:4px}#updraft-navtab-settings-content .updraft-test-button{font-size:18px !important}#updraft_report_cell .updraft_report_checkbox{margin-top:4px}#updraft_report_cell .updraft_report_email{width:300px}#updraft_report_cell .updraft_report_another_p{clear:left}#updraft-navtab-settings-content table.form-table p{max-width:700px}#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected{background-color:#CCC}.updraft_settings_sectionheading{display:none}.updraft-backupentitybutton-disabled{background-color:transparent;border:0;color:#0074a2;text-decoration:underline;cursor:pointer;clear:none;float:left}.updraft-backupentitybutton{margin-left:8px}.updraft-bigbutton{padding:2px 0 !important;margin-right:14px !important;font-size:22px !important;min-height:32px;min-width:180px}.updraft_debugrow th{float:right;text-align:right;font-weight:bold;padding-right:8px;min-width:140px}.updraft_debugrow td{min-width:300px;vertical-align:bottom}#updraft_webdav_host_error{color:red}#updraft_zip_files_jstree .jstree-container-ul>.jstree-node,#updraft_more_files_jstree .jstree-container-ul>.jstree-node{background:transparent}#updraft_zip_files_jstree .jstree-container-ul>.jstree-open>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-open>.jstree-ocl{background-position:-36px -4px}#updraft_zip_files_jstree .jstree-container-ul>.jstree-closed>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-closed>.jstree-ocl{background-position:-4px -4px}#updraft_zip_files_jstree .jstree-container-ul>.jstree-leaf>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-leaf>.jstree-ocl{background:transparent}#updraft_zip_files_container{position:relative;height:450px;overflow:none}#updraft_zip_info_container{position:relative;height:auto;width:100%;border:1px dotted;margin-bottom:5px}#updraft_zip_info_container p{margin:1px;padding-left:10px;font-size:14px}#updraft_zip_download_item{display:none;color:#0073aa;padding-left:10px}#updraft_zip_download_notice{padding-left:10px}#updraft_zip_files_jstree_container{position:relative;border:1px dotted;height:80%;width:100%;overflow:auto}#updraft_more_files_container{position:relative;display:none;height:300px;width:100%;border:1px dotted;margin-bottom:5px}#updraft_jstree_buttons{position:absolute;top:0;right:0}#updraft_jstree_container{height:100%;width:100%;overflow:auto}#updraft_more_files_container button{height:22px;line-height:20px}#updraft_jstree_confirm,#updraft_jstree_cancel{display:none}.updraftplus-morefiles-row-delete{cursor:pointer;color:red;font-size:23px !important}.updraftplus-morefiles-row-edit{cursor:pointer;font-size:24px !important}#updraft-wrap .form-table th{width:230px}.updraftplus-remove{background-color:#c00000;border:1px solid #c00000;height:22px;padding:4px 3px 0 3px;margin-right:6px}.updraft-viewlogdiv form{margin:0;padding:0}.updraft-viewlogdiv{background-color:#FFF;color:#000;border:1px solid #000;height:26px;padding:0;margin:0 4px 0 0;border-radius:3px;float:left}.updraft-viewlogdiv input,.updraft-viewlogdiv a{border:0;background-color:transparent;color:#000;margin:0;padding:3px 4px;font-size:16px;line-height:26px}.updraft-viewlogdiv:hover{background-color:#000;color:#FFF;border:1px solid #FFF;cursor:pointer}.updraft-viewlogdiv input:hover,.updraft-viewlogdiv a:hover{color:#FFF;cursor:pointer}.updraftplus-remove a{color:white;padding:4px 4px 0 4px}.updraftplus-remove:hover{background-color:white;border:1px solid #c00000}.updraftplus-remove a:hover{color:#c00000}.drag-drop #drag-drop-area2{border:4px dashed #DDD;height:200px}#drag-drop-area2 .drag-drop-inside{margin:36px auto 0;width:350px}#filelist,#filelist2{width:100%}#filelist .file,#filelist2 .file,.ud_downloadstatus .file,#ud_downloadstatus2 .file{padding:5px;background:#ececec;border:solid 1px #CCC;margin:4px 0}ul.updraft_premium_description_list{list-style:disc inside}ul.updraft_premium_description_list li{display:inline}ul.updraft_premium_description_list li::after{content:" | "}ul.updraft_premium_description_list li.last::after{content:""}.updraft_feature_cell{background-color:#f7d9c9 !important;padding:5px 10px}.updraft_feat_table,.updraft_feat_th,.updraft_feat_table td{border:1px solid black;border-collapse:collapse;font-size:120%;background-color:white;text-align:center}.updraft_feat_table p{padding:0 10px;margin:5px 0;font-size:16px}.updraft_feat_table h4{margin:5px 0}.updraft_feat_table .dashicons{width:25px;height:25px;font-size:25px;line-height:1}.updraft_feat_table .dashicons-yes,.updraft_feat_table .updraft-yes{color:green}.updraft_feat_table .dashicons-no-alt,.updraft_feat_table .updraft-no{color:red}.updraft_tick_cell{text-align:center}.updraft_tick_cell img{margin:4px 0;height:24px}#filelist .fileprogress,#filelist2 .fileprogress,.ud_downloadstatus .dlfileprogress,#ud_downloadstatus2 .dlfileprogress{width:0;background:#f6a828;height:5px}.ud_downloadstatus .raw,#ud_downloadstatus2 .raw{margin-top:8px;clear:left}.ud_downloadstatus .file,#ud_downloadstatus2 .file{margin-top:8px}tr.updraftplusmethod h3{margin:0}#updraft_retain_db_rules .updraft_retain_rules_delete,#updraft_retain_files_rules .updraft_retain_rules_delete{cursor:pointer;color:red;font-size:120%;font-weight:bold;border:0;border-radius:3px;padding:2px;margin:0 6px}#updraft_retain_db_rules .updraft_retain_rules_delete:hover,#updraft_retain_files_rules .updraft_retain_rules_delete:hover{cursor:pointer;color:white;background:red}#updraft_backup_started{max-width:800px;font-size:140%;line-height:140%;padding:14px;clear:left}.udp-premium-image{display:none}@media screen and (min-width:720px){.udp-premium-image{display:block;float:left;padding-right:5px}}#plupload-upload-ui2{width:80%}.backup-restored{padding:8px}.backup-restored span{font-size:120%}.memory-limit{padding:8px}.updraft_list_errors{padding:8px}.nav-tab-wrapper{margin:14px 0}#updraft-poplog-content{white-space:pre-wrap}.next-backup{border:0;padding:0;margin:0 10px 0 0}.not-scheduled{vertical-align:top !important;margin:0 !important;padding:0 !important}.next-backup .updraft_scheduled{margin:0;padding:2px 4px 2px 0}#next-backup-table-inner td{vertical-align:top}.next-backup .updraft_all-files{color:blue;margin:0;padding:2px 0 0 0}.multisite-advert-width{width:800px}.updraft_settings_sectionheading{margin-top:6px}.premium-upgrade-prompt{font-size:115%}.updraft_feat_table{margin-top:30px}.show_admin_restore_in_progress_notice{padding:8px}.show_admin_restore_in_progress_notice .unfinished-restoration{font-size:120%}#backupnow_includefiles_moreoptions,#backupnow_database_moreoptions{margin:4px 16px 6px 16px;border:1px dotted;padding:6px 10px}#backupnow_database_moreoptions{max-height:250px;overflow:auto}.form-table #updraft_activejobsrow .minimum-height{min-height:100px}#updraft_lastlogmessagerow .last-message{padding-top:20px;display:block}.updraft_simplepie{vertical-align:top}.download-backups{margin-top:8px}.download-backups .updraft_download_button{margin-right:6px;margin-top:4px}.download-backups .choose-components-button{font-size:16px}.download-backups .ud-whitespace-warning{background-color:pink;padding:8px;margin:4px;border:1px dotted}.download-backups .ul{list-style:none inside;max-width:800px;margin-top:6px;margin-bottom:12px}#updraft-plupload-modal{width:75%;margin:16px;margin-left:100px}.download-backups .upload{max-width:610px}.download-backups #plupload-upload-ui{width:70%}.ud_downloadstatus{padding:10px;background:#f1f1f1}#ud_massactions{padding:14px;position:fixed;right:25%;top:25%;border:2px solid;border-radius:4px;background:#f1f1f1;float:right}#ud_massactions .updraftplus-remove{clear:left;font-size:16px;text-align:center;border-radius:4px;margin-top:4px}#ud_massactions .updraftplus-remove a{text-decoration:none}#ud_massactions .updraft-viewlogdiv{font-size:16px;text-align:center;border-radius:4px;margin-top:4px}#ud_massactions .updraft-viewlogdiv a{text-decoration:none;position:relative;top:3px}#ud_massactions .updraft-viewlogdiv a{text-decoration:none;position:relative;top:3px}#updraft-navtab-backups-content .updraft_existing_backups{margin-bottom:12px}#updraft-message-modal-innards{padding:4px}#updraft-authenticate-modal{text-align:center;font-size:16px !important}#updraft-authenticate-modal p{font-size:16px}#updraft_delete_form p{margin-top:3px;padding-top:0}#updraft_restore_form .cannot-restore{margin:8px 0}#updraft_restorer_dboptions{padding:12px;margin:8px 0 4px 0;border:dashed 1px}#updraft_restorer_dboptions h4{margin:0 0 6px 0;padding:0}.updraft_debugrow th{vertical-align:top;padding-top:6px}.expertmode p{font-size:125%}.expertmode .call-wp-action{width:300px;height:22px}.updraftplus-lock-advert{clear:left;max-width:600px}.uncompressed-data{clear:left;max-width:600px}.delete-old-directories{padding:8px;padding-bottom:12px}.active-jobs{min-width:480px;min-height:48px;text-align:center;margin-top:4px;padding:8px;border:1px solid;float:left;clear:left}.job-id{min-width:480px;margin-top:4px;padding:8px;border:1px solid;clear:left;float:left}.next-resumption{font-weight:bold}.updraft_percentage{z-index:-1;position:absolute;left:0;top:0;text-align:center;background-color:#f6a828}.curstage{border-radius:4px;margin-top:8px;padding-top:4px;border:1px solid #AAA;width:100%;height:22px;position:relative;text-align:center;font-style:italic}.retain-files{width:48px}.backup-interval-description tr td div{max-width:670px}#updraft-manualdecrypt-modal{width:85%;margin:6px;margin-left:100px}.directory-permissions{font-size:110%;font-weight:bold}.double-warning{border:1px solid;padding:6px}.raw-backup-info{font-style:italic;font-weight:bold;font-size:120%}.updraft_existingbackup_date{width:22%;max-width:140px}.existing-backups-table{margin-top:20px;margin-left:20px;width:80%}.tr-bottom-4{margin-bottom:4px}.form-table .backup-date{width:172px;padding:0;padding-left:15px}.form-table .backup-data{width:426px;padding:0;padding-left:15px}.form-table .updraft_backup_actions{width:272px;padding:0 0 10px 15px}.existing-date{box-sizing:border-box;max-width:140px;width:25%}.line-break-tr{height:2px;padding:1px;margin:0}.line-break-td{margin:0;padding:0}.td-line-color{height:2px;background-color:#888}.raw-backup{max-width:140px}.existing-backups-actions{padding:1px;margin:0}.existing-backups-border{height:2px;padding:1px;margin:0}.existing-backups-border>td{margin:0;padding:0}.existing-backups-border>div{height:2px;background-color:#AAA}.updraft_existing_backup_date{max-width:140px}.restore-button{margin-right:6px;float:left;clear:none}.updraftplus-remove{font-size:16px;text-align:center;border-radius:4px}.before-restore-button{padding:1px;margin:0}.table-separator-tr{height:2px;padding:1px;margin:0}.table-separator-td{margin:0;padding:0}.end-of-table-div{height:2px;background-color:#AAA}.last-backup-job{padding-top:3% !important}.line-height-03{line-height:.3 !important}.line-height-13{line-height:1.3 !important}.line-height-23{line-height:2.3 !important}#updraft_diskspaceused{color:#df6926}.updraft_premium_description_list{text-align:left}#updraft_delete_old_dirs_pagediv{padding-bottom:10px}.job-id{margin:0 auto;width:20%}.updraft_all-files{color:#df6926}.fix-time{width:70px}.retain-files{width:70px}.number-input{min-width:50px;max-width:70px}.additional-rule-width{min-width:60px;max-width:70px}.dashicons{line-height:inherit;font-size:inherit}.addon-logo-150{margin-left:30px;margin-top:33px;height:125px;width:150px}.margin-bottom-50{margin-bottom:50px}.premium-container{width:80%}.main-header{background-color:#df6926;height:200px;width:100%}.button-add-to-cart{color:white;border-color:white;float:none;margin-right:17px}.button-add-to-cart:hover,.button-add-to-cart:focus,.button-add-to-cart:active{border-color:#a0a5aa;color:#a0a5aa}.addon-title{margin-top:25px}.addon-text{margin-top:75px}.image-main-div{width:25%;float:left}.text-main-div{width:60%;float:left;text-align:center;color:white;margin-top:16px}.text-main-div-title{font-weight:bold !important;color:white;text-align:center}.text-main-div-paragraph{color:white}.updraftplus-vault-cta{width:100%;text-align:center;margin-bottom:50px}.updraftplus-vault-cta h1{font-weight:bold}.updraftvault-buy{width:225px;height:225px;border:2px solid #777;display:inline-table;margin:0 auto;margin-right:50px;position:relative}.updraftplus-vault-cta>.vault-options>.center-vault{width:275px;height:275px}.updraftplus-vault-cta>.vault-options>.center-vault>a{right:21%;font-size:16px;border-width:4px !important}.updraftplus-vault-cta>.vault-options>.center-vault>p{font-size:16px}.updraftvault-buy .button-purchase{right:24%;margin-left:0;line-height:1.7em}.updraftvault-buy hr{height:2px;background-color:#777;margin-top:18px}.right{margin-right:0}.updraftvault-buy .addon-logo-100{height:100px;width:125px;margin-top:7px}.updraftvault-buy .addon-logo-large{margin-top:7px}.updraftvault-buy .button-buy-vault{font-size:12px;color:#df6926;border-color:#df6926;border-width:2px !important;position:absolute;right:29%;bottom:2%}.premium-addon-div .button-purchase{line-height:1.7em}.updraftvault-buy .button-buy-vault:hover{border-color:darkgrey;color:darkgrey}.premium-addons{margin-top:80px;width:100%;margin:0 auto;display:table}.addon-list{display:table;text-align:center}.premium-addons h1{text-align:center;font-weight:bold}.premium-addons p{text-align:center}.premium-addons .premium-addon-div{width:200px;height:250px;border:2px solid #777;display:inline-table;margin:0 auto;margin-right:25px;margin-top:25px;text-align:center;position:relative}.premium-addons .premium-addon-div p{margin-left:2px;margin-right:2px}.premium-addons .premium-addon-div img{width:auto;height:50px;margin-top:7px}.premium-addons .premium-addon-div .hr-alignment{margin-top:44px}.premium-addons .premium-addon-div .dropbox-logo{height:39px;width:150px}.premium-addons .premium-addon-div .azure-logo,.premium-addons .premium-addon-div .onedrive-logo{width:75%;height:24px}.button-purchase{font-size:12px;color:#df6926;border-color:#df6926;border-width:2px !important;position:absolute;right:25%;bottom:2%}.button-purchase:hover{color:darkgrey;border-color:darkgrey}.premium-addons .premium-addon-div hr{height:2px;background-color:#777;margin-top:18px}.premium-addon-div p{font-style:italic}.addon-list>.premium-addon-div>.onedrive-fix,.addon-list>.premium-addon-div>.azure-logo{margin-top:33px}.addon-list>.premium-addon-div>.dropbox-fix{margin-top:18px}.premium-forgotton-something{margin-top:5%}.premium-forgotton-something h1{text-align:center;font-weight:bold}.premium-forgotton-something p{text-align:center;font-weight:normal}.premium-forgotton-something .button-faq{color:#df6926;border-color:#df6926;margin:0 auto;display:table}.premium-forgotton-something .button-faq:hover{color:#777;border-color:#777}.updraftplusmethod.updraftvault #vaultlogo{padding-left:40px}.updraftplusmethod.updraftvault .vault_primary_option{float:left;width:50%;text-align:center;padding-bottom:20px}.updraftplusmethod.updraftvault .vault_primary_option div{clear:right;padding-top:20px}.updraftplusmethod.updraftvault .clear-left{clear:left}.updraftplusmethod.updraftvault .padding-top-20px{padding-top:20px}.updraftplusmethod.updraftvault .padding-top-14px{padding-top:14px}.updraftplusmethod.updraftvault #updraftvault_settings_default .button-primary,.updraftplusmethod.updraftvault #updraftvault_settings_showoptions .button-primary{font-size:18px !important;padding-bottom:20px}.updraftplusmethod.updraftvault #updraftvault_showoptions,.updraftplusmethod.updraftvault #updraftvault_connect{margin-top:8px}.updraftplusmethod.updraftvault #updraftvault_settings_connect input{margin-right:10px}.updraftplusmethod.updraftvault #updraftvault_email{width:280px}.updraftplusmethod.updraftvault #updraftvault_pass{width:200px}.updraftplusmethod.updraftvault #vault-is-connected{margin:0;padding:0}.updraftplusmethod.updraftvault #updraftvault_settings_default p{clear:left}.updraftplusmethod.updraftvault .vault-purchase-option{float:left;width:33%;text-align:center;padding-top:20px}.updraftplusmethod.updraftvault .vault-purchase-option-size{font-size:200%;font-weight:bold}.updraftplusmethod.updraftvault .vault-purchase-option-link{clear:both;font-size:150%}.updraftplusmethod.updraftvault .vault-purchase-option-or{clear:both;font-size:115%;font-style:italic}.autobackup-image{clear:left;float:left;width:110px;height:110px}.autobackup-description{width:100%}.advert-description{float:left;clear:right;padding:4px 10px 8px 10px;width:70%;clear:right;vertical-align:top}.advert-btn{display:inline-block;min-width:10%;vertical-align:top;margin-bottom:8px}.advert-btn:first-of-type{margin-top:25px}.advert-btn a{display:block;cursor:pointer}a.btn-get-started{background:#FFF;border:2px solid #df6926;border-radius:4px;color:#df6926;display:inline-block;margin-left:10px !important;margin-bottom:7px !important;font-size:18px !important;line-height:20px;min-height:28px;padding:11px 10px 5px 10px;text-transform:uppercase;text-decoration:none}.circle-dblarrow{border:1px solid #df6926;border-radius:100%;display:inline-block;font-size:17px;line-height:17px;margin-left:5px;width:20px;height:20px;text-align:center}.expertmode .advanced_settings_container{height:auto;overflow:hidden}.expertmode .advanced_settings_container .advanced_settings_menu{float:none;border-bottom:1px solid #ccc}.expertmode .advanced_settings_container .advanced_settings_content{padding-top:5px;float:none;width:auto;overflow:auto}.expertmode .advanced_settings_container .advanced_settings_content h3{margin-top:5px !important}.expertmode .advanced_settings_container .advanced_settings_content .advanced_tools{display:none}.expertmode .advanced_settings_container .advanced_settings_content .site_info{display:block}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button{display:inline-block;cursor:pointer;padding:5px;color:#000}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_text{font-size:16px}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button:hover{background-color:#eaeaea}.expertmode .advanced_settings_container .advanced_settings_menu .active{background-color:#3498db;color:#FFF}.expertmode .advanced_settings_container .advanced_settings_menu .active:hover{background-color:#72c5fd;color:#FFF}.expertmode .advanced_settings_container .advanced_settings_content input#import_settings{height:auto !important}div#updraft-wrap a{cursor:pointer !important}#updraftcentral_keys_table{display:none}.create_key_container{border:1px solid;border-radius:4px;padding:0 0 6px 6px;margin-bottom:8px}#updraftcentral_keycreate_mothership{margin-left:24px}@media screen and (min-width:670px){.expertmode .advanced_settings_container .advanced_settings_menu{float:left;width:215px;border-right:1px solid #ccc;border-bottom:0}.expertmode .advanced_settings_container .advanced_settings_content{padding-left:10px;padding-top:0}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button{display:block}}
|
2 |
/*# sourceMappingURL=admin.min.css.map */
|
1 |
+
.max-width-600{max-width:600px}.width-900{width:900px}.width-80{width:80%}.no-decoration{text-decoration:none}.bold{font-weight:bold}.center-align-td{text-align:center}.remove-padding{padding:0 !important}.updraft-text-center{text-align:center}.autobackup{padding:6px;margin:8px 0}ul .disc{list-style:disc inside}.dashicons-log-fix{display:inherit}input{border-radius:4px;line-height:1.42;border:1px solid #CCC;height:27px;padding:2px 6px;color:#555}input[type="text"]{font-size:14px}input[type="number"]{height:31px}select{border-radius:4px}.main-dashboard-buttons{border-width:4px;border-radius:12px;letter-spacing:0;font-size:17px;font-weight:bold;padding-left:.7em;padding-right:2em;padding:.3em 1em;line-height:1.7em;background:transparent;position:relative;border:2px solid;transition:all .2s;vertical-align:baseline;box-sizing:border-box;text-align:center;line-height:1.3em;margin-left:.3em;text-transform:none;line-height:1;text-decoration:none}.button-restore{border-color:#629ec0;color:#629ec0}.dashboard-main-sizing{border-width:4px;width:190px;line-height:1.7em}.button-restore:hover,.button-migrate:hover,.button-backup:hover,.button-view-log:hover,.button-mass-selectors:hover,.button-delete:hover,.button-entity-backup:hover,.udp-button-primary:hover{border-color:#df6926;color:#df6926}.button-migrate{color:#eea920;border-color:#eea920}.button-backup{border-color:#84ca1b;color:#84ca1b}.existing-backups-buttons{font-size:11px;line-height:1.4em;border-width:3px}.existing-backups-restore-buttons{font-size:11px;line-height:1.4em;border-width:3px}.button-delete{color:#e23900;border-color:#e23900;font-size:14px;line-height:1.4em;border-width:2px;margin-right:10px}.button-view-log,.button-mass-selectors{color:darkgrey;border-color:darkgrey;font-size:14px;line-height:1.4em;border-width:2px;margin-top:-1px}.button-view-log{width:120px}.button-existing-restore{font-size:14px;line-height:1.4em;border-width:2px;width:110px}.main-restore{margin-right:3%;margin-left:3%}.button-entity-backup{color:#555;border-color:#555;font-size:11px;line-height:1.4em;border-width:2px;margin-right:5px}.button-select-all{width:122px}.button-deselect{width:92px}#ud_massactions>.display-flex>.mass-selectors-margins{margin-right:-4px}.udp-button-primary{border-width:4px;color:#0073aa;border-color:#0073aa;font-size:14px;height:40px}#ud_massactions .button-delete{margin-right:0}.stored_local{border-radius:5px;background-color:#007fe7;padding:3px 5px 5px 5px;color:#FFF;font-size:75%}.form-table td.updraft_existingbackup_date{padding-bottom:5px}span#updraft_lastlogcontainer{word-break:break-all}.stored_icon{height:1.3em;position:relative;top:.2em}.backup_date_label .clear-right{clear:right}.udp-logo-70{width:70px;height:70px;float:left;padding-right:25px}h3 .thank-you{margin-top:0}.ws_advert{max-width:800px;font-size:140%;line-height:140%;padding:14px;clear:left}.dismiss-dash-notice{float:right;position:relative;top:-20px}#updraft_report_cell .updraft_reportbox{padding:8px;margin:8px 0;border:1px dotted;clear:left;float:left}#updraft_report_cell button.updraft_reportbox_delete{font-size:50%;float:right;padding:0 3px;position:relative;top:-4px;left:4px}#updraft-navtab-settings-content .updraft-test-button{font-size:18px !important}#updraft_report_cell .updraft_report_checkbox{margin-top:4px}#updraft_report_cell .updraft_report_email{width:300px}#updraft_report_cell .updraft_report_another_p{clear:left}#updraft-navtab-settings-content table.form-table p{max-width:700px}#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected{background-color:#CCC}.updraft_settings_sectionheading{display:none}.updraft-backupentitybutton-disabled{background-color:transparent;border:0;color:#0074a2;text-decoration:underline;cursor:pointer;clear:none;float:left}.updraft-backupentitybutton{margin-left:8px}.updraft-bigbutton{padding:2px 0 !important;margin-right:14px !important;font-size:22px !important;min-height:32px;min-width:180px}.updraft_debugrow th{float:right;text-align:right;font-weight:bold;padding-right:8px;min-width:140px}.updraft_debugrow td{min-width:300px;vertical-align:bottom}#updraft_webdav_host_error{color:red}#updraft_zip_files_jstree .jstree-container-ul>.jstree-node,#updraft_more_files_jstree .jstree-container-ul>.jstree-node{background:transparent}#updraft_zip_files_jstree .jstree-container-ul>.jstree-open>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-open>.jstree-ocl{background-position:-36px -4px}#updraft_zip_files_jstree .jstree-container-ul>.jstree-closed>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-closed>.jstree-ocl{background-position:-4px -4px}#updraft_zip_files_jstree .jstree-container-ul>.jstree-leaf>.jstree-ocl,#updraft_more_files_jstree .jstree-container-ul>.jstree-leaf>.jstree-ocl{background:transparent}#updraft_zip_files_container{position:relative;height:450px;overflow:none}#updraft_zip_info_container{position:relative;height:auto;width:100%;border:1px dotted;margin-bottom:5px}#updraft_zip_info_container p{margin:1px;padding-left:10px;font-size:14px}#updraft_zip_download_item{display:none;color:#0073aa;padding-left:10px}#updraft_zip_download_notice{padding-left:10px}#updraft_zip_files_jstree_container{position:relative;border:1px dotted;height:80%;width:100%;overflow:auto}#updraft_more_files_container{position:relative;display:none;height:300px;width:100%;border:1px dotted;margin-bottom:5px}#updraft_jstree_buttons{position:absolute;top:0;right:0}#updraft_jstree_container{height:100%;width:100%;overflow:auto}#updraft_more_files_container button{height:22px;line-height:20px}#updraft_jstree_confirm,#updraft_jstree_cancel{display:none}.updraftplus-morefiles-row-delete{cursor:pointer;color:red;font-size:23px !important}.updraftplus-morefiles-row-edit{cursor:pointer;font-size:24px !important}#updraft-wrap .form-table th{width:230px}.updraftplus-remove{background-color:#c00000;border:1px solid #c00000;height:22px;padding:4px 3px 0 3px;margin-right:6px}.updraft-viewlogdiv form{margin:0;padding:0}.updraft-viewlogdiv{background-color:#FFF;color:#000;border:1px solid #000;height:26px;padding:0;margin:0 4px 0 0;border-radius:3px;float:left}.updraft-viewlogdiv input,.updraft-viewlogdiv a{border:0;background-color:transparent;color:#000;margin:0;padding:3px 4px;font-size:16px;line-height:26px}.updraft-viewlogdiv:hover{background-color:#000;color:#FFF;border:1px solid #FFF;cursor:pointer}.updraft-viewlogdiv input:hover,.updraft-viewlogdiv a:hover{color:#FFF;cursor:pointer}.updraftplus-remove a{color:white;padding:4px 4px 0 4px}.updraftplus-remove:hover{background-color:white;border:1px solid #c00000}.updraftplus-remove a:hover{color:#c00000}.drag-drop #drag-drop-area2{border:4px dashed #DDD;height:200px}#drag-drop-area2 .drag-drop-inside{margin:36px auto 0;width:350px}#filelist,#filelist2{width:100%}#filelist .file,#filelist2 .file,.ud_downloadstatus .file,#ud_downloadstatus2 .file{padding:5px;background:#ececec;border:solid 1px #CCC;margin:4px 0}ul.updraft_premium_description_list{list-style:disc inside}ul.updraft_premium_description_list li{display:inline}ul.updraft_premium_description_list li::after{content:" | "}ul.updraft_premium_description_list li.last::after{content:""}.updraft_feature_cell{background-color:#f7d9c9 !important;padding:5px 10px}.updraft_feat_table,.updraft_feat_th,.updraft_feat_table td{border:1px solid black;border-collapse:collapse;font-size:120%;background-color:white;text-align:center}.updraft_feat_table p{padding:0 10px;margin:5px 0;font-size:16px}.updraft_feat_table h4{margin:5px 0}.updraft_feat_table .dashicons{width:25px;height:25px;font-size:25px;line-height:1}.updraft_feat_table .dashicons-yes,.updraft_feat_table .updraft-yes{color:green}.updraft_feat_table .dashicons-no-alt,.updraft_feat_table .updraft-no{color:red}.updraft_tick_cell{text-align:center}.updraft_tick_cell img{margin:4px 0;height:24px}#filelist .fileprogress,#filelist2 .fileprogress,.ud_downloadstatus .dlfileprogress,#ud_downloadstatus2 .dlfileprogress{width:0;background:#f6a828;height:5px}.ud_downloadstatus .raw,#ud_downloadstatus2 .raw{margin-top:8px;clear:left}.ud_downloadstatus .file,#ud_downloadstatus2 .file{margin-top:8px}tr.updraftplusmethod h3{margin:0}#updraft_retain_db_rules .updraft_retain_rules_delete,#updraft_retain_files_rules .updraft_retain_rules_delete{cursor:pointer;color:red;font-size:120%;font-weight:bold;border:0;border-radius:3px;padding:2px;margin:0 6px}#updraft_retain_db_rules .updraft_retain_rules_delete:hover,#updraft_retain_files_rules .updraft_retain_rules_delete:hover{cursor:pointer;color:white;background:red}#updraft_backup_started{max-width:800px;font-size:140%;line-height:140%;padding:14px;clear:left}.udp-premium-image{display:none}@media screen and (min-width:720px){.udp-premium-image{display:block;float:left;padding-right:5px}}#plupload-upload-ui2{width:80%}.backup-restored{padding:8px}.backup-restored span{font-size:120%}.memory-limit{padding:8px}.updraft_list_errors{padding:8px}.nav-tab-wrapper{margin:14px 0}#updraft-poplog-content{white-space:pre-wrap}.next-backup{border:0;padding:0;margin:0 10px 0 0}.not-scheduled{vertical-align:top !important;margin:0 !important;padding:0 !important}.next-backup .updraft_scheduled{margin:0;padding:2px 4px 2px 0}#next-backup-table-inner td{vertical-align:top}.next-backup .updraft_all-files{color:blue;margin:0;padding:2px 0 0 0}.multisite-advert-width{width:800px}.updraft_settings_sectionheading{margin-top:6px}.premium-upgrade-prompt{font-size:115%}.updraft_feat_table{margin-top:30px}.show_admin_restore_in_progress_notice{padding:8px}.show_admin_restore_in_progress_notice .unfinished-restoration{font-size:120%}#backupnow_includefiles_moreoptions,#backupnow_database_moreoptions{margin:4px 16px 6px 16px;border:1px dotted;padding:6px 10px}#backupnow_database_moreoptions{max-height:250px;overflow:auto}.form-table #updraft_activejobsrow .minimum-height{min-height:100px}#updraft_lastlogmessagerow .last-message{padding-top:20px;display:block}.updraft_simplepie{vertical-align:top}.download-backups{margin-top:8px}.download-backups .updraft_download_button{margin-right:6px;margin-top:4px}.download-backups .choose-components-button{font-size:16px}.download-backups .ud-whitespace-warning{background-color:pink;padding:8px;margin:4px;border:1px dotted}.download-backups .ul{list-style:none inside;max-width:800px;margin-top:6px;margin-bottom:12px}#updraft-plupload-modal{width:75%;margin:16px;margin-left:100px}.download-backups .upload{max-width:610px}.download-backups #plupload-upload-ui{width:70%}.ud_downloadstatus{padding:10px;background:#f1f1f1}#ud_massactions{padding:14px;position:fixed;right:25%;top:25%;border:2px solid;border-radius:4px;background:#f1f1f1;float:right}#ud_massactions .updraftplus-remove{clear:left;font-size:16px;text-align:center;border-radius:4px;margin-top:4px}#ud_massactions .updraftplus-remove a{text-decoration:none}#ud_massactions .updraft-viewlogdiv{font-size:16px;text-align:center;border-radius:4px;margin-top:4px}#ud_massactions .updraft-viewlogdiv a{text-decoration:none;position:relative;top:3px}#ud_massactions .updraft-viewlogdiv a{text-decoration:none;position:relative;top:3px}#updraft-navtab-backups-content .updraft_existing_backups{margin-bottom:12px}#updraft-message-modal-innards{padding:4px}#updraft-authenticate-modal{text-align:center;font-size:16px !important}#updraft-authenticate-modal p{font-size:16px}#updraft_delete_form p{margin-top:3px;padding-top:0}#updraft_restore_form .cannot-restore{margin:8px 0}#updraft_restorer_dboptions{padding:12px;margin:8px 0 4px 0;border:dashed 1px}#updraft_restorer_dboptions h4{margin:0 0 6px 0;padding:0}.updraft_debugrow th{vertical-align:top;padding-top:6px}.expertmode p{font-size:125%}.expertmode .call-wp-action{width:300px;height:22px}.updraftplus-lock-advert{clear:left;max-width:600px}.uncompressed-data{clear:left;max-width:600px}.delete-old-directories{padding:8px;padding-bottom:12px}.active-jobs{min-width:480px;min-height:48px;text-align:center;margin-top:4px;padding:8px;border:1px solid;float:left;clear:left}.job-id{min-width:480px;margin-top:4px;padding:8px;border:1px solid;clear:left;float:left}.next-resumption{font-weight:bold}.updraft_percentage{z-index:-1;position:absolute;left:0;top:0;text-align:center;background-color:#f6a828}.curstage{border-radius:4px;margin-top:8px;padding-top:4px;border:1px solid #AAA;width:100%;height:22px;position:relative;text-align:center;font-style:italic}.retain-files{width:48px}.backup-interval-description tr td div{max-width:670px}#updraft-manualdecrypt-modal{width:85%;margin:6px;margin-left:100px}.directory-permissions{font-size:110%;font-weight:bold}.double-warning{border:1px solid;padding:6px}.raw-backup-info{font-style:italic;font-weight:bold;font-size:120%}.updraft_existingbackup_date{width:22%;max-width:140px}.existing-backups-table{margin-top:20px;margin-left:20px;width:80%}.tr-bottom-4{margin-bottom:4px}.form-table .backup-date{width:172px;padding:0;padding-left:15px}.form-table .backup-data{width:426px;padding:0;padding-left:15px}.form-table .updraft_backup_actions{width:272px;padding:0 0 10px 15px}.existing-date{box-sizing:border-box;max-width:140px;width:25%}.line-break-tr{height:2px;padding:1px;margin:0}.line-break-td{margin:0;padding:0}.td-line-color{height:2px;background-color:#888}.raw-backup{max-width:140px}.existing-backups-actions{padding:1px;margin:0}.existing-backups-border{height:2px;padding:1px;margin:0}.existing-backups-border>td{margin:0;padding:0}.existing-backups-border>div{height:2px;background-color:#AAA}.updraft_existing_backup_date{max-width:140px}.restore-button{margin-right:6px;float:left;clear:none}.updraftplus-remove{font-size:16px;text-align:center;border-radius:4px}.before-restore-button{padding:1px;margin:0}.table-separator-tr{height:2px;padding:1px;margin:0}.table-separator-td{margin:0;padding:0}.end-of-table-div{height:2px;background-color:#AAA}.last-backup-job{padding-top:3% !important}.line-height-03{line-height:.3 !important}.line-height-13{line-height:1.3 !important}.line-height-23{line-height:2.3 !important}#updraft_diskspaceused{color:#df6926}.updraft_premium_description_list{text-align:left}#updraft_delete_old_dirs_pagediv{padding-bottom:10px}.job-id{margin:0 auto;width:20%}.updraft_all-files{color:#df6926}.fix-time{width:70px}.retain-files{width:70px}.number-input{min-width:50px;max-width:70px}.additional-rule-width{min-width:60px;max-width:70px}.dashicons{line-height:inherit;font-size:inherit}.addon-logo-150{margin-left:30px;margin-top:33px;height:125px;width:150px}.margin-bottom-50{margin-bottom:50px}.premium-container{width:80%}.main-header{background-color:#df6926;height:200px;width:100%}.button-add-to-cart{color:white;border-color:white;float:none;margin-right:17px}.button-add-to-cart:hover,.button-add-to-cart:focus,.button-add-to-cart:active{border-color:#a0a5aa;color:#a0a5aa}.addon-title{margin-top:25px}.addon-text{margin-top:75px}.image-main-div{width:25%;float:left}.text-main-div{width:60%;float:left;text-align:center;color:white;margin-top:16px}.text-main-div-title{font-weight:bold !important;color:white;text-align:center}.text-main-div-paragraph{color:white}.updraftplus-vault-cta{width:100%;text-align:center;margin-bottom:50px}.updraftplus-vault-cta h1{font-weight:bold}.updraftvault-buy{width:225px;height:225px;border:2px solid #777;display:inline-table;margin:0 auto;margin-right:50px;position:relative}.updraftplus-vault-cta>.vault-options>.center-vault{width:275px;height:275px}.updraftplus-vault-cta>.vault-options>.center-vault>a{right:21%;font-size:16px;border-width:4px !important}.updraftplus-vault-cta>.vault-options>.center-vault>p{font-size:16px}.updraftvault-buy .button-purchase{right:24%;margin-left:0;line-height:1.7em}.updraftvault-buy hr{height:2px;background-color:#777;margin-top:18px}.right{margin-right:0}.updraftvault-buy .addon-logo-100{height:100px;width:125px;margin-top:7px}.updraftvault-buy .addon-logo-large{margin-top:7px}.updraftvault-buy .button-buy-vault{font-size:12px;color:#df6926;border-color:#df6926;border-width:2px !important;position:absolute;right:29%;bottom:2%}.premium-addon-div .button-purchase{line-height:1.7em}.updraftvault-buy .button-buy-vault:hover{border-color:darkgrey;color:darkgrey}.premium-addons{margin-top:80px;width:100%;margin:0 auto;display:table}.addon-list{display:table;text-align:center}.premium-addons h1{text-align:center;font-weight:bold}.premium-addons p{text-align:center}.premium-addons .premium-addon-div{width:200px;height:250px;border:2px solid #777;display:inline-table;margin:0 auto;margin-right:25px;margin-top:25px;text-align:center;position:relative}.premium-addons .premium-addon-div p{margin-left:2px;margin-right:2px}.premium-addons .premium-addon-div img{width:auto;height:50px;margin-top:7px}.premium-addons .premium-addon-div .hr-alignment{margin-top:44px}.premium-addons .premium-addon-div .dropbox-logo{height:39px;width:150px}.premium-addons .premium-addon-div .azure-logo,.premium-addons .premium-addon-div .onedrive-logo{width:75%;height:24px}.button-purchase{font-size:12px;color:#df6926;border-color:#df6926;border-width:2px !important;position:absolute;right:25%;bottom:2%}.button-purchase:hover{color:darkgrey;border-color:darkgrey}.premium-addons .premium-addon-div hr{height:2px;background-color:#777;margin-top:18px}.premium-addon-div p{font-style:italic}.addon-list>.premium-addon-div>.onedrive-fix,.addon-list>.premium-addon-div>.azure-logo{margin-top:33px}.addon-list>.premium-addon-div>.dropbox-fix{margin-top:18px}.premium-forgotton-something{margin-top:5%}.premium-forgotton-something h1{text-align:center;font-weight:bold}.premium-forgotton-something p{text-align:center;font-weight:normal}.premium-forgotton-something .button-faq{color:#df6926;border-color:#df6926;margin:0 auto;display:table}.premium-forgotton-something .button-faq:hover{color:#777;border-color:#777}.updraftplusmethod.updraftvault #vaultlogo{padding-left:40px}.updraftplusmethod.updraftvault .vault_primary_option{float:left;width:50%;text-align:center;padding-bottom:20px}.updraftplusmethod.updraftvault .vault_primary_option div{clear:right;padding-top:20px}.updraftplusmethod.updraftvault .clear-left{clear:left}.updraftplusmethod.updraftvault .padding-top-20px{padding-top:20px}.updraftplusmethod.updraftvault .padding-top-14px{padding-top:14px}.updraftplusmethod.updraftvault #updraftvault_settings_default .button-primary,.updraftplusmethod.updraftvault #updraftvault_settings_showoptions .button-primary{font-size:18px !important;padding-bottom:20px}.updraftplusmethod.updraftvault #updraftvault_showoptions,.updraftplusmethod.updraftvault #updraftvault_connect{margin-top:8px}.updraftplusmethod.updraftvault #updraftvault_settings_connect input{margin-right:10px}.updraftplusmethod.updraftvault #updraftvault_email{width:280px}.updraftplusmethod.updraftvault #updraftvault_pass{width:200px}.updraftplusmethod.updraftvault #vault-is-connected{margin:0;padding:0}.updraftplusmethod.updraftvault #updraftvault_settings_default p{clear:left}.updraftplusmethod.updraftvault .vault-purchase-option{float:left;width:33%;text-align:center;padding-top:20px}.updraftplusmethod.updraftvault .vault-purchase-option-size{font-size:200%;font-weight:bold}.updraftplusmethod.updraftvault .vault-purchase-option-link{clear:both;font-size:150%}.updraftplusmethod.updraftvault .vault-purchase-option-or{clear:both;font-size:115%;font-style:italic}.autobackup-image{clear:left;float:left;width:110px;height:110px}.autobackup-description{width:100%}.advert-description{float:left;clear:right;padding:4px 10px 8px 10px;width:70%;clear:right;vertical-align:top}.advert-btn{display:inline-block;min-width:10%;vertical-align:top;margin-bottom:8px}.advert-btn:first-of-type{margin-top:25px}.advert-btn a{display:block;cursor:pointer}a.btn-get-started{background:#FFF;border:2px solid #df6926;border-radius:4px;color:#df6926;display:inline-block;margin-left:10px !important;margin-bottom:7px !important;font-size:18px !important;line-height:20px;min-height:28px;padding:11px 10px 5px 10px;text-transform:uppercase;text-decoration:none}.circle-dblarrow{border:1px solid #df6926;border-radius:100%;display:inline-block;font-size:17px;line-height:17px;margin-left:5px;width:20px;height:20px;text-align:center}.expertmode .advanced_settings_container{height:auto;overflow:hidden}.expertmode .advanced_settings_container .advanced_settings_menu{float:none;border-bottom:1px solid #ccc}.expertmode .advanced_settings_container .advanced_settings_content{padding-top:5px;float:none;width:auto;overflow:auto}.expertmode .advanced_settings_container .advanced_settings_content h3{margin-top:5px !important}.expertmode .advanced_settings_container .advanced_settings_content .advanced_tools{display:none}.expertmode .advanced_settings_container .advanced_settings_content .site_info{display:block}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button{display:inline-block;cursor:pointer;padding:5px;color:#000}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_text{font-size:16px}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button:hover{background-color:#eaeaea}.expertmode .advanced_settings_container .advanced_settings_menu .active{background-color:#3498db;color:#FFF}.expertmode .advanced_settings_container .advanced_settings_menu .active:hover{background-color:#72c5fd;color:#FFF}.expertmode .advanced_settings_container .advanced_settings_content input#import_settings{height:auto !important}div#updraft-wrap a{cursor:pointer !important}.updraftcentral_wizard_option{width:45%;float:left;text-align:center}.updraftcentral_wizard_option label{margin-bottom:8px}#updraftcentral_keys_table{display:none}.create_key_container{border:1px solid;border-radius:4px;padding:0 0 6px 6px;margin-bottom:8px}@media screen and (min-width:670px){.expertmode .advanced_settings_container .advanced_settings_menu{float:left;width:215px;border-right:1px solid #ccc;border-bottom:0}.expertmode .advanced_settings_container .advanced_settings_content{padding-left:10px;padding-top:0}.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button{display:block}}
|
2 |
/*# sourceMappingURL=admin.min.css.map */
|
@@ -1 +1 @@
|
|
1 |
-
{"version":3,"sources":["css/admin.css"],"names":[],"mappings":"AAAA,uBAAuB;AACvB;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,WAAW;CACX;;AAED,2BAA2B;;AAE3B,kBAAkB;AAClB;CACC,sBAAsB;CACtB;;AAED;CACC,kBAAkB;CAClB;;AAED,sBAAsB;AACtB,eAAe;AACf;CACC,mBAAmB;CACnB;;AAED,sBAAsB;AACtB,aAAa;AACb;CACC,sBAAsB;CACtB;;AAED,oBAAoB;;AAEpB;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,iBAAiB;CACjB;;AAED,iBAAiB;;AAEjB;CACC,mBAAmB;CACnB,kBAAkB;CAClB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB;;AAED,qBAAqB;;AAErB,kBAAkB;AAClB;CACC,kBAAkB;CAClB,oBAAoB;CACpB,oBAAoB;CACpB,gBAAgB;CAChB,kBAAkB;CAClB,oBAAoB;CACpB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,wBAAwB;CACxB,mBAAmB;CACnB,kBAAkB;CAClB,qBAAqB;CACrB,yBAAyB;CACzB,uBAAuB;CACvB,mBAAmB;CACnB,mBAAmB;CACnB,kBAAkB;CAClB,qBAAqB;CACrB,eAAe;CACf,sBAAsB;CACtB;;AAED;CACC,gCAAgC;CAChC,yBAAyB;CACzB;;AAED;CACC,kBAAkB;CAClB,aAAa;CACb,mBAAmB;CACnB;;AAED;;;CAGC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,yBAAyB;CACzB,gCAAgC;CAChC;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,uBAAuB;CACvB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,aAAa;CACb;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB,0BAA0B;CAC1B,yBAAyB;CACzB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,aAAa;CACb;;AAED,sBAAsB;;AAEtB,4BAA4B;;AAE5B;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,YAAY;CACZ;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,aAAa;CACb,cAAc;CACd,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,eAAe;CACf,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,UAAU;CACV,UAAU;CACV;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED,mCAAmC;;AAEnC;CACC,iBAAiB;CACjB;;AAED;CACC,uBAAuB;CACvB;;AAED;CACC,cAAc;CACd;;AAED;CACC,8BAA8B;CAC9B,aAAa;CACb,eAAe;CACf,2BAA2B;CAC3B,gBAAgB;CAChB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,4BAA4B;CAC5B,8BAA8B;CAC9B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,uBAAuB;CACvB;;AAED;CACC,WAAW;CACX;;AAED,mBAAmB;;AAEnB,oEAAoE;AACpE;;CAEC,wBAAwB;CACxB;;AAED;;CAEC,gCAAgC;CAChC;;AAED;;CAEC,+BAA+B;CAC/B;;AAED;;CAEC,wBAAwB;CACxB;;AAED,+BAA+B;AAC/B;CACC,mBAAmB;CACnB,cAAc;CACd,eAAe;CACf;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb,YAAY;CACZ,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,cAAc;CACd,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ,eAAe;CACf;;AAED,8BAA8B;AAC9B;CACC,mBAAmB;CACnB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,OAAO;CACP,SAAS;CACT;;AAED;CACC,aAAa;CACb,YAAY;CACZ,eAAe;CACf;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,WAAW;CACX,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB,2BAA2B;CAC3B;;AAED;CACC,aAAa;CACb;;AAED;CACC,0BAA0B;CAC1B,0BAA0B;CAC1B,aAAa;CACb,uBAAuB;CACvB,kBAAkB;CAClB;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,uBAAuB;CACvB,YAAY;CACZ,uBAAuB;CACvB,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,YAAY;CACZ;;AAED;CACC,aAAa;CACb,8BAA8B;CAC9B,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,uBAAuB;CACvB,YAAY;CACZ,uBAAuB;CACvB,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb,yBAAyB;CACzB;;AAED;CACC,wBAAwB;CACxB,0BAA0B;CAC1B;;AAED;CACC,eAAe;CACf;;AAED;CACC,wBAAwB;CACxB,cAAc;CACd;;AAED;CACC,oBAAoB;CACpB,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB,uBAAuB;CACvB,cAAc;CACd;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,qCAAqC;CACrC,kBAAkB;CAClB;;AAED;CACC,wBAAwB;CACxB,0BAA0B;CAC1B,gBAAgB;CAChB,wBAAwB;CACxB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,eAAe;CACf;;AAED;CACC,aAAa;CACb;;AAED;CACC,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,aAAa;CACb;;AAED;CACC,UAAU;CACV,oBAAoB;CACpB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,kBAAkB;CAClB,YAAY;CACZ,mBAAmB;CACnB,aAAa;CACb,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;;CAEC;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB;;CAED;;AAED,oCAAoC;AACpC;CACC,WAAW;CACX;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;;AAEH;CACC,iBAAiB;CACjB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,+BAA+B;CAC/B,uBAAuB;CACvB,wBAAwB;CACxB;;AAED;CACC,kBAAkB;CAClB,YAAY;CACZ,yBAAyB;CACzB;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ,yBAAyB;CACzB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,uBAAuB;CACvB,aAAa;CACb,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,wBAAwB;CACxB,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB;CACpB;;AAED;CACC,WAAW;CACX,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX;;AAED;CACC,cAAc;CACd,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,gBAAgB;CAChB,WAAW;CACX,SAAS;CACT,kBAAkB;CAClB,mBAAmB;CACnB,+BAA+B;CAC/B,aAAa;CACb;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,sBAAsB;CACtB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,wBAAwB;CACxB,aAAa;CACb;;AAED;CACC,oBAAoB;CACpB,iBAAiB;CACjB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb,aAAa;CACb;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,qBAAqB;CACrB;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB,mBAAmB;CACnB,gBAAgB;CAChB,aAAa;CACb,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,aAAa;CACb,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,UAAU;CACV,SAAS;CACT,mBAAmB;CACnB,0BAA0B;CAC1B;;AAED;CACC,mBAAmB;CACnB,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,WAAW;CACX,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,WAAW;CACX,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,uBAAuB;CACvB;;AAED;CAGC,uBAAuB;CACvB,iBAAiB;CACjB,WAAW;CACX;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,qBAAqB;CACrB;;AAED;;GAEG;;AAEH;CACC,eAAe;CACf,WAAW;CACX;;AAED;CACC,eAAe;CACf;;AAED,6BAA6B;AAC7B;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,gBAAgB;CAChB;;AAED,aAAa;AACb,oHAAoH;;AAEpH;CACC,qBAAqB;CACrB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,WAAW;CACX;;AAED,iBAAiB;;AAEjB;CACC,0BAA0B;CAC1B,cAAc;CACd,YAAY;CACZ;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX,YAAY;CACZ;;AAED;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,6BAA6B;CAC7B,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED,qBAAqB;;AAErB,iBAAiB;;AAEjB;CACC,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,aAAa;CACb,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,cAAc;CACd;;AAED;CACC,WAAW;CACX,gBAAgB;CAChB,6BAA6B;CAC7B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,WAAW;CACX,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,uBAAuB;CACvB,gBAAgB;CAChB;;AAED,qBAAqB;;AAErB,oBAAoB;;AAEpB;CACC,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,eAAe;CACf;;AAED;CACC,wBAAwB;CACxB,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB,eAAe;CACf,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,aAAa;CACb;;AAED;CACC,WAAW;CACX,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX;;AAED;CACC,gBAAgB;CAChB,uBAAuB;CACvB;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;;CAEC,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB;;AAED,wBAAwB;;;AAGxB,mFAAmF;;AAEnF;CACC,eAAe;CACf;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB,oBAAoB;CACpB;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,eAAe;CACf,eAAe;CACf;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB;;AAED,gCAAgC;;AAEhC;CACC,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,mBAAmB;CACnB,qBAAqB;CACrB;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,2BAA2B;CAC3B,qBAAqB;CACrB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,WAAW;CACX,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB;;AAED,mCAAmC;AACnC;AACA,6BAA6B;AAC7B;iBACiB;AACjB,iBAAiB;CAChB,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,cAAc;CACd;;AAED;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,2BAA2B;CAC3B,WAAW;CACX,aAAa;CACb,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,8BAA8B;CAC9B,2BAA2B;CAC3B,kBAAkB;CAClB,iBAAiB;CACjB,4BAA4B;CAC5B,0BAA0B;CAC1B,sBAAsB;CACtB;;AAED;CACC,0BAA0B;CAC1B,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB;;AAED;AACA;;;;;;;;;IASI;CACH;;AAED,uCAAuC;AACvC,6CAA6C;AAC7C;CACC,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,4CAA4C;CAC5C;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,YAAY;CACZ,eAAe;CACf;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,cAAc;CACd;;AAED;CACC,eAAe;CACf;;AAED;CACC,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,cAAc;CACd;;AAED;CACC,kBAAkB;CAClB,mBAAmB;CACnB,qBAAqB;CACrB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB;;AAED;;CAEC;EACC,YAAY;EACZ,aAAa;EACb,2CAA2C;EAC3C,oBAAoB;EACpB;;CAED;EACC,mBAAmB;EACnB,iBAAiB;EACjB;;CAED;EACC,eAAe;EACf;;CAED","file":"admin.min.css","sourcesContent":["/* Widths and sizing */\r\n.max-width-600 {\r\n\tmax-width: 600px;\r\n}\r\n\r\n.width-900 {\r\n\twidth: 900px;\r\n}\r\n\r\n.width-80 {\r\n\twidth: 80%;\r\n}\r\n\r\n/* End widths and sizing */\r\n\r\n/* Font styling */\r\n.no-decoration {\r\n\ttext-decoration: none;\r\n}\r\n\r\n.bold {\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* End font styling */\r\n/* Alignment */\r\n.center-align-td {\r\n\ttext-align: center;\r\n}\r\n\r\n/* End of Alignment */\r\n/* Padding */\r\n.remove-padding {\r\n\tpadding: 0 !important;\r\n}\r\n\r\n/* End of padding */\r\n\r\n.updraft-text-center {\r\n\ttext-align: center;\r\n}\r\n\r\n.autobackup {\r\n\tpadding: 6px;\r\n\tmargin: 8px 0px;\r\n}\r\n\r\nul .disc {\r\n\tlist-style: disc inside;\r\n}\r\n\r\n.dashicons-log-fix {\r\n\tdisplay: inherit;\r\n}\r\n\r\n/* Input boxes */\r\n\r\ninput {\r\n\tborder-radius: 4px;\r\n\tline-height: 1.42;\r\n\tborder: 1px solid #CCC;\r\n\theight: 27px;\r\n\tpadding: 2px 6px;\r\n\tcolor: #555;\r\n}\r\n\r\ninput[type=\"text\"] {\r\n\tfont-size: 14px;\r\n}\r\n\r\ninput[type=\"number\"] {\r\n\theight: 31px;\r\n}\r\n\r\nselect {\r\n\tborder-radius: 4px;\r\n}\r\n\r\n/* End input boxes */\r\n\r\n/* Main Buttons */\r\n.main-dashboard-buttons {\r\n\tborder-width: 4px;\r\n\tborder-radius: 12px;\r\n\tletter-spacing: 0px;\r\n\tfont-size: 17px;\r\n\tfont-weight: bold;\r\n\tpadding-left: 0.7em;\r\n\tpadding-right: 2em;\r\n\tpadding: 0.3em 1em;\r\n\tline-height: 1.7em;\r\n\tbackground: transparent;\r\n\tposition: relative;\r\n\tborder: 2px solid;\r\n\ttransition: all 0.2s;\r\n\tvertical-align: baseline;\r\n\tbox-sizing: border-box;\r\n\ttext-align: center;\r\n\tline-height: 1.3em;\r\n\tmargin-left: .3em;\r\n\ttext-transform: none;\r\n\tline-height: 1;\r\n\ttext-decoration: none;\r\n}\r\n\r\n.button-restore {\r\n\tborder-color: rgb(98, 158, 192);\r\n\tcolor: rgb(98, 158, 192);\r\n}\r\n\r\n.dashboard-main-sizing {\r\n\tborder-width: 4px;\r\n\twidth: 190px;\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.button-restore:hover, .button-migrate:hover, .button-backup:hover,\r\n.button-view-log:hover, .button-mass-selectors:hover,\r\n.button-delete:hover, .button-entity-backup:hover, .udp-button-primary:hover {\r\n\tborder-color: #DF6926;\r\n\tcolor: #DF6926;\r\n}\r\n\r\n.button-migrate {\r\n\tcolor: rgb(238, 169, 32);\r\n\tborder-color: rgb(238, 169, 32);\r\n}\r\n\r\n.button-backup {\r\n\tborder-color: #84CA1B;\r\n\tcolor: #84CA1B;\r\n}\r\n\r\n.existing-backups-buttons {\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 3px;\r\n}\r\n\r\n.existing-backups-restore-buttons {\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 3px;\r\n}\r\n\r\n.button-delete {\r\n\tcolor: #E23900;\r\n\tborder-color: #E23900;\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.button-view-log, .button-mass-selectors {\r\n\tcolor: darkgrey;\r\n\tborder-color: darkgrey;\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-top: -1px;\r\n}\r\n\r\n.button-view-log {\r\n\twidth: 120px;\r\n}\r\n\r\n.button-existing-restore {\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\twidth: 110px;\r\n}\r\n\r\n.main-restore {\r\n\tmargin-right: 3%;\r\n\tmargin-left: 3%;\r\n}\r\n\r\n.button-entity-backup {\r\n\tcolor: #555;\r\n\tborder-color: #555;\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-right: 5px;\r\n}\r\n\r\n.button-select-all {\r\n\twidth: 122px;\r\n}\r\n\r\n.button-deselect {\r\n\twidth: 92px;\r\n}\r\n\r\n#ud_massactions > .display-flex > .mass-selectors-margins {\r\n\tmargin-right: -4px;\r\n}\r\n\r\n.udp-button-primary {\r\n\tborder-width: 4px;\r\n\tcolor: #0073AA;\r\n\tborder-color: #0073AA;\r\n\tfont-size: 14px;\r\n\theight: 40px;\r\n}\r\n\r\n#ud_massactions .button-delete {\r\n\tmargin-right: 0px;\r\n}\r\n\r\n.stored_local {\r\n\tborder-radius: 5px;\r\n\tbackground-color: #007FE7;\r\n\tpadding: 3px 5px 5px 5px;\r\n\tcolor: #FFF;\r\n\tfont-size: 75%;\r\n}\r\n\r\n.form-table td.updraft_existingbackup_date {\r\n\tpadding-bottom: 5px;\r\n}\r\n\r\nspan#updraft_lastlogcontainer {\r\n\tword-break: break-all;\r\n}\r\n\r\n.stored_icon {\r\n\theight: 1.3em;\r\n\tposition: relative;\r\n\ttop: 0.2em;\r\n}\r\n\r\n.backup_date_label .clear-right {\r\n\tclear: right;\r\n}\r\n\r\n/* End Main Buttons */\r\n\r\n/* End of common elements */\r\n\r\n.udp-logo-70 {\r\n\twidth: 70px;\r\n\theight: 70px;\r\n\tfloat: left;\r\n\tpadding-right: 25px;\r\n}\r\n\r\nh3 .thank-you {\r\n\tmargin-top: 0px;\r\n}\r\n\r\n.ws_advert {\r\n\tmax-width: 800px;\r\n\tfont-size: 140%;\r\n\tline-height: 140%;\r\n\tpadding: 14px;\r\n\tclear: left;\r\n}\r\n\r\n.dismiss-dash-notice {\r\n\tfloat: right;\r\n\tposition: relative;\r\n\ttop: -20px;\r\n}\r\n\r\n#updraft_report_cell .updraft_reportbox {\r\n\tpadding: 8px;\r\n\tmargin: 8px 0;\r\n\tborder: 1px dotted;\r\n\tclear: left;\r\n\tfloat: left;\r\n}\r\n\r\n#updraft_report_cell button.updraft_reportbox_delete {\r\n\tfont-size: 50%;\r\n\tfloat: right;\r\n\tpadding: 0 3px;\r\n\tposition: relative;\r\n\ttop: -4px;\r\n\tleft: 4px;\r\n}\r\n\r\n#updraft-navtab-settings-content .updraft-test-button {\r\n\tfont-size: 18px !important;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_checkbox {\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_email {\r\n\twidth: 300px;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_another_p {\r\n\tclear: left;\r\n}\r\n\r\n/* Taken straight from admin.php */\r\n\r\n#updraft-navtab-settings-content table.form-table p {\r\n\tmax-width: 700px;\r\n}\r\n\r\n#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected {\r\n\tbackground-color: #CCC;\r\n}\r\n\r\n.updraft_settings_sectionheading {\r\n\tdisplay: none;\r\n}\r\n\r\n.updraft-backupentitybutton-disabled {\r\n\tbackground-color: transparent;\r\n\tborder: none;\r\n\tcolor: #0074A2;\r\n\ttext-decoration: underline;\r\n\tcursor: pointer;\r\n\tclear: none;\r\n\tfloat: left;\r\n}\r\n\r\n.updraft-backupentitybutton {\r\n\tmargin-left: 8px;\r\n}\r\n\r\n.updraft-bigbutton {\r\n\tpadding: 2px 0px !important;\r\n\tmargin-right: 14px !important;\r\n\tfont-size: 22px !important;\r\n\tmin-height: 32px;\r\n\tmin-width: 180px;\r\n}\r\n\r\n.updraft_debugrow th {\r\n\tfloat: right;\r\n\ttext-align: right;\r\n\tfont-weight: bold;\r\n\tpadding-right: 8px;\r\n\tmin-width: 140px;\r\n}\r\n\r\n.updraft_debugrow td {\r\n\tmin-width: 300px;\r\n\tvertical-align: bottom;\r\n}\r\n\r\n#updraft_webdav_host_error {\r\n\tcolor: red;\r\n}\r\n\r\n/* jstree styles */\r\n\r\n/* these styles hide the dots from the parent but keep the arrows */\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-node,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-node {\r\n\tbackground: transparent;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-open > .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-open > .jstree-ocl {\r\n\tbackground-position: -36px -4px;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-closed> .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-closed> .jstree-ocl {\r\n\tbackground-position: -4px -4px;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-leaf> .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-leaf> .jstree-ocl {\r\n\tbackground: transparent;\r\n}\r\n\r\n/* zip browser jstree styles */\r\n#updraft_zip_files_container {\r\n\tposition: relative;\r\n\theight: 450px;\r\n\toverflow: none;\r\n}\r\n\r\n#updraft_zip_info_container {\r\n\tposition: relative;\r\n\theight: auto;\r\n\twidth: 100%;\r\n\tborder: 1px dotted;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n#updraft_zip_info_container p {\r\n\tmargin: 1px;\r\n\tpadding-left: 10px;\r\n\tfont-size: 14px;\r\n}\r\n\r\n#updraft_zip_download_item {\r\n\tdisplay: none;\r\n\tcolor: #0073AA;\r\n\tpadding-left: 10px;\r\n}\r\n\r\n#updraft_zip_download_notice {\r\n\tpadding-left: 10px;\r\n}\r\n\r\n#updraft_zip_files_jstree_container {\r\n\tposition: relative;\r\n\tborder: 1px dotted;\r\n\theight: 80%;\r\n\twidth: 100%;\r\n\toverflow: auto;\r\n}\r\n\r\n/* More files jstree styles */\r\n#updraft_more_files_container {\r\n\tposition: relative;\r\n\tdisplay: none;\r\n\theight: 300px;\r\n\twidth: 100%;\r\n\tborder: 1px dotted;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n#updraft_jstree_buttons {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n}\r\n\r\n#updraft_jstree_container {\r\n\theight: 100%;\r\n\twidth: 100%;\r\n\toverflow: auto;\r\n}\r\n\r\n#updraft_more_files_container button {\r\n\theight: 22px;\r\n\tline-height: 20px;\r\n}\r\n\r\n#updraft_jstree_confirm, #updraft_jstree_cancel {\r\n\tdisplay: none;\r\n}\r\n\r\n.updraftplus-morefiles-row-delete {\r\n\tcursor: pointer;\r\n\tcolor: red;\r\n\tfont-size: 23px !important;\r\n}\r\n\r\n.updraftplus-morefiles-row-edit {\r\n\tcursor: pointer;\r\n\tfont-size: 24px !important;\r\n}\r\n\r\n#updraft-wrap .form-table th {\r\n\twidth: 230px;\r\n}\r\n\r\n.updraftplus-remove {\r\n\tbackground-color: #C00000;\r\n\tborder: 1px solid #C00000;\r\n\theight: 22px;\r\n\tpadding: 4px 3px 0 3px;\r\n\tmargin-right: 6px;\r\n}\r\n\r\n.updraft-viewlogdiv form {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.updraft-viewlogdiv {\r\n\tbackground-color: #FFF;\r\n\tcolor: #000;\r\n\tborder: 1px solid #000;\r\n\theight: 26px;\r\n\tpadding: 0px;\r\n\tmargin: 0 4px 0 0;\r\n\tborder-radius: 3px;\r\n\tfloat: left;\r\n}\r\n\r\n.updraft-viewlogdiv input, .updraft-viewlogdiv a {\r\n\tborder: none;\r\n\tbackground-color: transparent;\r\n\tcolor: #000;\r\n\tmargin: 0px;\r\n\tpadding: 3px 4px;\r\n\tfont-size: 16px;\r\n\tline-height: 26px;\r\n}\r\n\r\n.updraft-viewlogdiv:hover {\r\n\tbackground-color: #000;\r\n\tcolor: #FFF;\r\n\tborder: 1px solid #FFF;\r\n\tcursor: pointer;\r\n}\r\n\r\n.updraft-viewlogdiv input:hover, .updraft-viewlogdiv a:hover {\r\n\tcolor: #FFF;\r\n\tcursor: pointer;\r\n}\r\n\r\n.updraftplus-remove a {\r\n\tcolor: white;\r\n\tpadding: 4px 4px 0px 4px;\r\n}\r\n\r\n.updraftplus-remove:hover {\r\n\tbackground-color: white;\r\n\tborder: 1px solid #C00000;\r\n}\r\n\r\n.updraftplus-remove a:hover {\r\n\tcolor: #C00000;\r\n}\r\n\r\n.drag-drop #drag-drop-area2 {\r\n\tborder: 4px dashed #DDD;\r\n\theight: 200px;\r\n}\r\n\r\n#drag-drop-area2 .drag-drop-inside {\r\n\tmargin: 36px auto 0;\r\n\twidth: 350px;\r\n}\r\n\r\n#filelist, #filelist2 {\r\n\twidth: 100%;\r\n}\r\n\r\n#filelist .file, #filelist2 .file, .ud_downloadstatus .file, #ud_downloadstatus2 .file {\r\n\tpadding: 5px;\r\n\tbackground: #ECECEC;\r\n\tborder: solid 1px #CCC;\r\n\tmargin: 4px 0;\r\n}\r\n\r\nul.updraft_premium_description_list {\r\n\tlist-style: disc inside;\r\n}\r\n\r\nul.updraft_premium_description_list li {\r\n\tdisplay: inline;\r\n}\r\n\r\nul.updraft_premium_description_list li::after {\r\n\tcontent: \" | \";\r\n}\r\n\r\nul.updraft_premium_description_list li.last::after {\r\n\tcontent: \"\";\r\n}\r\n\r\n.updraft_feature_cell {\r\n\tbackground-color: #F7D9C9 !important;\r\n\tpadding: 5px 10px;\r\n}\r\n\r\n.updraft_feat_table, .updraft_feat_th, .updraft_feat_table td {\r\n\tborder: 1px solid black;\r\n\tborder-collapse: collapse;\r\n\tfont-size: 120%;\r\n\tbackground-color: white;\r\n\ttext-align: center;\r\n}\r\n\r\n.updraft_feat_table p {\r\n\tpadding: 0px 10px;\r\n\tmargin: 5px 0px;\r\n\tfont-size: 16px;\r\n}\r\n\r\n.updraft_feat_table h4 {\r\n\tmargin: 5px 0px;\r\n}\r\n\r\n.updraft_feat_table .dashicons {\r\n\twidth: 25px;\r\n\theight: 25px;\r\n\tfont-size: 25px;\r\n\tline-height: 1;\r\n}\r\n\r\n.updraft_feat_table .dashicons-yes, .updraft_feat_table .updraft-yes {\r\n\tcolor: green;\r\n}\r\n\r\n.updraft_feat_table .dashicons-no-alt, .updraft_feat_table .updraft-no {\r\n\tcolor: red;\r\n}\r\n\r\n.updraft_tick_cell {\r\n\ttext-align: center;\r\n}\r\n\r\n.updraft_tick_cell img {\r\n\tmargin: 4px 0;\r\n\theight: 24px;\r\n}\r\n\r\n#filelist .fileprogress, #filelist2 .fileprogress, .ud_downloadstatus .dlfileprogress, #ud_downloadstatus2 .dlfileprogress {\r\n\twidth: 0%;\r\n\tbackground: #F6A828;\r\n\theight: 5px;\r\n}\r\n\r\n.ud_downloadstatus .raw, #ud_downloadstatus2 .raw {\r\n\tmargin-top: 8px;\r\n\tclear: left;\r\n}\r\n\r\n.ud_downloadstatus .file, #ud_downloadstatus2 .file {\r\n\tmargin-top: 8px;\r\n}\r\n\r\ntr.updraftplusmethod h3 {\r\n\tmargin: 0px;\r\n}\r\n\r\n#updraft_retain_db_rules .updraft_retain_rules_delete, #updraft_retain_files_rules .updraft_retain_rules_delete {\r\n\tcursor: pointer;\r\n\tcolor: red;\r\n\tfont-size: 120%;\r\n\tfont-weight: bold;\r\n\tborder: 0px;\r\n\tborder-radius: 3px;\r\n\tpadding: 2px;\r\n\tmargin: 0 6px;\r\n}\r\n\r\n#updraft_retain_db_rules .updraft_retain_rules_delete:hover, #updraft_retain_files_rules .updraft_retain_rules_delete:hover {\r\n\tcursor: pointer;\r\n\tcolor: white;\r\n\tbackground: red;\r\n}\r\n\r\n#updraft_backup_started {\r\n\tmax-width: 800px;\r\n\tfont-size: 140%;\r\n\tline-height: 140%;\r\n\tpadding: 14px;\r\n\tclear: left;\r\n}\r\n\r\n.udp-premium-image {\r\n\tdisplay: none;\r\n}\r\n\r\n@media screen and (min-width: 720px) {\r\n\r\n\t.udp-premium-image {\r\n\t\tdisplay: block;\r\n\t\tfloat: left;\r\n\t\tpadding-right: 5px;\r\n\t}\r\n\r\n}\r\n\r\n/* End stuff already in admin.php */\r\n#plupload-upload-ui2 {\r\n\twidth: 80%;\r\n}\r\n\r\n.backup-restored {\r\n\tpadding: 8px;\r\n}\r\n\r\n.backup-restored span {\r\n\tfont-size: 120%;\r\n}\r\n\r\n.memory-limit {\r\n\tpadding: 8px;\r\n}\r\n\r\n.updraft_list_errors {\r\n\tpadding: 8px;\r\n}\r\n\r\n/*.nav-tab {\r\n\tborder-radius: 20px 20px 0 0;\r\n\tborder-color: grey;\r\n\tborder-width: 2px;\r\n\tmargin-top: 34px;\r\n}\r\n\r\n.nav-tab:hover {\r\n\tborder-bottom: 0;\r\n}\r\n\r\n.nav-tab-active, .nav-tab-active:active {\r\n\tcolor: #df6926;\r\n\tborder-color: #D3D3D3;\r\n\tborder-width: 1px;\r\n\tborder-bottom: 0;\r\n}\r\n\r\n.nav-tab-active:focus {\r\n\tcolor: #df6926;\r\n}*/\r\n\r\n.nav-tab-wrapper {\r\n\tmargin: 14px 0px;\r\n}\r\n\r\n#updraft-poplog-content {\r\n\twhite-space: pre-wrap;\r\n}\r\n\r\n.next-backup {\r\n\tborder: 0px;\r\n\tpadding: 0px;\r\n\tmargin: 0 10px 0 0;\r\n}\r\n\r\n.not-scheduled {\r\n\tvertical-align: top !important;\r\n\tmargin: 0px !important;\r\n\tpadding: 0px !important;\r\n}\r\n\r\n.next-backup .updraft_scheduled {\r\n\t/* width: 124px;*/\r\n\tmargin: 0px;\r\n\tpadding: 2px 4px 2px 0px;\r\n}\r\n\r\n#next-backup-table-inner td {\r\n\tvertical-align: top;\r\n}\r\n\r\n.next-backup .updraft_all-files {\r\n\tcolor: blue;\r\n\tmargin: 0px;\r\n\tpadding: 2px 0px 0px 0px;\r\n}\r\n\r\n.multisite-advert-width {\r\n\twidth: 800px;\r\n}\r\n\r\n.updraft_settings_sectionheading {\r\n\tmargin-top: 6px;\r\n}\r\n\r\n.premium-upgrade-prompt {\r\n\tfont-size: 115%;\r\n}\r\n\r\n.updraft_feat_table {\r\n\tmargin-top: 30px;\r\n}\r\n\r\n.show_admin_restore_in_progress_notice {\r\n\tpadding: 8px;\r\n}\r\n\r\n.show_admin_restore_in_progress_notice .unfinished-restoration {\r\n\tfont-size: 120%;\r\n}\r\n\r\n#backupnow_includefiles_moreoptions, #backupnow_database_moreoptions {\r\n\tmargin: 4px 16px 6px 16px;\r\n\tborder: 1px dotted;\r\n\tpadding: 6px 10px;\r\n}\r\n\r\n#backupnow_database_moreoptions {\r\n\tmax-height: 250px;\r\n\toverflow: auto;\r\n}\r\n\r\n.form-table #updraft_activejobsrow .minimum-height {\r\n\tmin-height: 100px;\r\n}\r\n\r\n#updraft_lastlogmessagerow .last-message {\r\n\tpadding-top: 20px;\r\n\tdisplay: block;\r\n}\r\n\r\n.updraft_simplepie {\r\n\tvertical-align: top;\r\n}\r\n\r\n.download-backups {\r\n\tmargin-top: 8px;\r\n}\r\n\r\n.download-backups .updraft_download_button {\r\n\tmargin-right: 6px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n.download-backups .choose-components-button {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.download-backups .ud-whitespace-warning {\r\n\tbackground-color: pink;\r\n\tpadding: 8px;\r\n\tmargin: 4px;\r\n\tborder: 1px dotted;\r\n}\r\n\r\n.download-backups .ul {\r\n\tlist-style: none inside;\r\n\tmax-width: 800px;\r\n\tmargin-top: 6px;\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n#updraft-plupload-modal {\r\n\twidth: 75%;\r\n\tmargin: 16px;\r\n\tmargin-left: 100px;\r\n}\r\n\r\n.download-backups .upload {\r\n\tmax-width: 610px;\r\n}\r\n\r\n.download-backups #plupload-upload-ui {\r\n\twidth: 70%;\r\n}\r\n\r\n.ud_downloadstatus {\r\n\tpadding: 10px;\r\n\tbackground: #F1F1F1;\r\n}\r\n\r\n#ud_massactions {\r\n\tpadding: 14px;\r\n\tposition: fixed;\r\n\tright: 25%;\r\n\ttop: 25%;\r\n\tborder: 2px solid;\r\n\tborder-radius: 4px;\r\n\tbackground: rgb(241, 241, 241);\r\n\tfloat: right;\r\n}\r\n\r\n#ud_massactions .updraftplus-remove {\r\n\tclear: left;\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#ud_massactions .updraftplus-remove a {\r\n\ttext-decoration: none;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv {\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv a {\r\n\ttext-decoration: none;\r\n\tposition: relative;\r\n\ttop: 3px;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv a {\r\n\ttext-decoration: none;\r\n\tposition: relative;\r\n\ttop: 3px;\r\n}\r\n\r\n#updraft-navtab-backups-content .updraft_existing_backups {\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n#updraft-message-modal-innards {\r\n\tpadding: 4px;\r\n}\r\n\r\n#updraft-authenticate-modal {\r\n\ttext-align: center;\r\n\tfont-size: 16px !important;\r\n}\r\n\r\n#updraft-authenticate-modal p {\r\n\tfont-size: 16px;\r\n}\r\n\r\n#updraft_delete_form p {\r\n\tmargin-top: 3px;\r\n\tpadding-top: 0;\r\n}\r\n\r\n#updraft_restore_form .cannot-restore {\r\n\tmargin: 8px 0;\r\n}\r\n\r\n#updraft_restorer_dboptions {\r\n\tpadding: 12px;\r\n\tmargin: 8px 0 4px 0;\r\n\tborder: dashed 1px;\r\n}\r\n\r\n#updraft_restorer_dboptions h4 {\r\n\tmargin: 0px 0px 6px 0px;\r\n\tpadding: 0px;\r\n}\r\n\r\n.updraft_debugrow th {\r\n\tvertical-align: top;\r\n\tpadding-top: 6px;\r\n}\r\n\r\n.expertmode p {\r\n\tfont-size: 125%;\r\n}\r\n\r\n.expertmode .call-wp-action {\r\n\twidth: 300px;\r\n\theight: 22px;\r\n}\r\n\r\n.updraftplus-lock-advert {\r\n\tclear: left;\r\n\tmax-width: 600px;\r\n}\r\n\r\n.uncompressed-data {\r\n\tclear: left;\r\n\tmax-width: 600px;\r\n}\r\n\r\n.delete-old-directories {\r\n\tpadding: 8px;\r\n\tpadding-bottom: 12px;\r\n}\r\n\r\n.active-jobs {\r\n\tmin-width: 480px;\r\n\tmin-height: 48px;\r\n\ttext-align: center;\r\n\tmargin-top: 4px;\r\n\tpadding: 8px;\r\n\tborder: 1px solid;\r\n\tfloat: left;\r\n\tclear: left;\r\n}\r\n\r\n.job-id {\r\n\tmin-width: 480px;\r\n\tmargin-top: 4px;\r\n\tpadding: 8px;\r\n\tborder: 1px solid;\r\n\tclear: left;\r\n\tfloat: left;\r\n}\r\n\r\n.next-resumption {\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraft_percentage {\r\n\tz-index: -1;\r\n\tposition: absolute;\r\n\tleft: 0px;\r\n\ttop: 0px;\r\n\ttext-align: center;\r\n\tbackground-color: #F6A828;\r\n}\r\n\r\n.curstage {\r\n\tborder-radius: 4px;\r\n\tmargin-top: 8px;\r\n\tpadding-top: 4px;\r\n\tborder: 1px solid #AAA;\r\n\twidth: 100%;\r\n\theight: 22px;\r\n\tposition: relative;\r\n\ttext-align: center;\r\n\tfont-style: italic;\r\n}\r\n\r\n.retain-files {\r\n\twidth: 48px;\r\n}\r\n\r\n.backup-interval-description tr td div {\r\n\tmax-width: 670px;\r\n}\r\n\r\n#updraft-manualdecrypt-modal {\r\n\twidth: 85%;\r\n\tmargin: 6px;\r\n\tmargin-left: 100px;\r\n}\r\n\r\n.directory-permissions {\r\n\tfont-size: 110%;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.double-warning {\r\n\tborder: 1px solid;\r\n\tpadding: 6px;\r\n}\r\n\r\n.raw-backup-info {\r\n\tfont-style: italic;\r\n\tfont-weight: bold;\r\n\tfont-size: 120%;\r\n}\r\n\r\n.updraft_existingbackup_date {\r\n\twidth: 22%;\r\n\tmax-width: 140px;\r\n}\r\n\r\n.existing-backups-table {\r\n\tmargin-top: 20px;\r\n\tmargin-left: 20px;\r\n\twidth: 80%;\r\n}\r\n\r\n.tr-bottom-4 {\r\n\tmargin-bottom: 4px;\r\n}\r\n\r\n.form-table .backup-date {\r\n\twidth: 172px;\r\n\tpadding: 0;\r\n\tpadding-left: 15px;\r\n}\r\n\r\n.form-table .backup-data {\r\n\twidth: 426px;\r\n\tpadding: 0;\r\n\tpadding-left: 15px;\r\n}\r\n\r\n.form-table .updraft_backup_actions {\r\n\twidth: 272px;\r\n\tpadding: 0 0 10px 15px;\r\n}\r\n\r\n.existing-date {\r\n\t-webkit-box-sizing: border-box;\r\n\t-moz-box-sizing: border-box;\r\n\tbox-sizing: border-box;\r\n\tmax-width: 140px;\r\n\twidth: 25%;\r\n}\r\n\r\n.line-break-tr {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.line-break-td {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.td-line-color {\r\n\theight: 2px;\r\n\tbackground-color: #888;\r\n}\r\n\r\n.raw-backup {\r\n\tmax-width: 140px;\r\n}\r\n\r\n.existing-backups-actions {\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.existing-backups-border {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.existing-backups-border > td {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.existing-backups-border > div {\r\n\theight: 2px;\r\n\tbackground-color: #AAA;\r\n}\r\n\r\n.updraft_existing_backup_date {\r\n\tmax-width: 140px;\r\n}\r\n\r\n.restore-button {\r\n\tmargin-right: 6px;\r\n\tfloat: left;\r\n\tclear: none;\r\n}\r\n\r\n.updraftplus-remove {\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n}\r\n\r\n.before-restore-button {\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.table-separator-tr {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.table-separator-td {\r\n\tmargin: 0px;\r\n\tpadding: 0px;\r\n}\r\n\r\n.end-of-table-div {\r\n\theight: 2px;\r\n\tbackground-color: #AAA;\r\n}\r\n\r\n.last-backup-job {\r\n\tpadding-top: 3% !important;\r\n}\r\n\r\n.line-height-03 {\r\n\tline-height: 0.3 !important;\r\n}\r\n\r\n.line-height-13 {\r\n\tline-height: 1.3 !important;\r\n}\r\n\r\n.line-height-23 {\r\n\tline-height: 2.3 !important;\r\n}\r\n\r\n#updraft_diskspaceused {\r\n\tcolor: #DF6926;\r\n}\r\n\r\n.updraft_premium_description_list {\r\n\ttext-align: left;\r\n}\r\n\r\n#updraft_delete_old_dirs_pagediv {\r\n\tpadding-bottom: 10px;\r\n}\r\n\r\n/*#updraft_lastlogmessagerow > td, #updraft_last_backup > td {\r\n\tpadding: 0;\r\n}*/\r\n\r\n.job-id {\r\n\tmargin: 0 auto;\r\n\twidth: 20%;\r\n}\r\n\r\n.updraft_all-files {\r\n\tcolor: #DF6926;\r\n}\r\n\r\n/* Time + scheduling add-on*/\r\n.fix-time {\r\n\twidth: 70px;\r\n}\r\n\r\n.retain-files {\r\n\twidth: 70px;\r\n}\r\n\r\n.number-input {\r\n\tmin-width: 50px;\r\n\tmax-width: 70px;\r\n}\r\n\r\n.additional-rule-width {\r\n\tmin-width: 60px;\r\n\tmax-width: 70px;\r\n}\r\n\r\n/* Add-ons */\r\n/* Want to fix the WordPress icons so that they fit inline with the text, and don't push everything out of place. */\r\n\r\n.dashicons {\r\n\tline-height: inherit;\r\n\tfont-size: inherit;\r\n}\r\n\r\n.addon-logo-150 {\r\n\tmargin-left: 30px;\r\n\tmargin-top: 33px;\r\n\theight: 125px;\r\n\twidth: 150px;\r\n}\r\n\r\n.margin-bottom-50 {\r\n\tmargin-bottom: 50px;\r\n}\r\n\r\n.premium-container {\r\n\twidth: 80%;\r\n}\r\n\r\n/* Main Header */\r\n\r\n.main-header {\r\n\tbackground-color: #DF6926;\r\n\theight: 200px;\r\n\twidth: 100%;\r\n}\r\n\r\n.button-add-to-cart {\r\n\tcolor: white;\r\n\tborder-color: white;\r\n\tfloat: none;\r\n\tmargin-right: 17px;\r\n}\r\n\r\n.button-add-to-cart:hover, .button-add-to-cart:focus, .button-add-to-cart:active {\r\n\tborder-color: #A0A5AA;\r\n\tcolor: #A0A5AA;\r\n}\r\n\r\n.addon-title {\r\n\tmargin-top: 25px;\r\n}\r\n\r\n.addon-text {\r\n\tmargin-top: 75px;\r\n}\r\n\r\n.image-main-div {\r\n\twidth: 25%;\r\n\tfloat: left;\r\n}\r\n\r\n.text-main-div {\r\n\twidth: 60%;\r\n\tfloat: left;\r\n\ttext-align: center;\r\n\tcolor: white;\r\n\tmargin-top: 16px;\r\n}\r\n\r\n.text-main-div-title {\r\n\tfont-weight: bold !important;\r\n\tcolor: white;\r\n\ttext-align: center;\r\n}\r\n\r\n.text-main-div-paragraph {\r\n\tcolor: white;\r\n}\r\n\r\n/* End main header */\r\n\r\n/* Vault icons */\r\n\r\n.updraftplus-vault-cta {\r\n\twidth: 100%;\r\n\ttext-align: center;\r\n\tmargin-bottom: 50px;\r\n}\r\n\r\n.updraftplus-vault-cta h1 {\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraftvault-buy {\r\n\twidth: 225px;\r\n\theight: 225px;\r\n\tborder: 2px solid #777;\r\n\tdisplay: inline-table;\r\n\tmargin: 0 auto;\r\n\tmargin-right: 50px;\r\n\tposition: relative;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault {\r\n\twidth: 275px;\r\n\theight: 275px;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault > a {\r\n\tright: 21%;\r\n\tfont-size: 16px;\r\n\tborder-width: 4px !important;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault > p {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.updraftvault-buy .button-purchase {\r\n\tright: 24%;\r\n\tmargin-left: 0;\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.updraftvault-buy hr {\r\n\theight: 2px;\r\n\tbackground-color: #777;\r\n\tmargin-top: 18px;\r\n}\r\n\r\n.right {\r\n\tmargin-right: 0px;\r\n}\r\n\r\n.updraftvault-buy .addon-logo-100 {\r\n\theight: 100px;\r\n\twidth: 125px;\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.updraftvault-buy .addon-logo-large {\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.updraftvault-buy .button-buy-vault {\r\n\tfont-size: 12px;\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tborder-width: 2px !important;\r\n\tposition: absolute;\r\n\tright: 29%;\r\n\tbottom: 2%;\r\n}\r\n\r\n.premium-addon-div .button-purchase {\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.updraftvault-buy .button-buy-vault:hover {\r\n\tborder-color: darkgrey;\r\n\tcolor: darkgrey;\r\n}\r\n\r\n/* End Vault icons */\r\n\r\n/* Premium addons */\r\n\r\n.premium-addons {\r\n\tmargin-top: 80px;\r\n\twidth: 100%;\r\n\tmargin: 0 auto;\r\n\tdisplay: table;\r\n}\r\n\r\n.addon-list {\r\n\t/* margin-left: 32px; */\r\n\tdisplay: table;\r\n\ttext-align: center;\r\n}\r\n\r\n.premium-addons h1 {\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.premium-addons p {\r\n\ttext-align: center;\r\n}\r\n\r\n.premium-addons .premium-addon-div {\r\n\twidth: 200px;\r\n\theight: 250px;\r\n\tborder: 2px solid #777;\r\n\tdisplay: inline-table;\r\n\tmargin: 0 auto;\r\n\tmargin-right: 25px;\r\n\tmargin-top: 25px;\r\n\ttext-align: center;\r\n\tposition: relative;\r\n}\r\n\r\n.premium-addons .premium-addon-div p {\r\n\tmargin-left: 2px;\r\n\tmargin-right: 2px;\r\n}\r\n\r\n.premium-addons .premium-addon-div img {\r\n\twidth: auto;\r\n\theight: 50px;\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .hr-alignment {\r\n\tmargin-top: 44px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .dropbox-logo {\r\n\theight: 39px;\r\n\twidth: 150px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .azure-logo, .premium-addons .premium-addon-div .onedrive-logo {\r\n\twidth: 75%;\r\n\theight: 24px;\r\n}\r\n\r\n.button-purchase {\r\n\tfont-size: 12px;\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tborder-width: 2px !important;\r\n\tposition: absolute;\r\n\tright: 25%;\r\n\tbottom: 2%;\r\n}\r\n\r\n.button-purchase:hover {\r\n\tcolor: darkgrey;\r\n\tborder-color: darkgrey;\r\n}\r\n\r\n.premium-addons .premium-addon-div hr {\r\n\theight: 2px;\r\n\tbackground-color: #777;\r\n\tmargin-top: 18px;\r\n}\r\n\r\n.premium-addon-div p {\r\n\tfont-style: italic;\r\n}\r\n\r\n.addon-list > .premium-addon-div > .onedrive-fix,\r\n.addon-list > .premium-addon-div > .azure-logo {\r\n\tmargin-top: 33px;\r\n}\r\n\r\n.addon-list > .premium-addon-div > .dropbox-fix {\r\n\tmargin-top: 18px;\r\n}\r\n\r\n/* End premium addons */\r\n\r\n\r\n/* Forgotton something (that is the name of the div rather than a mental note!) */\r\n\r\n.premium-forgotton-something {\r\n\tmargin-top: 5%;\r\n}\r\n\r\n.premium-forgotton-something h1 {\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.premium-forgotton-something p {\r\n\ttext-align: center;\r\n\tfont-weight: normal;\r\n}\r\n\r\n.premium-forgotton-something .button-faq {\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tmargin: 0 auto;\r\n\tdisplay: table;\r\n}\r\n\r\n.premium-forgotton-something .button-faq:hover {\r\n\tcolor: #777;\r\n\tborder-color: #777;\r\n}\r\n\r\n/* End of forgotton something */\r\n\r\n.updraftplusmethod.updraftvault #vaultlogo {\r\n\tpadding-left: 40px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault_primary_option {\r\n\tfloat: left;\r\n\twidth: 50%;\r\n\ttext-align: center;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault_primary_option div {\r\n\tclear: right;\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .clear-left {\r\n\tclear: left;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .padding-top-20px {\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .padding-top-14px {\r\n\tpadding-top: 14px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_default .button-primary, .updraftplusmethod.updraftvault #updraftvault_settings_showoptions .button-primary {\r\n\tfont-size: 18px !important;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_showoptions, .updraftplusmethod.updraftvault #updraftvault_connect {\r\n\tmargin-top: 8px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_connect input {\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_email {\r\n\twidth: 280px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_pass {\r\n\twidth: 200px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #vault-is-connected {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_default p {\r\n\tclear: left;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option {\r\n\tfloat: left;\r\n\twidth: 33%;\r\n\ttext-align: center;\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-size {\r\n\tfont-size: 200%;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-link {\r\n\tclear: both;\r\n\tfont-size: 150%;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-or {\r\n\tclear: both;\r\n\tfont-size: 115%;\r\n\tfont-style: italic;\r\n}\r\n\r\n/* Automation Backup Advert by B */\r\n.autobackup-image {\r\n/* \tdisplay: inline-block; */\r\n/*\tmin-width: 10%;\r\n\tmax-width:25%;*/\r\n/*\tfloat: left;*/\r\n\tclear: left;\r\n\tfloat: left;\r\n\twidth: 110px;\r\n\theight: 110px;\r\n}\r\n\r\n.autobackup-description {\r\n\twidth: 100%;\r\n}\r\n\r\n.advert-description {\r\n\tfloat: left;\r\n\tclear: right;\r\n\tpadding: 4px 10px 8px 10px;\r\n\twidth: 70%;\r\n\tclear: right;\r\n\tvertical-align: top;\r\n}\r\n\r\n.advert-btn {\r\n\tdisplay: inline-block;\r\n\tmin-width: 10%;\r\n\tvertical-align: top;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.advert-btn:first-of-type {\r\n\tmargin-top: 25px;\r\n}\r\n\r\n.advert-btn a {\r\n\tdisplay: block;\r\n\tcursor: pointer;\r\n}\r\n\r\na.btn-get-started {\r\n\tbackground: #FFF;\r\n\tborder: 2px solid #DF6926;\r\n\tborder-radius: 4px;\r\n\tcolor: #DF6926;\r\n\tdisplay: inline-block;\r\n\tmargin-left: 10px !important;\r\n\tmargin-bottom: 7px !important;\r\n\tfont-size: 18px !important;\r\n\tline-height: 20px;\r\n\tmin-height: 28px;\r\n\tpadding: 11px 10px 5px 10px;\r\n\ttext-transform: uppercase;\r\n\ttext-decoration: none;\r\n}\r\n\r\n.circle-dblarrow {\r\n\tborder: 1px solid #DF6926;\r\n\tborder-radius: 100%;\r\n\tdisplay: inline-block;\r\n\tfont-size: 17px;\r\n\tline-height: 17px;\r\n\tmargin-left: 5px;\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\ttext-align: center;\r\n}\r\n\r\n@media screen and (max-width: 782px) {\r\n/*\t.advert-description {\r\n\t\tmin-width: 75%;\r\n\t\tmargin-bottom: 5px;\r\n\t}\r\n\r\n\t.advert-btn {\r\n\t\tmargin-top: 15px;\r\n\t\tmargin-left:86px;\r\n\t\tmin-width: 100%;\r\n\t}*/\r\n}\r\n\r\n/* End Automation Backup Advert by B */\r\n/* New Responsive Pretty Advanced Settings */\r\n.expertmode .advanced_settings_container {\r\n\theight: auto;\r\n\toverflow: hidden;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu {\r\n\tfloat: none;\r\n\tborder-bottom: 1px solid rgb(204, 204, 204);\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content {\r\n\tpadding-top: 5px;\r\n\tfloat: none;\r\n\twidth: auto;\r\n\toverflow: auto;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content h3 {\r\n\tmargin-top: 5px !important;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content .advanced_tools {\r\n\tdisplay: none;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content .site_info {\r\n\tdisplay: block;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button {\r\n\tdisplay: inline-block;\r\n\tcursor: pointer;\r\n\tpadding: 5px;\r\n\tcolor: #000;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_text {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button:hover {\r\n\tbackground-color: #EAEAEA;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .active {\r\n\tbackground-color: #3498DB;\r\n\tcolor: #FFF;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .active:hover {\r\n\tbackground-color: #72C5FD;\r\n\tcolor: #FFF;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content input#import_settings {\r\n\theight: auto !important;\r\n}\r\n\r\ndiv#updraft-wrap a {\r\n\tcursor: pointer !important;\r\n}\r\n\r\n#updraftcentral_keys_table {\r\n\tdisplay: none;\r\n}\r\n\r\n.create_key_container {\r\n\tborder: 1px solid;\r\n\tborder-radius: 4px;\r\n\tpadding: 0 0 6px 6px;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n#updraftcentral_keycreate_mothership {\r\n\tmargin-left: 24px;\r\n}\r\n\r\n@media screen and (min-width: 670px) {\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_menu {\r\n\t\tfloat: left;\r\n\t\twidth: 215px;\r\n\t\tborder-right: 1px solid rgb(204, 204, 204);\r\n\t\tborder-bottom: none;\r\n\t}\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_content {\r\n\t\tpadding-left: 10px;\r\n\t\tpadding-top: 0px;\r\n\t}\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n}\r\n"]}
|
1 |
+
{"version":3,"sources":["css/admin.css"],"names":[],"mappings":"AAAA,uBAAuB;AACvB;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,WAAW;CACX;;AAED,2BAA2B;;AAE3B,kBAAkB;AAClB;CACC,sBAAsB;CACtB;;AAED;CACC,kBAAkB;CAClB;;AAED,sBAAsB;AACtB,eAAe;AACf;CACC,mBAAmB;CACnB;;AAED,sBAAsB;AACtB,aAAa;AACb;CACC,sBAAsB;CACtB;;AAED,oBAAoB;;AAEpB;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,iBAAiB;CACjB;;AAED,iBAAiB;;AAEjB;CACC,mBAAmB;CACnB,kBAAkB;CAClB,uBAAuB;CACvB,aAAa;CACb,iBAAiB;CACjB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB;;AAED,qBAAqB;;AAErB,kBAAkB;AAClB;CACC,kBAAkB;CAClB,oBAAoB;CACpB,oBAAoB;CACpB,gBAAgB;CAChB,kBAAkB;CAClB,oBAAoB;CACpB,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,wBAAwB;CACxB,mBAAmB;CACnB,kBAAkB;CAClB,qBAAqB;CACrB,yBAAyB;CACzB,uBAAuB;CACvB,mBAAmB;CACnB,mBAAmB;CACnB,kBAAkB;CAClB,qBAAqB;CACrB,eAAe;CACf,sBAAsB;CACtB;;AAED;CACC,gCAAgC;CAChC,yBAAyB;CACzB;;AAED;CACC,kBAAkB;CAClB,aAAa;CACb,mBAAmB;CACnB;;AAED;;;CAGC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,yBAAyB;CACzB,gCAAgC;CAChC;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,uBAAuB;CACvB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,aAAa;CACb;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,gBAAgB;CAChB,mBAAmB;CACnB,kBAAkB;CAClB,kBAAkB;CAClB;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB,0BAA0B;CAC1B,yBAAyB;CACzB,YAAY;CACZ,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,cAAc;CACd,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,aAAa;CACb;;AAED,sBAAsB;;AAEtB,4BAA4B;;AAE5B;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ,oBAAoB;CACpB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,YAAY;CACZ;;AAED;CACC,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX;;AAED;CACC,aAAa;CACb,cAAc;CACd,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,eAAe;CACf,aAAa;CACb,eAAe;CACf,mBAAmB;CACnB,UAAU;CACV,UAAU;CACV;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED,mCAAmC;;AAEnC;CACC,iBAAiB;CACjB;;AAED;CACC,uBAAuB;CACvB;;AAED;CACC,cAAc;CACd;;AAED;CACC,8BAA8B;CAC9B,aAAa;CACb,eAAe;CACf,2BAA2B;CAC3B,gBAAgB;CAChB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,4BAA4B;CAC5B,8BAA8B;CAC9B,2BAA2B;CAC3B,iBAAiB;CACjB,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,uBAAuB;CACvB;;AAED;CACC,WAAW;CACX;;AAED,mBAAmB;;AAEnB,oEAAoE;AACpE;;CAEC,wBAAwB;CACxB;;AAED;;CAEC,gCAAgC;CAChC;;AAED;;CAEC,+BAA+B;CAC/B;;AAED;;CAEC,wBAAwB;CACxB;;AAED,+BAA+B;AAC/B;CACC,mBAAmB;CACnB,cAAc;CACd,eAAe;CACf;;AAED;CACC,mBAAmB;CACnB,aAAa;CACb,YAAY;CACZ,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,cAAc;CACd,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,mBAAmB;CACnB,YAAY;CACZ,YAAY;CACZ,eAAe;CACf;;AAED,8BAA8B;AAC9B;CACC,mBAAmB;CACnB,cAAc;CACd,cAAc;CACd,YAAY;CACZ,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,OAAO;CACP,SAAS;CACT;;AAED;CACC,aAAa;CACb,YAAY;CACZ,eAAe;CACf;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,WAAW;CACX,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB,2BAA2B;CAC3B;;AAED;CACC,aAAa;CACb;;AAED;CACC,0BAA0B;CAC1B,0BAA0B;CAC1B,aAAa;CACb,uBAAuB;CACvB,kBAAkB;CAClB;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,uBAAuB;CACvB,YAAY;CACZ,uBAAuB;CACvB,aAAa;CACb,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,YAAY;CACZ;;AAED;CACC,aAAa;CACb,8BAA8B;CAC9B,YAAY;CACZ,YAAY;CACZ,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,uBAAuB;CACvB,YAAY;CACZ,uBAAuB;CACvB,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb,yBAAyB;CACzB;;AAED;CACC,wBAAwB;CACxB,0BAA0B;CAC1B;;AAED;CACC,eAAe;CACf;;AAED;CACC,wBAAwB;CACxB,cAAc;CACd;;AAED;CACC,oBAAoB;CACpB,aAAa;CACb;;AAED;CACC,YAAY;CACZ;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB,uBAAuB;CACvB,cAAc;CACd;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf;;AAED;CACC,YAAY;CACZ;;AAED;CACC,qCAAqC;CACrC,kBAAkB;CAClB;;AAED;CACC,wBAAwB;CACxB,0BAA0B;CAC1B,gBAAgB;CAChB,wBAAwB;CACxB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,eAAe;CACf;;AAED;CACC,aAAa;CACb;;AAED;CACC,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd,aAAa;CACb;;AAED;CACC,UAAU;CACV,oBAAoB;CACpB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,WAAW;CACX,gBAAgB;CAChB,kBAAkB;CAClB,YAAY;CACZ,mBAAmB;CACnB,aAAa;CACb,cAAc;CACd;;AAED;CACC,gBAAgB;CAChB,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,cAAc;CACd,YAAY;CACZ;;AAED;CACC,cAAc;CACd;;AAED;;CAEC;EACC,eAAe;EACf,YAAY;EACZ,mBAAmB;EACnB;;CAED;;AAED,oCAAoC;AACpC;CACC,WAAW;CACX;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;;AAEH;CACC,iBAAiB;CACjB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,+BAA+B;CAC/B,uBAAuB;CACvB,wBAAwB;CACxB;;AAED;CACC,kBAAkB;CAClB,YAAY;CACZ,yBAAyB;CACzB;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,YAAY;CACZ,YAAY;CACZ,yBAAyB;CACzB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,eAAe;CACf;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,uBAAuB;CACvB,aAAa;CACb,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,wBAAwB;CACxB,iBAAiB;CACjB,gBAAgB;CAChB,oBAAoB;CACpB;;AAED;CACC,WAAW;CACX,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX;;AAED;CACC,cAAc;CACd,oBAAoB;CACpB;;AAED;CACC,cAAc;CACd,gBAAgB;CAChB,WAAW;CACX,SAAS;CACT,kBAAkB;CAClB,mBAAmB;CACnB,+BAA+B;CAC/B,aAAa;CACb;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB;;AAED;CACC,sBAAsB;CACtB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,sBAAsB;CACtB,mBAAmB;CACnB,SAAS;CACT;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB,2BAA2B;CAC3B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf;;AAED;CACC,cAAc;CACd;;AAED;CACC,cAAc;CACd,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,wBAAwB;CACxB,aAAa;CACb;;AAED;CACC,oBAAoB;CACpB,iBAAiB;CACjB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,aAAa;CACb,aAAa;CACb;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,qBAAqB;CACrB;;AAED;CACC,iBAAiB;CACjB,iBAAiB;CACjB,mBAAmB;CACnB,gBAAgB;CAChB,aAAa;CACb,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB,gBAAgB;CAChB,aAAa;CACb,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB,UAAU;CACV,SAAS;CACT,mBAAmB;CACnB,0BAA0B;CAC1B;;AAED;CACC,mBAAmB;CACnB,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB,aAAa;CACb;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB,gBAAgB;CAChB;;AAED;CACC,WAAW;CACX,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,WAAW;CACX,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,WAAW;CACX,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,uBAAuB;CACvB;;AAED;CAGC,uBAAuB;CACvB,iBAAiB;CACjB,WAAW;CACX;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB,YAAY;CACZ,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,4BAA4B;CAC5B;;AAED;CACC,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,qBAAqB;CACrB;;AAED;;GAEG;;AAEH;CACC,eAAe;CACf,WAAW;CACX;;AAED;CACC,eAAe;CACf;;AAED,6BAA6B;AAC7B;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,gBAAgB;CAChB;;AAED,aAAa;AACb,oHAAoH;;AAEpH;CACC,qBAAqB;CACrB,mBAAmB;CACnB;;AAED;CACC,kBAAkB;CAClB,iBAAiB;CACjB,cAAc;CACd,aAAa;CACb;;AAED;CACC,oBAAoB;CACpB;;AAED;CACC,WAAW;CACX;;AAED,iBAAiB;;AAEjB;CACC,0BAA0B;CAC1B,cAAc;CACd,YAAY;CACZ;;AAED;CACC,aAAa;CACb,oBAAoB;CACpB,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,WAAW;CACX,YAAY;CACZ;;AAED;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,6BAA6B;CAC7B,aAAa;CACb,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED,qBAAqB;;AAErB,iBAAiB;;AAEjB;CACC,YAAY;CACZ,mBAAmB;CACnB,oBAAoB;CACpB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,aAAa;CACb,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB,eAAe;CACf,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,cAAc;CACd;;AAED;CACC,WAAW;CACX,gBAAgB;CAChB,6BAA6B;CAC7B;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,WAAW;CACX,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB,iBAAiB;CACjB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,cAAc;CACd,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,uBAAuB;CACvB,gBAAgB;CAChB;;AAED,qBAAqB;;AAErB,oBAAoB;;AAEpB;CACC,iBAAiB;CACjB,YAAY;CACZ,eAAe;CACf,eAAe;CACf;;AAED;CACC,wBAAwB;CACxB,eAAe;CACf,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb,cAAc;CACd,uBAAuB;CACvB,sBAAsB;CACtB,eAAe;CACf,mBAAmB;CACnB,iBAAiB;CACjB,mBAAmB;CACnB,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,aAAa;CACb,aAAa;CACb;;AAED;CACC,WAAW;CACX,aAAa;CACb;;AAED;CACC,gBAAgB;CAChB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,mBAAmB;CACnB,WAAW;CACX,WAAW;CACX;;AAED;CACC,gBAAgB;CAChB,uBAAuB;CACvB;;AAED;CACC,YAAY;CACZ,uBAAuB;CACvB,iBAAiB;CACjB;;AAED;CACC,mBAAmB;CACnB;;AAED;;CAEC,iBAAiB;CACjB;;AAED;CACC,iBAAiB;CACjB;;AAED,wBAAwB;;;AAGxB,mFAAmF;;AAEnF;CACC,eAAe;CACf;;AAED;CACC,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,mBAAmB;CACnB,oBAAoB;CACpB;;AAED;CACC,eAAe;CACf,sBAAsB;CACtB,eAAe;CACf,eAAe;CACf;;AAED;CACC,YAAY;CACZ,mBAAmB;CACnB;;AAED,gCAAgC;;AAEhC;CACC,mBAAmB;CACnB;;AAED;CACC,YAAY;CACZ,WAAW;CACX,mBAAmB;CACnB,qBAAqB;CACrB;;AAED;CACC,aAAa;CACb,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,kBAAkB;CAClB;;AAED;CACC,2BAA2B;CAC3B,qBAAqB;CACrB;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,aAAa;CACb;;AAED;CACC,aAAa;CACb;;AAED;CACC,UAAU;CACV,WAAW;CACX;;AAED;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,WAAW;CACX,mBAAmB;CACnB,kBAAkB;CAClB;;AAED;CACC,gBAAgB;CAChB,kBAAkB;CAClB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB;;AAED;CACC,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB;;AAED,mCAAmC;AACnC;AACA,6BAA6B;AAC7B;iBACiB;AACjB,iBAAiB;CAChB,YAAY;CACZ,YAAY;CACZ,aAAa;CACb,cAAc;CACd;;AAED;CACC,YAAY;CACZ;;AAED;CACC,YAAY;CACZ,aAAa;CACb,2BAA2B;CAC3B,WAAW;CACX,aAAa;CACb,oBAAoB;CACpB;;AAED;CACC,sBAAsB;CACtB,eAAe;CACf,oBAAoB;CACpB,mBAAmB;CACnB;;AAED;CACC,iBAAiB;CACjB;;AAED;CACC,eAAe;CACf,gBAAgB;CAChB;;AAED;CACC,iBAAiB;CACjB,0BAA0B;CAC1B,mBAAmB;CACnB,eAAe;CACf,sBAAsB;CACtB,6BAA6B;CAC7B,8BAA8B;CAC9B,2BAA2B;CAC3B,kBAAkB;CAClB,iBAAiB;CACjB,4BAA4B;CAC5B,0BAA0B;CAC1B,sBAAsB;CACtB;;AAED;CACC,0BAA0B;CAC1B,oBAAoB;CACpB,sBAAsB;CACtB,gBAAgB;CAChB,kBAAkB;CAClB,iBAAiB;CACjB,YAAY;CACZ,aAAa;CACb,mBAAmB;CACnB;;AAED;AACA;;;;;;;;;IASI;CACH;;AAED,uCAAuC;AACvC,6CAA6C;AAC7C;CACC,aAAa;CACb,iBAAiB;CACjB;;AAED;CACC,YAAY;CACZ,4CAA4C;CAC5C;;AAED;CACC,iBAAiB;CACjB,YAAY;CACZ,YAAY;CACZ,eAAe;CACf;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,cAAc;CACd;;AAED;CACC,eAAe;CACf;;AAED;CACC,sBAAsB;CACtB,gBAAgB;CAChB,aAAa;CACb,YAAY;CACZ;;AAED;CACC,gBAAgB;CAChB;;AAED;CACC,0BAA0B;CAC1B;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ;;AAED;CACC,0BAA0B;CAC1B,YAAY;CACZ;;AAED;CACC,wBAAwB;CACxB;;AAED;CACC,2BAA2B;CAC3B;;AAED;CACC,WAAW;CACX,YAAY;CACZ,mBAAmB;CACnB;;AAED;CACC,mBAAmB;CACnB;;AAED;CACC,cAAc;CACd;;AAED;CACC,kBAAkB;CAClB,mBAAmB;CACnB,qBAAqB;CACrB,mBAAmB;CACnB;;AAED;;CAEC;EACC,YAAY;EACZ,aAAa;EACb,2CAA2C;EAC3C,oBAAoB;EACpB;;CAED;EACC,mBAAmB;EACnB,iBAAiB;EACjB;;CAED;EACC,eAAe;EACf;;CAED","file":"admin.min.css","sourcesContent":["/* Widths and sizing */\r\n.max-width-600 {\r\n\tmax-width: 600px;\r\n}\r\n\r\n.width-900 {\r\n\twidth: 900px;\r\n}\r\n\r\n.width-80 {\r\n\twidth: 80%;\r\n}\r\n\r\n/* End widths and sizing */\r\n\r\n/* Font styling */\r\n.no-decoration {\r\n\ttext-decoration: none;\r\n}\r\n\r\n.bold {\r\n\tfont-weight: bold;\r\n}\r\n\r\n/* End font styling */\r\n/* Alignment */\r\n.center-align-td {\r\n\ttext-align: center;\r\n}\r\n\r\n/* End of Alignment */\r\n/* Padding */\r\n.remove-padding {\r\n\tpadding: 0 !important;\r\n}\r\n\r\n/* End of padding */\r\n\r\n.updraft-text-center {\r\n\ttext-align: center;\r\n}\r\n\r\n.autobackup {\r\n\tpadding: 6px;\r\n\tmargin: 8px 0px;\r\n}\r\n\r\nul .disc {\r\n\tlist-style: disc inside;\r\n}\r\n\r\n.dashicons-log-fix {\r\n\tdisplay: inherit;\r\n}\r\n\r\n/* Input boxes */\r\n\r\ninput {\r\n\tborder-radius: 4px;\r\n\tline-height: 1.42;\r\n\tborder: 1px solid #CCC;\r\n\theight: 27px;\r\n\tpadding: 2px 6px;\r\n\tcolor: #555;\r\n}\r\n\r\ninput[type=\"text\"] {\r\n\tfont-size: 14px;\r\n}\r\n\r\ninput[type=\"number\"] {\r\n\theight: 31px;\r\n}\r\n\r\nselect {\r\n\tborder-radius: 4px;\r\n}\r\n\r\n/* End input boxes */\r\n\r\n/* Main Buttons */\r\n.main-dashboard-buttons {\r\n\tborder-width: 4px;\r\n\tborder-radius: 12px;\r\n\tletter-spacing: 0px;\r\n\tfont-size: 17px;\r\n\tfont-weight: bold;\r\n\tpadding-left: 0.7em;\r\n\tpadding-right: 2em;\r\n\tpadding: 0.3em 1em;\r\n\tline-height: 1.7em;\r\n\tbackground: transparent;\r\n\tposition: relative;\r\n\tborder: 2px solid;\r\n\ttransition: all 0.2s;\r\n\tvertical-align: baseline;\r\n\tbox-sizing: border-box;\r\n\ttext-align: center;\r\n\tline-height: 1.3em;\r\n\tmargin-left: .3em;\r\n\ttext-transform: none;\r\n\tline-height: 1;\r\n\ttext-decoration: none;\r\n}\r\n\r\n.button-restore {\r\n\tborder-color: rgb(98, 158, 192);\r\n\tcolor: rgb(98, 158, 192);\r\n}\r\n\r\n.dashboard-main-sizing {\r\n\tborder-width: 4px;\r\n\twidth: 190px;\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.button-restore:hover, .button-migrate:hover, .button-backup:hover,\r\n.button-view-log:hover, .button-mass-selectors:hover,\r\n.button-delete:hover, .button-entity-backup:hover, .udp-button-primary:hover {\r\n\tborder-color: #DF6926;\r\n\tcolor: #DF6926;\r\n}\r\n\r\n.button-migrate {\r\n\tcolor: rgb(238, 169, 32);\r\n\tborder-color: rgb(238, 169, 32);\r\n}\r\n\r\n.button-backup {\r\n\tborder-color: #84CA1B;\r\n\tcolor: #84CA1B;\r\n}\r\n\r\n.existing-backups-buttons {\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 3px;\r\n}\r\n\r\n.existing-backups-restore-buttons {\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 3px;\r\n}\r\n\r\n.button-delete {\r\n\tcolor: #E23900;\r\n\tborder-color: #E23900;\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.button-view-log, .button-mass-selectors {\r\n\tcolor: darkgrey;\r\n\tborder-color: darkgrey;\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-top: -1px;\r\n}\r\n\r\n.button-view-log {\r\n\twidth: 120px;\r\n}\r\n\r\n.button-existing-restore {\r\n\tfont-size: 14px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\twidth: 110px;\r\n}\r\n\r\n.main-restore {\r\n\tmargin-right: 3%;\r\n\tmargin-left: 3%;\r\n}\r\n\r\n.button-entity-backup {\r\n\tcolor: #555;\r\n\tborder-color: #555;\r\n\tfont-size: 11px;\r\n\tline-height: 1.4em;\r\n\tborder-width: 2px;\r\n\tmargin-right: 5px;\r\n}\r\n\r\n.button-select-all {\r\n\twidth: 122px;\r\n}\r\n\r\n.button-deselect {\r\n\twidth: 92px;\r\n}\r\n\r\n#ud_massactions > .display-flex > .mass-selectors-margins {\r\n\tmargin-right: -4px;\r\n}\r\n\r\n.udp-button-primary {\r\n\tborder-width: 4px;\r\n\tcolor: #0073AA;\r\n\tborder-color: #0073AA;\r\n\tfont-size: 14px;\r\n\theight: 40px;\r\n}\r\n\r\n#ud_massactions .button-delete {\r\n\tmargin-right: 0px;\r\n}\r\n\r\n.stored_local {\r\n\tborder-radius: 5px;\r\n\tbackground-color: #007FE7;\r\n\tpadding: 3px 5px 5px 5px;\r\n\tcolor: #FFF;\r\n\tfont-size: 75%;\r\n}\r\n\r\n.form-table td.updraft_existingbackup_date {\r\n\tpadding-bottom: 5px;\r\n}\r\n\r\nspan#updraft_lastlogcontainer {\r\n\tword-break: break-all;\r\n}\r\n\r\n.stored_icon {\r\n\theight: 1.3em;\r\n\tposition: relative;\r\n\ttop: 0.2em;\r\n}\r\n\r\n.backup_date_label .clear-right {\r\n\tclear: right;\r\n}\r\n\r\n/* End Main Buttons */\r\n\r\n/* End of common elements */\r\n\r\n.udp-logo-70 {\r\n\twidth: 70px;\r\n\theight: 70px;\r\n\tfloat: left;\r\n\tpadding-right: 25px;\r\n}\r\n\r\nh3 .thank-you {\r\n\tmargin-top: 0px;\r\n}\r\n\r\n.ws_advert {\r\n\tmax-width: 800px;\r\n\tfont-size: 140%;\r\n\tline-height: 140%;\r\n\tpadding: 14px;\r\n\tclear: left;\r\n}\r\n\r\n.dismiss-dash-notice {\r\n\tfloat: right;\r\n\tposition: relative;\r\n\ttop: -20px;\r\n}\r\n\r\n#updraft_report_cell .updraft_reportbox {\r\n\tpadding: 8px;\r\n\tmargin: 8px 0;\r\n\tborder: 1px dotted;\r\n\tclear: left;\r\n\tfloat: left;\r\n}\r\n\r\n#updraft_report_cell button.updraft_reportbox_delete {\r\n\tfont-size: 50%;\r\n\tfloat: right;\r\n\tpadding: 0 3px;\r\n\tposition: relative;\r\n\ttop: -4px;\r\n\tleft: 4px;\r\n}\r\n\r\n#updraft-navtab-settings-content .updraft-test-button {\r\n\tfont-size: 18px !important;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_checkbox {\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_email {\r\n\twidth: 300px;\r\n}\r\n\r\n#updraft_report_cell .updraft_report_another_p {\r\n\tclear: left;\r\n}\r\n\r\n/* Taken straight from admin.php */\r\n\r\n#updraft-navtab-settings-content table.form-table p {\r\n\tmax-width: 700px;\r\n}\r\n\r\n#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected {\r\n\tbackground-color: #CCC;\r\n}\r\n\r\n.updraft_settings_sectionheading {\r\n\tdisplay: none;\r\n}\r\n\r\n.updraft-backupentitybutton-disabled {\r\n\tbackground-color: transparent;\r\n\tborder: none;\r\n\tcolor: #0074A2;\r\n\ttext-decoration: underline;\r\n\tcursor: pointer;\r\n\tclear: none;\r\n\tfloat: left;\r\n}\r\n\r\n.updraft-backupentitybutton {\r\n\tmargin-left: 8px;\r\n}\r\n\r\n.updraft-bigbutton {\r\n\tpadding: 2px 0px !important;\r\n\tmargin-right: 14px !important;\r\n\tfont-size: 22px !important;\r\n\tmin-height: 32px;\r\n\tmin-width: 180px;\r\n}\r\n\r\n.updraft_debugrow th {\r\n\tfloat: right;\r\n\ttext-align: right;\r\n\tfont-weight: bold;\r\n\tpadding-right: 8px;\r\n\tmin-width: 140px;\r\n}\r\n\r\n.updraft_debugrow td {\r\n\tmin-width: 300px;\r\n\tvertical-align: bottom;\r\n}\r\n\r\n#updraft_webdav_host_error {\r\n\tcolor: red;\r\n}\r\n\r\n/* jstree styles */\r\n\r\n/* these styles hide the dots from the parent but keep the arrows */\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-node,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-node {\r\n\tbackground: transparent;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-open > .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-open > .jstree-ocl {\r\n\tbackground-position: -36px -4px;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-closed> .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-closed> .jstree-ocl {\r\n\tbackground-position: -4px -4px;\r\n}\r\n\r\n#updraft_zip_files_jstree .jstree-container-ul > .jstree-leaf> .jstree-ocl,\r\n#updraft_more_files_jstree .jstree-container-ul > .jstree-leaf> .jstree-ocl {\r\n\tbackground: transparent;\r\n}\r\n\r\n/* zip browser jstree styles */\r\n#updraft_zip_files_container {\r\n\tposition: relative;\r\n\theight: 450px;\r\n\toverflow: none;\r\n}\r\n\r\n#updraft_zip_info_container {\r\n\tposition: relative;\r\n\theight: auto;\r\n\twidth: 100%;\r\n\tborder: 1px dotted;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n#updraft_zip_info_container p {\r\n\tmargin: 1px;\r\n\tpadding-left: 10px;\r\n\tfont-size: 14px;\r\n}\r\n\r\n#updraft_zip_download_item {\r\n\tdisplay: none;\r\n\tcolor: #0073AA;\r\n\tpadding-left: 10px;\r\n}\r\n\r\n#updraft_zip_download_notice {\r\n\tpadding-left: 10px;\r\n}\r\n\r\n#updraft_zip_files_jstree_container {\r\n\tposition: relative;\r\n\tborder: 1px dotted;\r\n\theight: 80%;\r\n\twidth: 100%;\r\n\toverflow: auto;\r\n}\r\n\r\n/* More files jstree styles */\r\n#updraft_more_files_container {\r\n\tposition: relative;\r\n\tdisplay: none;\r\n\theight: 300px;\r\n\twidth: 100%;\r\n\tborder: 1px dotted;\r\n\tmargin-bottom: 5px;\r\n}\r\n\r\n#updraft_jstree_buttons {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n}\r\n\r\n#updraft_jstree_container {\r\n\theight: 100%;\r\n\twidth: 100%;\r\n\toverflow: auto;\r\n}\r\n\r\n#updraft_more_files_container button {\r\n\theight: 22px;\r\n\tline-height: 20px;\r\n}\r\n\r\n#updraft_jstree_confirm, #updraft_jstree_cancel {\r\n\tdisplay: none;\r\n}\r\n\r\n.updraftplus-morefiles-row-delete {\r\n\tcursor: pointer;\r\n\tcolor: red;\r\n\tfont-size: 23px !important;\r\n}\r\n\r\n.updraftplus-morefiles-row-edit {\r\n\tcursor: pointer;\r\n\tfont-size: 24px !important;\r\n}\r\n\r\n#updraft-wrap .form-table th {\r\n\twidth: 230px;\r\n}\r\n\r\n.updraftplus-remove {\r\n\tbackground-color: #C00000;\r\n\tborder: 1px solid #C00000;\r\n\theight: 22px;\r\n\tpadding: 4px 3px 0 3px;\r\n\tmargin-right: 6px;\r\n}\r\n\r\n.updraft-viewlogdiv form {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.updraft-viewlogdiv {\r\n\tbackground-color: #FFF;\r\n\tcolor: #000;\r\n\tborder: 1px solid #000;\r\n\theight: 26px;\r\n\tpadding: 0px;\r\n\tmargin: 0 4px 0 0;\r\n\tborder-radius: 3px;\r\n\tfloat: left;\r\n}\r\n\r\n.updraft-viewlogdiv input, .updraft-viewlogdiv a {\r\n\tborder: none;\r\n\tbackground-color: transparent;\r\n\tcolor: #000;\r\n\tmargin: 0px;\r\n\tpadding: 3px 4px;\r\n\tfont-size: 16px;\r\n\tline-height: 26px;\r\n}\r\n\r\n.updraft-viewlogdiv:hover {\r\n\tbackground-color: #000;\r\n\tcolor: #FFF;\r\n\tborder: 1px solid #FFF;\r\n\tcursor: pointer;\r\n}\r\n\r\n.updraft-viewlogdiv input:hover, .updraft-viewlogdiv a:hover {\r\n\tcolor: #FFF;\r\n\tcursor: pointer;\r\n}\r\n\r\n.updraftplus-remove a {\r\n\tcolor: white;\r\n\tpadding: 4px 4px 0px 4px;\r\n}\r\n\r\n.updraftplus-remove:hover {\r\n\tbackground-color: white;\r\n\tborder: 1px solid #C00000;\r\n}\r\n\r\n.updraftplus-remove a:hover {\r\n\tcolor: #C00000;\r\n}\r\n\r\n.drag-drop #drag-drop-area2 {\r\n\tborder: 4px dashed #DDD;\r\n\theight: 200px;\r\n}\r\n\r\n#drag-drop-area2 .drag-drop-inside {\r\n\tmargin: 36px auto 0;\r\n\twidth: 350px;\r\n}\r\n\r\n#filelist, #filelist2 {\r\n\twidth: 100%;\r\n}\r\n\r\n#filelist .file, #filelist2 .file, .ud_downloadstatus .file, #ud_downloadstatus2 .file {\r\n\tpadding: 5px;\r\n\tbackground: #ECECEC;\r\n\tborder: solid 1px #CCC;\r\n\tmargin: 4px 0;\r\n}\r\n\r\nul.updraft_premium_description_list {\r\n\tlist-style: disc inside;\r\n}\r\n\r\nul.updraft_premium_description_list li {\r\n\tdisplay: inline;\r\n}\r\n\r\nul.updraft_premium_description_list li::after {\r\n\tcontent: \" | \";\r\n}\r\n\r\nul.updraft_premium_description_list li.last::after {\r\n\tcontent: \"\";\r\n}\r\n\r\n.updraft_feature_cell {\r\n\tbackground-color: #F7D9C9 !important;\r\n\tpadding: 5px 10px;\r\n}\r\n\r\n.updraft_feat_table, .updraft_feat_th, .updraft_feat_table td {\r\n\tborder: 1px solid black;\r\n\tborder-collapse: collapse;\r\n\tfont-size: 120%;\r\n\tbackground-color: white;\r\n\ttext-align: center;\r\n}\r\n\r\n.updraft_feat_table p {\r\n\tpadding: 0px 10px;\r\n\tmargin: 5px 0px;\r\n\tfont-size: 16px;\r\n}\r\n\r\n.updraft_feat_table h4 {\r\n\tmargin: 5px 0px;\r\n}\r\n\r\n.updraft_feat_table .dashicons {\r\n\twidth: 25px;\r\n\theight: 25px;\r\n\tfont-size: 25px;\r\n\tline-height: 1;\r\n}\r\n\r\n.updraft_feat_table .dashicons-yes, .updraft_feat_table .updraft-yes {\r\n\tcolor: green;\r\n}\r\n\r\n.updraft_feat_table .dashicons-no-alt, .updraft_feat_table .updraft-no {\r\n\tcolor: red;\r\n}\r\n\r\n.updraft_tick_cell {\r\n\ttext-align: center;\r\n}\r\n\r\n.updraft_tick_cell img {\r\n\tmargin: 4px 0;\r\n\theight: 24px;\r\n}\r\n\r\n#filelist .fileprogress, #filelist2 .fileprogress, .ud_downloadstatus .dlfileprogress, #ud_downloadstatus2 .dlfileprogress {\r\n\twidth: 0%;\r\n\tbackground: #F6A828;\r\n\theight: 5px;\r\n}\r\n\r\n.ud_downloadstatus .raw, #ud_downloadstatus2 .raw {\r\n\tmargin-top: 8px;\r\n\tclear: left;\r\n}\r\n\r\n.ud_downloadstatus .file, #ud_downloadstatus2 .file {\r\n\tmargin-top: 8px;\r\n}\r\n\r\ntr.updraftplusmethod h3 {\r\n\tmargin: 0px;\r\n}\r\n\r\n#updraft_retain_db_rules .updraft_retain_rules_delete, #updraft_retain_files_rules .updraft_retain_rules_delete {\r\n\tcursor: pointer;\r\n\tcolor: red;\r\n\tfont-size: 120%;\r\n\tfont-weight: bold;\r\n\tborder: 0px;\r\n\tborder-radius: 3px;\r\n\tpadding: 2px;\r\n\tmargin: 0 6px;\r\n}\r\n\r\n#updraft_retain_db_rules .updraft_retain_rules_delete:hover, #updraft_retain_files_rules .updraft_retain_rules_delete:hover {\r\n\tcursor: pointer;\r\n\tcolor: white;\r\n\tbackground: red;\r\n}\r\n\r\n#updraft_backup_started {\r\n\tmax-width: 800px;\r\n\tfont-size: 140%;\r\n\tline-height: 140%;\r\n\tpadding: 14px;\r\n\tclear: left;\r\n}\r\n\r\n.udp-premium-image {\r\n\tdisplay: none;\r\n}\r\n\r\n@media screen and (min-width: 720px) {\r\n\r\n\t.udp-premium-image {\r\n\t\tdisplay: block;\r\n\t\tfloat: left;\r\n\t\tpadding-right: 5px;\r\n\t}\r\n\r\n}\r\n\r\n/* End stuff already in admin.php */\r\n#plupload-upload-ui2 {\r\n\twidth: 80%;\r\n}\r\n\r\n.backup-restored {\r\n\tpadding: 8px;\r\n}\r\n\r\n.backup-restored span {\r\n\tfont-size: 120%;\r\n}\r\n\r\n.memory-limit {\r\n\tpadding: 8px;\r\n}\r\n\r\n.updraft_list_errors {\r\n\tpadding: 8px;\r\n}\r\n\r\n/*.nav-tab {\r\n\tborder-radius: 20px 20px 0 0;\r\n\tborder-color: grey;\r\n\tborder-width: 2px;\r\n\tmargin-top: 34px;\r\n}\r\n\r\n.nav-tab:hover {\r\n\tborder-bottom: 0;\r\n}\r\n\r\n.nav-tab-active, .nav-tab-active:active {\r\n\tcolor: #df6926;\r\n\tborder-color: #D3D3D3;\r\n\tborder-width: 1px;\r\n\tborder-bottom: 0;\r\n}\r\n\r\n.nav-tab-active:focus {\r\n\tcolor: #df6926;\r\n}*/\r\n\r\n.nav-tab-wrapper {\r\n\tmargin: 14px 0px;\r\n}\r\n\r\n#updraft-poplog-content {\r\n\twhite-space: pre-wrap;\r\n}\r\n\r\n.next-backup {\r\n\tborder: 0px;\r\n\tpadding: 0px;\r\n\tmargin: 0 10px 0 0;\r\n}\r\n\r\n.not-scheduled {\r\n\tvertical-align: top !important;\r\n\tmargin: 0px !important;\r\n\tpadding: 0px !important;\r\n}\r\n\r\n.next-backup .updraft_scheduled {\r\n\t/* width: 124px;*/\r\n\tmargin: 0px;\r\n\tpadding: 2px 4px 2px 0px;\r\n}\r\n\r\n#next-backup-table-inner td {\r\n\tvertical-align: top;\r\n}\r\n\r\n.next-backup .updraft_all-files {\r\n\tcolor: blue;\r\n\tmargin: 0px;\r\n\tpadding: 2px 0px 0px 0px;\r\n}\r\n\r\n.multisite-advert-width {\r\n\twidth: 800px;\r\n}\r\n\r\n.updraft_settings_sectionheading {\r\n\tmargin-top: 6px;\r\n}\r\n\r\n.premium-upgrade-prompt {\r\n\tfont-size: 115%;\r\n}\r\n\r\n.updraft_feat_table {\r\n\tmargin-top: 30px;\r\n}\r\n\r\n.show_admin_restore_in_progress_notice {\r\n\tpadding: 8px;\r\n}\r\n\r\n.show_admin_restore_in_progress_notice .unfinished-restoration {\r\n\tfont-size: 120%;\r\n}\r\n\r\n#backupnow_includefiles_moreoptions, #backupnow_database_moreoptions {\r\n\tmargin: 4px 16px 6px 16px;\r\n\tborder: 1px dotted;\r\n\tpadding: 6px 10px;\r\n}\r\n\r\n#backupnow_database_moreoptions {\r\n\tmax-height: 250px;\r\n\toverflow: auto;\r\n}\r\n\r\n.form-table #updraft_activejobsrow .minimum-height {\r\n\tmin-height: 100px;\r\n}\r\n\r\n#updraft_lastlogmessagerow .last-message {\r\n\tpadding-top: 20px;\r\n\tdisplay: block;\r\n}\r\n\r\n.updraft_simplepie {\r\n\tvertical-align: top;\r\n}\r\n\r\n.download-backups {\r\n\tmargin-top: 8px;\r\n}\r\n\r\n.download-backups .updraft_download_button {\r\n\tmargin-right: 6px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n.download-backups .choose-components-button {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.download-backups .ud-whitespace-warning {\r\n\tbackground-color: pink;\r\n\tpadding: 8px;\r\n\tmargin: 4px;\r\n\tborder: 1px dotted;\r\n}\r\n\r\n.download-backups .ul {\r\n\tlist-style: none inside;\r\n\tmax-width: 800px;\r\n\tmargin-top: 6px;\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n#updraft-plupload-modal {\r\n\twidth: 75%;\r\n\tmargin: 16px;\r\n\tmargin-left: 100px;\r\n}\r\n\r\n.download-backups .upload {\r\n\tmax-width: 610px;\r\n}\r\n\r\n.download-backups #plupload-upload-ui {\r\n\twidth: 70%;\r\n}\r\n\r\n.ud_downloadstatus {\r\n\tpadding: 10px;\r\n\tbackground: #F1F1F1;\r\n}\r\n\r\n#ud_massactions {\r\n\tpadding: 14px;\r\n\tposition: fixed;\r\n\tright: 25%;\r\n\ttop: 25%;\r\n\tborder: 2px solid;\r\n\tborder-radius: 4px;\r\n\tbackground: rgb(241, 241, 241);\r\n\tfloat: right;\r\n}\r\n\r\n#ud_massactions .updraftplus-remove {\r\n\tclear: left;\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#ud_massactions .updraftplus-remove a {\r\n\ttext-decoration: none;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv {\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n\tmargin-top: 4px;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv a {\r\n\ttext-decoration: none;\r\n\tposition: relative;\r\n\ttop: 3px;\r\n}\r\n\r\n#ud_massactions .updraft-viewlogdiv a {\r\n\ttext-decoration: none;\r\n\tposition: relative;\r\n\ttop: 3px;\r\n}\r\n\r\n#updraft-navtab-backups-content .updraft_existing_backups {\r\n\tmargin-bottom: 12px;\r\n}\r\n\r\n#updraft-message-modal-innards {\r\n\tpadding: 4px;\r\n}\r\n\r\n#updraft-authenticate-modal {\r\n\ttext-align: center;\r\n\tfont-size: 16px !important;\r\n}\r\n\r\n#updraft-authenticate-modal p {\r\n\tfont-size: 16px;\r\n}\r\n\r\n#updraft_delete_form p {\r\n\tmargin-top: 3px;\r\n\tpadding-top: 0;\r\n}\r\n\r\n#updraft_restore_form .cannot-restore {\r\n\tmargin: 8px 0;\r\n}\r\n\r\n#updraft_restorer_dboptions {\r\n\tpadding: 12px;\r\n\tmargin: 8px 0 4px 0;\r\n\tborder: dashed 1px;\r\n}\r\n\r\n#updraft_restorer_dboptions h4 {\r\n\tmargin: 0px 0px 6px 0px;\r\n\tpadding: 0px;\r\n}\r\n\r\n.updraft_debugrow th {\r\n\tvertical-align: top;\r\n\tpadding-top: 6px;\r\n}\r\n\r\n.expertmode p {\r\n\tfont-size: 125%;\r\n}\r\n\r\n.expertmode .call-wp-action {\r\n\twidth: 300px;\r\n\theight: 22px;\r\n}\r\n\r\n.updraftplus-lock-advert {\r\n\tclear: left;\r\n\tmax-width: 600px;\r\n}\r\n\r\n.uncompressed-data {\r\n\tclear: left;\r\n\tmax-width: 600px;\r\n}\r\n\r\n.delete-old-directories {\r\n\tpadding: 8px;\r\n\tpadding-bottom: 12px;\r\n}\r\n\r\n.active-jobs {\r\n\tmin-width: 480px;\r\n\tmin-height: 48px;\r\n\ttext-align: center;\r\n\tmargin-top: 4px;\r\n\tpadding: 8px;\r\n\tborder: 1px solid;\r\n\tfloat: left;\r\n\tclear: left;\r\n}\r\n\r\n.job-id {\r\n\tmin-width: 480px;\r\n\tmargin-top: 4px;\r\n\tpadding: 8px;\r\n\tborder: 1px solid;\r\n\tclear: left;\r\n\tfloat: left;\r\n}\r\n\r\n.next-resumption {\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraft_percentage {\r\n\tz-index: -1;\r\n\tposition: absolute;\r\n\tleft: 0px;\r\n\ttop: 0px;\r\n\ttext-align: center;\r\n\tbackground-color: #F6A828;\r\n}\r\n\r\n.curstage {\r\n\tborder-radius: 4px;\r\n\tmargin-top: 8px;\r\n\tpadding-top: 4px;\r\n\tborder: 1px solid #AAA;\r\n\twidth: 100%;\r\n\theight: 22px;\r\n\tposition: relative;\r\n\ttext-align: center;\r\n\tfont-style: italic;\r\n}\r\n\r\n.retain-files {\r\n\twidth: 48px;\r\n}\r\n\r\n.backup-interval-description tr td div {\r\n\tmax-width: 670px;\r\n}\r\n\r\n#updraft-manualdecrypt-modal {\r\n\twidth: 85%;\r\n\tmargin: 6px;\r\n\tmargin-left: 100px;\r\n}\r\n\r\n.directory-permissions {\r\n\tfont-size: 110%;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.double-warning {\r\n\tborder: 1px solid;\r\n\tpadding: 6px;\r\n}\r\n\r\n.raw-backup-info {\r\n\tfont-style: italic;\r\n\tfont-weight: bold;\r\n\tfont-size: 120%;\r\n}\r\n\r\n.updraft_existingbackup_date {\r\n\twidth: 22%;\r\n\tmax-width: 140px;\r\n}\r\n\r\n.existing-backups-table {\r\n\tmargin-top: 20px;\r\n\tmargin-left: 20px;\r\n\twidth: 80%;\r\n}\r\n\r\n.tr-bottom-4 {\r\n\tmargin-bottom: 4px;\r\n}\r\n\r\n.form-table .backup-date {\r\n\twidth: 172px;\r\n\tpadding: 0;\r\n\tpadding-left: 15px;\r\n}\r\n\r\n.form-table .backup-data {\r\n\twidth: 426px;\r\n\tpadding: 0;\r\n\tpadding-left: 15px;\r\n}\r\n\r\n.form-table .updraft_backup_actions {\r\n\twidth: 272px;\r\n\tpadding: 0 0 10px 15px;\r\n}\r\n\r\n.existing-date {\r\n\t-webkit-box-sizing: border-box;\r\n\t-moz-box-sizing: border-box;\r\n\tbox-sizing: border-box;\r\n\tmax-width: 140px;\r\n\twidth: 25%;\r\n}\r\n\r\n.line-break-tr {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.line-break-td {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.td-line-color {\r\n\theight: 2px;\r\n\tbackground-color: #888;\r\n}\r\n\r\n.raw-backup {\r\n\tmax-width: 140px;\r\n}\r\n\r\n.existing-backups-actions {\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.existing-backups-border {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.existing-backups-border > td {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.existing-backups-border > div {\r\n\theight: 2px;\r\n\tbackground-color: #AAA;\r\n}\r\n\r\n.updraft_existing_backup_date {\r\n\tmax-width: 140px;\r\n}\r\n\r\n.restore-button {\r\n\tmargin-right: 6px;\r\n\tfloat: left;\r\n\tclear: none;\r\n}\r\n\r\n.updraftplus-remove {\r\n\tfont-size: 16px;\r\n\ttext-align: center;\r\n\tborder-radius: 4px;\r\n}\r\n\r\n.before-restore-button {\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.table-separator-tr {\r\n\theight: 2px;\r\n\tpadding: 1px;\r\n\tmargin: 0px;\r\n}\r\n\r\n.table-separator-td {\r\n\tmargin: 0px;\r\n\tpadding: 0px;\r\n}\r\n\r\n.end-of-table-div {\r\n\theight: 2px;\r\n\tbackground-color: #AAA;\r\n}\r\n\r\n.last-backup-job {\r\n\tpadding-top: 3% !important;\r\n}\r\n\r\n.line-height-03 {\r\n\tline-height: 0.3 !important;\r\n}\r\n\r\n.line-height-13 {\r\n\tline-height: 1.3 !important;\r\n}\r\n\r\n.line-height-23 {\r\n\tline-height: 2.3 !important;\r\n}\r\n\r\n#updraft_diskspaceused {\r\n\tcolor: #DF6926;\r\n}\r\n\r\n.updraft_premium_description_list {\r\n\ttext-align: left;\r\n}\r\n\r\n#updraft_delete_old_dirs_pagediv {\r\n\tpadding-bottom: 10px;\r\n}\r\n\r\n/*#updraft_lastlogmessagerow > td, #updraft_last_backup > td {\r\n\tpadding: 0;\r\n}*/\r\n\r\n.job-id {\r\n\tmargin: 0 auto;\r\n\twidth: 20%;\r\n}\r\n\r\n.updraft_all-files {\r\n\tcolor: #DF6926;\r\n}\r\n\r\n/* Time + scheduling add-on*/\r\n.fix-time {\r\n\twidth: 70px;\r\n}\r\n\r\n.retain-files {\r\n\twidth: 70px;\r\n}\r\n\r\n.number-input {\r\n\tmin-width: 50px;\r\n\tmax-width: 70px;\r\n}\r\n\r\n.additional-rule-width {\r\n\tmin-width: 60px;\r\n\tmax-width: 70px;\r\n}\r\n\r\n/* Add-ons */\r\n/* Want to fix the WordPress icons so that they fit inline with the text, and don't push everything out of place. */\r\n\r\n.dashicons {\r\n\tline-height: inherit;\r\n\tfont-size: inherit;\r\n}\r\n\r\n.addon-logo-150 {\r\n\tmargin-left: 30px;\r\n\tmargin-top: 33px;\r\n\theight: 125px;\r\n\twidth: 150px;\r\n}\r\n\r\n.margin-bottom-50 {\r\n\tmargin-bottom: 50px;\r\n}\r\n\r\n.premium-container {\r\n\twidth: 80%;\r\n}\r\n\r\n/* Main Header */\r\n\r\n.main-header {\r\n\tbackground-color: #DF6926;\r\n\theight: 200px;\r\n\twidth: 100%;\r\n}\r\n\r\n.button-add-to-cart {\r\n\tcolor: white;\r\n\tborder-color: white;\r\n\tfloat: none;\r\n\tmargin-right: 17px;\r\n}\r\n\r\n.button-add-to-cart:hover, .button-add-to-cart:focus, .button-add-to-cart:active {\r\n\tborder-color: #A0A5AA;\r\n\tcolor: #A0A5AA;\r\n}\r\n\r\n.addon-title {\r\n\tmargin-top: 25px;\r\n}\r\n\r\n.addon-text {\r\n\tmargin-top: 75px;\r\n}\r\n\r\n.image-main-div {\r\n\twidth: 25%;\r\n\tfloat: left;\r\n}\r\n\r\n.text-main-div {\r\n\twidth: 60%;\r\n\tfloat: left;\r\n\ttext-align: center;\r\n\tcolor: white;\r\n\tmargin-top: 16px;\r\n}\r\n\r\n.text-main-div-title {\r\n\tfont-weight: bold !important;\r\n\tcolor: white;\r\n\ttext-align: center;\r\n}\r\n\r\n.text-main-div-paragraph {\r\n\tcolor: white;\r\n}\r\n\r\n/* End main header */\r\n\r\n/* Vault icons */\r\n\r\n.updraftplus-vault-cta {\r\n\twidth: 100%;\r\n\ttext-align: center;\r\n\tmargin-bottom: 50px;\r\n}\r\n\r\n.updraftplus-vault-cta h1 {\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraftvault-buy {\r\n\twidth: 225px;\r\n\theight: 225px;\r\n\tborder: 2px solid #777;\r\n\tdisplay: inline-table;\r\n\tmargin: 0 auto;\r\n\tmargin-right: 50px;\r\n\tposition: relative;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault {\r\n\twidth: 275px;\r\n\theight: 275px;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault > a {\r\n\tright: 21%;\r\n\tfont-size: 16px;\r\n\tborder-width: 4px !important;\r\n}\r\n\r\n.updraftplus-vault-cta > .vault-options > .center-vault > p {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.updraftvault-buy .button-purchase {\r\n\tright: 24%;\r\n\tmargin-left: 0;\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.updraftvault-buy hr {\r\n\theight: 2px;\r\n\tbackground-color: #777;\r\n\tmargin-top: 18px;\r\n}\r\n\r\n.right {\r\n\tmargin-right: 0px;\r\n}\r\n\r\n.updraftvault-buy .addon-logo-100 {\r\n\theight: 100px;\r\n\twidth: 125px;\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.updraftvault-buy .addon-logo-large {\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.updraftvault-buy .button-buy-vault {\r\n\tfont-size: 12px;\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tborder-width: 2px !important;\r\n\tposition: absolute;\r\n\tright: 29%;\r\n\tbottom: 2%;\r\n}\r\n\r\n.premium-addon-div .button-purchase {\r\n\tline-height: 1.7em;\r\n}\r\n\r\n.updraftvault-buy .button-buy-vault:hover {\r\n\tborder-color: darkgrey;\r\n\tcolor: darkgrey;\r\n}\r\n\r\n/* End Vault icons */\r\n\r\n/* Premium addons */\r\n\r\n.premium-addons {\r\n\tmargin-top: 80px;\r\n\twidth: 100%;\r\n\tmargin: 0 auto;\r\n\tdisplay: table;\r\n}\r\n\r\n.addon-list {\r\n\t/* margin-left: 32px; */\r\n\tdisplay: table;\r\n\ttext-align: center;\r\n}\r\n\r\n.premium-addons h1 {\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.premium-addons p {\r\n\ttext-align: center;\r\n}\r\n\r\n.premium-addons .premium-addon-div {\r\n\twidth: 200px;\r\n\theight: 250px;\r\n\tborder: 2px solid #777;\r\n\tdisplay: inline-table;\r\n\tmargin: 0 auto;\r\n\tmargin-right: 25px;\r\n\tmargin-top: 25px;\r\n\ttext-align: center;\r\n\tposition: relative;\r\n}\r\n\r\n.premium-addons .premium-addon-div p {\r\n\tmargin-left: 2px;\r\n\tmargin-right: 2px;\r\n}\r\n\r\n.premium-addons .premium-addon-div img {\r\n\twidth: auto;\r\n\theight: 50px;\r\n\tmargin-top: 7px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .hr-alignment {\r\n\tmargin-top: 44px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .dropbox-logo {\r\n\theight: 39px;\r\n\twidth: 150px;\r\n}\r\n\r\n.premium-addons .premium-addon-div .azure-logo, .premium-addons .premium-addon-div .onedrive-logo {\r\n\twidth: 75%;\r\n\theight: 24px;\r\n}\r\n\r\n.button-purchase {\r\n\tfont-size: 12px;\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tborder-width: 2px !important;\r\n\tposition: absolute;\r\n\tright: 25%;\r\n\tbottom: 2%;\r\n}\r\n\r\n.button-purchase:hover {\r\n\tcolor: darkgrey;\r\n\tborder-color: darkgrey;\r\n}\r\n\r\n.premium-addons .premium-addon-div hr {\r\n\theight: 2px;\r\n\tbackground-color: #777;\r\n\tmargin-top: 18px;\r\n}\r\n\r\n.premium-addon-div p {\r\n\tfont-style: italic;\r\n}\r\n\r\n.addon-list > .premium-addon-div > .onedrive-fix,\r\n.addon-list > .premium-addon-div > .azure-logo {\r\n\tmargin-top: 33px;\r\n}\r\n\r\n.addon-list > .premium-addon-div > .dropbox-fix {\r\n\tmargin-top: 18px;\r\n}\r\n\r\n/* End premium addons */\r\n\r\n\r\n/* Forgotton something (that is the name of the div rather than a mental note!) */\r\n\r\n.premium-forgotton-something {\r\n\tmargin-top: 5%;\r\n}\r\n\r\n.premium-forgotton-something h1 {\r\n\ttext-align: center;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.premium-forgotton-something p {\r\n\ttext-align: center;\r\n\tfont-weight: normal;\r\n}\r\n\r\n.premium-forgotton-something .button-faq {\r\n\tcolor: #DF6926;\r\n\tborder-color: #DF6926;\r\n\tmargin: 0 auto;\r\n\tdisplay: table;\r\n}\r\n\r\n.premium-forgotton-something .button-faq:hover {\r\n\tcolor: #777;\r\n\tborder-color: #777;\r\n}\r\n\r\n/* End of forgotton something */\r\n\r\n.updraftplusmethod.updraftvault #vaultlogo {\r\n\tpadding-left: 40px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault_primary_option {\r\n\tfloat: left;\r\n\twidth: 50%;\r\n\ttext-align: center;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault_primary_option div {\r\n\tclear: right;\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .clear-left {\r\n\tclear: left;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .padding-top-20px {\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .padding-top-14px {\r\n\tpadding-top: 14px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_default .button-primary, .updraftplusmethod.updraftvault #updraftvault_settings_showoptions .button-primary {\r\n\tfont-size: 18px !important;\r\n\tpadding-bottom: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_showoptions, .updraftplusmethod.updraftvault #updraftvault_connect {\r\n\tmargin-top: 8px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_connect input {\r\n\tmargin-right: 10px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_email {\r\n\twidth: 280px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_pass {\r\n\twidth: 200px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #vault-is-connected {\r\n\tmargin: 0;\r\n\tpadding: 0;\r\n}\r\n\r\n.updraftplusmethod.updraftvault #updraftvault_settings_default p {\r\n\tclear: left;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option {\r\n\tfloat: left;\r\n\twidth: 33%;\r\n\ttext-align: center;\r\n\tpadding-top: 20px;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-size {\r\n\tfont-size: 200%;\r\n\tfont-weight: bold;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-link {\r\n\tclear: both;\r\n\tfont-size: 150%;\r\n}\r\n\r\n.updraftplusmethod.updraftvault .vault-purchase-option-or {\r\n\tclear: both;\r\n\tfont-size: 115%;\r\n\tfont-style: italic;\r\n}\r\n\r\n/* Automation Backup Advert by B */\r\n.autobackup-image {\r\n/* \tdisplay: inline-block; */\r\n/*\tmin-width: 10%;\r\n\tmax-width:25%;*/\r\n/*\tfloat: left;*/\r\n\tclear: left;\r\n\tfloat: left;\r\n\twidth: 110px;\r\n\theight: 110px;\r\n}\r\n\r\n.autobackup-description {\r\n\twidth: 100%;\r\n}\r\n\r\n.advert-description {\r\n\tfloat: left;\r\n\tclear: right;\r\n\tpadding: 4px 10px 8px 10px;\r\n\twidth: 70%;\r\n\tclear: right;\r\n\tvertical-align: top;\r\n}\r\n\r\n.advert-btn {\r\n\tdisplay: inline-block;\r\n\tmin-width: 10%;\r\n\tvertical-align: top;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n.advert-btn:first-of-type {\r\n\tmargin-top: 25px;\r\n}\r\n\r\n.advert-btn a {\r\n\tdisplay: block;\r\n\tcursor: pointer;\r\n}\r\n\r\na.btn-get-started {\r\n\tbackground: #FFF;\r\n\tborder: 2px solid #DF6926;\r\n\tborder-radius: 4px;\r\n\tcolor: #DF6926;\r\n\tdisplay: inline-block;\r\n\tmargin-left: 10px !important;\r\n\tmargin-bottom: 7px !important;\r\n\tfont-size: 18px !important;\r\n\tline-height: 20px;\r\n\tmin-height: 28px;\r\n\tpadding: 11px 10px 5px 10px;\r\n\ttext-transform: uppercase;\r\n\ttext-decoration: none;\r\n}\r\n\r\n.circle-dblarrow {\r\n\tborder: 1px solid #DF6926;\r\n\tborder-radius: 100%;\r\n\tdisplay: inline-block;\r\n\tfont-size: 17px;\r\n\tline-height: 17px;\r\n\tmargin-left: 5px;\r\n\twidth: 20px;\r\n\theight: 20px;\r\n\ttext-align: center;\r\n}\r\n\r\n@media screen and (max-width: 782px) {\r\n/*\t.advert-description {\r\n\t\tmin-width: 75%;\r\n\t\tmargin-bottom: 5px;\r\n\t}\r\n\r\n\t.advert-btn {\r\n\t\tmargin-top: 15px;\r\n\t\tmargin-left:86px;\r\n\t\tmin-width: 100%;\r\n\t}*/\r\n}\r\n\r\n/* End Automation Backup Advert by B */\r\n/* New Responsive Pretty Advanced Settings */\r\n.expertmode .advanced_settings_container {\r\n\theight: auto;\r\n\toverflow: hidden;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu {\r\n\tfloat: none;\r\n\tborder-bottom: 1px solid rgb(204, 204, 204);\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content {\r\n\tpadding-top: 5px;\r\n\tfloat: none;\r\n\twidth: auto;\r\n\toverflow: auto;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content h3 {\r\n\tmargin-top: 5px !important;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content .advanced_tools {\r\n\tdisplay: none;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content .site_info {\r\n\tdisplay: block;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button {\r\n\tdisplay: inline-block;\r\n\tcursor: pointer;\r\n\tpadding: 5px;\r\n\tcolor: #000;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_text {\r\n\tfont-size: 16px;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button:hover {\r\n\tbackground-color: #EAEAEA;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .active {\r\n\tbackground-color: #3498DB;\r\n\tcolor: #FFF;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_menu .active:hover {\r\n\tbackground-color: #72C5FD;\r\n\tcolor: #FFF;\r\n}\r\n\r\n.expertmode .advanced_settings_container .advanced_settings_content input#import_settings {\r\n\theight: auto !important;\r\n}\r\n\r\ndiv#updraft-wrap a {\r\n\tcursor: pointer !important;\r\n}\r\n\r\n.updraftcentral_wizard_option {\r\n\twidth: 45%;\r\n\tfloat: left;\r\n\ttext-align: center;\r\n}\r\n\r\n.updraftcentral_wizard_option label {\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n#updraftcentral_keys_table {\r\n\tdisplay: none;\r\n}\r\n\r\n.create_key_container {\r\n\tborder: 1px solid;\r\n\tborder-radius: 4px;\r\n\tpadding: 0 0 6px 6px;\r\n\tmargin-bottom: 8px;\r\n}\r\n\r\n@media screen and (min-width: 670px) {\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_menu {\r\n\t\tfloat: left;\r\n\t\twidth: 215px;\r\n\t\tborder-right: 1px solid rgb(204, 204, 204);\r\n\t\tborder-bottom: none;\r\n\t}\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_content {\r\n\t\tpadding-left: 10px;\r\n\t\tpadding-top: 0px;\r\n\t}\r\n\r\n\t.expertmode .advanced_settings_container .advanced_settings_menu .advanced_tools_button {\r\n\t\tdisplay: block;\r\n\t}\r\n\r\n}\r\n"]}
|
Binary file
|
Binary file
|
@@ -1,594 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Dropbox API base class
|
5 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
6 |
-
* @link https://github.com/benthedesigner/dropbox
|
7 |
-
* @link https://www.dropbox.com/developers
|
8 |
-
* @link https://status.dropbox.com Dropbox status
|
9 |
-
* @package Dropbox
|
10 |
-
*/
|
11 |
-
class UpdraftPlus_Dropbox_API
|
12 |
-
{
|
13 |
-
// API Endpoints
|
14 |
-
const API_URL = 'https://api.dropbox.com/1/';
|
15 |
-
const API_URL_V2 = 'https://api.dropboxapi.com/2/';
|
16 |
-
const CONTENT_URL = 'https://api-content.dropbox.com/1/';
|
17 |
-
|
18 |
-
/**
|
19 |
-
* OAuth consumer object
|
20 |
-
* @var null|OAuth\Consumer
|
21 |
-
*/
|
22 |
-
private $OAuth;
|
23 |
-
|
24 |
-
/**
|
25 |
-
* The root level for file paths
|
26 |
-
* Either `dropbox` or `sandbox` (preferred)
|
27 |
-
* @var null|string
|
28 |
-
*/
|
29 |
-
private $root;
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Format of the API response
|
33 |
-
* @var string
|
34 |
-
*/
|
35 |
-
private $responseFormat = 'php';
|
36 |
-
|
37 |
-
/**
|
38 |
-
* JSONP callback
|
39 |
-
* @var string
|
40 |
-
*/
|
41 |
-
private $callback = 'dropboxCallback';
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Chunk size used for chunked uploads
|
45 |
-
* @see \Dropbox\API::chunkedUpload()
|
46 |
-
*/
|
47 |
-
private $chunkSize = 4194304;
|
48 |
-
|
49 |
-
/**
|
50 |
-
* Set the OAuth consumer object
|
51 |
-
* See 'General Notes' at the link below for information on access type
|
52 |
-
* @link https://www.dropbox.com/developers/reference/api
|
53 |
-
* @param OAuth\Consumer\ConsumerAbstract $OAuth
|
54 |
-
* @param string $root Dropbox app access type
|
55 |
-
*/
|
56 |
-
public function __construct(Dropbox_ConsumerAbstract $OAuth, $root = 'sandbox')
|
57 |
-
{
|
58 |
-
$this->OAuth = $OAuth;
|
59 |
-
$this->setRoot($root);
|
60 |
-
}
|
61 |
-
|
62 |
-
/**
|
63 |
-
* Set the root level
|
64 |
-
* @param mixed $root
|
65 |
-
* @throws Exception
|
66 |
-
* @return void
|
67 |
-
*/
|
68 |
-
public function setRoot($root)
|
69 |
-
{
|
70 |
-
if ($root !== 'sandbox' && $root !== 'dropbox') {
|
71 |
-
throw new Exception("Expected a root of either 'dropbox' or 'sandbox', got '$root'");
|
72 |
-
} else {
|
73 |
-
$this->root = $root;
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
/**
|
78 |
-
* Retrieves information about the user's account
|
79 |
-
* @return object stdClass
|
80 |
-
*/
|
81 |
-
public function accountInfo()
|
82 |
-
{
|
83 |
-
$response = $this->fetch('POST', self::API_URL, 'account/info');
|
84 |
-
return $response;
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Uploads a physical file from disk
|
89 |
-
* Dropbox impose a 150MB limit to files uploaded via the API. If the file
|
90 |
-
* exceeds this limit or does not exist, an Exception will be thrown
|
91 |
-
* @param string $file Absolute path to the file to be uploaded
|
92 |
-
* @param string|bool $filename The destination filename of the uploaded file
|
93 |
-
* @param string $path Path to upload the file to, relative to root
|
94 |
-
* @param boolean $overwrite Should the file be overwritten? (Default: true)
|
95 |
-
* @return object stdClass
|
96 |
-
*/
|
97 |
-
public function putFile($file, $filename = false, $path = '', $overwrite = true)
|
98 |
-
{
|
99 |
-
if (file_exists($file)) {
|
100 |
-
if (filesize($file) <= 157286400) {
|
101 |
-
$call = 'files/' . $this->root . '/' . $this->encodePath($path);
|
102 |
-
// If no filename is provided we'll use the original filename
|
103 |
-
$filename = (is_string($filename)) ? $filename : basename($file);
|
104 |
-
$params = array(
|
105 |
-
'filename' => $filename,
|
106 |
-
'file' => '@' . str_replace('\\', '/', $file) . ';filename=' . $filename,
|
107 |
-
'overwrite' => (int) $overwrite,
|
108 |
-
);
|
109 |
-
$response = $this->fetch('POST', self::CONTENT_URL, $call, $params);
|
110 |
-
return $response;
|
111 |
-
}
|
112 |
-
throw new Exception('File exceeds 150MB upload limit');
|
113 |
-
}
|
114 |
-
|
115 |
-
// Throw an Exception if the file does not exist
|
116 |
-
throw new Exception('Local file ' . $file . ' does not exist');
|
117 |
-
}
|
118 |
-
|
119 |
-
/**
|
120 |
-
* Uploads file data from a stream
|
121 |
-
* Note: This function is experimental and requires further testing
|
122 |
-
* @todo Add filesize check
|
123 |
-
* @param resource $stream A readable stream created using fopen()
|
124 |
-
* @param string $filename The destination filename, including path
|
125 |
-
* @param boolean $overwrite Should the file be overwritten? (Default: true)
|
126 |
-
* @return array
|
127 |
-
*/
|
128 |
-
public function putStream($stream, $filename, $overwrite = true)
|
129 |
-
{
|
130 |
-
$this->OAuth->setInFile($stream);
|
131 |
-
$path = $this->encodePath($filename);
|
132 |
-
$call = 'files_put/' . $this->root . '/' . $path;
|
133 |
-
$params = array('overwrite' => (int) $overwrite);
|
134 |
-
$response = $this->fetch('PUT', self::CONTENT_URL, $call, $params);
|
135 |
-
return $response;
|
136 |
-
}
|
137 |
-
|
138 |
-
/**
|
139 |
-
* Uploads large files to Dropbox in mulitple chunks
|
140 |
-
* @param string $file Absolute path to the file to be uploaded
|
141 |
-
* @param string|bool $filename The destination filename of the uploaded file
|
142 |
-
* @param string $path Path to upload the file to, relative to root
|
143 |
-
* @param boolean $overwrite Should the file be overwritten? (Default: true)
|
144 |
-
* @param integer $offset position to seek to when opening the file
|
145 |
-
* @param string $uploadID existing upload_id to resume an upload
|
146 |
-
* @param string|array function to call back to upon each chunk
|
147 |
-
* @return stdClass
|
148 |
-
*/
|
149 |
-
public function chunkedUpload($file, $filename = false, $path = '', $overwrite = true, $offset = 0, $uploadID = null, $callback = null)
|
150 |
-
{
|
151 |
-
if (file_exists($file)) {
|
152 |
-
if ($handle = @fopen($file, 'r')) {
|
153 |
-
// Set initial upload ID and offset
|
154 |
-
if ($offset > 0) {
|
155 |
-
fseek($handle, $offset);
|
156 |
-
}
|
157 |
-
|
158 |
-
// Read from the file handle until EOF, uploading each chunk
|
159 |
-
while ($data = fread($handle, $this->chunkSize)) {
|
160 |
-
// Open a temporary file handle and write a chunk of data to it
|
161 |
-
$chunkHandle = fopen('php://temp', 'rw');
|
162 |
-
fwrite($chunkHandle, $data);
|
163 |
-
|
164 |
-
// Set the file, request parameters and send the request
|
165 |
-
$this->OAuth->setInFile($chunkHandle);
|
166 |
-
$params = array('upload_id' => $uploadID, 'offset' => $offset);
|
167 |
-
$response = $this->fetch('PUT', self::CONTENT_URL, 'chunked_upload', $params);
|
168 |
-
|
169 |
-
// On subsequent chunks, use the upload ID returned by the previous request
|
170 |
-
if (isset($response['body']->upload_id)) {
|
171 |
-
$uploadID = $response['body']->upload_id;
|
172 |
-
}
|
173 |
-
|
174 |
-
if (isset($response['body']->offset)) {
|
175 |
-
$offset = $response['body']->offset;
|
176 |
-
if ($callback) {
|
177 |
-
call_user_func($callback, $offset, $uploadID, $file);
|
178 |
-
}
|
179 |
-
}
|
180 |
-
|
181 |
-
// Close the file handle for this chunk
|
182 |
-
fclose($chunkHandle);
|
183 |
-
}
|
184 |
-
|
185 |
-
// Complete the chunked upload
|
186 |
-
$filename = (is_string($filename)) ? $filename : basename($file);
|
187 |
-
$call = 'commit_chunked_upload/' . $this->root . '/' . $this->encodePath($path . $filename);
|
188 |
-
$params = array('overwrite' => (int) $overwrite, 'upload_id' => $uploadID);
|
189 |
-
$response = $this->fetch('POST', self::CONTENT_URL, $call, $params);
|
190 |
-
return $response;
|
191 |
-
} else {
|
192 |
-
throw new Exception('Could not open ' . $file . ' for reading');
|
193 |
-
}
|
194 |
-
}
|
195 |
-
|
196 |
-
// Throw an Exception if the file does not exist
|
197 |
-
throw new Exception('Local file ' . $file . ' does not exist');
|
198 |
-
}
|
199 |
-
|
200 |
-
/**
|
201 |
-
* Downloads a file
|
202 |
-
* Returns the base filename, raw file data and mime type returned by Fileinfo
|
203 |
-
* @param string $file Path to file, relative to root, including path
|
204 |
-
* @param string $outFile Filename to write the downloaded file to
|
205 |
-
* @param string $revision The revision of the file to retrieve
|
206 |
-
* @param boolean $allow_resume - append to the file if it already exists
|
207 |
-
* @return array
|
208 |
-
*/
|
209 |
-
public function getFile($file, $outFile = false, $revision = null, $allow_resume = false)
|
210 |
-
{
|
211 |
-
// Only allow php response format for this call
|
212 |
-
if ($this->responseFormat !== 'php') {
|
213 |
-
throw new Exception('This method only supports the `php` response format');
|
214 |
-
}
|
215 |
-
|
216 |
-
$params = array('rev' => $revision);
|
217 |
-
|
218 |
-
$handle = null;
|
219 |
-
if ($outFile !== false) {
|
220 |
-
// Create a file handle if $outFile is specified
|
221 |
-
if ($allow_resume && file_exists($outFile)) {
|
222 |
-
if (!$handle = fopen($outFile, 'a')) {
|
223 |
-
throw new Exception("Unable to open file handle for $outFile");
|
224 |
-
} else {
|
225 |
-
$this->OAuth->setOutFile($handle);
|
226 |
-
$params['headers'] = array('Range: bytes='.filesize($outFile).'-');
|
227 |
-
}
|
228 |
-
}
|
229 |
-
elseif (!$handle = fopen($outFile, 'w')) {
|
230 |
-
throw new Exception("Unable to open file handle for $outFile");
|
231 |
-
} else {
|
232 |
-
$this->OAuth->setOutFile($handle);
|
233 |
-
}
|
234 |
-
}
|
235 |
-
|
236 |
-
$file = $this->encodePath($file);
|
237 |
-
$call = 'files/' . $this->root . '/' . $file;
|
238 |
-
$response = $this->fetch('GET', self::CONTENT_URL, $call, $params);
|
239 |
-
|
240 |
-
// Close the file handle if one was opened
|
241 |
-
if ($handle) fclose($handle);
|
242 |
-
|
243 |
-
return array(
|
244 |
-
'name' => ($outFile) ? $outFile : basename($file),
|
245 |
-
'mime' => $this->getMimeType(($outFile) ? $outFile : $response['body'], $outFile),
|
246 |
-
'meta' => json_decode($response['headers']['x-dropbox-metadata']),
|
247 |
-
'data' => $response['body'],
|
248 |
-
);
|
249 |
-
}
|
250 |
-
|
251 |
-
/**
|
252 |
-
* Retrieves file and folder metadata
|
253 |
-
* @param string $path The path to the file/folder, relative to root
|
254 |
-
* @param string $rev Return metadata for a specific revision (Default: latest rev)
|
255 |
-
* @param int $limit Maximum number of listings to return
|
256 |
-
* @param string $hash Metadata hash to compare against
|
257 |
-
* @param bool $list Return contents field with response
|
258 |
-
* @param bool $deleted Include files/folders that have been deleted
|
259 |
-
* @return object stdClass
|
260 |
-
*/
|
261 |
-
public function metaData($path = null, $rev = null, $limit = 10000, $hash = false, $list = true, $deleted = false)
|
262 |
-
{
|
263 |
-
$call = 'metadata/' . $this->root . '/' . $this->encodePath($path);
|
264 |
-
$params = array(
|
265 |
-
'file_limit' => ($limit < 1) ? 1 : (($limit > 10000) ? 10000 : (int) $limit),
|
266 |
-
'hash' => (is_string($hash)) ? $hash : 0,
|
267 |
-
'list' => (int) $list,
|
268 |
-
'include_deleted' => (int) $deleted,
|
269 |
-
'rev' => (is_string($rev)) ? $rev : null,
|
270 |
-
);
|
271 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
272 |
-
return $response;
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* Return "delta entries", intructing you how to update
|
277 |
-
* your application state to match the server's state
|
278 |
-
* Important: This method does not make changes to the application state
|
279 |
-
* @param null|string $cursor Used to keep track of your current state
|
280 |
-
* @return array Array of delta entries
|
281 |
-
*/
|
282 |
-
public function delta($cursor = null)
|
283 |
-
{
|
284 |
-
$call = 'delta';
|
285 |
-
$params = array('cursor' => $cursor);
|
286 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
287 |
-
return $response;
|
288 |
-
}
|
289 |
-
|
290 |
-
/**
|
291 |
-
* Obtains metadata for the previous revisions of a file
|
292 |
-
* @param string Path to the file, relative to root
|
293 |
-
* @param integer Number of revisions to return (1-1000)
|
294 |
-
* @return array
|
295 |
-
*/
|
296 |
-
public function revisions($file, $limit = 10)
|
297 |
-
{
|
298 |
-
$call = 'revisions/' . $this->root . '/' . $this->encodePath($file);
|
299 |
-
$params = array(
|
300 |
-
'rev_limit' => ($limit < 1) ? 1 : (($limit > 1000) ? 1000 : (int) $limit),
|
301 |
-
);
|
302 |
-
$response = $this->fetch('GET', self::API_URL, $call, $params);
|
303 |
-
return $response;
|
304 |
-
}
|
305 |
-
|
306 |
-
/**
|
307 |
-
* Restores a file path to a previous revision
|
308 |
-
* @param string $file Path to the file, relative to root
|
309 |
-
* @param string $revision The revision of the file to restore
|
310 |
-
* @return object stdClass
|
311 |
-
*/
|
312 |
-
public function restore($file, $revision)
|
313 |
-
{
|
314 |
-
$call = 'restore/' . $this->root . '/' . $this->encodePath($file);
|
315 |
-
$params = array('rev' => $revision);
|
316 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
317 |
-
return $response;
|
318 |
-
}
|
319 |
-
|
320 |
-
/**
|
321 |
-
* Returns metadata for all files and folders that match the search query
|
322 |
-
* @param mixed $query The search string. Must be at least 3 characters long
|
323 |
-
* @param string $path The path to the folder you want to search in
|
324 |
-
* @param integer $limit Maximum number of results to return (1-1000)
|
325 |
-
* @param boolean $deleted Include deleted files/folders in the search
|
326 |
-
* @return array
|
327 |
-
*/
|
328 |
-
public function search($query, $path = '', $limit = 1000, $deleted = false)
|
329 |
-
{
|
330 |
-
$call = 'search/' . $this->root . '/' . $this->encodePath($path);
|
331 |
-
$params = array(
|
332 |
-
'query' => $query,
|
333 |
-
'file_limit' => ($limit < 1) ? 1 : (($limit > 1000) ? 1000 : (int) $limit),
|
334 |
-
'include_deleted' => (int) $deleted,
|
335 |
-
);
|
336 |
-
$response = $this->fetch('GET', self::API_URL, $call, $params);
|
337 |
-
return $response;
|
338 |
-
}
|
339 |
-
|
340 |
-
/**
|
341 |
-
* Creates and returns a shareable link to files or folders
|
342 |
-
* The link returned is for a preview page from which the user an choose to
|
343 |
-
* download the file if they wish. For direct download links, see media().
|
344 |
-
* @param string $path The path to the file/folder you want a sharable link to
|
345 |
-
* @return object stdClass
|
346 |
-
*/
|
347 |
-
public function shares($path, $shortUrl = true)
|
348 |
-
{
|
349 |
-
$call = 'shares/' . $this->root . '/' .$this->encodePath($path);
|
350 |
-
$params = array('short_url' => ($shortUrl) ? 1 : 0);
|
351 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
352 |
-
return $response;
|
353 |
-
}
|
354 |
-
|
355 |
-
/**
|
356 |
-
* Returns a link directly to a file
|
357 |
-
* @param string $path The path to the media file you want a direct link to
|
358 |
-
* @return object stdClass
|
359 |
-
*/
|
360 |
-
public function media($path)
|
361 |
-
{
|
362 |
-
$call = 'media/' . $this->root . '/' . $this->encodePath($path);
|
363 |
-
$response = $this->fetch('POST', self::API_URL, $call);
|
364 |
-
return $response;
|
365 |
-
}
|
366 |
-
|
367 |
-
/**
|
368 |
-
* Gets a thumbnail for an image
|
369 |
-
* @param string $file The path to the image you wish to thumbnail
|
370 |
-
* @param string $format The thumbnail format, either JPEG or PNG
|
371 |
-
* @param string $size The size of the thumbnail
|
372 |
-
* @return array
|
373 |
-
*/
|
374 |
-
public function thumbnails($file, $format = 'JPEG', $size = 'small')
|
375 |
-
{
|
376 |
-
// Only allow php response format for this call
|
377 |
-
if ($this->responseFormat !== 'php') {
|
378 |
-
throw new Exception('This method only supports the `php` response format');
|
379 |
-
}
|
380 |
-
|
381 |
-
$format = strtoupper($format);
|
382 |
-
// If $format is not 'PNG', default to 'JPEG'
|
383 |
-
if ($format != 'PNG') $format = 'JPEG';
|
384 |
-
|
385 |
-
$size = strtolower($size);
|
386 |
-
$sizes = array('s', 'm', 'l', 'xl', 'small', 'medium', 'large');
|
387 |
-
// If $size is not valid, default to 'small'
|
388 |
-
if (!in_array($size, $sizes)) $size = 'small';
|
389 |
-
|
390 |
-
$call = 'thumbnails/' . $this->root . '/' . $this->encodePath($file);
|
391 |
-
$params = array('format' => $format, 'size' => $size);
|
392 |
-
$response = $this->fetch('GET', self::CONTENT_URL, $call, $params);
|
393 |
-
|
394 |
-
return array(
|
395 |
-
'name' => basename($file),
|
396 |
-
'mime' => $this->getMimeType($response['body']),
|
397 |
-
'meta' => json_decode($response['headers']['x-dropbox-metadata']),
|
398 |
-
'data' => $response['body'],
|
399 |
-
);
|
400 |
-
}
|
401 |
-
|
402 |
-
/**
|
403 |
-
* Creates and returns a copy_ref to a file
|
404 |
-
* This reference string can be used to copy that file to another user's
|
405 |
-
* Dropbox by passing it in as the from_copy_ref parameter on /fileops/copy
|
406 |
-
* @param $path File for which ref should be created, relative to root
|
407 |
-
* @return array
|
408 |
-
*/
|
409 |
-
public function copyRef($path)
|
410 |
-
{
|
411 |
-
$call = 'copy_ref/' . $this->root . '/' . $this->encodePath($path);
|
412 |
-
$response = $this->fetch('GET', self::API_URL, $call);
|
413 |
-
return $response;
|
414 |
-
}
|
415 |
-
|
416 |
-
/**
|
417 |
-
* Copies a file or folder to a new location
|
418 |
-
* @param string $from File or folder to be copied, relative to root
|
419 |
-
* @param string $to Destination path, relative to root
|
420 |
-
* @param null|string $fromCopyRef Must be used instead of the from_path
|
421 |
-
* @return object stdClass
|
422 |
-
*/
|
423 |
-
public function copy($from, $to, $fromCopyRef = null)
|
424 |
-
{
|
425 |
-
$call = 'fileops/copy';
|
426 |
-
$params = array(
|
427 |
-
'root' => $this->root,
|
428 |
-
'from_path' => $this->normalisePath($from),
|
429 |
-
'to_path' => $this->normalisePath($to),
|
430 |
-
);
|
431 |
-
|
432 |
-
if ($fromCopyRef) {
|
433 |
-
$params['from_path'] = null;
|
434 |
-
$params['from_copy_ref'] = $fromCopyRef;
|
435 |
-
}
|
436 |
-
|
437 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
438 |
-
return $response;
|
439 |
-
}
|
440 |
-
|
441 |
-
/**
|
442 |
-
* Creates a folder
|
443 |
-
* @param string New folder to create relative to root
|
444 |
-
* @return object stdClass
|
445 |
-
*/
|
446 |
-
public function create($path)
|
447 |
-
{
|
448 |
-
$call = 'fileops/create_folder';
|
449 |
-
$params = array('root' => $this->root, 'path' => $this->normalisePath($path));
|
450 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
451 |
-
return $response;
|
452 |
-
}
|
453 |
-
|
454 |
-
/**
|
455 |
-
* Deletes a file or folder
|
456 |
-
* @param string $path The path to the file or folder to be deleted
|
457 |
-
* @return object stdClass
|
458 |
-
*/
|
459 |
-
public function delete($path)
|
460 |
-
{
|
461 |
-
$call = 'fileops/delete';
|
462 |
-
$params = array('root' => $this->root, 'path' => $this->normalisePath($path));
|
463 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
464 |
-
return $response;
|
465 |
-
}
|
466 |
-
|
467 |
-
/**
|
468 |
-
* Moves a file or folder to a new location
|
469 |
-
* @param string $from File or folder to be moved, relative to root
|
470 |
-
* @param string $to Destination path, relative to root
|
471 |
-
* @return object stdClass
|
472 |
-
*/
|
473 |
-
public function move($from, $to)
|
474 |
-
{
|
475 |
-
$call = 'fileops/move';
|
476 |
-
$params = array(
|
477 |
-
'root' => $this->root,
|
478 |
-
'from_path' => $this->normalisePath($from),
|
479 |
-
'to_path' => $this->normalisePath($to),
|
480 |
-
);
|
481 |
-
$response = $this->fetch('POST', self::API_URL, $call, $params);
|
482 |
-
return $response;
|
483 |
-
}
|
484 |
-
|
485 |
-
/**
|
486 |
-
* Intermediate fetch function
|
487 |
-
* @param string $method The HTTP method
|
488 |
-
* @param string $url The API endpoint
|
489 |
-
* @param string $call The API method to call
|
490 |
-
* @param array $params Additional parameters
|
491 |
-
* @return mixed
|
492 |
-
*/
|
493 |
-
private function fetch($method, $url, $call, array $params = array())
|
494 |
-
{
|
495 |
-
// Make the API call via the consumer
|
496 |
-
$response = $this->OAuth->fetch($method, $url, $call, $params);
|
497 |
-
|
498 |
-
// Format the response and return
|
499 |
-
switch ($this->responseFormat) {
|
500 |
-
case 'json':
|
501 |
-
return json_encode($response);
|
502 |
-
case 'jsonp':
|
503 |
-
$response = json_encode($response);
|
504 |
-
return $this->callback . '(' . $response . ')';
|
505 |
-
default:
|
506 |
-
return $response;
|
507 |
-
}
|
508 |
-
}
|
509 |
-
|
510 |
-
/**
|
511 |
-
* Set the API response format
|
512 |
-
* @param string $format One of php, json or jsonp
|
513 |
-
* @return void
|
514 |
-
*/
|
515 |
-
public function setResponseFormat($format)
|
516 |
-
{
|
517 |
-
$format = strtolower($format);
|
518 |
-
if (!in_array($format, array('php', 'json', 'jsonp'))) {
|
519 |
-
throw new Exception("Expected a format of php, json or jsonp, got '$format'");
|
520 |
-
} else {
|
521 |
-
$this->responseFormat = $format;
|
522 |
-
}
|
523 |
-
}
|
524 |
-
|
525 |
-
/**
|
526 |
-
* Set the chunk size for chunked uploads
|
527 |
-
* If $chunkSize is empty, set to 4194304 bytes (4 MB)
|
528 |
-
* @see \Dropbox\API\chunkedUpload()
|
529 |
-
*/
|
530 |
-
public function setChunkSize($chunkSize = 4194304)
|
531 |
-
{
|
532 |
-
if (!is_int($chunkSize)) {
|
533 |
-
throw new Exception('Expecting chunk size to be an integer, got ' . gettype($chunkSize));
|
534 |
-
} elseif ($chunkSize > 157286400) {
|
535 |
-
throw new Exception('Chunk size must not exceed 157286400 bytes, got ' . $chunkSize);
|
536 |
-
} else {
|
537 |
-
$this->chunkSize = $chunkSize;
|
538 |
-
}
|
539 |
-
}
|
540 |
-
|
541 |
-
/**
|
542 |
-
* Set the JSONP callback function
|
543 |
-
* @param string $function
|
544 |
-
* @return void
|
545 |
-
*/
|
546 |
-
public function setCallback($function)
|
547 |
-
{
|
548 |
-
$this->callback = $function;
|
549 |
-
}
|
550 |
-
|
551 |
-
/**
|
552 |
-
* Get the mime type of downloaded file
|
553 |
-
* If the Fileinfo extension is not loaded, return false
|
554 |
-
* @param string $data File contents as a string or filename
|
555 |
-
* @param string $isFilename Is $data a filename?
|
556 |
-
* @return boolean|string Mime type and encoding of the file
|
557 |
-
*/
|
558 |
-
private function getMimeType($data, $isFilename = false)
|
559 |
-
{
|
560 |
-
if (extension_loaded('fileinfo')) {
|
561 |
-
$finfo = new finfo(FILEINFO_MIME);
|
562 |
-
if ($isFilename !== false) {
|
563 |
-
return $finfo->file($data);
|
564 |
-
}
|
565 |
-
return $finfo->buffer($data);
|
566 |
-
}
|
567 |
-
return false;
|
568 |
-
}
|
569 |
-
|
570 |
-
/**
|
571 |
-
* Trim the path of forward slashes and replace
|
572 |
-
* consecutive forward slashes with a single slash
|
573 |
-
* @param string $path The path to normalise
|
574 |
-
* @return string
|
575 |
-
*/
|
576 |
-
private function normalisePath($path)
|
577 |
-
{
|
578 |
-
$path = preg_replace('#/+#', '/', trim($path, '/'));
|
579 |
-
return $path;
|
580 |
-
}
|
581 |
-
|
582 |
-
/**
|
583 |
-
* Encode the path, then replace encoded slashes
|
584 |
-
* with literal forward slash characters
|
585 |
-
* @param string $path The path to encode
|
586 |
-
* @return string
|
587 |
-
*/
|
588 |
-
private function encodePath($path)
|
589 |
-
{
|
590 |
-
$path = $this->normalisePath($path);
|
591 |
-
$path = str_replace('%2F', '/', rawurlencode($path));
|
592 |
-
return $path;
|
593 |
-
}
|
594 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Dropbox Exception class
|
5 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
6 |
-
* @link https://github.com/benthedesigner/dropbox
|
7 |
-
* @package Dropbox
|
8 |
-
*/
|
9 |
-
class Dropbox_Exception extends Exception {
|
10 |
-
}
|
11 |
-
|
12 |
-
class Dropbox_BadRequestException extends Exception {
|
13 |
-
}
|
14 |
-
|
15 |
-
class Dropbox_CurlException extends Exception {
|
16 |
-
}
|
17 |
-
|
18 |
-
class Dropbox_NotAcceptableException extends Exception {
|
19 |
-
}
|
20 |
-
|
21 |
-
class Dropbox_NotFoundException extends Exception {
|
22 |
-
}
|
23 |
-
|
24 |
-
class Dropbox_NotModifiedException extends Exception {
|
25 |
-
}
|
26 |
-
|
27 |
-
class Dropbox_UnsupportedMediaTypeException extends Exception {
|
28 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,433 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Abstract OAuth consumer
|
5 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
6 |
-
* @link https://github.com/benthedesigner/dropbox
|
7 |
-
* @package Dropbox\OAuth
|
8 |
-
* @subpackage Consumer
|
9 |
-
*/
|
10 |
-
|
11 |
-
abstract class Dropbox_ConsumerAbstract
|
12 |
-
{
|
13 |
-
// Dropbox web endpoint
|
14 |
-
const WEB_URL = 'https://www.dropbox.com/1/';
|
15 |
-
|
16 |
-
// OAuth flow methods
|
17 |
-
const AUTHORISE_METHOD = 'oauth2/authorize';
|
18 |
-
const DEAUTHORISE_METHOD = 'disable_access_token';
|
19 |
-
const ACCESS_TOKEN_METHOD = 'oauth2/token';
|
20 |
-
const OAUTH_UPGRADE = 'oauth2/token_from_oauth1';
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Signature method, either PLAINTEXT or HMAC-SHA1
|
24 |
-
* @var string
|
25 |
-
*/
|
26 |
-
private $sigMethod = 'PLAINTEXT';
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Output file handle
|
30 |
-
* @var null|resource
|
31 |
-
*/
|
32 |
-
protected $outFile = null;
|
33 |
-
|
34 |
-
/**
|
35 |
-
* Input file handle
|
36 |
-
* @var null|resource
|
37 |
-
*/
|
38 |
-
protected $inFile = null;
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Authenticate using 3-legged OAuth flow, firstly
|
42 |
-
* checking we don't already have tokens to use
|
43 |
-
* @return void
|
44 |
-
*/
|
45 |
-
protected function authenticate()
|
46 |
-
{
|
47 |
-
global $updraftplus;
|
48 |
-
|
49 |
-
$access_token = $this->storage->get('access_token');
|
50 |
-
//Check if the new token type is set if not they need to be upgraded to OAuth2
|
51 |
-
if (!empty($access_token) && isset($access_token->oauth_token) && !isset($access_token->token_type)) {
|
52 |
-
$updraftplus->log('OAuth v1 token found: upgrading to v2');
|
53 |
-
$this->upgradeOAuth();
|
54 |
-
$updraftplus->log('OAuth token upgrade successful');
|
55 |
-
}
|
56 |
-
|
57 |
-
if (empty($access_token) || !isset($access_token->oauth_token)) {
|
58 |
-
try {
|
59 |
-
$this->getAccessToken();
|
60 |
-
} catch(Exception $e) {
|
61 |
-
$excep_class = get_class($e);
|
62 |
-
// 04-Sep-2015 - Dropbox started throwing a 400, which caused a Dropbox_BadRequestException which previously wasn't being caught
|
63 |
-
if ('Dropbox_BadRequestException' == $excep_class || 'Dropbox_Exception' == $excep_class) {
|
64 |
-
global $updraftplus;
|
65 |
-
$updraftplus->log($e->getMessage().' - need to reauthenticate this site with Dropbox (if this fails, then you can also try wiping your settings from the Expert Settings section)');
|
66 |
-
//$this->getRequestToken();
|
67 |
-
$this->authorise();
|
68 |
-
} else {
|
69 |
-
throw $e;
|
70 |
-
}
|
71 |
-
}
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
/**
|
76 |
-
* Upgrade the user's OAuth1 token to a OAuth2 token
|
77 |
-
* @return void
|
78 |
-
*/
|
79 |
-
private function upgradeOAuth()
|
80 |
-
{
|
81 |
-
$url = UpdraftPlus_Dropbox_API::API_URL . self::OAUTH_UPGRADE;
|
82 |
-
$response = $this->fetch('POST', $url, '');
|
83 |
-
$token = new stdClass();
|
84 |
-
/*
|
85 |
-
oauth token secret and oauth token were needed by oauth1
|
86 |
-
these are replaced in oauth2 with an access token
|
87 |
-
currently they are still there just in case a method somewhere is expecting them to both be set
|
88 |
-
as far as I can tell only the oauth token is used
|
89 |
-
after more testing token secret can be removed.
|
90 |
-
*/
|
91 |
-
|
92 |
-
$token->oauth_token_secret = $response['body']->access_token;
|
93 |
-
$token->oauth_token = $response['body']->access_token;
|
94 |
-
$token->token_type = $response['body']->token_type;
|
95 |
-
$this->storage->set($token, 'access_token');
|
96 |
-
$this->storage->set('true','upgraded');
|
97 |
-
$this->storage->do_unset('request_token');
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Obtain user authorisation
|
102 |
-
* The user will be redirected to Dropbox' web endpoint
|
103 |
-
* @link http://tools.ietf.org/html/rfc5849#section-2.2
|
104 |
-
* @return void
|
105 |
-
*/
|
106 |
-
private function authorise()
|
107 |
-
{
|
108 |
-
// Only redirect if not using CLI
|
109 |
-
if (PHP_SAPI !== 'cli' && (!defined('DOING_CRON') || !DOING_CRON) && (!defined('DOING_AJAX') || !DOING_AJAX)) {
|
110 |
-
$url = $this->getAuthoriseUrl();
|
111 |
-
if (!headers_sent()) {
|
112 |
-
header('Location: ' . $url);
|
113 |
-
exit;
|
114 |
-
} else {
|
115 |
-
throw new Dropbox_Exception(sprintf(__('The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help).', 'updraftplus'), 'Dropbox'));
|
116 |
-
}
|
117 |
-
?><?php
|
118 |
-
return false;
|
119 |
-
}
|
120 |
-
global $updraftplus;
|
121 |
-
$updraftplus->log('Dropbox reauthorisation needed; but we are running from cron, AJAX or the CLI, so this is not possible');
|
122 |
-
$this->storage->do_unset('access_token');
|
123 |
-
throw new Dropbox_Exception(sprintf(__('You need to re-authenticate with %s, as your existing credentials are not working.', 'updraftplus'), 'Dropbox'));
|
124 |
-
#$updraftplus->log(sprintf(__('You need to re-authenticate with %s, as your existing credentials are not working.', 'updraftplus'), 'Dropbox'), 'error');
|
125 |
-
return false;
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Build the user authorisation URL
|
130 |
-
* @return string
|
131 |
-
*/
|
132 |
-
public function getAuthoriseUrl()
|
133 |
-
{
|
134 |
-
/*
|
135 |
-
Generate a random key to be passed to Dropbox and stored in session to be checked to prevent CSRF
|
136 |
-
Uses OpenSSL or Mcrypt or defaults to pure PHP implementaion if neither are available.
|
137 |
-
*/
|
138 |
-
|
139 |
-
global $updraftplus;
|
140 |
-
if (!function_exists('crypt_random_string')) $updraftplus->ensure_phpseclib('Crypt_Random', 'Crypt/Random');
|
141 |
-
|
142 |
-
$CSRF = base64_encode(crypt_random_string(16));
|
143 |
-
$this->storage->set($CSRF,'CSRF');
|
144 |
-
// Prepare request parameters
|
145 |
-
/*
|
146 |
-
For OAuth v2 Dropbox needs to use a authorisation url that matches one that is set inside the
|
147 |
-
Dropbox developer console. In order to check this it needs the client ID for the OAuth v2 app
|
148 |
-
This will use the default one unless the user is using their own Dropbox App
|
149 |
-
|
150 |
-
For users that use their own Dropbox App there is also no need to provide the callbackhome as
|
151 |
-
part of the CSRF as there is no need to go to auth.updraftplus.com also the redirect uri can
|
152 |
-
then be set to the home as default
|
153 |
-
|
154 |
-
Check if the key has dropbox: if so then remove it to stop the request from being invalid
|
155 |
-
*/
|
156 |
-
$appkey = $this->storage->get('appkey');
|
157 |
-
|
158 |
-
if (!empty($appkey) && 'dropbox:' == substr($appkey, 0, 8)) {
|
159 |
-
$key = substr($appkey, 8);
|
160 |
-
} else if (!empty($appkey)) {
|
161 |
-
$key = $appkey;
|
162 |
-
}
|
163 |
-
|
164 |
-
$params = array(
|
165 |
-
'client_id' => empty($key) ? $this->oauth2_id : $key,
|
166 |
-
'response_type' => 'code',
|
167 |
-
'redirect_uri' => empty($key) ? $this->callback : $this->callbackhome,
|
168 |
-
'state' => empty($key) ? $CSRF.$this->callbackhome : $CSRF,
|
169 |
-
);
|
170 |
-
|
171 |
-
// Build the URL and redirect the user
|
172 |
-
$query = '?' . http_build_query($params, '', '&');
|
173 |
-
$url = self::WEB_URL . self::AUTHORISE_METHOD . $query;
|
174 |
-
return $url;
|
175 |
-
}
|
176 |
-
|
177 |
-
protected function deauthenticate()
|
178 |
-
{
|
179 |
-
$url = UpdraftPlus_Dropbox_API::API_URL . self::DEAUTHORISE_METHOD;
|
180 |
-
$response = $this->fetch('POST', $url, '');
|
181 |
-
$this->storage->delete();
|
182 |
-
}
|
183 |
-
|
184 |
-
/**
|
185 |
-
* Acquire an access token
|
186 |
-
* Tokens acquired at this point should be stored to
|
187 |
-
* prevent having to request new tokens for each API call
|
188 |
-
* @link http://tools.ietf.org/html/rfc5849#section-2.3
|
189 |
-
*/
|
190 |
-
public function getAccessToken()
|
191 |
-
{
|
192 |
-
|
193 |
-
// If this is non-empty, then we just received a code. It is stored in 'code' - our next job is to put it into the proper place.
|
194 |
-
$code = $this->storage->get('code');
|
195 |
-
/*
|
196 |
-
Checks to see if the user is using their own Dropbox App if so then they need to get
|
197 |
-
a request token. If they are using our App then we just need to save these details
|
198 |
-
*/
|
199 |
-
if (!empty($code)){
|
200 |
-
$appkey = $this->storage->get('appkey');
|
201 |
-
if (!empty($appkey)){
|
202 |
-
// Get the signed request URL
|
203 |
-
$url = UpdraftPlus_Dropbox_API::API_URL . self::ACCESS_TOKEN_METHOD;
|
204 |
-
$params = array(
|
205 |
-
'code' => $code,
|
206 |
-
'grant_type' => 'authorization_code',
|
207 |
-
'redirect_uri' => $this->callbackhome,
|
208 |
-
'client_id' => $this->consumerKey,
|
209 |
-
'client_secret' => $this->consumerSecret,
|
210 |
-
);
|
211 |
-
$response = $this->fetch('POST', $url, '' , $params);
|
212 |
-
|
213 |
-
$code = json_decode(json_encode($response['body']),true);
|
214 |
-
|
215 |
-
} else {
|
216 |
-
$code = base64_decode($code);
|
217 |
-
$code = json_decode($code, true);
|
218 |
-
}
|
219 |
-
|
220 |
-
/*
|
221 |
-
Again oauth token secret and oauth token were needed by oauth1
|
222 |
-
these are replaced in oauth2 with an access token
|
223 |
-
currently they are still there just in case a method somewhere is expecting them to both be set
|
224 |
-
as far as I can tell only the oauth token is used
|
225 |
-
after more testing token secret can be removed.
|
226 |
-
*/
|
227 |
-
|
228 |
-
$token = new stdClass();
|
229 |
-
$token->oauth_token_secret = $code['access_token'];
|
230 |
-
$token->oauth_token = $code['access_token'];
|
231 |
-
$token->account_id = $code['account_id'];
|
232 |
-
$token->token_type = $code['token_type'];
|
233 |
-
$token->uid = $code['uid'];
|
234 |
-
$this->storage->set($token, 'access_token');
|
235 |
-
$this->storage->do_unset('upgraded');
|
236 |
-
|
237 |
-
//reset code
|
238 |
-
$this->storage->do_unset('code');
|
239 |
-
} else {
|
240 |
-
throw new Dropbox_BadRequestException("No Dropbox Code found, will try to get one now", 400);
|
241 |
-
}
|
242 |
-
}
|
243 |
-
|
244 |
-
/**
|
245 |
-
* Get the request/access token
|
246 |
-
* This will return the access/request token depending on
|
247 |
-
* which stage we are at in the OAuth flow, or a dummy object
|
248 |
-
* if we have not yet started the authentication process
|
249 |
-
* @return object stdClass
|
250 |
-
*/
|
251 |
-
private function getToken()
|
252 |
-
{
|
253 |
-
if (!$token = $this->storage->get('access_token')) {
|
254 |
-
if (!$token = $this->storage->get('request_token')) {
|
255 |
-
$token = new stdClass();
|
256 |
-
$token->oauth_token = null;
|
257 |
-
$token->oauth_token_secret = null;
|
258 |
-
}
|
259 |
-
}
|
260 |
-
return $token;
|
261 |
-
}
|
262 |
-
|
263 |
-
/**
|
264 |
-
* Generate signed request URL
|
265 |
-
* See inline comments for description
|
266 |
-
* @link http://tools.ietf.org/html/rfc5849#section-3.4
|
267 |
-
* @param string $method HTTP request method
|
268 |
-
* @param string $url API endpoint to send the request to
|
269 |
-
* @param string $call API call to send
|
270 |
-
* @param array $additional Additional parameters as an associative array
|
271 |
-
* @return array
|
272 |
-
*/
|
273 |
-
protected function getSignedRequest($method, $url, $call, array $additional = array())
|
274 |
-
{
|
275 |
-
// Get the request/access token
|
276 |
-
$token = $this->getToken();
|
277 |
-
// Prepare the standard request parameters differnt for OAuth1 and OAuth2, we still need OAuth1 to make the request to the upgrade token endpoint
|
278 |
-
if (isset($token->token_type)) {
|
279 |
-
$params = array(
|
280 |
-
'access_token' => $token->oauth_token,
|
281 |
-
);
|
282 |
-
} else {
|
283 |
-
// Generate a random string for the request
|
284 |
-
$nonce = md5(microtime(true) . uniqid('', true));
|
285 |
-
$params = array(
|
286 |
-
'oauth_consumer_key' => $this->consumerKey,
|
287 |
-
'oauth_token' => $token->oauth_token,
|
288 |
-
'oauth_signature_method' => $this->sigMethod,
|
289 |
-
'oauth_version' => '1.0',
|
290 |
-
// Generate nonce and timestamp if signature method is HMAC-SHA1
|
291 |
-
'oauth_timestamp' => ($this->sigMethod == 'HMAC-SHA1') ? time() : null,
|
292 |
-
'oauth_nonce' => ($this->sigMethod == 'HMAC-SHA1') ? $nonce : null,
|
293 |
-
);
|
294 |
-
}
|
295 |
-
|
296 |
-
// Merge with the additional request parameters
|
297 |
-
$params = array_merge($params, $additional);
|
298 |
-
ksort($params);
|
299 |
-
|
300 |
-
// URL encode each parameter to RFC3986 for use in the base string
|
301 |
-
$encoded = array();
|
302 |
-
foreach($params as $param => $value) {
|
303 |
-
if ($value !== null) {
|
304 |
-
// If the value is a file upload (prefixed with @), replace it with
|
305 |
-
// the destination filename, the file path will be sent in POSTFIELDS
|
306 |
-
if (isset($value[0]) && $value[0] === '@') $value = $params['filename'];
|
307 |
-
# Prevent spurious PHP warning by only doing non-arrays
|
308 |
-
if (!is_array($value)) $encoded[] = $this->encode($param) . '=' . $this->encode($value);
|
309 |
-
} else {
|
310 |
-
unset($params[$param]);
|
311 |
-
}
|
312 |
-
}
|
313 |
-
|
314 |
-
// Build the first part of the string
|
315 |
-
$base = $method . '&' . $this->encode($url . $call) . '&';
|
316 |
-
|
317 |
-
// Re-encode the encoded parameter string and append to $base
|
318 |
-
$base .= $this->encode(implode('&', $encoded));
|
319 |
-
|
320 |
-
// Concatenate the secrets with an ampersand
|
321 |
-
$key = $this->consumerSecret . '&' . $token->oauth_token_secret;
|
322 |
-
|
323 |
-
// Get the signature string based on signature method
|
324 |
-
$signature = $this->getSignature($base, $key);
|
325 |
-
$params['oauth_signature'] = $signature;
|
326 |
-
|
327 |
-
// Build the signed request URL
|
328 |
-
$query = '?' . http_build_query($params, '', '&');
|
329 |
-
|
330 |
-
return array(
|
331 |
-
'url' => $url . $call . $query,
|
332 |
-
'postfields' => $params,
|
333 |
-
);
|
334 |
-
}
|
335 |
-
|
336 |
-
/**
|
337 |
-
* Generate the oauth_signature for a request
|
338 |
-
* @param string $base Signature base string, used by HMAC-SHA1
|
339 |
-
* @param string $key Concatenated consumer and token secrets
|
340 |
-
*/
|
341 |
-
private function getSignature($base, $key)
|
342 |
-
{
|
343 |
-
switch ($this->sigMethod) {
|
344 |
-
case 'PLAINTEXT':
|
345 |
-
$signature = $key;
|
346 |
-
break;
|
347 |
-
case 'HMAC-SHA1':
|
348 |
-
$signature = base64_encode(hash_hmac('sha1', $base, $key, true));
|
349 |
-
break;
|
350 |
-
}
|
351 |
-
|
352 |
-
return $signature;
|
353 |
-
}
|
354 |
-
|
355 |
-
/**
|
356 |
-
* Set the OAuth signature method
|
357 |
-
* @param string $method Either PLAINTEXT or HMAC-SHA1
|
358 |
-
* @return void
|
359 |
-
*/
|
360 |
-
public function setSignatureMethod($method)
|
361 |
-
{
|
362 |
-
$method = strtoupper($method);
|
363 |
-
|
364 |
-
switch ($method) {
|
365 |
-
case 'PLAINTEXT':
|
366 |
-
case 'HMAC-SHA1':
|
367 |
-
$this->sigMethod = $method;
|
368 |
-
break;
|
369 |
-
default:
|
370 |
-
throw new Dropbox_Exception('Unsupported signature method ' . $method);
|
371 |
-
}
|
372 |
-
}
|
373 |
-
|
374 |
-
/**
|
375 |
-
* Set the output file
|
376 |
-
* @param resource Resource to stream response data to
|
377 |
-
* @return void
|
378 |
-
*/
|
379 |
-
public function setOutFile($handle)
|
380 |
-
{
|
381 |
-
if (!is_resource($handle) || get_resource_type($handle) != 'stream') {
|
382 |
-
throw new Dropbox_Exception('Outfile must be a stream resource');
|
383 |
-
}
|
384 |
-
$this->outFile = $handle;
|
385 |
-
}
|
386 |
-
|
387 |
-
/**
|
388 |
-
* Set the input file
|
389 |
-
* @param resource Resource to read data from
|
390 |
-
* @return void
|
391 |
-
*/
|
392 |
-
public function setInFile($handle)
|
393 |
-
{
|
394 |
-
if (!is_resource($handle) || get_resource_type($handle) != 'stream') {
|
395 |
-
throw new Dropbox_Exception('Infile must be a stream resource');
|
396 |
-
}
|
397 |
-
fseek($handle, 0);
|
398 |
-
$this->inFile = $handle;
|
399 |
-
}
|
400 |
-
|
401 |
-
/**
|
402 |
-
* Parse response parameters for a token into an object
|
403 |
-
* Dropbox returns tokens in the response parameters, and
|
404 |
-
* not a JSON encoded object as per other API requests
|
405 |
-
* @link http://oauth.net/core/1.0/#response_parameters
|
406 |
-
* @param string $response
|
407 |
-
* @return object stdClass
|
408 |
-
*/
|
409 |
-
private function parseTokenString($response)
|
410 |
-
{
|
411 |
-
$parts = explode('&', $response);
|
412 |
-
$token = new stdClass();
|
413 |
-
foreach ($parts as $part) {
|
414 |
-
list($k, $v) = explode('=', $part, 2);
|
415 |
-
$k = strtolower($k);
|
416 |
-
$token->$k = $v;
|
417 |
-
}
|
418 |
-
return $token;
|
419 |
-
}
|
420 |
-
|
421 |
-
/**
|
422 |
-
* Encode a value to RFC3986
|
423 |
-
* This is a convenience method to decode ~ symbols encoded
|
424 |
-
* by rawurldecode. This will encode all characters except
|
425 |
-
* the unreserved set, ALPHA, DIGIT, '-', '.', '_', '~'
|
426 |
-
* @link http://tools.ietf.org/html/rfc5849#section-3.6
|
427 |
-
* @param mixed $value
|
428 |
-
*/
|
429 |
-
private function encode($value)
|
430 |
-
{
|
431 |
-
return str_replace('%7E', '~', rawurlencode($value));
|
432 |
-
}
|
433 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,249 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* OAuth consumer using PHP cURL
|
5 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
6 |
-
* @link https://github.com/benthedesigner/dropbox
|
7 |
-
* @package Dropbox\OAuth
|
8 |
-
* @subpackage Consumer
|
9 |
-
*/
|
10 |
-
|
11 |
-
class Dropbox_Curl extends Dropbox_ConsumerAbstract
|
12 |
-
{
|
13 |
-
/**
|
14 |
-
* Default cURL options
|
15 |
-
* @var array
|
16 |
-
*/
|
17 |
-
protected $defaultOptions = array(
|
18 |
-
CURLOPT_VERBOSE => true,
|
19 |
-
CURLOPT_HEADER => true,
|
20 |
-
CURLINFO_HEADER_OUT => false,
|
21 |
-
CURLOPT_RETURNTRANSFER => true,
|
22 |
-
CURLOPT_FOLLOWLOCATION => false,
|
23 |
-
);
|
24 |
-
|
25 |
-
/**
|
26 |
-
* Store the last response form the API
|
27 |
-
* @var mixed
|
28 |
-
*/
|
29 |
-
protected $lastResponse = null;
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Set properties and begin authentication
|
33 |
-
* @param string $key
|
34 |
-
* @param string $secret
|
35 |
-
* @param \Dropbox\OAuth\Consumer\StorageInterface $storage
|
36 |
-
* @param string $callback
|
37 |
-
*/
|
38 |
-
public function __construct($key, $oauth2_id, $secret, Dropbox_StorageInterface $storage, $callback = null, $callbackhome = null, $deauthenticate = false)
|
39 |
-
{
|
40 |
-
// Check the cURL extension is loaded
|
41 |
-
if (!extension_loaded('curl')) {
|
42 |
-
throw new Dropbox_Exception('The cURL OAuth consumer requires the cURL extension. Please speak to your web hosting provider so that this missing PHP component can be installed.');
|
43 |
-
}
|
44 |
-
|
45 |
-
$this->consumerKey = $key;
|
46 |
-
$this->oauth2_id = $oauth2_id;
|
47 |
-
$this->consumerSecret = $secret;
|
48 |
-
$this->storage = $storage;
|
49 |
-
$this->callback = $callback;
|
50 |
-
$this->callbackhome = $callbackhome;
|
51 |
-
|
52 |
-
if ($deauthenticate) {
|
53 |
-
$this->deauthenticate();
|
54 |
-
} else {
|
55 |
-
$this->authenticate();
|
56 |
-
}
|
57 |
-
}
|
58 |
-
|
59 |
-
/**
|
60 |
-
* Execute an API call
|
61 |
-
* @todo Improve error handling
|
62 |
-
* @param string $method The HTTP method
|
63 |
-
* @param string $url The API endpoint
|
64 |
-
* @param string $call The API method to call
|
65 |
-
* @param array $additional Additional parameters
|
66 |
-
* @return string|object stdClass
|
67 |
-
*/
|
68 |
-
public function fetch($method, $url, $call, array $additional = array())
|
69 |
-
{
|
70 |
-
// Get the signed request URL
|
71 |
-
$request = $this->getSignedRequest($method, $url, $call, $additional);
|
72 |
-
|
73 |
-
// Initialise and execute a cURL request
|
74 |
-
$handle = curl_init($request['url']);
|
75 |
-
|
76 |
-
// Get the default options array
|
77 |
-
$options = $this->defaultOptions;
|
78 |
-
if (!UpdraftPlus_Options::get_updraft_option('updraft_ssl_useservercerts')) {
|
79 |
-
$options[CURLOPT_CAINFO] = UPDRAFTPLUS_DIR.'/includes/cacert.pem';
|
80 |
-
}
|
81 |
-
if (UpdraftPlus_Options::get_updraft_option('updraft_ssl_disableverify')) {
|
82 |
-
$options[CURLOPT_SSL_VERIFYPEER] = false;
|
83 |
-
} else {
|
84 |
-
$options[CURLOPT_SSL_VERIFYPEER] = true;
|
85 |
-
}
|
86 |
-
|
87 |
-
if (!class_exists('WP_HTTP_Proxy')) require_once(ABSPATH.WPINC.'/class-http.php');
|
88 |
-
$proxy = new WP_HTTP_Proxy();
|
89 |
-
|
90 |
-
if ($proxy->is_enabled()) {
|
91 |
-
# WP_HTTP_Proxy returns empty strings if nothing is set
|
92 |
-
$user = $proxy->username();
|
93 |
-
$pass = $proxy->password();
|
94 |
-
$host = $proxy->host();
|
95 |
-
$port = (int)$proxy->port();
|
96 |
-
if (empty($port)) $port = 8080;
|
97 |
-
if (!empty($host) && $proxy->send_through_proxy($request['url'])) {
|
98 |
-
$options[CURLOPT_PROXY] = $host;
|
99 |
-
$options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP;
|
100 |
-
$options[CURLOPT_PROXYPORT] = $port;
|
101 |
-
if (!empty($user) && !empty($pass)) {
|
102 |
-
$options[CURLOPT_PROXYAUTH] = CURLAUTH_ANY;
|
103 |
-
$options[CURLOPT_PROXYUSERPWD] = sprintf('%s:%s', $user, $pass);
|
104 |
-
}
|
105 |
-
}
|
106 |
-
}
|
107 |
-
|
108 |
-
if ($method == 'GET' && $this->outFile) { // GET
|
109 |
-
$options[CURLOPT_RETURNTRANSFER] = false;
|
110 |
-
$options[CURLOPT_HEADER] = false;
|
111 |
-
$options[CURLOPT_FILE] = $this->outFile;
|
112 |
-
$options[CURLOPT_BINARYTRANSFER] = true;
|
113 |
-
$options[CURLOPT_FAILONERROR] = true;
|
114 |
-
if (isset($additional['headers'])) $options[CURLOPT_HTTPHEADER] = $additional['headers'];
|
115 |
-
$this->outFile = null;
|
116 |
-
} elseif ($method == 'POST') { // POST
|
117 |
-
$options[CURLOPT_POST] = true;
|
118 |
-
$options[CURLOPT_POSTFIELDS] = $request['postfields'];
|
119 |
-
} elseif ($method == 'PUT' && $this->inFile) { // PUT
|
120 |
-
$options[CURLOPT_PUT] = true;
|
121 |
-
$options[CURLOPT_INFILE] = $this->inFile;
|
122 |
-
// @todo Update so the data is not loaded into memory to get its size
|
123 |
-
$options[CURLOPT_INFILESIZE] = strlen(stream_get_contents($this->inFile));
|
124 |
-
fseek($this->inFile, 0);
|
125 |
-
$this->inFile = null;
|
126 |
-
}
|
127 |
-
|
128 |
-
// Set the cURL options at once
|
129 |
-
curl_setopt_array($handle, $options);
|
130 |
-
// Execute, get any error and close
|
131 |
-
$response = curl_exec($handle);
|
132 |
-
$error = curl_error($handle);
|
133 |
-
$getinfo = curl_getinfo($handle);
|
134 |
-
|
135 |
-
curl_close($handle);
|
136 |
-
|
137 |
-
//Check if a cURL error has occured
|
138 |
-
if ($response === false) {
|
139 |
-
throw new Dropbox_CurlException($error);
|
140 |
-
} else {
|
141 |
-
// Parse the response if it is a string
|
142 |
-
if (is_string($response)) {
|
143 |
-
$response = $this->parse($response);
|
144 |
-
}
|
145 |
-
|
146 |
-
// Set the last response
|
147 |
-
$this->lastResponse = $response;
|
148 |
-
|
149 |
-
$code = (!empty($response['code'])) ? $response['code'] : $getinfo['http_code'];
|
150 |
-
|
151 |
-
// The API doesn't return an error message for the 304 status code...
|
152 |
-
// 304's are only returned when the path supplied during metadata calls has not been modified
|
153 |
-
if ($code == 304) {
|
154 |
-
$response['body'] = new stdClass;
|
155 |
-
$response['body']->error = 'The folder contents have not changed';
|
156 |
-
}
|
157 |
-
|
158 |
-
// Check if an error occurred and throw an Exception
|
159 |
-
if (!empty($response['body']->error)) {
|
160 |
-
// Dropbox returns error messages inconsistently...
|
161 |
-
if ($response['body']->error instanceof stdClass) {
|
162 |
-
$array = array_values((array) $response['body']->error);
|
163 |
-
$message = $array[0];
|
164 |
-
} else {
|
165 |
-
$message = $response['body']->error;
|
166 |
-
}
|
167 |
-
|
168 |
-
// Throw an Exception with the appropriate with the appropriate message and code
|
169 |
-
switch ($code) {
|
170 |
-
case 304:
|
171 |
-
throw new Dropbox_NotModifiedException($message, 304);
|
172 |
-
case 400:
|
173 |
-
throw new Dropbox_BadRequestException($message, 400);
|
174 |
-
case 404:
|
175 |
-
throw new Dropbox_NotFoundException($message, 404);
|
176 |
-
case 406:
|
177 |
-
throw new Dropbox_NotAcceptableException($message, 406);
|
178 |
-
case 415:
|
179 |
-
throw new Dropbox_UnsupportedMediaTypeException($message, 415);
|
180 |
-
case 401:
|
181 |
-
//401 means oauth token is expired continue to manually handle the exception depending on the situation
|
182 |
-
continue;
|
183 |
-
default:
|
184 |
-
throw new Dropbox_Exception($message, $code);
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
188 |
-
return $response;
|
189 |
-
}
|
190 |
-
}
|
191 |
-
|
192 |
-
/**
|
193 |
-
* Parse a cURL response
|
194 |
-
* @param string $response
|
195 |
-
* @return array
|
196 |
-
*/
|
197 |
-
private function parse($response)
|
198 |
-
{
|
199 |
-
// Explode the response into headers and body parts (separated by double EOL)
|
200 |
-
list($headers, $response) = explode("\r\n\r\n", $response, 2);
|
201 |
-
|
202 |
-
// Explode response headers
|
203 |
-
$lines = explode("\r\n", $headers);
|
204 |
-
|
205 |
-
// If the status code is 100, the API server must send a final response
|
206 |
-
// We need to explode the response again to get the actual response
|
207 |
-
if (preg_match('#^HTTP/1.1 100#i', $lines[0])) {
|
208 |
-
list($headers, $response) = explode("\r\n\r\n", $response, 2);
|
209 |
-
$lines = explode("\r\n", $headers);
|
210 |
-
}
|
211 |
-
|
212 |
-
// Get the HTTP response code from the first line
|
213 |
-
$first = array_shift($lines);
|
214 |
-
$pattern = '#^HTTP/1.1 ([0-9]{3})#i';
|
215 |
-
preg_match($pattern, $first, $matches);
|
216 |
-
$code = $matches[1];
|
217 |
-
|
218 |
-
// Parse the remaining headers into an associative array
|
219 |
-
$headers = array();
|
220 |
-
foreach ($lines as $line) {
|
221 |
-
list($k, $v) = explode(': ', $line, 2);
|
222 |
-
$headers[strtolower($k)] = $v;
|
223 |
-
}
|
224 |
-
|
225 |
-
// If the response body is not a JSON encoded string
|
226 |
-
// we'll return the entire response body
|
227 |
-
if (!$body = json_decode($response)) {
|
228 |
-
$body = $response;
|
229 |
-
}
|
230 |
-
|
231 |
-
if (is_string($body)) {
|
232 |
-
$body_lines = explode("\r\n", $body);
|
233 |
-
if (preg_match('#^HTTP/1.1 100#i', $body_lines[0]) && preg_match('#^HTTP/1.#i', $body_lines[2])) {
|
234 |
-
return $this->parse($body);
|
235 |
-
}
|
236 |
-
}
|
237 |
-
|
238 |
-
return array('code' => $code, 'body' => $body, 'headers' => $headers);
|
239 |
-
}
|
240 |
-
|
241 |
-
/**
|
242 |
-
* Return the response for the last API request
|
243 |
-
* @return mixed
|
244 |
-
*/
|
245 |
-
public function getlastResponse()
|
246 |
-
{
|
247 |
-
return $this->lastResponse;
|
248 |
-
}
|
249 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,80 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* OAuth consumer using the WordPress API
|
5 |
-
* @author David Anderson <david@updraftplus.com>
|
6 |
-
* @link https://github.com/DavidAnderson684/Dropbox
|
7 |
-
* @package Dropbox\OAuth
|
8 |
-
* @subpackage Consumer
|
9 |
-
*/
|
10 |
-
|
11 |
-
class Dropbox_ConsumerWordPress extends Dropbox_ConsumerAbstract
|
12 |
-
{
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Set properties and begin authentication
|
16 |
-
* @param string $key
|
17 |
-
* @param string $secret
|
18 |
-
* @param \Dropbox\OAuth\Consumer\StorageInterface $storage
|
19 |
-
* @param string $callback
|
20 |
-
*/
|
21 |
-
public function __construct($key, $secret, Dropbox_StorageInterface $storage, $callback = null)
|
22 |
-
{
|
23 |
-
// Check we are in a WordPress environment
|
24 |
-
if (!defined('ABSPATH')) {
|
25 |
-
throw new Dropbox_Exception('The WordPress OAuth consumer requires a WordPress environment');
|
26 |
-
}
|
27 |
-
|
28 |
-
$this->consumerKey = $key;
|
29 |
-
$this->consumerSecret = $secret;
|
30 |
-
$this->storage = $storage;
|
31 |
-
$this->callback = $callback;
|
32 |
-
$this->authenticate();
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Execute an API call
|
37 |
-
* @param string $method The HTTP method
|
38 |
-
* @param string $url The API endpoint
|
39 |
-
* @param string $call The API method to call
|
40 |
-
* @param array $additional Additional parameters
|
41 |
-
* @return array
|
42 |
-
*/
|
43 |
-
public function fetch($method, $url, $call, array $additional = array())
|
44 |
-
{
|
45 |
-
// Get the signed request URL
|
46 |
-
$request = $this->getSignedRequest($method, $url, $call, $additional);
|
47 |
-
if ($method == 'GET') {
|
48 |
-
$args = array ( );
|
49 |
-
$response = wp_remote_get($request['url'], $args);
|
50 |
-
$this->outFile = null;
|
51 |
-
} elseif ($method == 'POST') {
|
52 |
-
$args = array( 'body' => $request['postfields'] );
|
53 |
-
$response = wp_remote_post($request['url'], $args );
|
54 |
-
} elseif ($method == 'PUT' && $this->inFile) {
|
55 |
-
return new WP_Error('unsupported', "WordPress does not have a native HTTP PUT function");
|
56 |
-
}
|
57 |
-
|
58 |
-
// If the response body is not a JSON encoded string
|
59 |
-
// we'll return the entire response body
|
60 |
-
// Important to do this first, as the next section relies on the decoding having taken place
|
61 |
-
if (!$body = json_decode(wp_remote_retrieve_body($response))) {
|
62 |
-
$body = wp_remote_retrieve_body($response);
|
63 |
-
}
|
64 |
-
|
65 |
-
// Check if an error occurred and throw an Exception. This is part of the authentication process - don't modify.
|
66 |
-
if (!empty($body->error)) {
|
67 |
-
$message = $body->error . ' (Status Code: ' . wp_remote_retrieve_response_code($response) . ')';
|
68 |
-
throw new Dropbox_Exception($message);
|
69 |
-
}
|
70 |
-
|
71 |
-
if (is_wp_error($response)) {
|
72 |
-
$message = $response->get_error_message();
|
73 |
-
throw new Dropbox_Exception($message);
|
74 |
-
}
|
75 |
-
|
76 |
-
$results = array ( 'body' => $body, 'code' => wp_remote_retrieve_response_code($response), 'headers' => $response['headers'] );
|
77 |
-
return $results;
|
78 |
-
}
|
79 |
-
|
80 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,109 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* This class provides the functionality to encrypt
|
5 |
-
* and decrypt access tokens stored by the application
|
6 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
7 |
-
* @link https://github.com/benthedesigner/dropbox
|
8 |
-
* @package Dropbox\Oauth
|
9 |
-
* @subpackage Storage
|
10 |
-
*/
|
11 |
-
|
12 |
-
/* UpdraftPlus notes
|
13 |
-
Using this was fairly pointless (it encrypts storage credentials at rest). But, it's implemented now, so needs supporting.
|
14 |
-
Investigation shows that mcrypt and phpseclib native encryption using different padding schemes.
|
15 |
-
As a result, that which is encrypted by phpseclib native can be decrypted by mcrypt, but not vice-versa. Each can (as you'd expect) decrypt the results of their own encryption.
|
16 |
-
As a consequence, it makes sense to always encrypt with phpseclib native, and prefer decrypting with with mcrypt if it is available and otherwise fall back to phpseclib.
|
17 |
-
We could deliberately re-encrypt all loaded information with phpseclib native, but there seems little need for that yet. There can only be a problem if mcrypt is disabled - which pre-July-2015 meant that Dropbox wouldn't work at all. Now, it will force a re-authorisation.
|
18 |
-
*/
|
19 |
-
|
20 |
-
class Dropbox_Encrypter
|
21 |
-
{
|
22 |
-
// Encryption settings - default settings yield encryption to AES (256-bit) standard
|
23 |
-
// @todo Provide PHPDOC for each class constant
|
24 |
-
const KEY_SIZE = 32;
|
25 |
-
const IV_SIZE = 16;
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Encryption key
|
29 |
-
* @var null|string
|
30 |
-
*/
|
31 |
-
private $key = null;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Check Mcrypt is loaded and set the encryption key
|
35 |
-
* @param string $key
|
36 |
-
* @return void
|
37 |
-
*/
|
38 |
-
public function __construct($key)
|
39 |
-
{
|
40 |
-
if (preg_match('/^[A-Za-z0-9]+$/', $key) && $length = strlen($key) === self::KEY_SIZE) {
|
41 |
-
# Short-cut so that the mbstring extension is not required
|
42 |
-
$this->key = $key;
|
43 |
-
} elseif (($length = mb_strlen($key, '8bit')) !== self::KEY_SIZE) {
|
44 |
-
throw new Dropbox_Exception('Expecting a ' . self::KEY_SIZE . ' byte key, got ' . $length);
|
45 |
-
} else {
|
46 |
-
// Set the encryption key
|
47 |
-
$this->key = $key;
|
48 |
-
}
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* Encrypt the OAuth token
|
53 |
-
* @param \stdClass $token Serialized token object
|
54 |
-
* @return string
|
55 |
-
*/
|
56 |
-
public function encrypt($token)
|
57 |
-
{
|
58 |
-
|
59 |
-
// Encryption: we always use phpseclib for this
|
60 |
-
|
61 |
-
global $updraftplus;
|
62 |
-
$updraftplus->ensure_phpseclib('Crypt_AES', 'Crypt/AES');
|
63 |
-
$updraftplus->ensure_phpseclib('Crypt_Rijndael', 'Crypt/Rijndael');
|
64 |
-
|
65 |
-
if (!function_exists('crypt_random_string')) require_once(UPDRAFTPLUS_DIR.'/vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php');
|
66 |
-
|
67 |
-
$iv = crypt_random_string(self::IV_SIZE);
|
68 |
-
|
69 |
-
// Defaults to CBC mode
|
70 |
-
$rijndael = new Crypt_Rijndael();
|
71 |
-
|
72 |
-
$rijndael->setKey($this->key);
|
73 |
-
|
74 |
-
$rijndael->setIV($iv);
|
75 |
-
|
76 |
-
$cipherText = $rijndael->encrypt($token);
|
77 |
-
|
78 |
-
return base64_encode($iv . $cipherText);
|
79 |
-
}
|
80 |
-
|
81 |
-
/**
|
82 |
-
* Decrypt the ciphertext
|
83 |
-
* @param string $cipherText
|
84 |
-
* @return object \stdClass Unserialized token
|
85 |
-
*/
|
86 |
-
public function decrypt($cipherText)
|
87 |
-
{
|
88 |
-
|
89 |
-
// Decryption: prefer mcrypt, if available (since it can decrypt data encrypted by either mcrypt or phpseclib)
|
90 |
-
|
91 |
-
$cipherText = base64_decode($cipherText);
|
92 |
-
$iv = substr($cipherText, 0, self::IV_SIZE);
|
93 |
-
$cipherText = substr($cipherText, self::IV_SIZE);
|
94 |
-
|
95 |
-
if (function_exists('mcrypt_decrypt')) {
|
96 |
-
$token = @mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key, $cipherText, MCRYPT_MODE_CBC, $iv);
|
97 |
-
} else {
|
98 |
-
global $updraftplus;
|
99 |
-
$updraftplus->ensure_phpseclib('Crypt_Rijndael', 'Crypt/Rijndael');
|
100 |
-
|
101 |
-
$rijndael = new Crypt_Rijndael();
|
102 |
-
$rijndael->setKey($this->key);
|
103 |
-
$rijndael->setIV($iv);
|
104 |
-
$token = $rijndael->decrypt($cipherText);
|
105 |
-
}
|
106 |
-
|
107 |
-
return $token;
|
108 |
-
}
|
109 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* OAuth storage handler interface
|
5 |
-
* @author Ben Tadiar <ben@handcraftedbyben.co.uk>
|
6 |
-
* @link https://github.com/benthedesigner/dropbox
|
7 |
-
* @package Dropbox\OAuth
|
8 |
-
* @subpackage Storage
|
9 |
-
*/
|
10 |
-
|
11 |
-
interface Dropbox_StorageInterface
|
12 |
-
{
|
13 |
-
/**
|
14 |
-
* Get a token by type
|
15 |
-
* @param string $type Token type to retrieve
|
16 |
-
*/
|
17 |
-
public function get($type);
|
18 |
-
|
19 |
-
/**
|
20 |
-
* Set a token by type
|
21 |
-
* @param \stdClass $token Token object to set
|
22 |
-
* @param string $type Token type
|
23 |
-
*/
|
24 |
-
public function set($token, $type);
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Delete tokens for the current session/user
|
28 |
-
*/
|
29 |
-
public function delete();
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,195 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* OAuth storage handler using WordPress options
|
5 |
-
* This can only be used if you have a WordPress environment loaded, such that the (get|update|delete)_option functions are available
|
6 |
-
* See an example usage in http://wordpress.org/extend/plugins/updraftplus
|
7 |
-
* @author David Anderson <david@updraftplus.com>
|
8 |
-
* @link https://updraftplus.com
|
9 |
-
* @package Dropbox\Oauth
|
10 |
-
* @subpackage Storage
|
11 |
-
*/
|
12 |
-
|
13 |
-
class Dropbox_WordPress implements Dropbox_StorageInterface
|
14 |
-
{
|
15 |
-
/**
|
16 |
-
* Option name
|
17 |
-
* @var string
|
18 |
-
*/
|
19 |
-
protected $option_name_prefix = 'dropbox_token';
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Option name (array storage)
|
23 |
-
* @var string
|
24 |
-
*/
|
25 |
-
protected $option_array = '';
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Encyption object
|
29 |
-
* @var Encrypter|null
|
30 |
-
*/
|
31 |
-
protected $encrypter = null;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Backup module object
|
35 |
-
* @var Backup_module_object|null
|
36 |
-
*/
|
37 |
-
protected $backup_module_object = null;
|
38 |
-
|
39 |
-
/**
|
40 |
-
* Check if an instance of the encrypter is passed, set the encryption object
|
41 |
-
* @return void
|
42 |
-
*/
|
43 |
-
public function __construct(Dropbox_Encrypter $encrypter = null, $option_name_prefix = 'dropbox_token', $option_array = 'dropbox', $backup_module_object)
|
44 |
-
{
|
45 |
-
if ($encrypter instanceof Dropbox_Encrypter) {
|
46 |
-
$this->encrypter = $encrypter;
|
47 |
-
}
|
48 |
-
|
49 |
-
if ($backup_module_object instanceof UpdraftPlus_BackupModule) {
|
50 |
-
$this->backup_module_object = $backup_module_object;
|
51 |
-
}
|
52 |
-
|
53 |
-
$this->option_name_prefix = $option_name_prefix;
|
54 |
-
$this->option_array = $option_array;
|
55 |
-
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Get an entry from the Dropbox options in the database
|
60 |
-
* If the encryption object is set then decrypt the token before returning
|
61 |
-
* @param string $type is the key to retrieve
|
62 |
-
* @return array|bool
|
63 |
-
*/
|
64 |
-
public function get($type)
|
65 |
-
{
|
66 |
-
if ($type != 'request_token' && $type != 'access_token' && $type != 'appkey' && $type != 'CSRF' && $type != 'code') {
|
67 |
-
throw new Dropbox_Exception("Expected a type of either 'request_token', 'access_token', 'CSRF' or 'code', got '$type'");
|
68 |
-
} else {
|
69 |
-
if (false !== ($opts = $this->backup_module_object->get_options())) {
|
70 |
-
if ($type == 'request_token' || $type == 'access_token'){
|
71 |
-
if (!empty($opts[$this->option_name_prefix.$type])) {
|
72 |
-
$gettoken = $opts[$this->option_name_prefix.$type];
|
73 |
-
$token = $this->decrypt($gettoken);
|
74 |
-
return $token;
|
75 |
-
}
|
76 |
-
} else {
|
77 |
-
if (!empty($opts[$type])) {
|
78 |
-
return $opts[$type];
|
79 |
-
}
|
80 |
-
}
|
81 |
-
}
|
82 |
-
return false;
|
83 |
-
}
|
84 |
-
}
|
85 |
-
|
86 |
-
/**
|
87 |
-
* Set a value in the database by type
|
88 |
-
* If the value is a token and the encryption object is set then encrypt the token before storing
|
89 |
-
* @param \stdClass Token object to set
|
90 |
-
* @param string $type Token type
|
91 |
-
* @return void
|
92 |
-
*/
|
93 |
-
public function set($token, $type)
|
94 |
-
{
|
95 |
-
if ($type != 'request_token' && $type != 'access_token' && $type != 'upgraded' && $type != 'CSRF' && $type != 'code') {
|
96 |
-
throw new Dropbox_Exception("Expected a type of either 'request_token', 'access_token', 'CSRF', 'upgraded' or 'code', got '$type'");
|
97 |
-
} else {
|
98 |
-
|
99 |
-
$opts = $this->backup_module_object->get_options();
|
100 |
-
|
101 |
-
if ($type == 'access_token'){
|
102 |
-
$token = $this->encrypt($token);
|
103 |
-
$opts[$this->option_name_prefix.$type] = $token;
|
104 |
-
} else if ($type == 'request_token' ) {
|
105 |
-
$opts[$this->option_name_prefix.$type] = $token;
|
106 |
-
} else {
|
107 |
-
$opts[$type] = $token;
|
108 |
-
}
|
109 |
-
|
110 |
-
$this->backup_module_object->set_options($opts, true);
|
111 |
-
}
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Remove a value in the database by type rather than setting to null / empty
|
116 |
-
* set the value to null here so that when it gets to the options filter it will
|
117 |
-
* unset the value there, this avoids a bug where if the value is not set then
|
118 |
-
* the option filter will take the value from the database and save that version back.
|
119 |
-
*
|
120 |
-
* N.B. Before PHP 7.0, you can't call a method name unset()
|
121 |
-
*
|
122 |
-
* @param string $type Token type
|
123 |
-
* @return void
|
124 |
-
*/
|
125 |
-
public function do_unset($type)
|
126 |
-
{
|
127 |
-
if ($type != 'request_token' && $type != 'access_token' && $type != 'upgraded' && $type != 'CSRF' && $type != 'code') {
|
128 |
-
throw new Dropbox_Exception("Expected a type of either 'request_token', 'access_token', 'CSRF', 'upgraded' or 'code', got '$type'");
|
129 |
-
} else {
|
130 |
-
|
131 |
-
$opts = $this->backup_module_object->get_options();
|
132 |
-
|
133 |
-
if ($type == 'access_token' || $type == 'request_token'){
|
134 |
-
$opts[$this->option_name_prefix.$type] = null;
|
135 |
-
} else {
|
136 |
-
$opts[$type] = null;
|
137 |
-
}
|
138 |
-
$this->backup_module_object->set_options($opts, true);
|
139 |
-
}
|
140 |
-
}
|
141 |
-
|
142 |
-
/**
|
143 |
-
* Delete the request and access tokens currently stored in the database
|
144 |
-
* @return bool
|
145 |
-
*/
|
146 |
-
public function delete()
|
147 |
-
{
|
148 |
-
$opts = $this->backup_module_object->get_options();
|
149 |
-
$opts[$this->option_name_prefix.'request_token'] = null;
|
150 |
-
$opts[$this->option_name_prefix.'access_token'] = null;
|
151 |
-
unset($opts['ownername']);
|
152 |
-
unset($opts['upgraded']);
|
153 |
-
$this->backup_module_object->set_options($opts, true);
|
154 |
-
return true;
|
155 |
-
}
|
156 |
-
|
157 |
-
/**
|
158 |
-
* Use the Encrypter to encrypt a token and return it
|
159 |
-
* If there is not encrypter object, return just the
|
160 |
-
* serialized token object for storage
|
161 |
-
* @param stdClass $token OAuth token to encrypt
|
162 |
-
* @return stdClass|string
|
163 |
-
*/
|
164 |
-
protected function encrypt($token)
|
165 |
-
{
|
166 |
-
// Serialize the token object
|
167 |
-
$token = serialize($token);
|
168 |
-
|
169 |
-
// Encrypt the token if there is an Encrypter instance
|
170 |
-
if ($this->encrypter instanceof Dropbox_Encrypter) {
|
171 |
-
$token = $this->encrypter->encrypt($token);
|
172 |
-
}
|
173 |
-
|
174 |
-
// Return the token
|
175 |
-
return $token;
|
176 |
-
}
|
177 |
-
|
178 |
-
/**
|
179 |
-
* Decrypt a token using the Encrypter object and return it
|
180 |
-
* If there is no Encrypter object, assume the token was stored
|
181 |
-
* serialized and return the unserialized token object
|
182 |
-
* @param stdClass $token OAuth token to encrypt
|
183 |
-
* @return stdClass|string
|
184 |
-
*/
|
185 |
-
protected function decrypt($token)
|
186 |
-
{
|
187 |
-
// Decrypt the token if there is an Encrypter instance
|
188 |
-
if ($this->encrypter instanceof Dropbox_Encrypter) {
|
189 |
-
$token = $this->encrypter->decrypt($token);
|
190 |
-
}
|
191 |
-
|
192 |
-
// Return the unserialized token
|
193 |
-
return @unserialize($token);
|
194 |
-
}
|
195 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -163,12 +163,14 @@ abstract class Dropbox_ConsumerAbstract
|
|
163 |
} else if (!empty($appkey)) {
|
164 |
$key = $appkey;
|
165 |
}
|
|
|
|
|
166 |
|
167 |
$params = array(
|
168 |
'client_id' => empty($key) ? $this->oauth2_id : $key,
|
169 |
'response_type' => 'code',
|
170 |
'redirect_uri' => empty($key) ? $this->callback : $this->callbackhome,
|
171 |
-
'state' => empty($key) ? $CSRF.$this->callbackhome : $CSRF,
|
172 |
);
|
173 |
|
174 |
// Build the URL and redirect the user
|
163 |
} else if (!empty($appkey)) {
|
164 |
$key = $appkey;
|
165 |
}
|
166 |
+
|
167 |
+
if ('' != $this->instance_id) $this->instance_id = ':'.$this->instance_id;
|
168 |
|
169 |
$params = array(
|
170 |
'client_id' => empty($key) ? $this->oauth2_id : $key,
|
171 |
'response_type' => 'code',
|
172 |
'redirect_uri' => empty($key) ? $this->callback : $this->callbackhome,
|
173 |
+
'state' => empty($key) ? $CSRF.$this->instance_id.$this->callbackhome : $CSRF.$this->instance_id,
|
174 |
);
|
175 |
|
176 |
// Build the URL and redirect the user
|
@@ -35,7 +35,7 @@ class Dropbox_Curl extends Dropbox_ConsumerAbstract
|
|
35 |
* @param \Dropbox\OAuth\Consumer\StorageInterface $storage
|
36 |
* @param string $callback
|
37 |
*/
|
38 |
-
public function __construct($key, $oauth2_id, $secret, Dropbox_StorageInterface $storage, $callback = null, $callbackhome = null, $deauthenticate = false)
|
39 |
{
|
40 |
// Check the cURL extension is loaded
|
41 |
if (!extension_loaded('curl')) {
|
@@ -48,6 +48,7 @@ class Dropbox_Curl extends Dropbox_ConsumerAbstract
|
|
48 |
$this->storage = $storage;
|
49 |
$this->callback = $callback;
|
50 |
$this->callbackhome = $callbackhome;
|
|
|
51 |
|
52 |
if ($deauthenticate) {
|
53 |
$this->deauthenticate();
|
35 |
* @param \Dropbox\OAuth\Consumer\StorageInterface $storage
|
36 |
* @param string $callback
|
37 |
*/
|
38 |
+
public function __construct($key, $oauth2_id, $secret, Dropbox_StorageInterface $storage, $callback = null, $callbackhome = null, $deauthenticate = false, $instance_id = '')
|
39 |
{
|
40 |
// Check the cURL extension is loaded
|
41 |
if (!extension_loaded('curl')) {
|
48 |
$this->storage = $storage;
|
49 |
$this->callback = $callback;
|
50 |
$this->callbackhome = $callbackhome;
|
51 |
+
$this->instance_id = $instance_id;
|
52 |
|
53 |
if ($deauthenticate) {
|
54 |
$this->deauthenticate();
|
@@ -233,26 +233,48 @@ class UpdraftPlus_Commands {
|
|
233 |
|
234 |
}
|
235 |
|
236 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
237 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return new WP_Error('no_updraftplus');
|
238 |
|
239 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
240 |
|
241 |
-
$
|
|
|
|
|
242 |
|
243 |
return $vault->ajax_vault_recountquota(false);
|
244 |
}
|
245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
public function vault_connect($credentials) {
|
247 |
|
248 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return new WP_Error('no_updraftplus');
|
249 |
|
250 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
251 |
|
252 |
-
|
|
|
|
|
253 |
|
254 |
}
|
255 |
|
|
|
|
|
|
|
|
|
|
|
|
|
256 |
public function vault_disconnect($params = array()) {
|
257 |
|
258 |
if (false === ($updraftplus_admin = $this->_load_ud_admin()) || false === ($updraftplus = $this->_load_ud())) return new WP_Error('no_updraftplus');
|
@@ -260,23 +282,15 @@ class UpdraftPlus_Commands {
|
|
260 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
261 |
|
262 |
$echo_results = empty($params['immediate_echo']) ? false : true;
|
|
|
|
|
263 |
|
264 |
-
$results = (array) $updraftplus_admin->get_updraftvault()->ajax_vault_disconnect($echo_results);
|
265 |
|
266 |
return $results;
|
267 |
|
268 |
}
|
269 |
|
270 |
-
public function vault_recount_quota() {
|
271 |
-
if (false === ($updraftplus_admin = $this->_load_ud_admin()) || false === ($updraftplus = $this->_load_ud())) return new WP_Error('no_updraftplus');
|
272 |
-
|
273 |
-
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
274 |
-
|
275 |
-
$results = $updraftplus_admin->get_updraftvault()->ajax_vault_recountquota(false);
|
276 |
-
|
277 |
-
return $results;
|
278 |
-
}
|
279 |
-
|
280 |
/**
|
281 |
* A handler method to call the UpdraftPlus admin save settings method. It will check if the settings passed to it are in the format of a string if so it converts it to an array otherwise just pass the array
|
282 |
*
|
233 |
|
234 |
}
|
235 |
|
236 |
+
/**
|
237 |
+
* This method will make a call to the methods responsible for recounting the quota in the UpdraftVault account
|
238 |
+
*
|
239 |
+
* @param array $params - an array of parameters such as a instance_id
|
240 |
+
* @return string - the result of the call
|
241 |
+
*/
|
242 |
+
public function vault_recountquota($params = array()) {
|
243 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return new WP_Error('no_updraftplus');
|
244 |
|
245 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
246 |
|
247 |
+
$instance_id = empty($params['instance_id']) ? '' : $params['instance_id'];
|
248 |
+
|
249 |
+
$vault = $updraftplus_admin->get_updraftvault($instance_id);
|
250 |
|
251 |
return $vault->ajax_vault_recountquota(false);
|
252 |
}
|
253 |
|
254 |
+
/**
|
255 |
+
* This method will make a call to the methods responsible for creating a connection to UpdraftVault
|
256 |
+
*
|
257 |
+
* @param array $credentials - an array of parameters such as the user credentials and instance_id
|
258 |
+
* @return string - the result of the call
|
259 |
+
*/
|
260 |
public function vault_connect($credentials) {
|
261 |
|
262 |
if (false === ($updraftplus_admin = $this->_load_ud_admin())) return new WP_Error('no_updraftplus');
|
263 |
|
264 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
265 |
|
266 |
+
$instance_id = empty($credentials['instance_id']) ? '' : $credentials['instance_id'];
|
267 |
+
|
268 |
+
return $updraftplus_admin->get_updraftvault($instance_id)->ajax_vault_connect(false, $credentials);
|
269 |
|
270 |
}
|
271 |
|
272 |
+
/**
|
273 |
+
* This method will make a call to the methods responsible for removing a connection to UpdraftVault
|
274 |
+
*
|
275 |
+
* @param array $params - an array of parameters such as a instance_id
|
276 |
+
* @return string - the result of the call
|
277 |
+
*/
|
278 |
public function vault_disconnect($params = array()) {
|
279 |
|
280 |
if (false === ($updraftplus_admin = $this->_load_ud_admin()) || false === ($updraftplus = $this->_load_ud())) return new WP_Error('no_updraftplus');
|
282 |
if (!UpdraftPlus_Options::user_can_manage()) return new WP_Error('updraftplus_permission_denied');
|
283 |
|
284 |
$echo_results = empty($params['immediate_echo']) ? false : true;
|
285 |
+
|
286 |
+
$instance_id = empty($params['instance_id']) ? '' : $params['instance_id'];
|
287 |
|
288 |
+
$results = (array) $updraftplus_admin->get_updraftvault($instance_id)->ajax_vault_disconnect($echo_results);
|
289 |
|
290 |
return $results;
|
291 |
|
292 |
}
|
293 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
294 |
/**
|
295 |
* A handler method to call the UpdraftPlus admin save settings method. It will check if the settings passed to it are in the format of a string if so it converts it to an array otherwise just pass the array
|
296 |
*
|
@@ -581,4 +581,73 @@ class UpdraftPlus_WPAdmin_Commands extends UpdraftPlus_Commands {
|
|
581 |
public function get_zipfile_download($params) {
|
582 |
return apply_filters('updraftplus_command_get_zipfile_download', array('error' => 'UpdraftPlus: command (get_zipfile_download) not installed (are you missing an add-on?)'), $params);
|
583 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
584 |
}
|
581 |
public function get_zipfile_download($params) {
|
582 |
return apply_filters('updraftplus_command_get_zipfile_download', array('error' => 'UpdraftPlus: command (get_zipfile_download) not installed (are you missing an add-on?)'), $params);
|
583 |
}
|
584 |
+
|
585 |
+
/**
|
586 |
+
* Dismiss the notice which will if .htaccess have any old migrated site reference.
|
587 |
+
*
|
588 |
+
* @return boolean Return true if migration notice is dismissed
|
589 |
+
*/
|
590 |
+
public function dismiss_migration_notice_for_old_site_reference() {
|
591 |
+
delete_site_option('updraftplus_migrated_site_domain');
|
592 |
+
return true;
|
593 |
+
}
|
594 |
+
|
595 |
+
/**
|
596 |
+
* When character set and collate both are unsupported at restoration time and if user change anyone substitution dropdown from both, Other substitution select box value should be change respectively. To achieve this functionality, Ajax calls comes here.
|
597 |
+
*
|
598 |
+
* @param Array $params this is an array of parameters sent via ajax it can include the following:
|
599 |
+
* collate_change_on_charset_selection_data - It is data in serialize form which is need for choose other dropdown option value. It contains below elemts data:
|
600 |
+
* db_supported_collations - All collations supported by current database. This is result of 'SHOW COLLATION' query
|
601 |
+
* db_unsupported_collate_unique - Unsupported collates unique array
|
602 |
+
* db_collates_found - All collates found in database backup file
|
603 |
+
* event_source_elem - Dropdown elemtn id which trigger the ajax request
|
604 |
+
* updraft_restorer_charset - Charset dropdown selected value option
|
605 |
+
* updraft_restorer_collate - Collate dropdown selected value option
|
606 |
+
*
|
607 |
+
* @return array - $action_data which contains following data:
|
608 |
+
* is_action_required - 1 or 0 Whether or not change other dropdown value
|
609 |
+
* elem_id - Dropdown element id which value need to change. The other dropdown element id
|
610 |
+
* elem_val - Dropdown element value which should be selected for other drodown
|
611 |
+
*/
|
612 |
+
public function collate_change_on_charset_selection($params) {
|
613 |
+
$collate_change_on_charset_selection_data = json_decode(wp_unslash($params['collate_change_on_charset_selection_data']), true);
|
614 |
+
$updraft_restorer_collate = $params['updraft_restorer_collate'];
|
615 |
+
$updraft_restorer_charset = $params['updraft_restorer_charset'];
|
616 |
+
|
617 |
+
$db_supported_collations = $collate_change_on_charset_selection_data['db_supported_collations'];
|
618 |
+
$db_unsupported_collate_unique = $collate_change_on_charset_selection_data['db_unsupported_collate_unique'];
|
619 |
+
$db_collates_found = $collate_change_on_charset_selection_data['db_collates_found'];
|
620 |
+
|
621 |
+
$action_data = array(
|
622 |
+
'is_action_required' => 0,
|
623 |
+
);
|
624 |
+
// No need to change other dropdown value
|
625 |
+
if (isset($db_supported_collations[$updraft_restorer_collate]->Charset) && $updraft_restorer_charset == $db_supported_collations[$updraft_restorer_collate]->Charset) {
|
626 |
+
return $action_data;
|
627 |
+
}
|
628 |
+
$similar_type_collate = $this->_updraftplus->get_similar_collate_related_to_charset($db_supported_collations, $db_unsupported_collate_unique, $updraft_restorer_charset);
|
629 |
+
if (empty($similar_type_collate)) {
|
630 |
+
$similar_type_collate = $this->_updraftplus->get_similar_collate_based_on_ocuurence_count($db_collates_found, $db_supported_collations, $db_supported_charsets_related_to_unsupported_collations = array($updraft_restorer_collate));
|
631 |
+
}
|
632 |
+
// Default collation for changed charcter set
|
633 |
+
if (empty($similar_type_collate)) {
|
634 |
+
$charset_row = $GLOBALS['wpdb']->get_row($GLOBALS['wpdb']->prepare("SHOW CHARACTER SET LIKE '%s'", $updraft_restorer_charset));
|
635 |
+
if (null !== $charset_row && !empty($charset_row->{'Default collation'})) {
|
636 |
+
$similar_type_collate = $charset_row->{'Default collation'};
|
637 |
+
}
|
638 |
+
}
|
639 |
+
if (empty($similar_type_collate)) {
|
640 |
+
foreach ($db_supported_collations as $db_supported_collation => $db_supported_collation_info) {
|
641 |
+
if (isset($db_supported_collation_info->Charset) && $updraft_restorer_charset == $db_supported_collation_info->Charset) {
|
642 |
+
$similar_type_collate = $db_supported_collation;
|
643 |
+
break;
|
644 |
+
}
|
645 |
+
}
|
646 |
+
}
|
647 |
+
if (!empty($similar_type_collate)) {
|
648 |
+
$action_data['is_action_required'] = 1;
|
649 |
+
$action_data['similar_type_collate'] = $similar_type_collate;
|
650 |
+
}
|
651 |
+
return $action_data;
|
652 |
+
}
|
653 |
}
|
@@ -1,4 +1,4 @@
|
|
1 |
-
Copyright (C) 2011-
|
2 |
|
3 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
of this software and associated documentation files (the "Software"), to deal
|
1 |
+
Copyright (C) 2011-2017 by Yehuda Katz
|
2 |
|
3 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4 |
of this software and associated documentation files (the "Software"), to deal
|
@@ -1,9 +1,9 @@
|
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
-
handlebars v4.0.
|
5 |
|
6 |
-
Copyright (C) 2011-
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
@@ -275,7 +275,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
275 |
|
276 |
var _logger2 = _interopRequireDefault(_logger);
|
277 |
|
278 |
-
var VERSION = '4.0.
|
279 |
exports.VERSION = VERSION;
|
280 |
var COMPILER_REVISION = 7;
|
281 |
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
+
handlebars v4.0.11
|
5 |
|
6 |
+
Copyright (C) 2011-2017 by Yehuda Katz
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
275 |
|
276 |
var _logger2 = _interopRequireDefault(_logger);
|
277 |
|
278 |
+
var VERSION = '4.0.11';
|
279 |
exports.VERSION = VERSION;
|
280 |
var COMPILER_REVISION = 7;
|
281 |
|
@@ -1,9 +1,9 @@
|
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
-
handlebars v4.0.
|
5 |
|
6 |
-
Copyright (C) 2011-
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
@@ -24,6 +24,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24 |
THE SOFTWARE.
|
25 |
|
26 |
*/
|
27 |
-
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
|
28 |
85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
|
29 |
var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
+
handlebars v4.0.11
|
5 |
|
6 |
+
Copyright (C) 2011-2017 by Yehuda Katz
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
24 |
THE SOFTWARE.
|
25 |
|
26 |
*/
|
27 |
+
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(35),i=e(h),j=c(36),k=c(41),l=c(42),m=e(l),n=c(39),o=e(n),p=c(34),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(34),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.11";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(7)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(8),__esModule:!0}},function(a,b,c){var d=c(9);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(11),g=e(f),h=c(12),i=e(h),j=c(13),k=e(j),l=c(14),m=e(l),n=c(15),o=e(n),p=c(16),q=e(p),r=c(17),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(6),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(1)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(19),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(5),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(23)["default"],m=c(3)["default"],n=c(1)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(5),p=m(o),q=c(6),r=n(q),s=c(4)},function(a,b,c){a.exports={"default":c(24),__esModule:!0}},function(a,b,c){c(25),a.exports=c(30).Object.seal},function(a,b,c){var d=c(26);c(27)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(28),e=c(30),f=c(33);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(29),e=c(30),f=c(31),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(32);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())},function(a,b){"use strict";b.__esModule=!0;var c={helpers:{helperExpression:function(a){return"SubExpression"===a.type||("MustacheStatement"===a.type||"BlockStatement"===a.type)&&!!(a.params&&a.params.length||a.hash)},scopedId:function(a){return/^\.|this\b/.test(a.original)},simpleId:function(a){return 1===a.parts.length&&!c.helpers.scopedId(a)&&!a.depth}}};b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if("Program"===a.type)return a;h["default"].yy=n,n.locInfo=function(a){return new n.SourceLocation(b&&b.srcName,a)};var c=new j["default"](b);return c.accept(h["default"].parse(a))}var e=c(1)["default"],f=c(3)["default"];b.__esModule=!0,b.parse=d;var g=c(37),h=e(g),i=c(38),j=e(i),k=c(40),l=f(k),m=c(5);b.parser=h["default"];var n={};m.extend(n,l)},function(a,b){"use strict";b.__esModule=!0;var c=function(){function a(){this.yy={}}var b={trace:function(){},yy:{},symbols_:{error:2,root:3,program:4,EOF:5,program_repetition0:6,statement:7,mustache:8,block:9,rawBlock:10,partial:11,partialBlock:12,content:13,COMMENT:14,CONTENT:15,openRawBlock:16,rawBlock_repetition_plus0:17,END_RAW_BLOCK:18,OPEN_RAW_BLOCK:19,helperName:20,openRawBlock_repetition0:21,openRawBlock_option0:22,CLOSE_RAW_BLOCK:23,openBlock:24,block_option0:25,closeBlock:26,openInverse:27,block_option1:28,OPEN_BLOCK:29,openBlock_repetition0:30,openBlock_option0:31,openBlock_option1:32,CLOSE:33,OPEN_INVERSE:34,openInverse_repetition0:35,openInverse_option0:36,openInverse_option1:37,openInverseChain:38,OPEN_INVERSE_CHAIN:39,openInverseChain_repetition0:40,openInverseChain_option0:41,openInverseChain_option1:42,inverseAndProgram:43,INVERSE:44,inverseChain:45,inverseChain_option0:46,OPEN_ENDBLOCK:47,OPEN:48,mustache_repetition0:49,mustache_option0:50,OPEN_UNESCAPED:51,mustache_repetition1:52,mustache_option1:53,CLOSE_UNESCAPED:54,OPEN_PARTIAL:55,partialName:56,partial_repetition0:57,partial_option0:58,openPartialBlock:59,OPEN_PARTIAL_BLOCK:60,openPartialBlock_repetition0:61,openPartialBlock_option0:62,param:63,sexpr:64,OPEN_SEXPR:65,sexpr_repetition0:66,sexpr_option0:67,CLOSE_SEXPR:68,hash:69,hash_repetition_plus0:70,hashSegment:71,ID:72,EQUALS:73,blockParams:74,OPEN_BLOCK_PARAMS:75,blockParams_repetition_plus0:76,CLOSE_BLOCK_PARAMS:77,path:78,dataName:79,STRING:80,NUMBER:81,BOOLEAN:82,UNDEFINED:83,NULL:84,DATA:85,pathSegments:86,SEP:87,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"},productions_:[0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],performAction:function(a,b,c,d,e,f,g){var h=f.length-1;switch(e){case 1:return f[h-1];case 2:this.$=d.prepareProgram(f[h]);break;case 3:this.$=f[h];break;case 4:this.$=f[h];break;case 5:this.$=f[h];break;case 6:this.$=f[h];break;case 7:this.$=f[h];break;case 8:this.$=f[h];break;case 9:this.$={type:"CommentStatement",value:d.stripComment(f[h]),strip:d.stripFlags(f[h],f[h]),loc:d.locInfo(this._$)};break;case 10:this.$={type:"ContentStatement",original:f[h],value:f[h],loc:d.locInfo(this._$)};break;case 11:this.$=d.prepareRawBlock(f[h-2],f[h-1],f[h],this._$);break;case 12:this.$={path:f[h-3],params:f[h-2],hash:f[h-1]};break;case 13:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!1,this._$);break;case 14:this.$=d.prepareBlock(f[h-3],f[h-2],f[h-1],f[h],!0,this._$);break;case 15:this.$={open:f[h-5],path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 16:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 17:this.$={path:f[h-4],params:f[h-3],hash:f[h-2],blockParams:f[h-1],strip:d.stripFlags(f[h-5],f[h])};break;case 18:this.$={strip:d.stripFlags(f[h-1],f[h-1]),program:f[h]};break;case 19:var i=d.prepareBlock(f[h-2],f[h-1],f[h],f[h],!1,this._$),j=d.prepareProgram([i],f[h-1].loc);j.chained=!0,this.$={strip:f[h-2].strip,program:j,chain:!0};break;case 20:this.$=f[h];break;case 21:this.$={path:f[h-1],strip:d.stripFlags(f[h-2],f[h])};break;case 22:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 23:this.$=d.prepareMustache(f[h-3],f[h-2],f[h-1],f[h-4],d.stripFlags(f[h-4],f[h]),this._$);break;case 24:this.$={type:"PartialStatement",name:f[h-3],params:f[h-2],hash:f[h-1],indent:"",strip:d.stripFlags(f[h-4],f[h]),loc:d.locInfo(this._$)};break;case 25:this.$=d.preparePartialBlock(f[h-2],f[h-1],f[h],this._$);break;case 26:this.$={path:f[h-3],params:f[h-2],hash:f[h-1],strip:d.stripFlags(f[h-4],f[h])};break;case 27:this.$=f[h];break;case 28:this.$=f[h];break;case 29:this.$={type:"SubExpression",path:f[h-3],params:f[h-2],hash:f[h-1],loc:d.locInfo(this._$)};break;case 30:this.$={type:"Hash",pairs:f[h],loc:d.locInfo(this._$)};break;case 31:this.$={type:"HashPair",key:d.id(f[h-2]),value:f[h],loc:d.locInfo(this._$)};break;case 32:this.$=d.id(f[h-1]);break;case 33:this.$=f[h];break;case 34:this.$=f[h];break;case 35:this.$={type:"StringLiteral",value:f[h],original:f[h],loc:d.locInfo(this._$)};break;case 36:this.$={type:"NumberLiteral",value:Number(f[h]),original:Number(f[h]),loc:d.locInfo(this._$)};break;case 37:this.$={type:"BooleanLiteral",value:"true"===f[h],original:"true"===f[h],loc:d.locInfo(this._$)};break;case 38:this.$={type:"UndefinedLiteral",original:void 0,value:void 0,loc:d.locInfo(this._$)};break;case 39:this.$={type:"NullLiteral",original:null,value:null,loc:d.locInfo(this._$)};break;case 40:this.$=f[h];break;case 41:this.$=f[h];break;case 42:this.$=d.preparePath(!0,f[h],this._$);break;case 43:this.$=d.preparePath(!1,f[h],this._$);break;case 44:f[h-2].push({part:d.id(f[h]),original:f[h],separator:f[h-1]}),this.$=f[h-2];break;case 45:this.$=[{part:d.id(f[h]),original:f[h]}];break;case 46:this.$=[];break;case 47:f[h-1].push(f[h]);break;case 48:this.$=[f[h]];break;case 49:f[h-1].push(f[h]);break;case 50:this.$=[];break;case 51:f[h-1].push(f[h]);break;case 58:this.$=[];break;case 59:f[h-1].push(f[h]);break;case 64:this.$=[];break;case 65:f[h-1].push(f[h]);break;case 70:this.$=[];break;case 71:f[h-1].push(f[h]);break;case 78:this.$=[];break;case 79:f[h-1].push(f[h]);break;case 82:this.$=[];break;case 83:f[h-1].push(f[h]);break;case 86:this.$=[];break;case 87:f[h-1].push(f[h]);break;case 90:this.$=[];break;case 91:f[h-1].push(f[h]);break;case 94:this.$=[];break;case 95:f[h-1].push(f[h]);break;case 98:this.$=[f[h]];break;case 99:f[h-1].push(f[h]);break;case 100:this.$=[f[h]];break;case 101:f[h-1].push(f[h])}},table:[{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],
|
28 |
85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],defaultActions:{4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]},parseError:function(a,b){throw new Error(a)},parse:function(a){function b(){var a;return a=c.lexer.lex()||1,"number"!=typeof a&&(a=c.symbols_[a]||a),a}var c=this,d=[0],e=[null],f=[],g=this.table,h="",i=0,j=0,k=0;this.lexer.setInput(a),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,this.yy.parser=this,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var l=this.lexer.yylloc;f.push(l);var m=this.lexer.options&&this.lexer.options.ranges;"function"==typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var n,o,p,q,r,s,t,u,v,w={};;){if(p=d[d.length-1],this.defaultActions[p]?q=this.defaultActions[p]:(null!==n&&"undefined"!=typeof n||(n=b()),q=g[p]&&g[p][n]),"undefined"==typeof q||!q.length||!q[0]){var x="";if(!k){v=[];for(s in g[p])this.terminals_[s]&&s>2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;g<f.length&&(c=this._input.match(this.rules[f[g]]),!c||b&&!(c[0].length>b[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(39),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i<j;i++){var k=d[i],l=this.accept(k);if(l){var m=e(d,i,c),n=f(d,i,c),o=l.openStandalone&&m,p=l.closeStandalone&&n,q=l.inlineStandalone&&m&&n;l.close&&g(d,i,!0),l.open&&h(d,i,!0),b&&q&&(g(d,i),h(d,i)&&"PartialStatement"===k.type&&(k.indent=/([ \t]+$)/.exec(d[i-1].original)[1])),b&&o&&(g((k.program||k.inverse).body),h(d,i)),b&&p&&(g(d,i),h((k.inverse||k.program).body))}}return a},d.prototype.BlockStatement=d.prototype.DecoratorBlock=d.prototype.PartialBlockStatement=function(a){this.accept(a.program),this.accept(a.inverse);var b=a.program||a.inverse,c=a.program&&a.inverse,d=c,i=c;if(c&&c.chained)for(d=c.body[0].program;i.chained;)i=i.body[i.body.length-1].program;var j={open:a.openStrip.open,close:a.closeStrip.close,openStandalone:f(b.body),closeStandalone:e((d||b).body)};if(a.openStrip.close&&g(b.body,null,!0),c){var k=a.inverseStrip;k.open&&h(b.body,null,!0),k.close&&g(d.body,null,!0),a.closeStrip.open&&h(i.body,null,!0),!this.options.ignoreStandalone&&e(b.body)&&f(d.body)&&(h(b.body),g(d.body))}else a.closeStrip.open&&h(b.body,null,!0);return j},d.prototype.Decorator=d.prototype.MustacheStatement=function(a){return a.strip},d.prototype.PartialStatement=d.prototype.CommentStatement=function(a){var b=a.strip||{};return{inlineStandalone:!0,open:b.open,close:b.close}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(){this.parents=[]}function e(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function f(a){e.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function g(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var h=c(1)["default"];b.__esModule=!0;var i=c(6),j=h(i);d.prototype={constructor:d,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!d.prototype[c.type])throw new j["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new j["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b<c;b++)this.acceptKey(a,b),a[b]||(a.splice(b,1),b--,c--)},accept:function(a){if(a){if(!this[a.type])throw new j["default"]("Unknown type: "+a.type,a);this.current&&this.parents.unshift(this.current),this.current=a;var b=this[a.type](a);return this.current=this.parents.shift(),!this.mutating||b?b:b!==!1?a:void 0}},Program:function(a){this.acceptArray(a.body)},MustacheStatement:e,Decorator:e,BlockStatement:f,DecoratorBlock:f,PartialStatement:g,PartialBlockStatement:function(a){g.call(this,a),this.acceptKey(a,"program")},ContentStatement:function(){},CommentStatement:function(){},SubExpression:e,PathExpression:function(){},StringLiteral:function(){},NumberLiteral:function(){},BooleanLiteral:function(){},UndefinedLiteral:function(){},NullLiteral:function(){},Hash:function(a){this.acceptArray(a.pairs)},HashPair:function(a){this.acceptRequired(a,"value")}},b["default"]=d,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b){if(b=b.path?b.path.original:b,a.path.original!==b){var c={loc:a.path.loc};throw new q["default"](a.path.original+" doesn't match "+b,c)}}function e(a,b){this.source=a,this.start={line:b.first_line,column:b.first_column},this.end={line:b.last_line,column:b.last_column}}function f(a){return/^\[.*\]$/.test(a)?a.substr(1,a.length-2):a}function g(a,b){return{open:"~"===a.charAt(2),close:"~"===b.charAt(b.length-3)}}function h(a){return a.replace(/^\{\{~?\!-?-?/,"").replace(/-?-?~?\}\}$/,"")}function i(a,b,c){c=this.locInfo(c);for(var d=a?"@":"",e=[],f=0,g="",h=0,i=b.length;h<i;h++){var j=b[h].part,k=b[h].original!==j;if(d+=(b[h].separator||"")+j,k||".."!==j&&"."!==j&&"this"!==j)e.push(j);else{if(e.length>0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);b=l.extend({},b),"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c<a.length;c++)if(!g(a[c],b[c]))return!1;return!0}}function h(a){if(!a.path.parts){var b=a.path;a.path={type:"PathExpression",data:!1,depth:0,parts:[b.original+""],original:b.original+"",loc:b.loc}}}var i=c(1)["default"];b.__esModule=!0,b.Compiler=d,b.precompile=e,b.compile=f;var j=c(6),k=i(j),l=c(5),m=c(35),n=i(m),o=[].slice;d.prototype={compiler:d,equals:function(a){var b=this.opcodes.length;if(a.opcodes.length!==b)return!1;for(var c=0;c<b;c++){var d=this.opcodes[c],e=a.opcodes[c];if(d.opcode!==e.opcode||!g(d.args,e.args))return!1}b=this.children.length;for(var c=0;c<b;c++)if(!this.children[c].equals(a.children[c]))return!1;return!0},guid:0,compile:function(a,b){this.sourceNode=[],this.opcodes=[],this.children=[],this.options=b,this.stringParams=b.stringParams,this.trackIds=b.trackIds,b.blockParams=b.blockParams||[];var c=b.knownHelpers;if(b.knownHelpers={helperMissing:!0,blockHelperMissing:!0,each:!0,"if":!0,unless:!0,"with":!0,log:!0,lookup:!0},c)for(var d in c)d in c&&(this.options.knownHelpers[d]=c[d]);return this.accept(a)},compileProgram:function(a){var b=new this.compiler,c=b.compile(a,this.options),d=this.guid++;return this.usePartial=this.usePartial||c.usePartial,this.children[d]=c,this.useDepths=this.useDepths||c.useDepths,d},accept:function(a){if(!this[a.type])throw new k["default"]("Unknown type: "+a.type,a);this.sourceNode.unshift(a);var b=this[a.type](a);return this.sourceNode.shift(),b},Program:function(a){this.options.blockParams.unshift(a.blockParams);for(var b=a.body,c=b.length,d=0;d<c;d++)this.accept(b[d]);return this.options.blockParams.shift(),this.isSimple=1===c,this.blockParams=a.blockParams?a.blockParams.length:0,this},BlockStatement:function(a){h(a);var b=a.program,c=a.inverse;b=b&&this.compileProgram(b),c=c&&this.compileProgram(c);var d=this.classifySexpr(a);"helper"===d?this.helperSexpr(a,b,c):"simple"===d?(this.simpleSexpr(a),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("blockValue",a.path.original)):(this.ambiguousSexpr(a,b,c),this.opcode("pushProgram",b),this.opcode("pushProgram",c),this.opcode("emptyHash"),this.opcode("ambiguousBlockValue")),this.opcode("append")},DecoratorBlock:function(a){var b=a.program&&this.compileProgram(a.program),c=this.setupFullMustacheParams(a,b,void 0),d=a.path;this.useDecorators=!0,this.opcode("registerDecorator",c.length,d.original)},PartialStatement:function(a){this.usePartial=!0;var b=a.program;b&&(b=this.compileProgram(a.program));var c=a.params;if(c.length>1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c<d;c++)this.pushParam(b[c].value);for(;c--;)this.opcode("assignToHash",b[c].key);this.opcode("popHash")},opcode:function(a){this.opcodes.push({opcode:a,args:o.call(arguments,1),loc:this.sourceNode[0].loc})},addDepth:function(a){a&&(this.useDepths=!0)},classifySexpr:function(a){var b=n["default"].helpers.simpleId(a.path),c=b&&!!this.blockParamIndex(a.path.parts[0]),d=!c&&n["default"].helpers.helperExpression(a),e=!c&&(d||b);if(e&&!d){var f=a.path.parts[0],g=this.options;g.knownHelpers[f]?d=!0:g.knownHelpersOnly&&(e=!1)}return d?"helper":e?"ambiguous":"simple"},pushParams:function(a){for(var b=0,c=a.length;b<c;b++)this.pushParam(a[b])},pushParam:function(a){var b=null!=a.value?a.value:a.original||"";if(this.stringParams)b.replace&&(b=b.replace(/^(\.?\.\/)*/g,"").replace(/\//g,".")),a.depth&&this.addDepth(a.depth),this.opcode("getContext",a.depth||0),this.opcode("pushStringParam",b,a.type),"SubExpression"===a.type&&this.accept(a);else{if(this.trackIds){var c=void 0;if(!a.parts||n["default"].helpers.scopedId(a)||a.depth||(c=this.blockParamIndex(a.parts[0])),c){var d=a.parts.slice(1).join(".");this.opcode("pushId","BlockParam",c,d)}else b=a.original||b,b.replace&&(b=b.replace(/^this(?:\.|$)/,"").replace(/^\.\//,"").replace(/^\.$/,"")),this.opcode("pushId",a.type,b)}this.accept(a)}},setupFullMustacheParams:function(a,b,c,d){var e=a.params;return this.pushParams(e),this.opcode("pushProgram",b),this.opcode("pushProgram",c),a.hash?this.accept(a.hash):this.opcode("emptyHash",d),e},blockParamIndex:function(a){for(var b=0,c=this.options.blockParams.length;b<c;b++){var d=this.options.blockParams[b],e=d&&l.indexOf(d,a);if(d&&e>=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f<g;f++)e=b.nameLookup(e,c[f],d);return a?[b.aliasable("container.strict"),"(",e,", ",b.quotedString(c[f]),")"]:e}var g=c(1)["default"];b.__esModule=!0;var h=c(4),i=c(6),j=g(i),k=c(5),l=c(43),m=g(l);e.prototype={nameLookup:function(a,b){return e.isValidJavaScriptVariableName(b)?[a,".",b]:[a,"[",JSON.stringify(b),"]"]},depthedLookup:function(a){return[this.aliasable("container.lookup"),'(depths, "',a,'")']},compilerInfo:function(){var a=h.COMPILER_REVISION,b=h.REVISION_CHANGES[a];return[a,b]},appendToBuffer:function(a,b,c){return k.isArray(a)||(a=[a]),a=this.source.wrap(a,b),this.environment.isSimple?["return ",a,";"]:c?["buffer += ",a,";"]:(a.appendToBuffer=!0,a)},initializeBuffer:function(){return this.quotedString("")},compile:function(a,b,c,d){this.environment=a,this.options=b,this.stringParams=this.options.stringParams,this.trackIds=this.options.trackIds,this.precompile=!d,this.name=this.environment.name,this.isChild=!!c,this.context=c||{decorators:[],programs:[],environments:[]},this.preamble(),this.stackSlot=0,this.stackVars=[],this.aliases={},this.registers={list:[]},this.hashes=[],this.compileStack=[],this.inlineStack=[],this.blockParams=[],this.compileChildren(a,b),this.useDepths=this.useDepths||a.useDepths||a.useDecorators||this.options.compat,this.useBlockParams=this.useBlockParams||a.useBlockParams;var e=a.opcodes,f=void 0,g=void 0,h=void 0,i=void 0;for(h=0,i=e.length;h<i;h++)f=e[h],this.source.currentLocation=f.loc,g=g||f.loc,this[f.opcode].apply(this,f.args);if(this.source.currentLocation=g,this.pushSource(""),this.stackSlot||this.inlineStack.length||this.compileStack.length)throw new j["default"]("Compile completed with content left on stack");this.decorators.isEmpty()?this.decorators=void 0:(this.useDecorators=!0,this.decorators.prepend("var decorators = container.decorators;\n"),this.decorators.push("return fn;"),d?this.decorators=Function.apply(this,["fn","props","container","depth0","data","blockParams","depths",this.decorators.merge()]):(this.decorators.prepend("function(fn, props, container, depth0, data, blockParams, depths) {\n"),this.decorators.push("}\n"),this.decorators=this.decorators.merge()));var k=this.createFunctionContext(d);if(this.isChild)return k;var l={compiler:this.compilerInfo(),main:k};this.decorators&&(l.main_d=this.decorators,l.useDecorators=!0);var m=this.context,n=m.programs,o=m.decorators;for(h=0,i=n.length;h<i;h++)n[h]&&(l[h]=n[h],o[h]&&(l[h+"_d"]=o[h],l.useDecorators=!0));return this.environment.usePartial&&(l.usePartial=!0),this.options.data&&(l.useData=!0),this.useDepths&&(l.useDepths=!0),this.useBlockParams&&(l.useBlockParams=!0),this.options.compat&&(l.compat=!0),d?l.compilerOptions=this.options:(l.compiler=JSON.stringify(l.compiler),this.source.currentLocation={start:{line:1,column:0}},l=this.objectLiteral(l),b.srcName?(l=l.toStringWithSourceMap({file:b.destName}),l.map=l.map&&l.map.toString()):l=l.toString()),l},preamble:function(){this.lastContext=0,this.source=new m["default"](this.options.srcName),this.decorators=new m["default"](this.options.srcName)},createFunctionContext:function(a){var b="",c=this.stackVars.concat(this.registers.list);c.length>0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;c<h;c++)this.replaceStack(function(e){
|
29 |
var f=g.nameLookup(e,b[c],a);return d?[" && ",f]:[" != null ? ",f," : ",e]})},resolvePossibleLambda:function(){this.push([this.aliasable("container.lambda"),"(",this.popStack(),", ",this.contextName(0),")"])},pushStringParam:function(a,b){this.pushContext(),this.pushString(b),"SubExpression"!==b&&("string"==typeof a?this.pushString(a):this.pushStackLiteral(a))},emptyHash:function(a){this.trackIds&&this.push("{}"),this.stringParams&&(this.push("{}"),this.push("{}")),this.pushStackLiteral(a?"undefined":"{}")},pushHash:function(){this.hash&&this.hashes.push(this.hash),this.hash={values:[],types:[],contexts:[],ids:[]}},popHash:function(){var a=this.hash;this.hash=this.hashes.pop(),this.trackIds&&this.push(this.objectLiteral(a.ids)),this.stringParams&&(this.push(this.objectLiteral(a.contexts)),this.push(this.objectLiteral(a.types))),this.push(this.objectLiteral(a.values))},pushString:function(a){this.pushStackLiteral(this.quotedString(a))},pushLiteral:function(a){this.pushStackLiteral(a)},pushProgram:function(a){null!=a?this.pushStackLiteral(this.programExpression(a)):this.pushStackLiteral(null)},registerDecorator:function(a,b){var c=this.nameLookup("decorators",b,"decorator"),d=this.setupHelperArgs(b,a);this.decorators.push(["fn = ",this.decorators.functionCall(c,"",["fn","props","container",d])," || fn;"])},invokeHelper:function(a,b,c){var d=this.popStack(),e=this.setupHelper(a,b),f=c?[e.name," || "]:"",g=["("].concat(f,d);this.options.strict||g.push(" || ",this.aliasable("helpers.helperMissing")),g.push(")"),this.push(this.source.functionCall(g,"call",e.callParams))},invokeKnownHelper:function(a,b){var c=this.setupHelper(a,b);this.push(this.source.functionCall(c.name,"call",c.callParams))},invokeAmbiguous:function(a,b){this.useRegister("helper");var c=this.popStack();this.emptyHash();var d=this.setupHelper(0,a,b),e=this.lastHelper=this.nameLookup("helpers",a,"helper"),f=["(","(helper = ",e," || ",c,")"];this.options.strict||(f[0]="(helper = ",f.push(" != null ? helper : ",this.aliasable("helpers.helperMissing"))),this.push(["(",f,d.paramsInit?["),(",d.paramsInit]:[],"),","(typeof helper === ",this.aliasable('"function"')," ? ",this.source.functionCall("helper","call",d.callParams)," : helper))"])},invokePartial:function(a,b,c){var d=[],e=this.setupParams(b,1,d);a&&(b=this.popStack(),delete e.name),c&&(e.indent=JSON.stringify(c)),e.helpers="helpers",e.partials="partials",e.decorators="container.decorators",a?d.unshift(b):d.unshift(this.nameLookup("partials",b,"partial")),this.options.compat&&(e.depths="depths"),e=this.objectLiteral(e),d.push(e),this.push(this.source.functionCall("container.invokePartial","",d))},assignToHash:function(a){var b=this.popStack(),c=void 0,d=void 0,e=void 0;this.trackIds&&(e=this.popStack()),this.stringParams&&(d=this.popStack(),c=this.popStack());var f=this.hash;c&&(f.contexts[a]=c),d&&(f.types[a]=d),e&&(f.ids[a]=e),f.values[a]=b},pushId:function(a,b,c){"BlockParam"===a?this.pushStackLiteral("blockParams["+b[0]+"].path["+b[1]+"]"+(c?" + "+JSON.stringify("."+c):"")):"PathExpression"===a?this.pushString(b):"SubExpression"===a?this.pushStackLiteral("true"):this.pushStackLiteral("null")},compiler:e,compileChildren:function(a,b){for(var c=a.children,d=void 0,e=void 0,f=0,g=c.length;f<g;f++){d=c[f],e=new this.compiler;var h=this.matchExistingProgram(d);if(null==h){this.context.programs.push("");var i=this.context.programs.length;d.index=i,d.name="program"+i,this.context.programs[i]=e.compile(d,b,this.context,!this.precompile),this.context.decorators[i]=e.decorators,this.context.environments[i]=d,this.useDepths=this.useDepths||e.useDepths,this.useBlockParams=this.useBlockParams||e.useBlockParams,d.useDepths=this.useDepths,d.useBlockParams=this.useBlockParams}else d.index=h.index,d.name="program"+h.index,this.useDepths=this.useDepths||h.useDepths,this.useBlockParams=this.useBlockParams||h.useBlockParams}},matchExistingProgram:function(a){for(var b=0,c=this.context.environments.length;b<c;b++){var d=this.context.environments[b];if(d&&d.equals(a))return d}},programExpression:function(a){var b=this.environment.children[a],c=[b.index,"data",b.blockParams];return(this.useBlockParams||this.useDepths)&&c.push("blockParams"),this.useDepths&&c.push("depths"),"container.program("+c.join(", ")+")"},useRegister:function(a){this.registers[a]||(this.registers[a]=!0,this.registers.list.push(a))},push:function(a){return a instanceof d||(a=this.source.wrap(a)),this.inlineStack.push(a),a},pushStackLiteral:function(a){this.push(new d(a))},pushSource:function(a){this.pendingContent&&(this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent),this.pendingLocation)),this.pendingContent=void 0),a&&this.source.push(a)},replaceStack:function(a){var b=["("],c=void 0,e=void 0,f=void 0;if(!this.isInline())throw new j["default"]("replaceStack on non-inline");var g=this.popStack(!0);if(g instanceof d)c=[g.value],b=["(",c],f=!0;else{e=!0;var h=this.incrStack();b=["((",this.push(h)," = ",g,")"],c=this.topStack()}var i=a.call(this,c);f||this.popStack(),e&&this.stackSlot--,this.push(b.concat(i,")"))},incrStack:function(){return this.stackSlot++,this.stackSlot>this.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b<c;b++){var e=a[b];if(e instanceof d)this.compileStack.push(e);else{var f=this.incrStack();this.pushSource([f," = ",e,";"]),this.compileStack.push(f)}}},isInline:function(){return this.inlineStack.length},popStack:function(a){var b=this.isInline(),c=(b?this.inlineStack:this.compileStack).pop();if(!a&&c instanceof d)return c.value;if(!b){if(!this.stackSlot)throw new j["default"]("Invalid stack pop");this.stackSlot--}return c},topStack:function(){var a=this.isInline()?this.inlineStack:this.compileStack,b=a[a.length-1];return b instanceof d?b.value:b},contextName:function(a){return this.useDepths&&a?"depths["+a+"]":"depth"+a},quotedString:function(a){return this.source.quotedString(a)},objectLiteral:function(a){return this.source.objectLiteral(a)},aliasable:function(a){var b=this.aliases[a];return b?(b.referenceCount++,b):(b=this.aliases[a]=this.source.wrap(a),b.aliasable=!0,b.referenceCount=1,b)},setupHelper:function(a,b,c){var d=[],e=this.setupHelperArgs(b,a,d,c),f=this.nameLookup("helpers",b,"helper"),g=this.aliasable(this.contextName(0)+" != null ? "+this.contextName(0)+" : (container.nullContext || {})");return{params:d,paramsInit:e,name:f,callParams:[g].concat(d)}},setupParams:function(a,b,c){var d={},e=[],f=[],g=[],h=!c,i=void 0;h&&(c=[]),d.name=this.quotedString(a),d.hash=this.popStack(),this.trackIds&&(d.hashIds=this.popStack()),this.stringParams&&(d.hashTypes=this.popStack(),d.hashContexts=this.popStack());var j=this.popStack(),k=this.popStack();(k||j)&&(d.fn=k||"container.noop",d.inverse=j||"container.noop");for(var l=b;l--;)i=this.popStack(),c[l]=i,this.trackIds&&(g[l]=this.popStack()),this.stringParams&&(f[l]=this.popStack(),e[l]=this.popStack());return h&&(d.args=this.source.generateArray(c)),this.trackIds&&(d.ids=this.source.generateArray(g)),this.stringParams&&(d.types=this.source.generateArray(f),d.contexts=this.source.generateArray(e)),this.options.data&&(d.data="data"),this.useBlockParams&&(d.blockParams="blockParams"),d},setupHelperArgs:function(a,b,c,d){var e=this.setupParams(a,b,c);return e=this.objectLiteral(e),d?(this.useRegister("options"),c.push("options"),["options=",e]):c?(c.push(e),""):e}},function(){for(var a="break else new var case finally return void catch for switch while continue function this with default if throw delete in try do instanceof typeof abstract enum int short boolean export interface static byte extends long super char final native synchronized class float package throws const goto private transient debugger implements protected volatile double import public let yield await null true false".split(" "),b=e.RESERVED_WORDS={},c=0,d=a.length;c<d;c++)b[a[c]]=!0}(),e.isValidJavaScriptVariableName=function(a){return!e.RESERVED_WORDS[a]&&/^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(a)},b["default"]=e,a.exports=b["default"]},function(a,b,c){"use strict";function d(a,b,c){if(f.isArray(a)){for(var d=[],e=0,g=a.length;e<g;e++)d.push(b.wrap(a[e],c));return d}return"boolean"==typeof a||"number"==typeof a?a+"":a}function e(a){this.srcFile=a,this.source=[]}b.__esModule=!0;var f=c(5),g=void 0;try{}catch(h){}g||(g=function(a,b,c,d){this.src="",d&&this.add(d)},g.prototype={add:function(a){f.isArray(a)&&(a=a.join("")),this.src+=a},prepend:function(a){f.isArray(a)&&(a=a.join("")),this.src=a+this.src},toStringWithSourceMap:function(){return{code:this.toString()}},toString:function(){return this.src}}),e.prototype={isEmpty:function(){return!this.source.length},prepend:function(a,b){this.source.unshift(this.wrap(a,b))},push:function(a,b){this.source.push(this.wrap(a,b))},merge:function(){var a=this.empty();return this.each(function(b){a.add([" ",b,"\n"])}),a},each:function(a){for(var b=0,c=this.source.length;b<c;b++)a(this.source[b])},empty:function(){var a=this.currentLocation||{start:{}};return new g(a.start.line,a.start.column,this.srcFile)},wrap:function(a){var b=arguments.length<=1||void 0===arguments[1]?this.currentLocation||{start:{}}:arguments[1];return a instanceof g?a:(a=d(a,this,b),new g(b.start.line,b.start.column,this.srcFile,a))},functionCall:function(a,b,c){return c=this.generateList(c),this.wrap([a,b?"."+b+"(":"(",c,")"])},quotedString:function(a){return'"'+(a+"").replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")+'"'},objectLiteral:function(a){var b=[];for(var c in a)if(a.hasOwnProperty(c)){var e=d(a[c],this);"undefined"!==e&&b.push([this.quotedString(c),":",e])}var f=this.generateList(b);return f.prepend("{"),f.add("}"),f},generateList:function(a){for(var b=this.empty(),c=0,e=a.length;c<e;c++)c&&b.add(","),b.add(d(a[c],this));return b},generateArray:function(a){var b=this.generateList(a);return b.prepend("["),b.add("]"),b}},b["default"]=e,a.exports=b["default"]}])});
|
@@ -1,9 +1,9 @@
|
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
-
handlebars v4.0.
|
5 |
|
6 |
-
Copyright (C) 2011-
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
@@ -207,7 +207,7 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
207 |
|
208 |
var _logger2 = _interopRequireDefault(_logger);
|
209 |
|
210 |
-
var VERSION = '4.0.
|
211 |
exports.VERSION = VERSION;
|
212 |
var COMPILER_REVISION = 7;
|
213 |
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
+
handlebars v4.0.11
|
5 |
|
6 |
+
Copyright (C) 2011-2017 by Yehuda Katz
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
207 |
|
208 |
var _logger2 = _interopRequireDefault(_logger);
|
209 |
|
210 |
+
var VERSION = '4.0.11';
|
211 |
exports.VERSION = VERSION;
|
212 |
var COMPILER_REVISION = 7;
|
213 |
|
@@ -1,9 +1,9 @@
|
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
-
handlebars v4.0.
|
5 |
|
6 |
-
Copyright (C) 2011-
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
@@ -24,4 +24,4 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
24 |
THE SOFTWARE.
|
25 |
|
26 |
*/
|
27 |
-
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(20),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(21),p=e(o),q=c(33),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(17),k=c(19),l=e(k),m="4.0.10";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(10),g=e(f),h=c(11),i=e(h),j=c(12),k=e(j),l=c(13),m=e(l),n=c(14),o=e(n),p=c(15),q=e(p),r=c(16),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(18),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(22)["default"],m=c(1)["default"],n=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(4),p=m(o),q=c(5),r=n(q),s=c(3)},function(a,b,c){a.exports={"default":c(23),__esModule:!0}},function(a,b,c){c(24),a.exports=c(29).Object.seal},function(a,b,c){var d=c(25);c(26)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(27),e=c(29),f=c(32);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(28),e=c(29),f=c(30),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(31);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});
|
1 |
/**!
|
2 |
|
3 |
@license
|
4 |
+
handlebars v4.0.11
|
5 |
|
6 |
+
Copyright (C) 2011-2017 by Yehuda Katz
|
7 |
|
8 |
Permission is hereby granted, free of charge, to any person obtaining a copy
|
9 |
of this software and associated documentation files (the "Software"), to deal
|
24 |
THE SOFTWARE.
|
25 |
|
26 |
*/
|
27 |
+
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(20),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(21),p=e(o),q=c(33),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(17),k=c(19),l=e(k),m="4.0.11";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b<arguments.length;b++)for(var c in arguments[b])Object.prototype.hasOwnProperty.call(arguments[b],c)&&(a[c]=arguments[b][c]);return a}function e(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1}function f(a){if("string"!=typeof a){if(a&&a.toHTML)return a.toHTML();if(null==a)return"";if(!a)return a+"";a=""+a}return m.test(a)?a.replace(l,c):a}function g(a){return!a&&0!==a||!(!p(a)||0!==a.length)}function h(a){var b=d({},a);return b._parent=a,b}function i(a,b){return a.path=b,a}function j(a,b){return(a?a+".":"")+b}b.__esModule=!0,b.extend=d,b.indexOf=e,b.escapeExpression=f,b.isEmpty=g,b.createFrame=h,b.blockParams=i,b.appendContextPath=j;var k={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j<f.length;j++)this[f[j]]=i[f[j]];Error.captureStackTrace&&Error.captureStackTrace(this,d);try{c&&(this.lineNumber=g,e?Object.defineProperty(this,"column",{value:h,enumerable:!0}):this.column=h)}catch(k){}}var e=c(6)["default"];b.__esModule=!0;var f=["description","fileName","lineNumber","message","name","number","stack"];d.prototype=new Error,b["default"]=d,a.exports=b["default"]},function(a,b,c){a.exports={"default":c(7),__esModule:!0}},function(a,b,c){var d=c(8);a.exports=function(a,b,c){return d.setDesc(a,b,c)}},function(a,b){var c=Object;a.exports={create:c.create,getProto:c.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:c.getOwnPropertyDescriptor,setDesc:c.defineProperty,setDescs:c.defineProperties,getKeys:c.keys,getNames:c.getOwnPropertyNames,getSymbols:c.getOwnPropertySymbols,each:[].forEach}},function(a,b,c){"use strict";function d(a){g["default"](a),i["default"](a),k["default"](a),m["default"](a),o["default"](a),q["default"](a),s["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultHelpers=d;var f=c(10),g=e(f),h=c(11),i=e(h),j=c(12),k=e(j),l=c(13),m=e(l),n=c(14),o=e(n),p=c(15),q=e(p),r=c(16),s=e(r)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("blockHelperMissing",function(b,c){var e=c.inverse,f=c.fn;if(b===!0)return f(this);if(b===!1||null==b)return e(this);if(d.isArray(b))return b.length>0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h<l;h++)h in a&&c(h,h,h===a.length-1);else{var m=void 0;for(var n in a)a.hasOwnProperty(n)&&(void 0!==m&&c(m,h-1),m=n,h++);void 0!==m&&c(m,h-1,!0)}return 0===h&&(i=f(this)),i})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(5),f=d(e);b["default"]=function(a){a.registerHelper("helperMissing",function(){if(1!==arguments.length)throw new f["default"]('Missing helper: "'+arguments[arguments.length-1].name+'"')})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("if",function(a,b){return d.isFunction(a)&&(a=a.call(this)),!b.hash.includeZero&&!a||d.isEmpty(a)?b.inverse(this):b.fn(this)}),a.registerHelper("unless",function(b,c){return a.helpers["if"].call(this,b,{fn:c.inverse,inverse:c.fn,hash:c.hash})})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("log",function(){for(var b=[void 0],c=arguments[arguments.length-1],d=0;d<arguments.length-1;d++)b.push(arguments[d]);var e=1;null!=c.hash.level?e=c.hash.level:c.data&&null!=c.data.level&&(e=c.data.level),b[0]=e,a.log.apply(a,b)})},a.exports=b["default"]},function(a,b){"use strict";b.__esModule=!0,b["default"]=function(a){a.registerHelper("lookup",function(a,b){return a&&a[b]})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerHelper("with",function(a,b){d.isFunction(a)&&(a=a.call(this));var c=b.fn;if(d.isEmpty(a))return b.inverse(this);var e=b.data;return b.data&&b.ids&&(e=d.createFrame(b.data),e.contextPath=d.appendContextPath(b.data.contextPath,b.ids[0])),c(a,{data:e,blockParams:d.blockParams([a],[e&&e.contextPath])})})},a.exports=b["default"]},function(a,b,c){"use strict";function d(a){g["default"](a)}var e=c(2)["default"];b.__esModule=!0,b.registerDefaultDecorators=d;var f=c(18),g=e(f)},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4);b["default"]=function(a){a.registerDecorator("inline",function(a,b,c,e){var f=a;return b.partials||(b.partials={},f=function(e,f){var g=c.partials;c.partials=d.extend({},g,b.partials);var h=a(e,f);return c.partials=g,h}),b.partials[e.args[0]]=e.fn,f})},a.exports=b["default"]},function(a,b,c){"use strict";b.__esModule=!0;var d=c(4),e={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(a){if("string"==typeof a){var b=d.indexOf(e.methodMap,a.toLowerCase());a=b>=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f<c;f++)d[f-1]=arguments[f];console[b].apply(console,d)}}};b["default"]=e,a.exports=b["default"]},function(a,b){"use strict";function c(a){this.string=a}b.__esModule=!0,c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b["default"]=c,a.exports=b["default"]},function(a,b,c){"use strict";function d(a){var b=a&&a[0]||1,c=s.COMPILER_REVISION;if(b!==c){if(b<c){var d=s.REVISION_CHANGES[c],e=s.REVISION_CHANGES[b];throw new r["default"]("Template was precompiled with an older version of Handlebars than the current runtime. Please update your precompiler to a newer version ("+d+") or downgrade your runtime to an older version ("+e+").")}throw new r["default"]("Template was precompiled with a newer version of Handlebars than the current runtime. Please update your runtime to a newer version ("+a[1]+").")}}function e(a,b){function c(c,d,e){e.hash&&(d=p.extend({},d,e.hash),e.ids&&(e.ids[0]=!0)),c=b.VM.resolvePartial.call(this,c,d,e);var f=b.VM.invokePartial.call(this,c,d,e);if(null==f&&b.compile&&(e.partials[e.name]=b.compile(c,a.compilerOptions,b),f=e.partials[e.name](d,e)),null!=f){if(e.indent){for(var g=f.split("\n"),h=0,i=g.length;h<i&&(g[h]||h+1!==i);h++)g[h]=e.indent+g[h];f=g.join("\n")}return f}throw new r["default"]("The partial "+e.name+" could not be compiled when running in runtime-only mode")}function d(b){function c(b){return""+a.main(e,b,e.helpers,e.partials,g,i,h)}var f=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],g=f.data;d._setup(f),!f.partial&&a.useData&&(g=j(b,g));var h=void 0,i=a.useBlockParams?[]:void 0;return a.useDepths&&(h=f.depths?b!=f.depths[0]?[b].concat(f.depths):f.depths:[b]),(c=k(a.main,c,e,f.depths||[],g,i))(b,f)}if(!b)throw new r["default"]("No environment passed to template");if(!a||!a.main)throw new r["default"]("Unknown template object: "+typeof a);a.main.decorator=a.main_d,b.VM.checkRevision(a.compiler);var e={strict:function(a,b){if(!(b in a))throw new r["default"]('"'+b+'" not defined in '+a);return a[b]},lookup:function(a,b){for(var c=a.length,d=0;d<c;d++)if(a[d]&&null!=a[d][b])return a[d][b]},lambda:function(a,b){return"function"==typeof a?a.call(b):a},escapeExpression:p.escapeExpression,invokePartial:c,fn:function(b){var c=a[b];return c.decorator=a[b+"_d"],c},programs:[],program:function(a,b,c,d,e){var g=this.programs[a],h=this.fn(a);return b||e||d||c?g=f(this,a,h,b,c,d,e):g||(g=this.programs[a]=f(this,a,h)),g},data:function(a,b){for(;a&&b--;)a=a._parent;return a},merge:function(a,b){var c=a||b;return a&&b&&a!==b&&(c=p.extend({},b,a)),c},nullContext:l({}),noop:b.VM.noop,compilerInfo:a.compiler};return d.isTop=!0,d._setup=function(c){c.partial?(e.helpers=c.helpers,e.partials=c.partials,e.decorators=c.decorators):(e.helpers=e.merge(c.helpers,b.helpers),a.usePartial&&(e.partials=e.merge(c.partials,b.partials)),(a.usePartial||a.useDecorators)&&(e.decorators=e.merge(c.decorators,b.decorators)))},d._child=function(b,c,d,g){if(a.useBlockParams&&!d)throw new r["default"]("must pass block params");if(a.useDepths&&!g)throw new r["default"]("must pass parent depths");return f(e,b,a[b],c,0,d,g)},d}function f(a,b,c,d,e,f,g){function h(b){var e=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],h=g;return!g||b==g[0]||b===a.nullContext&&null===g[0]||(h=[b].concat(g)),c(a,b,a.helpers,a.partials,e.data||d,f&&[e.blockParams].concat(f),h)}return h=k(c,h,a,g,d,f),h.program=b,h.depth=g?g.length:0,h.blockParams=e||0,h}function g(a,b,c){return a?a.call||c.name||(c.name=a,a=c.partials[a]):a="@partial-block"===c.name?c.data["partial-block"]:c.partials[c.name],a}function h(a,b,c){var d=c.data&&c.data["partial-block"];c.partial=!0,c.ids&&(c.data.contextPath=c.ids[0]||c.data.contextPath);var e=void 0;if(c.fn&&c.fn!==i&&!function(){c.data=s.createFrame(c.data);var a=c.fn;e=c.data["partial-block"]=function(b){var c=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];return c.data=s.createFrame(c.data),c.data["partial-block"]=d,a(b,c)},a.partials&&(c.partials=p.extend({},c.partials,a.partials))}(),void 0===a&&e&&(a=e),void 0===a)throw new r["default"]("The partial "+c.name+" could not be found");if(a instanceof Function)return a(b,c)}function i(){return""}function j(a,b){return b&&"root"in b||(b=b?s.createFrame(b):{},b.root=a),b}function k(a,b,c,d,e,f){if(a.decorator){var g={};b=a.decorator(b,g,c,d&&d[0],e,f,d),p.extend(b,g)}return b}var l=c(22)["default"],m=c(1)["default"],n=c(2)["default"];b.__esModule=!0,b.checkRevision=d,b.template=e,b.wrapProgram=f,b.resolvePartial=g,b.invokePartial=h,b.noop=i;var o=c(4),p=m(o),q=c(5),r=n(q),s=c(3)},function(a,b,c){a.exports={"default":c(23),__esModule:!0}},function(a,b,c){c(24),a.exports=c(29).Object.seal},function(a,b,c){var d=c(25);c(26)("seal",function(a){return function(b){return a&&d(b)?a(b):b}})},function(a,b){a.exports=function(a){return"object"==typeof a?null!==a:"function"==typeof a}},function(a,b,c){var d=c(27),e=c(29),f=c(32);a.exports=function(a,b){var c=(e.Object||{})[a]||Object[a],g={};g[a]=b(c),d(d.S+d.F*f(function(){c(1)}),"Object",g)}},function(a,b,c){var d=c(28),e=c(29),f=c(30),g="prototype",h=function(a,b,c){var i,j,k,l=a&h.F,m=a&h.G,n=a&h.S,o=a&h.P,p=a&h.B,q=a&h.W,r=m?e:e[b]||(e[b]={}),s=m?d:n?d[b]:(d[b]||{})[g];m&&(c=b);for(i in c)j=!l&&s&&i in s,j&&i in r||(k=j?s[i]:c[i],r[i]=m&&"function"!=typeof s[i]?c[i]:p&&j?f(k,d):q&&s[i]==k?function(a){var b=function(b){return this instanceof a?new a(b):a(b)};return b[g]=a[g],b}(k):o&&"function"==typeof k?f(Function.call,k):k,o&&((r[g]||(r[g]={}))[i]=k))};h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,a.exports=h},function(a,b){var c=a.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=c)},function(a,b){var c=a.exports={version:"1.2.6"};"number"==typeof __e&&(__e=c)},function(a,b,c){var d=c(31);a.exports=function(a,b,c){if(d(a),void 0===b)return a;switch(c){case 1:return function(c){return a.call(b,c)};case 2:return function(c,d){return a.call(b,c,d)};case 3:return function(c,d,e){return a.call(b,c,d,e)}}return function(){return a.apply(b,arguments)}}},function(a,b){a.exports=function(a){if("function"!=typeof a)throw TypeError(a+" is not a function!");return a}},function(a,b){a.exports=function(a){try{return!!a()}catch(b){return!0}}},function(a,b){(function(c){"use strict";b.__esModule=!0,b["default"]=function(a){var b="undefined"!=typeof c?c:window,d=b.Handlebars;a.noConflict=function(){return b.Handlebars===a&&(b.Handlebars=d),a}},a.exports=b["default"]}).call(b,function(){return this}())}])});
|
@@ -2,10 +2,10 @@
|
|
2 |
* Send an action over AJAX. A wrapper around jQuery.ajax. In future, all consumers can be reviewed to simplify some of the options, where there is historical cruft.
|
3 |
* N.B. updraft_iframe_modal() below uses the Ajax URL for the iframe's src attribute
|
4 |
*
|
5 |
-
* @param {string}
|
6 |
-
* @param *
|
7 |
-
* @param
|
8 |
-
* @param {object}
|
9 |
* - [json_parse=true] - whether to JSON parse the results
|
10 |
* - [alert_on_error=true] - whether to show an alert box if there was a problem (otherwise, suppress it)
|
11 |
* - [action='updraft_ajax'] - what to send as the action parameter on the AJAX request (N.B. action parameter to this function goes as the 'subaction' parameter on the AJAX request)
|
@@ -88,8 +88,8 @@ function updraft_send_command(action, data, callback, options) {
|
|
88 |
/**
|
89 |
* Opens the dialog box for confirmation of whether to delete a backup, plus options if relevant
|
90 |
*
|
91 |
-
* @param {string}
|
92 |
-
* @param {string}
|
93 |
* @param {boolean} showremote - Whether or not to show the "also delete from remote storage?" checkbox
|
94 |
*/
|
95 |
function updraft_delete(key, nonce, showremote) {
|
@@ -210,9 +210,9 @@ function updraft_remote_storage_tabs_setup() {
|
|
210 |
/**
|
211 |
* Carries out a remote storage test
|
212 |
*
|
213 |
-
* @param {string}
|
214 |
* @param {callback} result_callback - A callback function to be called with the result
|
215 |
-
* @param {string}
|
216 |
*/
|
217 |
function updraft_remote_storage_test(method, result_callback, instance_id) {
|
218 |
|
@@ -293,8 +293,9 @@ function backupnow_whichfiles_checked(onlythesefileentities){
|
|
293 |
/**
|
294 |
* A method to get all the selected table values from the backup now modal
|
295 |
*
|
296 |
-
* @param
|
297 |
-
*
|
|
|
298 |
*/
|
299 |
function backupnow_whichtables_checked(onlythesetableentities){
|
300 |
var send_list = false;
|
@@ -440,7 +441,7 @@ window.onbeforeunload = function(e) {
|
|
440 |
/**
|
441 |
* N.B. This function works on both the UD settings page and elsewhere
|
442 |
*
|
443 |
-
* @param
|
444 |
*/
|
445 |
function updraft_check_page_visibility(firstload) {
|
446 |
if ('hidden' == document["visibilityState"]) {
|
@@ -476,12 +477,10 @@ var updraft_inpage_hasbegun = 0;
|
|
476 |
* @param {Function} success_callback callback function after backup
|
477 |
* @param {String} onlythisfileentity csv list of file entities to be backed up
|
478 |
* @param {Array} extradata any extra data to be added
|
479 |
-
* @param {Integer} backupnow_nodb
|
480 |
* @param {Integer} backupnow_nofiles Indicate whether any files should be backed up. Valid values: 0, 1
|
481 |
* @param {Integer} backupnow_nocloud Indicate whether the backup should be uploaded to cloud storage. Valid values: 0, 1
|
482 |
* @param {String} label An optional label to be added to a backup
|
483 |
-
*
|
484 |
-
* @return {void}
|
485 |
*/
|
486 |
function updraft_backupnow_inpage_go(success_callback, onlythisfileentity, extradata, backupnow_nodb, backupnow_nofiles, backupnow_nocloud, label) {
|
487 |
|
@@ -681,7 +680,7 @@ jQuery('#updraft_backup_started').slideUp();}, 3500);
|
|
681 |
/**
|
682 |
* Opens a dialog window showing the requested (or latest) log file, plus an option to download it
|
683 |
*
|
684 |
-
* @param
|
685 |
*/
|
686 |
function updraft_popuplog(backup_nonce) {
|
687 |
|
@@ -931,7 +930,7 @@ function updraftplus_diskspace_entity(key) {
|
|
931 |
* Open a modal with content fetched from an iframe
|
932 |
*
|
933 |
* @param {String} getwhat - the subaction parameter to pass to UD's AJAX handler
|
934 |
-
* @param {String} title
|
935 |
*/
|
936 |
function updraft_iframe_modal(getwhat, title) {
|
937 |
var width = 780;
|
@@ -983,8 +982,10 @@ function updraftplus_show_contents(timestamp, type, findex) {
|
|
983 |
/**
|
984 |
* Creates the jstree and makes a call to the backend to dynamically get the tree nodes
|
985 |
*
|
986 |
-
* @param {string}
|
987 |
-
* @param {
|
|
|
|
|
988 |
*/
|
989 |
function zip_files_jstree(entity, timestamp, type, findex) {
|
990 |
|
@@ -1325,13 +1326,13 @@ function updraft_downloader_status_update(base, backup_timestamp, what, findex,
|
|
1325 |
/**
|
1326 |
* Function that sets up a ajax call to start a backup
|
1327 |
*
|
1328 |
-
* @param
|
1329 |
-
* @param
|
1330 |
-
* @param
|
1331 |
-
* @param
|
1332 |
-
* @param
|
1333 |
-
* @param
|
1334 |
-
* @param
|
1335 |
*/
|
1336 |
function updraft_backupnow_go(backupnow_nodb, backupnow_nofiles, backupnow_nocloud, onlythesefileentities, extradata, label, onlythesetableentities) {
|
1337 |
|
@@ -1363,7 +1364,7 @@ jQuery('#updraft_backup_started').fadeOut('slow');}, 75000);
|
|
1363 |
console.log("UpdraftPlus: ID of started job: "+updraft_backupnow_nonce);
|
1364 |
}
|
1365 |
setTimeout(function() {
|
1366 |
-
updraft_activejobs_update(true);}, 500);
|
1367 |
});
|
1368 |
}
|
1369 |
|
@@ -1527,15 +1528,57 @@ jQuery(document).ready(function($) {
|
|
1527 |
if (on_page_load) {
|
1528 |
jQuery('#updraftcentral_keycreate_mothership_firewalled_container').show();
|
1529 |
} else {
|
|
|
1530 |
jQuery('#updraftcentral_keycreate_mothership_firewalled_container').slideDown();
|
1531 |
jQuery('#updraftcentral_keycreate_mothership').focus();
|
1532 |
}
|
1533 |
} else {
|
1534 |
jQuery('#updraftcentral_keycreate_mothership').prop('disabled', true);
|
|
|
|
|
|
|
|
|
1535 |
}
|
1536 |
}
|
1537 |
|
1538 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1539 |
updraftcentral_keys_setupform(false);
|
1540 |
});
|
1541 |
// Initial setup (for browsers, e.g. Firefox, that remember form selection state but not DOM state, which can leave an inconsistent state)
|
@@ -1575,38 +1618,7 @@ jQuery(document).ready(function($) {
|
|
1575 |
jQuery('#updraftcentral_keys').on('click', '#updraftcentral_stage2_go', function(e) {
|
1576 |
e.preventDefault();
|
1577 |
|
1578 |
-
|
1579 |
-
jQuery('#updraftcentral_wizard_stage1_error').text('');
|
1580 |
-
|
1581 |
-
var host = '';
|
1582 |
-
|
1583 |
-
if (jQuery('#updraftcentral_mothership_updraftpluscom').is(':checked')) {
|
1584 |
-
host = 'updraftplus.com';
|
1585 |
-
} else if (jQuery('#updraftcentral_mothership_other').is(':checked')) {
|
1586 |
-
var mothership = jQuery('#updraftcentral_keycreate_mothership').val();
|
1587 |
-
if ('' == mothership) {
|
1588 |
-
jQuery('#updraftcentral_wizard_stage1_error').text(updraftlion.updraftcentral_wizard_empty_url);
|
1589 |
-
return;
|
1590 |
-
}
|
1591 |
-
try {
|
1592 |
-
var url = new URL(mothership);
|
1593 |
-
host = url.hostname;
|
1594 |
-
} catch (e) {
|
1595 |
-
// Try and grab the host name a different way if it failed because of no URL object (e.g. IE 11).
|
1596 |
-
if ('undefined' === typeof URL) {
|
1597 |
-
host = jQuery('<a>').prop('href', mothership).prop('hostname');
|
1598 |
-
}
|
1599 |
-
if (!host || 'undefined' !== typeof URL) {
|
1600 |
-
jQuery('#updraftcentral_wizard_stage1_error').text(updraftlion.updraftcentral_wizard_invalid_url);
|
1601 |
-
return;
|
1602 |
-
}
|
1603 |
-
}
|
1604 |
-
}
|
1605 |
-
|
1606 |
-
jQuery('#updraftcentral_keycreate_description').val(host);
|
1607 |
-
|
1608 |
-
jQuery('.updraftcentral_wizard_stage1').hide();
|
1609 |
-
jQuery('.updraftcentral_wizard_stage2').show();
|
1610 |
});
|
1611 |
|
1612 |
jQuery('#updraftcentral_keys').on('click', '#updraftcentral_keycreate_go', function(e) {
|
@@ -1846,9 +1858,9 @@ jQuery('#setting-error-settings_updated').slideUp();}, 5000);
|
|
1846 |
}
|
1847 |
}
|
1848 |
});
|
1849 |
-
if (
|
1850 |
// Work out what to download
|
1851 |
-
if (
|
1852 |
// meta_foreign == 1 : All-in-one format: the only thing to download, always, is wpcore
|
1853 |
// if ('1' == meta_foreign) {
|
1854 |
// whichselected = [];
|
@@ -1899,9 +1911,9 @@ jQuery('#setting-error-settings_updated').slideUp();}, 5000);
|
|
1899 |
}
|
1900 |
|
1901 |
// Make sure all are downloaded
|
1902 |
-
} else if (
|
1903 |
updraft_restorer_checkstage2(1);
|
1904 |
-
} else if (
|
1905 |
var continue_restore = 1;
|
1906 |
jQuery('#updraft_restoreoptions_ui input.required').each(function(index) {
|
1907 |
if (continue_restore == 0) return;
|
@@ -1923,8 +1935,10 @@ jQuery('#setting-error-settings_updated').slideUp();}, 5000);
|
|
1923 |
console.log("Restore options: "+restore_options);
|
1924 |
jQuery('#updraft_restorer_restore_options').val(restore_options);
|
1925 |
// This must be done last, as it wipes out the section with #updraft_restoreoptions_ui
|
1926 |
-
jQuery('#updraft-restore-modal-stage2a').html(updraftlion.
|
1927 |
jQuery('#updraft_restore_form').submit();
|
|
|
|
|
1928 |
}
|
1929 |
} else {
|
1930 |
alert(updraftlion.youdidnotselectany);
|
@@ -2180,31 +2194,31 @@ jQuery('#setting-error-settings_updated').slideUp();}, 5000);
|
|
2180 |
// var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10);
|
2181 |
|
2182 |
plupload.each(files, function(file) {
|
2183 |
-
|
2184 |
-
|
2185 |
-
|
2186 |
-
|
2187 |
-
|
2188 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2189 |
}
|
2190 |
-
}
|
2191 |
-
if (!accepted_file) {
|
2192 |
-
if (/\.(zip|tar|tar\.gz|tar\.bz2)$/i.test(file.name) || /\.sql(\.gz)?$/i.test(file.name)) {
|
2193 |
-
jQuery('#updraft-message-modal-innards').html('<p><strong>'+file.name+"</strong></p> "+updraftlion.notarchive2);
|
2194 |
-
jQuery('#updraft-message-modal').dialog('open');
|
2195 |
-
} else {
|
2196 |
-
alert(file.name+": "+updraftlion.notarchive);
|
2197 |
}
|
2198 |
-
uploader.removeFile(file);
|
2199 |
-
return;
|
2200 |
-
}
|
2201 |
-
}
|
2202 |
|
2203 |
-
|
2204 |
-
|
2205 |
-
|
2206 |
-
|
2207 |
-
|
2208 |
});
|
2209 |
|
2210 |
up.refresh();
|
@@ -2369,6 +2383,7 @@ jQuery('#setting-error-settings_updated').slideUp();}, 5000);
|
|
2369 |
* Get the value of a named URL parameter - https://stackoverflow.com/questions/4548487/jquery-read-query-string
|
2370 |
*
|
2371 |
* @param {string} name - URL parameter to return the value of
|
|
|
2372 |
* @returns {string}
|
2373 |
*/
|
2374 |
function get_parameter_by_name(name) {
|
@@ -2449,7 +2464,7 @@ jQuery(document).ready(function($) {
|
|
2449 |
e.preventDefault();
|
2450 |
$(settings_css_prefix+'#updraftvault_recountquota').html(updraftlion.counting);
|
2451 |
try {
|
2452 |
-
updraft_send_command('vault_recountquota',
|
2453 |
$(settings_css_prefix+'#updraftvault_recountquota').html(updraftlion.updatequotacount);
|
2454 |
if (response.hasOwnProperty('html')) {
|
2455 |
$(settings_css_prefix+'#updraftvault_settings_connected').html(response.html);
|
@@ -2474,7 +2489,7 @@ jQuery(document).ready(function($) {
|
|
2474 |
e.preventDefault();
|
2475 |
$(settings_css_prefix+'#updraftvault_disconnect').html(updraftlion.disconnecting);
|
2476 |
try {
|
2477 |
-
updraft_send_command('vault_disconnect', { immediate_echo: true }, function(response) {
|
2478 |
$(settings_css_prefix+'#updraftvault_disconnect').html(updraftlion.disconnect);
|
2479 |
if (response.hasOwnProperty('html')) {
|
2480 |
$(settings_css_prefix+'#updraftvault_settings_connected').html(response.html).slideUp();
|
@@ -2504,6 +2519,7 @@ jQuery(document).ready(function($) {
|
|
2504 |
updraft_send_command('vault_connect', {
|
2505 |
email: $('#updraftvault_email').val(),
|
2506 |
pass: $('#updraftvault_pass').val(),
|
|
|
2507 |
}, function(resp, status, response) {
|
2508 |
$(settings_css_prefix+'#updraftvault_connect_go').html(updraftlion.connect);
|
2509 |
if (resp.hasOwnProperty('e')) {
|
@@ -2747,7 +2763,7 @@ jQuery(document).ready(function($) {
|
|
2747 |
/**
|
2748 |
* Retrieve the current settings from the DOM
|
2749 |
*
|
2750 |
-
* @param {string}
|
2751 |
*
|
2752 |
* @returns String|Object
|
2753 |
*/
|
@@ -2782,8 +2798,9 @@ jQuery(document).ready(function($) {
|
|
2782 |
/**
|
2783 |
* Method to parse the response from the backend and update the page with the returned content or display error messages if failed
|
2784 |
*
|
2785 |
-
* @param
|
2786 |
-
*
|
|
|
2787 |
*/
|
2788 |
function updraft_handle_page_updates(response) {
|
2789 |
|
@@ -2882,3 +2899,24 @@ jQuery(document).ready(function($) {
|
|
2882 |
|
2883 |
|
2884 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
* Send an action over AJAX. A wrapper around jQuery.ajax. In future, all consumers can be reviewed to simplify some of the options, where there is historical cruft.
|
3 |
* N.B. updraft_iframe_modal() below uses the Ajax URL for the iframe's src attribute
|
4 |
*
|
5 |
+
* @param {string} action - the action to send
|
6 |
+
* @param {*} data - data to send
|
7 |
+
* @param {Function} callback - will be called with the results
|
8 |
+
* @param {object} options -further options. Relevant properties include:
|
9 |
* - [json_parse=true] - whether to JSON parse the results
|
10 |
* - [alert_on_error=true] - whether to show an alert box if there was a problem (otherwise, suppress it)
|
11 |
* - [action='updraft_ajax'] - what to send as the action parameter on the AJAX request (N.B. action parameter to this function goes as the 'subaction' parameter on the AJAX request)
|
88 |
/**
|
89 |
* Opens the dialog box for confirmation of whether to delete a backup, plus options if relevant
|
90 |
*
|
91 |
+
* @param {string} key - The UNIX timestamp of the backup
|
92 |
+
* @param {string} nonce - The backup job ID
|
93 |
* @param {boolean} showremote - Whether or not to show the "also delete from remote storage?" checkbox
|
94 |
*/
|
95 |
function updraft_delete(key, nonce, showremote) {
|
210 |
/**
|
211 |
* Carries out a remote storage test
|
212 |
*
|
213 |
+
* @param {string} method - The identifier for the remote storage
|
214 |
* @param {callback} result_callback - A callback function to be called with the result
|
215 |
+
* @param {string} instance_id - The particular instance (if any) of the remote storage to be tested (for methods supporting multiple instances)
|
216 |
*/
|
217 |
function updraft_remote_storage_test(method, result_callback, instance_id) {
|
218 |
|
293 |
/**
|
294 |
* A method to get all the selected table values from the backup now modal
|
295 |
*
|
296 |
+
* @param {string} onlythesetableentities an empty string to append values to
|
297 |
+
*
|
298 |
+
* @return {string} a string that contains the values of all selected table entities and the database the belong to
|
299 |
*/
|
300 |
function backupnow_whichtables_checked(onlythesetableentities){
|
301 |
var send_list = false;
|
441 |
/**
|
442 |
* N.B. This function works on both the UD settings page and elsewhere
|
443 |
*
|
444 |
+
* @param {boolean} firstload Check if this is first load
|
445 |
*/
|
446 |
function updraft_check_page_visibility(firstload) {
|
447 |
if ('hidden' == document["visibilityState"]) {
|
477 |
* @param {Function} success_callback callback function after backup
|
478 |
* @param {String} onlythisfileentity csv list of file entities to be backed up
|
479 |
* @param {Array} extradata any extra data to be added
|
480 |
+
* @param {Integer} backupnow_nodb Indicate whether the database should be backed up. Valid values: 0, 1
|
481 |
* @param {Integer} backupnow_nofiles Indicate whether any files should be backed up. Valid values: 0, 1
|
482 |
* @param {Integer} backupnow_nocloud Indicate whether the backup should be uploaded to cloud storage. Valid values: 0, 1
|
483 |
* @param {String} label An optional label to be added to a backup
|
|
|
|
|
484 |
*/
|
485 |
function updraft_backupnow_inpage_go(success_callback, onlythisfileentity, extradata, backupnow_nodb, backupnow_nofiles, backupnow_nocloud, label) {
|
486 |
|
680 |
/**
|
681 |
* Opens a dialog window showing the requested (or latest) log file, plus an option to download it
|
682 |
*
|
683 |
+
* @param {string} backup_nonce - the nonce of the log to display, or empty for the latest one
|
684 |
*/
|
685 |
function updraft_popuplog(backup_nonce) {
|
686 |
|
930 |
* Open a modal with content fetched from an iframe
|
931 |
*
|
932 |
* @param {String} getwhat - the subaction parameter to pass to UD's AJAX handler
|
933 |
+
* @param {String} title - the title for the modal
|
934 |
*/
|
935 |
function updraft_iframe_modal(getwhat, title) {
|
936 |
var width = 780;
|
982 |
/**
|
983 |
* Creates the jstree and makes a call to the backend to dynamically get the tree nodes
|
984 |
*
|
985 |
+
* @param {string} entity Entity for the jstree
|
986 |
+
* @param {integer} timestamp Timestamp of the jstree
|
987 |
+
* @param {string} type Type of file to display in the JS tree
|
988 |
+
* @param {array} findex Index of Zip
|
989 |
*/
|
990 |
function zip_files_jstree(entity, timestamp, type, findex) {
|
991 |
|
1326 |
/**
|
1327 |
* Function that sets up a ajax call to start a backup
|
1328 |
*
|
1329 |
+
* @param {Integer} backupnow_nodb Indicate whether the database should be backed up: valid values are 0, 1
|
1330 |
+
* @param {Integer} backupnow_nofiles Indicate whether any files should be backed up: valid values are 0, 1
|
1331 |
+
* @param {Integer} backupnow_nocloud Indicate whether the backup should be uploaded to cloud storage: valid values are 0, 1
|
1332 |
+
* @param {String} onlythesefileentities A csv list of file entities to be backed up
|
1333 |
+
* @param {String} onlythesetableentities A csv list of table entities to be backed up
|
1334 |
+
* @param {Array} extradata any extra data to be added
|
1335 |
+
* @param {String} label A optional label to be added to a backup
|
1336 |
*/
|
1337 |
function updraft_backupnow_go(backupnow_nodb, backupnow_nofiles, backupnow_nocloud, onlythesefileentities, extradata, label, onlythesetableentities) {
|
1338 |
|
1364 |
console.log("UpdraftPlus: ID of started job: "+updraft_backupnow_nonce);
|
1365 |
}
|
1366 |
setTimeout(function() {
|
1367 |
+
updraft_activejobs_update(true);}, 500);
|
1368 |
});
|
1369 |
}
|
1370 |
|
1528 |
if (on_page_load) {
|
1529 |
jQuery('#updraftcentral_keycreate_mothership_firewalled_container').show();
|
1530 |
} else {
|
1531 |
+
jQuery('.updraftcentral_wizard_self_hosted_stage2').show();
|
1532 |
jQuery('#updraftcentral_keycreate_mothership_firewalled_container').slideDown();
|
1533 |
jQuery('#updraftcentral_keycreate_mothership').focus();
|
1534 |
}
|
1535 |
} else {
|
1536 |
jQuery('#updraftcentral_keycreate_mothership').prop('disabled', true);
|
1537 |
+
if (!on_page_load) {
|
1538 |
+
jQuery('.updraftcentral_wizard_self_hosted_stage2').hide();
|
1539 |
+
updraftcentral_stage2_go();
|
1540 |
+
}
|
1541 |
}
|
1542 |
}
|
1543 |
|
1544 |
+
function updraftcentral_stage2_go() {
|
1545 |
+
// Reset the error message before we continue
|
1546 |
+
jQuery('#updraftcentral_wizard_stage1_error').text('');
|
1547 |
+
|
1548 |
+
var host = '';
|
1549 |
+
|
1550 |
+
if (jQuery('#updraftcentral_mothership_updraftpluscom').is(':checked')) {
|
1551 |
+
jQuery('.updraftcentral_keycreate_description').hide();
|
1552 |
+
host = 'updraftplus.com';
|
1553 |
+
} else if (jQuery('#updraftcentral_mothership_other').is(':checked')) {
|
1554 |
+
jQuery('.updraftcentral_keycreate_description').show();
|
1555 |
+
var mothership = jQuery('#updraftcentral_keycreate_mothership').val();
|
1556 |
+
if ('' == mothership) {
|
1557 |
+
jQuery('#updraftcentral_wizard_stage1_error').text(updraftlion.updraftcentral_wizard_empty_url);
|
1558 |
+
return;
|
1559 |
+
}
|
1560 |
+
try {
|
1561 |
+
var url = new URL(mothership);
|
1562 |
+
host = url.hostname;
|
1563 |
+
} catch (e) {
|
1564 |
+
// Try and grab the host name a different way if it failed because of no URL object (e.g. IE 11).
|
1565 |
+
if ('undefined' === typeof URL) {
|
1566 |
+
host = jQuery('<a>').prop('href', mothership).prop('hostname');
|
1567 |
+
}
|
1568 |
+
if (!host || 'undefined' !== typeof URL) {
|
1569 |
+
jQuery('#updraftcentral_wizard_stage1_error').text(updraftlion.updraftcentral_wizard_invalid_url);
|
1570 |
+
return;
|
1571 |
+
}
|
1572 |
+
}
|
1573 |
+
}
|
1574 |
+
|
1575 |
+
jQuery('#updraftcentral_keycreate_description').val(host);
|
1576 |
+
|
1577 |
+
jQuery('.updraftcentral_wizard_stage1').hide();
|
1578 |
+
jQuery('.updraftcentral_wizard_stage2').show();
|
1579 |
+
}
|
1580 |
+
|
1581 |
+
jQuery('#updraftcentral_keys').on('click', 'input[type="radio"]', function() {
|
1582 |
updraftcentral_keys_setupform(false);
|
1583 |
});
|
1584 |
// Initial setup (for browsers, e.g. Firefox, that remember form selection state but not DOM state, which can leave an inconsistent state)
|
1618 |
jQuery('#updraftcentral_keys').on('click', '#updraftcentral_stage2_go', function(e) {
|
1619 |
e.preventDefault();
|
1620 |
|
1621 |
+
updraftcentral_stage2_go();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1622 |
});
|
1623 |
|
1624 |
jQuery('#updraftcentral_keys').on('click', '#updraftcentral_keycreate_go', function(e) {
|
1858 |
}
|
1859 |
}
|
1860 |
});
|
1861 |
+
if (1 == anyselected) {
|
1862 |
// Work out what to download
|
1863 |
+
if (1 == updraft_restore_stage) {
|
1864 |
// meta_foreign == 1 : All-in-one format: the only thing to download, always, is wpcore
|
1865 |
// if ('1' == meta_foreign) {
|
1866 |
// whichselected = [];
|
1911 |
}
|
1912 |
|
1913 |
// Make sure all are downloaded
|
1914 |
+
} else if (2 == updraft_restore_stage) {
|
1915 |
updraft_restorer_checkstage2(1);
|
1916 |
+
} else if (3 == updraft_restore_stage) {
|
1917 |
var continue_restore = 1;
|
1918 |
jQuery('#updraft_restoreoptions_ui input.required').each(function(index) {
|
1919 |
if (continue_restore == 0) return;
|
1935 |
console.log("Restore options: "+restore_options);
|
1936 |
jQuery('#updraft_restorer_restore_options').val(restore_options);
|
1937 |
// This must be done last, as it wipes out the section with #updraft_restoreoptions_ui
|
1938 |
+
jQuery('#updraft-restore-modal-stage2a').html(updraftlion.restore_proceeding);
|
1939 |
jQuery('#updraft_restore_form').submit();
|
1940 |
+
// In progress; prevent the button being pressed again
|
1941 |
+
updraft_restore_stage = 4;
|
1942 |
}
|
1943 |
} else {
|
1944 |
alert(updraftlion.youdidnotselectany);
|
2194 |
// var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10);
|
2195 |
|
2196 |
plupload.each(files, function(file) {
|
2197 |
+
// @codingStandardsIgnoreLine
|
2198 |
+
if (! /^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-[\-a-z]+([0-9]+?)?(\.(zip|gz|gz\.crypt))?$/i.test(file.name) && ! /^log\.([0-9a-f]{12})\.txt$/.test(file.name)) {
|
2199 |
+
var accepted_file = false;
|
2200 |
+
for (var i = 0; i<updraft_accept_archivename.length; i++) {
|
2201 |
+
if (updraft_accept_archivename[i].test(file.name)) {
|
2202 |
+
var accepted_file = true;
|
2203 |
+
}
|
2204 |
+
}
|
2205 |
+
if (!accepted_file) {
|
2206 |
+
if (/\.(zip|tar|tar\.gz|tar\.bz2)$/i.test(file.name) || /\.sql(\.gz)?$/i.test(file.name)) {
|
2207 |
+
jQuery('#updraft-message-modal-innards').html('<p><strong>'+file.name+"</strong></p> "+updraftlion.notarchive2);
|
2208 |
+
jQuery('#updraft-message-modal').dialog('open');
|
2209 |
+
} else {
|
2210 |
+
alert(file.name+": "+updraftlion.notarchive);
|
2211 |
+
}
|
2212 |
+
uploader.removeFile(file);
|
2213 |
+
return;
|
2214 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2215 |
}
|
|
|
|
|
|
|
|
|
2216 |
|
2217 |
+
// a file was added, you may want to update your DOM here...
|
2218 |
+
jQuery('#filelist').append(
|
2219 |
+
'<div class="file" id="' + file.id + '"><b>' +
|
2220 |
+
file.name + '</b> (<span>' + plupload.formatSize(0) + '</span>/' + plupload.formatSize(file.size) + ') ' +
|
2221 |
+
'<div class="fileprogress"></div></div>');
|
2222 |
});
|
2223 |
|
2224 |
up.refresh();
|
2383 |
* Get the value of a named URL parameter - https://stackoverflow.com/questions/4548487/jquery-read-query-string
|
2384 |
*
|
2385 |
* @param {string} name - URL parameter to return the value of
|
2386 |
+
*
|
2387 |
* @returns {string}
|
2388 |
*/
|
2389 |
function get_parameter_by_name(name) {
|
2464 |
e.preventDefault();
|
2465 |
$(settings_css_prefix+'#updraftvault_recountquota').html(updraftlion.counting);
|
2466 |
try {
|
2467 |
+
updraft_send_command('vault_recountquota', { instance_id: $('#updraftvault_settings_connect').data('instance_id') }, function(response) {
|
2468 |
$(settings_css_prefix+'#updraftvault_recountquota').html(updraftlion.updatequotacount);
|
2469 |
if (response.hasOwnProperty('html')) {
|
2470 |
$(settings_css_prefix+'#updraftvault_settings_connected').html(response.html);
|
2489 |
e.preventDefault();
|
2490 |
$(settings_css_prefix+'#updraftvault_disconnect').html(updraftlion.disconnecting);
|
2491 |
try {
|
2492 |
+
updraft_send_command('vault_disconnect', { immediate_echo: true, instance_id: $('#updraftvault_settings_connect').data('instance_id') }, function(response) {
|
2493 |
$(settings_css_prefix+'#updraftvault_disconnect').html(updraftlion.disconnect);
|
2494 |
if (response.hasOwnProperty('html')) {
|
2495 |
$(settings_css_prefix+'#updraftvault_settings_connected').html(response.html).slideUp();
|
2519 |
updraft_send_command('vault_connect', {
|
2520 |
email: $('#updraftvault_email').val(),
|
2521 |
pass: $('#updraftvault_pass').val(),
|
2522 |
+
instance_id: $('#updraftvault_settings_connect').data('instance_id'),
|
2523 |
}, function(resp, status, response) {
|
2524 |
$(settings_css_prefix+'#updraftvault_connect_go').html(updraftlion.connect);
|
2525 |
if (resp.hasOwnProperty('e')) {
|
2763 |
/**
|
2764 |
* Retrieve the current settings from the DOM
|
2765 |
*
|
2766 |
+
* @param {string} output_format - the output format; valid values are 'string' or 'object'
|
2767 |
*
|
2768 |
* @returns String|Object
|
2769 |
*/
|
2798 |
/**
|
2799 |
* Method to parse the response from the backend and update the page with the returned content or display error messages if failed
|
2800 |
*
|
2801 |
+
* @param {string} response - the JSON-encoded response containing information to update the settings page with
|
2802 |
+
*
|
2803 |
+
* @return {object} - the decoded response (empty if decoding was not successful)
|
2804 |
*/
|
2805 |
function updraft_handle_page_updates(response) {
|
2806 |
|
2899 |
|
2900 |
|
2901 |
});
|
2902 |
+
|
2903 |
+
// For When character set and collate both are unsupported at restoration time and if user change anyone substitution dropdown from both, Other substitution select box value should be change respectively.
|
2904 |
+
jQuery(document).ready(function($) {
|
2905 |
+
jQuery('#updraft-restore-modal').on('change', '#updraft_restorer_charset', function(e) {
|
2906 |
+
if ($('#updraft_restorer_charset').length && $('#updraft_restorer_collate').length && $('#collate_change_on_charset_selection_data').length) {
|
2907 |
+
var updraft_restorer_charset = $('#updraft_restorer_charset').val();
|
2908 |
+
// For only show collate which are related to charset
|
2909 |
+
$('#updraft_restorer_collate option').show();
|
2910 |
+
$('#updraft_restorer_collate option[data-charset!='+updraft_restorer_charset+']').hide();
|
2911 |
+
updraft_send_command('collate_change_on_charset_selection', {
|
2912 |
+
collate_change_on_charset_selection_data: $('#collate_change_on_charset_selection_data').val(),
|
2913 |
+
updraft_restorer_charset: updraft_restorer_charset,
|
2914 |
+
updraft_restorer_collate: $('#updraft_restorer_collate').val(),
|
2915 |
+
}, function(response) {
|
2916 |
+
if (response.hasOwnProperty('is_action_required') && 1 == response.is_action_required && response.hasOwnProperty('similar_type_collate')) {
|
2917 |
+
$('#updraft_restorer_collate').val(response.similar_type_collate);
|
2918 |
+
}
|
2919 |
+
});
|
2920 |
+
}
|
2921 |
+
});
|
2922 |
+
});
|
@@ -1,3 +1,3 @@
|
|
1 |
-
function updraft_send_command(t,e,a,r){default_options={json_parse:!0,alert_on_error:!0,action:"updraft_ajax",nonce:updraft_credentialtest_nonce,nonce_key:"nonce",timeout:null,async:!0,type:"POST"},"undefined"==typeof r&&(r={});for(var n in default_options)r.hasOwnProperty(n)||(r[n]=default_options[n]);var o={action:r.action,subaction:t};if(o[r.nonce_key]=r.nonce,"object"==typeof e)for(var u in e)o[u]=e[u];else o.action_data=e;var d={type:r.type,url:ajaxurl,data:o,success:function(t,e){if(r.json_parse){try{var n=ud_parse_json(t)}catch(o){return console.log(o),console.log(t),void(r.alert_on_error&&alert(updraftlion.unexpectedresponse+" "+t))}"function"==typeof a&&a(n,e,t)}else"function"==typeof a&&a(t,e)},error:function(t,e,a){"function"==typeof r.error_callback?r.error_callback(t,e,a):(console.log("updraft_send_command: error: "+e+" ("+a+")"),console.log(t))},dataType:"text",async:r.async};null!=r.timeout&&(d.timeout=r.timeout),jQuery.ajax(d)}function updraft_delete(t,e,a){jQuery("#updraft_delete_timestamp").val(t),jQuery("#updraft_delete_nonce").val(e),a?jQuery("#updraft-delete-remote-section, #updraft_delete_remote").removeAttr("disabled").show():jQuery("#updraft-delete-remote-section, #updraft_delete_remote").hide().attr("disabled","disabled"),t.indexOf(",")>-1?(jQuery("#updraft_delete_question_singular").hide(),jQuery("#updraft_delete_question_plural").show()):(jQuery("#updraft_delete_question_plural").hide(),jQuery("#updraft_delete_question_singular").show()),jQuery("#updraft-delete-modal").dialog("open")}function updraft_remote_storage_tab_activation(t){jQuery(".updraftplusmethod").hide(),jQuery(".remote-tab").data("active",!1),jQuery(".remote-tab").removeClass("nav-tab-active"),jQuery(".updraftplusmethod."+t).show(),jQuery(".remote-tab-"+t).data("active",!0),jQuery(".remote-tab-"+t).addClass("nav-tab-active")}function updraft_check_overduecrons(){updraft_send_command("check_overdue_crons",null,function(t){t&&t.hasOwnProperty("m")&&jQuery("#updraft-insert-admin-warning").html(t.m)},{alert_on_error:!1})}function updraft_remote_storage_tabs_setup(){var t=0,e=jQuery(".updraft_servicecheckbox:checked");jQuery(e).each(function(a,r){var n=jQuery(r).val();"updraft_servicecheckbox_none"!=jQuery(r).attr("id")&&t++,jQuery(".remote-tab-"+n).show(),a==jQuery(e).length-1&&updraft_remote_storage_tab_activation(n)}),t>0&&jQuery(".updraftplusmethod.none").hide(),jQuery(document).keyup(function(t){if((32===t.keyCode||13===t.keyCode)&&jQuery(document.activeElement).is("input.labelauty + label")){var e=jQuery(document.activeElement).attr("for");e&&jQuery("#"+e).change()}}),jQuery(".updraft_servicecheckbox").change(function(){var e=jQuery(this).attr("id");if("updraft_servicecheckbox_"==e.substring(0,24)){var a=e.substring(24);null!=a&&""!=a&&(jQuery(this).is(":checked")?(t++,jQuery(".remote-tab-"+a).fadeIn(),updraft_remote_storage_tab_activation(a)):(t--,jQuery(".remote-tab-"+a).hide(),1==jQuery(".remote-tab-"+a).data("active")&&updraft_remote_storage_tab_activation(jQuery(".remote-tab:visible").last().attr("name"))))}t<=0?jQuery(".updraftplusmethod.none").fadeIn():jQuery(".updraftplusmethod.none").hide()}),jQuery(".updraft_servicecheckbox:not(.multi)").change(function(){var t=jQuery(this).attr("value");jQuery(this).is(":not(:checked)")?(jQuery(".updraftplusmethod."+t).hide(),jQuery(".updraftplusmethod.none").fadeIn()):jQuery(".updraft_servicecheckbox").not(this).prop("checked",!1)});var a=jQuery(".updraft_servicecheckbox");"function"==typeof a.labelauty&&a.labelauty()}function updraft_remote_storage_test(t,e,a){var r,n;a?(r=jQuery("#updraft-"+t+"-test-"+a),n=".updraftplusmethod."+t+"-"+a):(r=jQuery("#updraft-"+t+"-test"),n=".updraftplusmethod."+t);var o=r.data("method_label");r.html(updraftlion.testing_settings.replace("%s",o));var u={method:t};jQuery("#updraft-navtab-settings-content "+n+" input[data-updraft_settings_test], #updraft-navtab-settings-content .expertmode input[data-updraft_settings_test]").each(function(t,e){var a=jQuery(e).data("updraft_settings_test"),r=jQuery(e).attr("type");if(a){r||(console.log("UpdraftPlus: settings test input item with no type found"),console.log(e),r="text");var n=null;"checkbox"==r?n=jQuery(e).is(":checked")?1:0:"text"==r||"password"==r?n=jQuery(e).val():(console.log("UpdraftPlus: settings test input item with unrecognised type ("+r+") found"),console.log(e)),u[a]=n}}),jQuery("#updraft-navtab-settings-content "+n+" textarea[data-updraft_settings_test], #updraft-navtab-settings-content "+n+" select[data-updraft_settings_test]").each(function(t,e){var a=jQuery(e).data("updraft_settings_test");u[a]=jQuery(e).val()}),updraft_send_command("test_storage_settings",u,function(t,a){r.html(updraftlion.test_settings.replace("%s",o)),"undefined"!=typeof e&&0!=e&&(e=e.call(this,t,a,u)),"undefined"!=typeof e&&!1===e&&(alert(updraftlion.settings_test_result.replace("%s",o)+" "+t.output),t.hasOwnProperty("data")&&console.log(t.data))})}function backupnow_whichfiles_checked(t){return jQuery('#backupnow_includefiles_moreoptions input[type="checkbox"]').each(function(e){if(jQuery(this).is(":checked")){var a=jQuery(this).attr("name");if("updraft_include_"==a.substring(0,16)){var r=a.substring(16);""!=t&&(t+=","),t+=r}}}),t}function backupnow_whichtables_checked(t){var e=!1;return jQuery('#backupnow_database_moreoptions input[type="checkbox"]').each(function(t){if(!jQuery(this).is(":checked"))return void(e=!0)}),t=jQuery("input[name^='updraft_include_tables_']").serializeArray(),!e||t}function updraft_deleteallselected(){var t=0,e="",a="",r="";jQuery("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").each(function(n){t++;var o=jQuery(this).data("nonce");a&&(a+=","),a+=o;var u=jQuery(this).data("key");e&&(e+=","),e+=u;var d=jQuery(this).find(".updraftplus-remove").data("hasremote");r&&(r+=","),r+=d}),updraft_delete(e,a,r)}function updraft_openrestorepanel(t){updraft_console_focussed_tab=2,updraft_historytimertoggle(t),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-backups-content").show(),jQuery("#updraft-navtab-backups").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active")}function updraft_delete_old_dirs(){return!0}function updraft_initiate_restore(t){jQuery("#updraft-migrate-modal").dialog("close"),jQuery('#updraft-navtab-backups-content .updraft_existing_backups button[data-backup_timestamp="'+t+'"]').click()}function updraft_restore_setoptions(t){var e=0;jQuery('input[name="updraft_restore[]"]').each(function(a,r){var n=jQuery(r).val(),o=n+"=([0-9,]+)",u=new RegExp(o),d=t.match(u);d?(jQuery(r).removeAttr("disabled").data("howmany",d[1]).parent().show(),e++,"db"==n&&(e+=4.5),jQuery(r).is(":checked")&&jQuery("#updraft_restorer_"+n+"options").show()):jQuery(r).attr("disabled","disabled").parent().hide()});var a=t.match(/dbcrypted=1/);a?jQuery(".updraft_restore_crypteddb").show():jQuery(".updraft_restore_crypteddb").hide();var r=t.match(/meta_foreign=([12])/);r?jQuery("#updraft_restore_meta_foreign").val(r[1]):jQuery("#updraft_restore_meta_foreign").val("0");var n=336+20*e;jQuery("#updraft-restore-modal").dialog("option","height",n)}function updraft_backup_dialog_open(){jQuery("#backupnow_includefiles_moreoptions").hide(),updraft_settings_form_changed?window.confirm(updraftlion.unsavedsettingsbackup)&&(jQuery("#backupnow_label").val(""),jQuery("#updraft-backupnow-modal").dialog("open")):(jQuery("#backupnow_label").val(""),jQuery("#updraft-backupnow-modal").dialog("open"))}function updraft_migrate_dialog_open(){jQuery("#updraft_migrate_modal_alt").hide(),updraft_migrate_modal_default_buttons={},updraft_migrate_modal_default_buttons[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-migrate-modal").dialog("option","buttons",updraft_migrate_modal_default_buttons),jQuery("#updraft-migrate-modal").dialog("open"),jQuery("#updraft_migrate_modal_main").show()}function updraft_check_page_visibility(t){"hidden"==document.visibilityState?updraft_page_is_visible=0:(updraft_page_is_visible=1,1!==t&&updraft_activejobs_update(!0))}function updraft_backupnow_inpage_go(t,e,a,r,n,o,u){r="undefined"==typeof r?0:r,n="undefined"==typeof n?0:n,o="undefined"==typeof o?0:o,u="undefined"==typeof u?updraftlion.automaticbackupbeforeupdate:u,updraft_console_focussed_tab=1,updraft_inpage_success_callback=t;var d={},s=jQuery("#updraft-backupnow-inpage-modal").length;s&&jQuery("#updraft-backupnow-inpage-modal").dialog("option","buttons",d),jQuery("#updraft_inpage_prebackup").hide(),s&&jQuery("#updraft-backupnow-inpage-modal").dialog("open"),jQuery("#updraft_inpage_backup").show(),updraft_activejobslist_backupnownonce_only=1,updraft_inpage_hasbegun=0,updraft_backupnow_go(r,n,o,e,a,u,"")}function updraft_activejobs_update(t){var e=(new Date).getTime();if(!(0==t&&e<updraft_activejobs_nextupdate)){updraft_activejobs_nextupdate=e+5500;var a="";jQuery(".ud_downloadstatus .updraftplus_downloader, #ud_downloadstatus2 .updraftplus_downloader").each(function(t,e){var r=jQuery(e).data("downloaderfor");"object"==typeof r&&(""!=a&&(a+=":"),a=a+r.base+","+r.nonce+","+r.what+","+r.index)});var r={downloaders:a};try{jQuery("#updraft-poplog").dialog("isOpen")&&(r.log_fetch=1,r.log_nonce=updraft_poplog_log_nonce,r.log_pointer=updraft_poplog_log_pointer)}catch(n){console.log(n)}updraft_activejobslist_backupnownonce_only&&"undefined"!=typeof updraft_backupnow_nonce&&""!=updraft_backupnow_nonce&&(r.thisjobonly=updraft_backupnow_nonce),updraft_send_command("activejobs_list",r,function(t){try{resp=ud_parse_json(t),resp.hasOwnProperty("l")&&(resp.l?(jQuery("#updraft_lastlogmessagerow").show(),jQuery("#updraft_lastlogcontainer").html(resp.l)):(jQuery("#updraft_lastlogmessagerow").hide(),jQuery("#updraft_lastlogcontainer").html("("+updraftlion.nothing_yet_logged+")")));var n=-1;if(jQuery("#updraft_activejobs").html(resp.j),jQuery("#updraft_activejobs .updraft_jobtimings").each(function(t,a){var r=jQuery(a);if(r.data("lastactivity")&&r.data("jobid")){var o=r.data("jobid"),u=r.data("lastactivity");(n==-1||u<n)&&(n=u);var d=r.data("nextresumptionafter"),s=r.data("nextresumption");e=(new Date).getTime(),u>50&&s>0&&d<-30&&e>updraft_last_forced_when+1e5&&(updraft_last_forced_jobid!=o||s!=updraft_last_forced_resumption)&&(updraft_last_forced_resumption=s,updraft_last_forced_jobid=o,updraft_last_forced_when=e,console.log("UpdraftPlus: force resumption: job_id="+o+", resumption="+s),updraft_send_command("forcescheduledresumption",{resumption:s,job_id:o},function(t){console.log(t)},{json_parse:!1,alert_on_error:!1}))}}),e=(new Date).getTime(),updraft_activejobs_nextupdate=e+18e4,1==updraft_page_is_visible&&(1==updraft_console_focussed_tab||2==updraft_console_focussed_tab&&""!=a)&&(updraft_activejobs_nextupdate=n>-1?n<5?e+1750:e+5e3:lastlog_lastdata==t?e+7500:e+1750),lastlog_lastdata=t,null!=resp.j&&""!=resp.j?(jQuery("#updraft_activejobsrow").show(),r.hasOwnProperty("thisjobonly")&&!updraft_inpage_hasbegun&&jQuery("#updraft-jobid-"+r.thisjobonly).length?(updraft_inpage_hasbegun=1,console.log("UpdraftPlus: the start of the requested backup job has been detected")):!updraft_inpage_hasbegun&&updraft_activejobslist_backupnownonce_only&&jQuery(".updraft_jobtimings.isautobackup").length?(autobackup_nonce=jQuery(".updraft_jobtimings.isautobackup").first().data("jobid"),autobackup_nonce&&(updraft_inpage_hasbegun=1,updraft_backupnow_nonce=autobackup_nonce,r.thisjobonly=autobackup_nonce,console.log("UpdraftPlus: the start of the requested backup job has been detected; id: "+autobackup_nonce))):1==updraft_inpage_hasbegun&&jQuery("#updraft-jobid-"+r.thisjobonly+".updraft_finished").length&&(updraft_inpage_hasbegun=2,console.log("UpdraftPlus: the end of the requested backup job has been detected"),"undefined"!=typeof updraft_inpage_success_callback&&""!=updraft_inpage_success_callback?updraft_inpage_success_callback.call(!1):jQuery("#updraft-backupnow-inpage-modal").dialog("close")),""==lastlog_jobs&&setTimeout(function(){jQuery("#updraft_backup_started").slideUp()},3500)):jQuery("#updraft_activejobsrow").is(":hidden")||("undefined"!=typeof lastbackup_laststatus&&updraft_showlastbackup(),jQuery("#updraft_activejobsrow").hide()),lastlog_jobs=resp.j,null!=resp.ds&&""!=resp.ds&&jQuery(resp.ds).each(function(e,a){""!=a.base&&updraft_downloader_status_update(a.base,a.timestamp,a.what,a.findex,a,t)}),null!=resp.u&&""!=resp.u&&jQuery("#updraft-poplog").dialog("isOpen")){var o=resp.u;if(o.nonce==updraft_poplog_log_nonce&&(updraft_poplog_log_pointer=o.pointer,null!=o.log&&""!=o.log)){var u=jQuery("#updraft-poplog").scrollTop();jQuery("#updraft-poplog-content").append(o.log),updraft_poplog_lastscroll!=u&&updraft_poplog_lastscroll!=-1||(jQuery("#updraft-poplog").scrollTop(jQuery("#updraft-poplog-content").prop("scrollHeight")),updraft_poplog_lastscroll=jQuery("#updraft-poplog").scrollTop())}}}catch(d){console.log(updraftlion.unexpectedresponse+" "+t),console.log(d)}},{json_parse:!1,type:"GET"})}}function updraft_popuplog(t){var e=updraftlion.loading_log_file;t&&(e+=" (log."+t+".txt)"),jQuery("#updraft-poplog").dialog("option","title",e),jQuery("#updraft-poplog-content").html("<em>"+e+" ...</em> "),jQuery("#updraft-poplog").dialog("open"),updraft_send_command("get_log",t,function(t){updraft_poplog_log_pointer=t.pointer,updraft_poplog_log_nonce=t.nonce;var e="?page=updraftplus&action=downloadlog&force_download=1&updraftplus_backup_nonce="+t.nonce;jQuery("#updraft-poplog-content").html(t.log);var a={};a[updraftlion.downloadlogfile]=function(){window.location.href=e},a[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-poplog").dialog("option","buttons",a),jQuery("#updraft-poplog").dialog("option","title","log."+t.nonce+".txt"),updraft_poplog_lastscroll=-1},{type:"GET",timeout:6e4,error_callback:function(t,e,a){var r=e==a?a:a+" ("+e+")";jQuery("#updraft-poplog-content").append(r),console.log(t)}})}function updraft_showlastbackup(){updraft_send_command("get_fragment","last_backup_html",function(t){response=t.output,lastbackup_laststatus==response?setTimeout(function(){updraft_showlastbackup()},7e3):jQuery("#updraft_last_backup").html(response),lastbackup_laststatus=response},{type:"GET"})}function updraft_historytimertoggle(t){updraft_historytimer&&1!=t?(clearTimeout(updraft_historytimer),updraft_historytimer=0):(updraft_updatehistory(0,0),updraft_historytimer=setInterval(function(){updraft_updatehistory(0,0)},3e4),calculated_diskspace||(updraftplus_diskspace(),calculated_diskspace=1))}function updraft_updatehistory(t,e){var a=Math.round((new Date).getTime()/1e3);if(1==t||1==e)updraft_historytimer_notbefore=a+30;else if(a<updraft_historytimer_notbefore)return void console.log("Update history skipped: "+a.toString()+" < "+updraft_historytimer_notbefore.toString());1==t&&(1==e?(updraft_history_lastchecksum=!1,jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html('<p style="text-align:center;"><em>'+updraftlion.rescanningremote+"</em></p>")):(updraft_history_lastchecksum=!1,jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html('<p style="text-align:center;"><em>'+updraftlion.rescanning+"</em></p>")));var r=e?"remotescan":!!t&&"rescan";updraft_send_command("rescan",r,function(t){if(t.hasOwnProperty("logs_exist")&&t.logs_exist&&jQuery("#updraft_lastlogmessagerow .updraft-log-link").show(),t.hasOwnProperty("migrate_modal")&&t.migrate_modal&&jQuery("#updraft_migrate_modal_main").replaceWith(t.migrate_modal),null!=t.n&&jQuery("#updraft-navtab-backups").html(t.n),null!=t.t){if(null!=t.cksum){if(t.cksum==updraft_history_lastchecksum)return;updraft_history_lastchecksum=t.cksum}jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html(t.t),t.data&&console.log(t.data)}})}function updraft_intervals_monthly_or_not(t,e){var a="#updraft-navtab-settings-content #"+t,r=jQuery(a+" option").length,n="monthly"==e,o=!1;if(r>10&&(o=!0),n||o){if(n&&o)return void("monthly"==e&&(jQuery(".updraft_monthly_extra_words_"+t).remove(),jQuery(a).before('<span class="updraft_monthly_extra_words_'+t+'">'+updraftlion.day+" </span>").after('<span class="updraft_monthly_extra_words_'+t+'"> '+updraftlion.inthemonth+" </span>")));if(jQuery(".updraft_monthly_extra_words_"+t).remove(),n){updraft_interval_week_val=jQuery(a+" option:selected").val(),jQuery(a).html(updraftlion.mdayselector).before('<span class="updraft_monthly_extra_words_'+t+'">'+updraftlion.day+" </span>").after('<span class="updraft_monthly_extra_words_'+t+'"> '+updraftlion.inthemonth+" </span>");var u=updraft_interval_month_val===!1?1:updraft_interval_month_val;u-=1,jQuery(a+" option:eq("+u+")").prop("selected",!0)}else{updraft_interval_month_val=jQuery(a+" option:selected").val(),jQuery(a).html(updraftlion.dayselector);var d=updraft_interval_week_val===!1?1:updraft_interval_week_val;jQuery(a+" option:eq("+d+")").prop("selected",!0)}}}function updraft_check_same_times(){var t=0,e=jQuery("#updraft-navtab-settings-content .updraft_interval").val();"manual"==e?jQuery("#updraft-navtab-settings-content .updraft_files_timings").hide():jQuery("#updraft-navtab-settings-content .updraft_files_timings").show(),"weekly"==e||"fortnightly"==e||"monthly"==e?(updraft_intervals_monthly_or_not("updraft_startday_files",e),jQuery("#updraft-navtab-settings-content #updraft_startday_files").show()):(jQuery(".updraft_monthly_extra_words_updraft_startday_files").remove(),jQuery("#updraft-navtab-settings-content #updraft_startday_files").hide());var a=jQuery("#updraft-navtab-settings-content .updraft_interval_database").val();"manual"==a&&(t=1,jQuery("#updraft-navtab-settings-content .updraft_db_timings").hide()),"weekly"==a||"fortnightly"==a||"monthly"==a?(updraft_intervals_monthly_or_not("updraft_startday_db",a),jQuery("#updraft-navtab-settings-content #updraft_startday_db").show()):(jQuery(".updraft_monthly_extra_words_updraft_startday_db").remove(),jQuery("#updraft-navtab-settings-content #updraft_startday_db").hide()),a==e?(jQuery("#updraft-navtab-settings-content .updraft_db_timings").hide(),0==t?jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").show():jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").hide()):(jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").hide(),0==t&&jQuery("#updraft-navtab-settings-content .updraft_db_timings").show())}function updraft_activejobs_delete(t){updraft_send_command("activejobs_delete",t,function(e){"Y"==e.ok?jQuery("#updraft-jobid-"+t).html(e.m).fadeOut("slow").remove():"N"==e.ok?alert(e.m):(alert(updraftlion.unexpectedresponse),console.log(e))})}function updraftplus_diskspace_entity(t){jQuery("#updraft_diskspaceused_"+t).html("<em>"+updraftlion.calculating+"</em>"),updraft_send_command("get_fragment",{fragment:"disk_usage",data:t},function(e){jQuery("#updraft_diskspaceused_"+t).html(e.output)},{type:"GET"})}function updraft_iframe_modal(t,e){var a=780,r=500;jQuery("#updraft-iframe-modal-innards").html('<iframe width="100%" height="430px" src="'+ajaxurl+"?action=updraft_ajax&subaction="+t+"&nonce="+updraft_credentialtest_nonce+'"></iframe>'),jQuery("#updraft-iframe-modal").dialog("option","title",e).dialog("option","width",a).dialog("option","height",r).dialog("open")}function updraft_html_modal(t,e,a,r){jQuery("#updraft-iframe-modal-innards").html(t);var n={};a<450&&(n[updraftlion.close]=function(){jQuery(this).dialog("close")}),jQuery("#updraft-iframe-modal").dialog("option","title",e).dialog("option","width",a).dialog("option","height",r).dialog("option","buttons",n).dialog("open")}function updraftplus_diskspace(){jQuery("#updraft-navtab-backups-content .updraft_diskspaceused").html("<em>"+updraftlion.calculating+"</em>"),updraft_send_command("get_fragment",{fragment:"disk_usage",data:"updraft"},function(t){jQuery("#updraft-navtab-backups-content .updraft_diskspaceused").html(t.output)},{type:"GET"})}function updraftplus_deletefromserver(t,e,a){a||(a=0);var r={stage:"delete",timestamp:t,type:e,findex:a};updraft_send_command("updraft_download_backup",r,null,{action:"updraft_download_backup",nonce:updraft_download_nonce,nonce_key:"_wpnonce"})}function updraftplus_downloadstage2(t,e,a){location.href=ajaxurl+"?_wpnonce="+updraft_download_nonce+"×tamp="+t+"&type="+e+"&stage=2&findex="+a+"&action=updraft_download_backup"}function updraftplus_show_contents(t,e,a){var r='<div id="updraft_zip_files_container" class="hidden-in-updraftcentral" style="clear:left;"><div id="updraft_zip_info_container"><p><span id="updraft_zip_path_text">'+updraftlion.zip_file_contents_info+'</span> - <span id="updraft_zip_size_text"></span></p>'+updraftlion.browse_download_link+'</div><div id="updraft_zip_files_jstree_container"><input type="search" id="zip_files_jstree_search" name="zip_files_jstree_search" placeholder="'+updraftlion.search+'"><div id="updraft_zip_files_jstree"></div></div></div>';updraft_html_modal(r,updraftlion.zip_file_contents,780,500),zip_files_jstree("zipbrowser",t,e,a)}function zip_files_jstree(t,e,a,r){jQuery("#updraft_zip_files_jstree").jstree({core:{multiple:!1,data:function(n,o){updraft_send_command("get_jstree_directory_nodes",{entity:t,node:n,timestamp:e,type:a,findex:r},function(t){t.hasOwnProperty("error")?alert(t.error):o.call(this,t.nodes)})},error:function(t){alert(t),console.log(t)}},search:{show_only_matches:!0},plugins:["search","sort"]}),jQuery("#updraft_zip_files_jstree").on("ready.jstree",function(t,e){jQuery("#updraft-iframe-modal").dialog("option","title",updraftlion.zip_file_contents+": "+e.instance.get_node("#").children[0])});var n=!1;jQuery("#zip_files_jstree_search").keyup(function(){n&&clearTimeout(n),n=setTimeout(function(){var t=jQuery("#zip_files_jstree_search").val();jQuery("#updraft_zip_files_jstree").jstree(!0).search(t)},250)}),jQuery("#updraft_zip_files_jstree").on("changed.jstree",function(t,e){jQuery("#updraft_zip_path_text").text(e.node.li_attr.path),e.node.li_attr.size?(jQuery("#updraft_zip_size_text").text(e.node.li_attr.size),jQuery("#updraft_zip_download_item").show()):(jQuery("#updraft_zip_size_text").text(""),jQuery("#updraft_zip_download_item").hide())}),jQuery("#updraft_zip_download_item").click(function(t){t.preventDefault();var n=jQuery("#updraft_zip_path_text").text();updraft_send_command("get_zipfile_download",{path:n,timestamp:e,type:a,findex:r},function(t){t.hasOwnProperty("error")?alert(t.error):t.hasOwnProperty("path")?location.href=ajaxurl+"?_wpnonce="+updraft_download_nonce+"×tamp="+e+"&type="+a+"&stage=2&findex="+r+"&filepath="+t.path+"&action=updraft_download_backup":alert(updraftlion.download_timeout)})})}function updraft_downloader(t,e,a,r,n,o,u){"string"!=typeof n&&(n=n.toString());for(var n=n.split(","),d=0;d<n.length;d++){var s=t+e+"_"+a+"_"+n[d],p="."+s,i=parseInt(n[d]);i++;var l=0==n[d]?"":" ("+i+")";if(!jQuery(p).length){var c=o?o:e;jQuery(r).append('<div style="clear:left; border: 1px solid; padding: 8px; margin-top: 4px; max-width:840px;" class="'+s+' updraftplus_downloader"><button onclick="jQuery(this).parent().fadeOut().remove();" type="button" style="float:right; margin-bottom: 8px;">X</button><strong>'+updraftlion.download+" "+a+l+" ("+c+')</strong>:<div class="raw">'+updraftlion.begunlooking+'</div><div class="file '+s+'_st"><div class="dlfileprogress" style="width: 0;"></div></div></div>'),jQuery(p).data("downloaderfor",{base:t,nonce:e,what:a,index:n[d]}),setTimeout(function(){updraft_activejobs_update(!0)},1500)}jQuery(p).data("lasttimebegan",(new Date).getTime()),u=!!u;var f=jQuery("#updraft-navtab-backups-content .uddownloadform_"+a+"_"+e+"_"+n[d]).data("wp_nonce").toString(),_={type:a,timestamp:e,findex:n[d]},y={action:"updraft_download_backup",nonce_key:"_wpnonce",nonce:f,timeout:1e4,async:u};updraft_send_command("updraft_download_backup",_,function(t){},y)}return!1}function ud_parse_json(t){t.charAt(0),t.charAt(t.length-1);try{var e=JSON.parse(t);return e}catch(a){console.log("UpdraftPlus: Exception when trying to parse JSON (1) - will attempt to fix/re-parse"),console.log(t)}var r=t.indexOf("{"),n=t.lastIndexOf("}");if(r>-1&&n>-1){var o=t.slice(r,n+1);try{var u=JSON.parse(o);return console.log("UpdraftPlus: JSON re-parse successful"),u}catch(a){throw console.log("UpdraftPlus: Exception when trying to parse JSON (2)"),a}}throw"UpdraftPlus: could not parse the JSON"}function updraft_restorer_checkstage2(t){var e=jQuery("#ud_downloadstatus2 .file").length;return e>0?void(t&&alert(updraftlion.stilldownloading)):(jQuery("#updraft-restore-modal-stage2a").html(updraftlion.processing),void updraft_send_command("restore_alldownloaded",{timestamp:jQuery("#updraft_restore_timestamp").val(),restoreopts:jQuery("#updraft_restore_form").serialize()},function(t){var e=null;jQuery("#updraft_restorer_restore_options").val("");try{var a=ud_parse_json(t);if(null==a)return void jQuery("#updraft-restore-modal-stage2a").html(updraftlion.emptyresponse);var r=a.m;if(""!=a.w&&(r=r+"<p><strong>"+updraftlion.warnings+"</strong><br>"+a.w+"</p>"),""!=a.e?r=r+"<p><strong>"+updraftlion.errors+"</strong><br>"+a.e+"</p>":updraft_restore_stage=3,a.hasOwnProperty("i")){try{if(e=ud_parse_json(a.i),e.hasOwnProperty("addui")){console.log("Further UI options are being displayed");var n=e.addui;r+='<div id="updraft_restoreoptions_ui" style="clear:left; padding-top:10px;">'+n+"</div>","object"==typeof JSON&&"function"==typeof JSON.stringify&&(delete e.addui,a.i=JSON.stringify(e))}}catch(o){console.log(o),console.log(a)}jQuery("#updraft_restorer_backup_info").val(a.i)}else jQuery("#updraft_restorer_backup_info").val();jQuery("#updraft-restore-modal-stage2a").html(r),jQuery("#updraft-restore-modal-stage2a .updraft_select2").length>0&&jQuery("#updraft-restore-modal-stage2a .updraft_select2").select2()}catch(o){console.log(t),console.log(o),jQuery("#updraft-restore-modal-stage2a").text(updraftlion.jsonnotunderstood+" "+updraftlion.errordata+": "+t).html()}},{json_parse:!1}))}function updraft_downloader_status(t,e,a,r){}function updraft_downloader_status_update(t,e,a,r,n,o){var u=t+e+"_"+a+"_"+r,d="."+u,s=0;if(null!=n.e)jQuery(d+" .raw").html("<strong>"+updraftlion.error+"</strong> "+n.e),console.log(n);else if(null!=n.p){if(jQuery(d+"_st .dlfileprogress").width(n.p+"%"),null!=n.a&&n.a>0){var p=(new Date).getTime(),i=jQuery(d).data("lasttimebegan"),l=p-i;if(n.a>90&&l>6e4){console.log(e+" "+a+" "+r+": restarting download: file_age="+n.a+", sincelastrestart_ms="+l),jQuery(d).data("lasttimebegan",(new Date).getTime());var c=jQuery("#updraft-navtab-backups-content .uddownloadform_"+a+"_"+e+"_"+r),f={type:a,timestamp:e,findex:r},_={action:"updraft_download_backup",nonce_key:"_wpnonce",nonce:c.data("wp_nonce").toString(),timeout:1e4};updraft_send_command("updraft_download_backup",f,function(t){},_),jQuery(d).data("lasttimebegan",(new Date).getTime())}}if(null!=n.m)if(n.p>=100&&"udrestoredlstatus_"==t)jQuery(d+" .raw").html(n.m),jQuery(d).fadeOut("slow",function(){jQuery(this).remove(),updraft_restorer_checkstage2(0)});else if(n.p<100||"uddlstatus_"!=t)jQuery(d+" .raw").html(n.m);else{var y=updraftlion.fileready+" "+updraftlion.actions+': \t\t\t\t<button type="button" onclick="updraftplus_downloadstage2(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.downloadtocomputer+'</button> \t\t\t\t<button id="uddownloaddelete_'+e+"_"+a+'" type="button" onclick="updraftplus_deletefromserver(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.deletefromserver+"</button>";n.hasOwnProperty("can_show_contents")&&n.can_show_contents&&(y+=' <button type="button" onclick="updraftplus_show_contents(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.browse_contents+"</button>"),jQuery(d+" .raw").html(y)}}else null!=n.m?jQuery(d+" .raw").html(n.m):(jQuery(d+" .raw").html(updraftlion.jsonnotunderstood+" ("+o+")"),s=1);return s}function updraft_backupnow_go(t,e,a,r,n,o,u){jQuery("#updraft_backup_started").html("<em>"+updraftlion.requeststart+"</em>").slideDown(""),setTimeout(function(){jQuery("#updraft_backup_started").fadeOut("slow")},75e3);var d={backupnow_nodb:t,backupnow_nofiles:e,backupnow_nocloud:a,backupnow_label:o,extradata:n};""!=r&&(d.onlythisfileentity=r),""!=u&&(d.onlythesetableentities=u),updraft_send_command("backupnow",d,function(t){jQuery("#updraft_backup_started").html(t.m),t.hasOwnProperty("nonce")&&(updraft_backupnow_nonce=t.nonce,console.log("UpdraftPlus: ID of started job: "+updraft_backupnow_nonce)),setTimeout(function(){updraft_activejobs_update(!0)},500)})}var onlythesefileentities=backupnow_whichfiles_checked("");""==onlythesefileentities?jQuery("#backupnow_includefiles_moreoptions").show():jQuery("#backupnow_includefiles_moreoptions").hide();var updraft_restore_stage=1,lastlog_lastmessage="",lastlog_lastdata="",lastlog_jobs="",updraft_activejobs_nextupdate=(new Date).getTime()+1e3,updraft_page_is_visible=1,updraft_console_focussed_tab=1,updraft_settings_form_changed=!1;window.onbeforeunload=function(t){if(updraft_settings_form_changed)return updraftlion.unsavedsettings},"undefined"!=typeof document.hidden&&document.addEventListener("visibilitychange",function(){updraft_check_page_visibility(0)},!1),updraft_check_page_visibility(1);var updraft_poplog_log_nonce,updraft_poplog_log_pointer=0,updraft_poplog_lastscroll=-1,updraft_last_forced_jobid=-1,updraft_last_forced_resumption=-1,updraft_last_forced_when=-1,updraft_backupnow_nonce="",updraft_activejobslist_backupnownonce_only=0,updraft_inpage_hasbegun=0,updraft_historytimer=0,calculated_diskspace=0,updraft_historytimer_notbefore=0,updraft_history_lastchecksum=!1,updraft_interval_week_val=!1,updraft_interval_month_val=!1;"undefined"!=typeof updraft_siteurl&&setInterval(function(){jQuery.get(updraft_siteurl+"/wp-cron.php")},21e4);var lastlog_lastmessage="";jQuery(document).ajaxError(function(t,e,a,r){if(null!=r&&""!=r&&null!=e.responseText&&""!=e.responseText&&(console.log("Error caught by UpdraftPlus ajaxError handler (follows) for "+a.url),console.log(r),0==a.url.search(ajaxurl)))if(a.url.search("subaction=downloadstatus")>=0){var n=a.url.match(/timestamp=\d+/),o=a.url.match(/type=[a-z]+/),u=a.url.match(/findex=\d+/),d=a.url.match(/base=[a-z_]+/);if(u=u instanceof Array?parseInt(u[0].substr(7)):0,o=o instanceof Array?o[0].substr(5):"",d=d instanceof Array?d[0].substr(5):"",n=n instanceof Array?parseInt(n[0].substr(10)):0,""!=d&&""!=o&&n>0){var s=d+n+"_"+o+"_"+u;jQuery("."+s+" .raw").html("<strong>"+updraftlion.error+"</strong> "+updraftlion.servererrorcode)}}else a.url.search("subaction=restore_alldownloaded")>=0&&jQuery("#updraft-restore-modal-stage2a").append("<br><strong>"+updraftlion.error+"</strong> "+updraftlion.servererrorcode+": "+r)}),jQuery(document).ready(function(t){function e(e){t('.expertmode .advanced_settings_container .advanced_tools:not(".'+e+'")').hide(),t(".expertmode .advanced_settings_container .advanced_tools."+e).fadeIn("slow"),t(".expertmode .advanced_settings_container .advanced_tools_button:not(#"+e+")").removeClass("active"),t(".expertmode .advanced_settings_container .advanced_tools_button#"+e).addClass("active")}function a(t){var e=!!jQuery("#updraftcentral_mothership_other").is(":checked");e?(jQuery("#updraftcentral_keycreate_mothership").prop("disabled",!1),t?jQuery("#updraftcentral_keycreate_mothership_firewalled_container").show():(jQuery("#updraftcentral_keycreate_mothership_firewalled_container").slideDown(),jQuery("#updraftcentral_keycreate_mothership").focus())):jQuery("#updraftcentral_keycreate_mothership").prop("disabled",!0)}function r(e,a,n,o){jQuery("#updraft-delete-waitwarning").slideDown();var u=e,d=a,s=n,p=o,i=jQuery("#updraft_delete_timestamp").val().split(","),l=jQuery("#updraft_delete_form").serializeArray(),c={};
|
2 |
-
t.each(l,function(){void 0!==c[this.name]?(c[this.name].push||(c[this.name]=[c[this.name]]),c[this.name].push(this.value||"")):c[this.name]=this.value||""}),c.remote_delete_limit=updraftlion.remote_delete_limit,delete c.action,delete c.subaction,delete c.nonce,updraft_send_command("deleteset",c,function(t){if(t.hasOwnProperty("result")&&null!=t.result)if("error"==t.result)alert(updraftlion.error+" "+t.message);else if("continue"==t.result)u=u+t.backup_local+t.backup_remote,d+=t.backup_local,s+=t.backup_remote,p+=t.backup_sets,jQuery("#updraft-deleted-files-total").text(u+" "+updraftlion.remote_files_deleted),r(u,d,s,p);else if("success"==t.result){jQuery("#updraft-deleted-files-total").text(""),jQuery("#updraft-delete-waitwarning").slideUp(),t.hasOwnProperty("count_backups")&&jQuery("#updraft-navtab-backups").html(updraftlion.existing_backups+" ("+t.count_backups+")");for(var e=0;e<i.length;e++){var a=i[e];jQuery("#updraft-navtab-backups-content .updraft_existing_backups_row_"+a).slideUp().remove()}jQuery("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").length<1&&jQuery("#ud_massactions").hide(),updraft_history_lastchecksum=!1,jQuery("#updraft-delete-modal").dialog("close"),d+=t.backup_local,s+=t.backup_remote,p+=t.backup_sets,alert(t.set_message+" "+p+"\n"+t.local_message+" "+d+"\n"+t.remote_message+" "+s)}})}function n(t,e){jQuery("#updraft-navtab-settings-content #updraft_include_"+t).is(":checked")?e?jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").show():jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").slideDown():e?jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").hide():jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").slideUp()}function o(){var t=new plupload.Uploader(updraft_plupload_config);t.bind("Init",function(t){var e=jQuery("#plupload-upload-ui");t.features.dragdrop?(e.addClass("drag-drop"),jQuery("#drag-drop-area").bind("dragover.wp-uploader",function(){e.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){e.removeClass("drag-over")})):(e.removeClass("drag-drop"),jQuery("#drag-drop-area").unbind(".wp-uploader"))}),t.init(),t.bind("FilesAdded",function(e,a){plupload.each(a,function(e){if(!/^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-[\-a-z]+([0-9]+?)?(\.(zip|gz|gz\.crypt))?$/i.test(e.name)&&!/^log\.([0-9a-f]{12})\.txt$/.test(e.name)){for(var a=!1,r=0;r<updraft_accept_archivename.length;r++)if(updraft_accept_archivename[r].test(e.name))var a=!0;if(!a)return/\.(zip|tar|tar\.gz|tar\.bz2)$/i.test(e.name)||/\.sql(\.gz)?$/i.test(e.name)?(jQuery("#updraft-message-modal-innards").html("<p><strong>"+e.name+"</strong></p> "+updraftlion.notarchive2),jQuery("#updraft-message-modal").dialog("open")):alert(e.name+": "+updraftlion.notarchive),void t.removeFile(e)}jQuery("#filelist").append('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(0)+"</span>/"+plupload.formatSize(e.size)+') <div class="fileprogress"></div></div>')}),e.refresh(),e.start()}),t.bind("UploadProgress",function(t,e){jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"),jQuery("#"+e.id+" span").html(plupload.formatSize(parseInt(e.size*e.percent/100))),e.size==e.loaded&&(jQuery("#"+e.id).html('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(parseInt(e.size*e.percent/100))+"</span>/"+plupload.formatSize(e.size)+") - "+updraftlion.complete+"</div>"),jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"))}),t.bind("Error",function(t,e){console.log(e);var a;a="-200"==e.code?"\n"+updraftlion.makesure2:updraftlion.makesure;var r=updraftlion.uploaderr+" (code "+e.code+") : "+e.message;e.hasOwnProperty("status")&&e.status&&(r+=" ("+updraftlion.http_code+" "+e.status+")"),e.hasOwnProperty("response")&&(console.log("UpdraftPlus: plupload error: "+e.response),e.response.length<100&&(r+=" "+updraftlion.error+" "+e.response+"\n")),r+=" "+a,alert(r)}),t.bind("FileUploaded",function(t,e,a){if("200"==a.status)try{resp=ud_parse_json(a.response),resp.e?alert(updraftlion.uploaderror+" "+resp.e):resp.dm?(alert(resp.dm),updraft_updatehistory(1,0)):resp.m?updraft_updatehistory(1,0):alert("Unknown server response: "+a.response)}catch(r){console.log(a),alert(updraftlion.jsonnotunderstood)}else alert("Unknown server response status: "+a.code),console.log(a)})}function u(t){params={uri:jQuery("#updraftplus_httpget_uri").val()},params.curl=t,updraft_send_command("httpget",params,function(t){t.e&&alert(t.e),t.r?jQuery("#updraftplus_httpget_results").html("<pre>"+t.r+"</pre>"):console.log(t)},{type:"GET"})}function d(t,e,a){updraft_restore_setoptions(t),jQuery("#updraft_restore_timestamp").val(e),jQuery(".updraft_restore_date").html(a),updraft_restore_stage=1,jQuery("#updraft-migrate-modal").dialog("close"),jQuery("#updraft-restore-modal").dialog("open"),jQuery("#updraft-restore-modal-stage1").show(),jQuery("#updraft-restore-modal-stage2").hide(),jQuery("#updraft-restore-modal-stage2a").html(""),updraft_activejobs_update(!0)}function s(t){t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var e="[\\?&]"+t+"=([^&#]*)",a=new RegExp(e),r=a.exec(window.location.href);return null==r?"":decodeURIComponent(r[1].replace(/\+/g," "))}if(t(".expertmode .advanced_settings_container .advanced_tools_button").click(function(){e(t(this).attr("id"))}),jQuery.ui&&jQuery.ui.dialog&&jQuery.ui.dialog.prototype._allowInteraction){var p=jQuery.ui.dialog.prototype._allowInteraction;jQuery.ui.dialog.prototype._allowInteraction=function(t){return!!jQuery(t.target).closest(".select2-dropdown").length||p.apply(this,arguments)}}t("#updraftcentral_keys").on("click","a.updraftcentral_keys_show",function(e){e.preventDefault(),t(this).remove(),t("#updraftcentral_keys_table").slideDown()}),t("#updraftcentral_keycreate_altmethod_moreinfo_get").click(function(e){e.preventDefault(),t(this).remove(),t("#updraftcentral_keycreate_altmethod_moreinfo").slideDown()}),t(".updraft_webdav_settings").on("change keyup paste",function(){var e=[],a="";t(".updraft_webdav_settings").each(function(r,n){var o=t(n).attr("id");if(o&&"updraft_webdav_"==o.substring(0,15)){var u=o.substring(15);id_split=u.split("_"),u=id_split[0],a=id_split[1],e[u]=this.value}});var r="",n="@",o="/",u=":",d=":";(e.host.indexOf("@")>=0||""===e.host)&&(n=""),e.host.indexOf("/")>=0?t("#updraft_webdav_host_error").show():t("#updraft_webdav_host_error").hide(),0!=e.path.indexOf("/")&&""!==e.path||(o=""),""!==e.user&&""!==e.pass||(u=""),""!==e.host&&""!==e.port||(d=""),r=e.webdav+e.user+u+e.pass+n+encodeURIComponent(e.host)+d+e.port+o+e.path,t("#updraft_webdav_url_"+a).val(r)}),t("#updraft-navtab-backups-content").on("click",".updraft_existing_backups .updraft_existing_backups_row",function(e){(e.ctrlKey||e.metaKey)&&(t(this).toggleClass("backuprowselected"),t("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").length>0?t("#ud_massactions").show():t("#ud_massactions").hide())}),jQuery("#updraft-navtab-settings-content .updraftplusmethod").on("click","button.updraft-test-button",function(){var t=jQuery(this).data("method"),e=jQuery(this).data("instance_id");updraft_remote_storage_test(t,function(e,a,r){return"sftp"==t&&(r.hasOwnProperty("scp")&&r.scp?alert(updraftlion.settings_test_result.replace("%s","SCP")+" "+e.output):alert(updraftlion.settings_test_result.replace("%s","SFTP")+" "+e.output),e.hasOwnProperty("data")&&console.log(e.data),!0)},e)}),t("#updraft-navtab-settings-content select.updraft_interval, #updraft-navtab-settings-content select.updraft_interval_database").change(function(){updraft_check_same_times()}),t("#backupnow_includefiles_showmoreoptions").click(function(e){e.preventDefault(),t("#backupnow_includefiles_moreoptions").toggle()}),t("#backupnow_database_showmoreoptions").click(function(e){e.preventDefault(),t("#backupnow_database_moreoptions").toggle()}),t("#updraft-navtab-backups-content a.updraft_diskspaceused_update").click(function(t){t.preventDefault(),updraftplus_diskspace()}),t("#updraft-navtab-backups-content a.updraft_uploader_toggle").click(function(e){e.preventDefault(),t("#updraft-plupload-modal").slideToggle()}),t("#updraft-navtab-backups-content a.updraft_rescan_local").click(function(t){t.preventDefault(),updraft_updatehistory(1,0)}),t("#updraft-navtab-backups-content a.updraft_rescan_remote").click(function(t){t.preventDefault(),updraft_updatehistory(1,1)}),jQuery("#updraftcentral_keys").on("change",'input[type="radio"]',function(){a(!1)}),a(!0),jQuery("#updraftcentral_keys").on("click","#updraftcentral_view_log",function(t){t.preventDefault(),jQuery("#updraftcentral_view_log_container").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.fetching+"</div>"});try{updraft_send_command("updraftcentral_get_log",null,function(t){jQuery("#updraftcentral_view_log_container").unblock(),t.hasOwnProperty("log_contents")?jQuery("#updraftcentral_view_log_contents").html('<div style="border:1px solid;padding: 2px;max-height: 400px; overflow-y:scroll;">'+t.log_contents+"</div>"):console.response(resp)})}catch(e){jQuery("#updraft_central_key").html(),console.log(e)}}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_wizard_go",function(t){jQuery("#updraftcentral_wizard_go").hide(),jQuery(".updraftcentral_wizard_success").remove(),jQuery(".create_key_container").show()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_stage1_go",function(t){t.preventDefault(),jQuery(".updraftcentral_wizard_stage2").hide(),jQuery(".updraftcentral_wizard_stage1").show()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_stage2_go",function(t){t.preventDefault(),jQuery("#updraftcentral_wizard_stage1_error").text("");var e="";if(jQuery("#updraftcentral_mothership_updraftpluscom").is(":checked"))e="updraftplus.com";else if(jQuery("#updraftcentral_mothership_other").is(":checked")){var a=jQuery("#updraftcentral_keycreate_mothership").val();if(""==a)return void jQuery("#updraftcentral_wizard_stage1_error").text(updraftlion.updraftcentral_wizard_empty_url);try{var r=new URL(a);e=r.hostname}catch(t){if("undefined"==typeof URL&&(e=jQuery("<a>").prop("href",a).prop("hostname")),!e||"undefined"!=typeof URL)return void jQuery("#updraftcentral_wizard_stage1_error").text(updraftlion.updraftcentral_wizard_invalid_url)}}jQuery("#updraftcentral_keycreate_description").val(e),jQuery(".updraftcentral_wizard_stage1").hide(),jQuery(".updraftcentral_wizard_stage2").show()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_keycreate_go",function(t){t.preventDefault();var e=!!jQuery("#updraftcentral_mothership_other").is(":checked"),a=jQuery("#updraftcentral_keycreate_description").val(),r=jQuery("#updraftcentral_keycreate_keysize").val(),n="__updraftpluscom";if(data={key_description:a,key_size:r},e&&(n=jQuery("#updraftcentral_keycreate_mothership").val(),"http"!=n.substring(0,4)))return void alert(updraftlion.enter_mothership_url);data.mothership_firewalled=jQuery("#updraftcentral_keycreate_mothership_firewalled").is(":checked")?1:0,data.where_send=n,jQuery(".create_key_container").hide(),jQuery(".updraftcentral_wizard_stage1").show(),jQuery(".updraftcentral_wizard_stage2").hide(),jQuery("#updraftcentral_keys").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.creating_please_allow+"</div>"});try{updraft_send_command("updraftcentral_create_key",data,function(t){jQuery("#updraftcentral_keys").unblock();try{if(resp=ud_parse_json(t),resp.hasOwnProperty("error"))return alert(resp.error),void console.log(resp);alert(resp.r),resp.hasOwnProperty("bundle")&&resp.hasOwnProperty("keys_guide")?(jQuery("#updraftcentral_keys_content").html(resp.keys_guide),jQuery("#updraftcentral_keys_content").append('<div class="updraftcentral_wizard_success">'+resp.r+'<br><textarea onclick="this.select();" style="width:620px; height:165px; word-wrap:break-word; border: 1px solid #aaa; border-radius: 3px; padding:4px;">'+resp.bundle+"</textarea></div>")):console.log(resp),resp.hasOwnProperty("keys_table")&&jQuery("#updraftcentral_keys_content").append(resp.keys_table),jQuery("#updraftcentral_wizard_go").show()}catch(e){alert(updraftlion.unexpectedresponse+" "+t),console.log(e)}},{json_parse:!1})}catch(o){jQuery("#updraft_central_key").html(),console.log(o)}}),jQuery("#updraftcentral_keys").on("click",".updraftcentral_key_delete",function(t){t.preventDefault();var e=jQuery(this).data("key_id");return"undefined"==typeof e?void console.log("UpdraftPlus: .updraftcentral_key_delete clicked, but no key ID found"):(jQuery("#updraftcentral_keys").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.deleting+"</div>"}),void updraft_send_command("updraftcentral_delete_key",{key_id:e},function(t){jQuery("#updraftcentral_keys").unblock(),t.hasOwnProperty("keys_table")&&jQuery("#updraftcentral_keys_content").html(t.keys_table)}))}),jQuery("#updraft_reset_sid").click(function(t){t.preventDefault(),updraft_send_command("reset_site_id",null,function(t){jQuery("#updraft_show_sid").html(t)},{json_parse:!1})}),jQuery("#updraft-navtab-settings-content form input:not('.udignorechange'), #updraft-navtab-settings-content form select").change(function(t){updraft_settings_form_changed=!0}),jQuery("#updraft-navtab-settings-content form input[type='submit']").click(function(t){updraft_settings_form_changed=!1});var i=180;jQuery(".updraft-bigbutton").each(function(t,e){var a=jQuery(e).width();a>i&&(i=a)}),i>180&&jQuery(".updraft-bigbutton").width(i),setInterval(function(){updraft_activejobs_update(!1)},1250),setTimeout(function(){jQuery("#setting-error-settings_updated").slideUp()},5e3),jQuery(".updraftplusmethod").hide(),jQuery("#updraft_restore_db").change(function(){jQuery("#updraft_restore_db").is(":checked")?jQuery("#updraft_restorer_dboptions").slideDown():jQuery("#updraft_restorer_dboptions").slideUp()}),updraft_check_same_times();var l={};l[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-message-modal").dialog({autoOpen:!1,height:350,width:520,modal:!0,buttons:l});var c={};c[updraftlion.deletebutton]=function(){r(0,0,0,0)},c[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-delete-modal").dialog({autoOpen:!1,height:262,width:430,modal:!0,buttons:c});var f={};f[updraftlion.restore]=function(){var t=0,e=[],a=0,r=jQuery("#updraft_restore_meta_foreign").val();if(jQuery('input[name="updraft_restore[]"]').each(function(n,o){if(jQuery(o).is(":checked")&&!jQuery(o).is(":disabled")){t=1;var u=jQuery(o).data("howmany"),d=jQuery(o).val();if((1==r||2==r&&"db"!=d)&&("wpcore"!=d&&(u=jQuery("#updraft_restore_form #updraft_restore_wpcore").data("howmany")),d="wpcore"),"wpcore"!=d||0==a){var s=[d,u];e.push(s),"wpcore"==d&&(a=1)}}}),1==t){if(1==updraft_restore_stage){jQuery("#updraft-restore-modal-stage1").slideUp("slow"),jQuery("#updraft-restore-modal-stage2").show(),updraft_restore_stage=2;var n=jQuery(".updraft_restore_date").first().text(),o=e,u=jQuery("#updraft_restore_timestamp").val();try{updraft_send_command("whichdownloadsneeded",{downloads:e,timestamp:u},function(t){if(t.hasOwnProperty("downloads")&&(console.log("UpdraftPlus: items which still require downloading follow"),o=t.downloads,console.log(o)),0==o.length)updraft_restorer_checkstage2(0);else for(var e=0;e<o.length;e++)updraft_downloader("udrestoredlstatus_",u,o[e][0],"#ud_downloadstatus2",o[e][1],n,!1)},{alert_on_error:!1})}catch(d){console.log("UpdraftPlus: error (follows) when looking for items needing downloading"),console.log(d),alert(updraftlion.jsonnotunderstood)}}else if(2==updraft_restore_stage)updraft_restorer_checkstage2(1);else if(3==updraft_restore_stage){var s=1;if(jQuery("#updraft_restoreoptions_ui input.required").each(function(t){if(0!=s){var e=jQuery(this).val();if(""==e)alert(updraftlion.pleasefillinrequired),s=0;else if(""!=jQuery(this).attr("pattern")){var a=jQuery(this).attr("pattern"),r=new RegExp(a,"g");r.test(e)||(alert(jQuery(this).data("invalidpattern")),s=0)}}}),!s)return;var p=jQuery("#updraft_restoreoptions_ui select, #updraft_restoreoptions_ui input").serialize();console.log("Restore options: "+p),jQuery("#updraft_restorer_restore_options").val(p),jQuery("#updraft-restore-modal-stage2a").html(updraftlion.restoreproceeding),jQuery("#updraft_restore_form").submit()}}else alert(updraftlion.youdidnotselectany)},f[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-restore-modal").dialog({autoOpen:!1,height:505,width:590,modal:!0,buttons:f}),jQuery("#updraft-iframe-modal").dialog({autoOpen:!1,height:500,width:780,modal:!0}),jQuery("#updraft-backupnow-inpage-modal").dialog({autoOpen:!1,height:345,width:580,modal:!0});var _={};_[updraftlion.backupnow]=function(){var t=jQuery("#backupnow_includedb").is(":checked")?0:1,e=jQuery("#backupnow_includefiles").is(":checked")?0:1,a=jQuery("#backupnow_includecloud").is(":checked")?0:1,r=backupnow_whichtables_checked("");if(""==r&&0==t)return alert(updraftlion.notableschosen),void jQuery("#backupnow_includefiles_moreoptions").show();"boolean"==typeof r&&(r=null);var n=backupnow_whichfiles_checked("");return""==n&&0==e?(alert(updraftlion.nofileschosen),void jQuery("#backupnow_includefiles_moreoptions").show()):t&&e?void alert(updraftlion.excludedeverything):(jQuery(this).dialog("close"),setTimeout(function(){jQuery("#updraft_lastlogmessagerow").fadeOut("slow",function(){jQuery(this).fadeIn("slow")})},1700),void updraft_backupnow_go(t,e,a,n,"",jQuery("#backupnow_label").val(),r))},_[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-backupnow-modal").dialog({autoOpen:!1,height:472,width:610,modal:!0,buttons:_}),jQuery("#updraft-migrate-modal").dialog({autoOpen:!1,height:updraftlion.migratemodalheight,width:updraftlion.migratemodalwidth,modal:!0}),jQuery("#updraft-poplog").dialog({autoOpen:!1,height:600,width:"75%",modal:!0}),jQuery("#updraft-navtab-settings-content .enableexpertmode").click(function(){return jQuery("#updraft-navtab-settings-content .expertmode").fadeIn(),jQuery("#updraft-navtab-settings-content .enableexpertmode").off("click"),!1}),jQuery("#updraft-navtab-settings-content .backupdirrow").on("click","a.updraft_backup_dir_reset",function(){return jQuery("#updraft_dir").val("updraft"),!1}),jQuery("#updraft-navtab-settings-content .updraft_include_entity").click(function(){var t=jQuery(this).data("toggle_exclude_field");t&&n(t,!1)}),jQuery("#updraft-navtab-settings-content .updraft-service").change(function(){var t=jQuery(this).val();jQuery("#updraft-navtab-settings-content .updraftplusmethod").hide(),jQuery("#updraft-navtab-settings-content ."+t).show()}),jQuery("#updraft-navtab-settings-content a.updraft_show_decryption_widget").click(function(t){t.preventDefault(),jQuery("#updraftplus_db_decrypt").val(jQuery("#updraft_encryptionphrase").val()),jQuery("#updraft-manualdecrypt-modal").slideToggle()}),jQuery("#updraftplus-phpinfo").click(function(t){t.preventDefault(),updraft_iframe_modal("phpinfo",updraftlion.phpinfo)}),jQuery("#updraftplus-rawbackuphistory").click(function(t){t.preventDefault(),updraft_iframe_modal("rawbackuphistory",updraftlion.raw)}),jQuery("#updraft-navtab-status").click(function(t){t.preventDefault(),jQuery(this).addClass("nav-tab-active"),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-status-content").show(),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=1,updraft_activejobs_update(!0)}),jQuery("#updraft-navtab-expert").click(function(t){t.preventDefault(),jQuery(this).addClass("nav-tab-active"),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-expert-content").show(),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=4}),jQuery("#updraft-navtab-settings, #updraft-navtab-settings2, #updraft_backupnow_gotosettings").click(function(t){t.preventDefault(),jQuery(this).parents(".updraftmessage").remove(),jQuery("#updraft-backupnow-modal").dialog("close"),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-settings-content").show(),jQuery("#updraft-navtab-settings").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=3}),jQuery("#updraft-navtab-addons").click(function(t){t.preventDefault(),jQuery(this).addClass("b#nav-tab-active"),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-addons-content").show(),jQuery("#updraft-navtab-addons").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=5}),jQuery("#updraft-navtab-backups").click(function(t){t.preventDefault(),updraft_openrestorepanel(1)}),updraft_send_command("ping",null,function(t,e){"success"==e&&"pong"!=t&&t.indexOf("pong")>=0&&(jQuery("#updraft-navtab-backups-content .ud-whitespace-warning").show(),console.log("UpdraftPlus: Extra output warning: response (which should be just (string)'pong') follows."),console.log(t))},{json_parse:!1,type:"GET"});try{"undefined"!=typeof updraft_plupload_config&&o()}catch(y){console.log(y)}if(jQuery("#updraftplus_httpget_go").click(function(t){t.preventDefault(),u(0)}),jQuery("#updraftplus_httpget_gocurl").click(function(t){t.preventDefault(),u(1)}),jQuery("#updraftplus_callwpaction_go").click(function(t){t.preventDefault(),params={wpaction:jQuery("#updraftplus_callwpaction").val()},updraft_send_command("call_wordpress_action",params,function(t){t.e?alert(t.e):t.s||(t.r?jQuery("#updraftplus_callwpaction_results").html(t.r):(console.log(t),alert(updraftlion.jsonnotunderstood)))})}),jQuery("#updraft_activejobs_table").on("click",".updraft_jobinfo_delete",function(t){t.preventDefault();var e=jQuery(this).data("jobid");e?updraft_activejobs_delete(e):console.log("UpdraftPlus: A stop job link was clicked, but the Job ID could not be found")}),jQuery("#updraft_activejobs_table, #updraft-navtab-backups-content .updraft_existing_backups, #updraft-backupnow-inpage-modal").on("click",".updraft-log-link",function(t){t.preventDefault();var e=jQuery(this).data("jobid");e?updraft_popuplog(e):console.log("UpdraftPlus: A log link was clicked, but the Job ID could not be found")}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click","button.choose-components-button",function(t){var e=jQuery(this).data("entities"),a=jQuery(this).data("backup_timestamp"),r=jQuery(this).data("showdata");d(e,a,r)}),"initiate_restore"==s("udaction")){var g=s("entities"),h=s("backup_timestamp"),m=s("showdata");d(g,h,m)}jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click",".updraft-delete-link",function(t){t.preventDefault();var e=jQuery(this).data("hasremote"),a=jQuery(this).data("nonce").toString(),r=jQuery(this).data("key").toString();a?updraft_delete(r,a,e):console.log("UpdraftPlus: A delete link was clicked, but the Job ID could not be found")}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click","button.updraft_download_button",function(t){t.preventDefault();var e="uddlstatus_",a=jQuery(this).data("backup_timestamp"),r=jQuery(this).data("what"),n=".ud_downloadstatus",o=jQuery(this).data("set_contents"),u=jQuery(this).data("prettydate"),d=!0;updraft_downloader(e,a,r,n,o,u,d)}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("dblclick",".updraft_existingbackup_date",function(t){t.preventDefault();var e=jQuery(this).data("rawbackup");null!=e&&""!=e&&updraft_html_modal(e,updraftlion.raw,780,500)})}),jQuery(document).ready(function(t){var e="#updraft-navtab-settings-content ";t(e+"#updraftvault_settings_cell").on("click",".updraftvault_backtostart",function(a){a.preventDefault(),t(e+"#updraftvault_settings_showoptions").slideUp(),t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_connected").slideUp(),t(e+"#updraftvault_settings_default").slideDown()}),t(e+"#updraftvault_settings_connect input").keypress(function(a){if(13==a.which)return t(e+"#updraftvault_connect_go").click(),!1}),t(e+"#updraftvault_settings_cell").on("click","#updraftvault_recountquota",function(a){a.preventDefault(),t(e+"#updraftvault_recountquota").html(updraftlion.counting);try{updraft_send_command("vault_recountquota",null,function(a){t(e+"#updraftvault_recountquota").html(updraftlion.updatequotacount),a.hasOwnProperty("html")&&(t(e+"#updraftvault_settings_connected").html(a.html),a.hasOwnProperty("connected")&&(a.connected?(t(e+"#updraftvault_settings_default").hide(),t(e+"#updraftvault_settings_connected").show()):(t(e+"#updraftvault_settings_connected").hide(),t(e+"#updraftvault_settings_default").show())))})}catch(r){t(e+"#updraftvault_recountquota").html(updraftlion.updatequotacount),console.log(r)}}),t(e+"#updraftvault_settings_cell").on("click","#updraftvault_disconnect",function(a){a.preventDefault(),t(e+"#updraftvault_disconnect").html(updraftlion.disconnecting);try{updraft_send_command("vault_disconnect",{immediate_echo:!0},function(a){t(e+"#updraftvault_disconnect").html(updraftlion.disconnect),a.hasOwnProperty("html")&&(t(e+"#updraftvault_settings_connected").html(a.html).slideUp(),t(e+"#updraftvault_settings_default").slideDown())})}catch(r){t(e+"#updraftvault_disconnect").html(updraftlion.disconnect),console.log(r)}}),t(e+"#updraftvault_connect").click(function(a){a.preventDefault(),t(e+"#updraftvault_settings_default").slideUp(),t(e+"#updraftvault_settings_connect").slideDown()}),t(e+"#updraftvault_showoptions").click(function(a){a.preventDefault(),t(e+"#updraftvault_settings_default").slideUp(),t(e+"#updraftvault_settings_showoptions").slideDown()}),t(e+"#updraftvault_connect_go").click(function(a){return t(e+"#updraftvault_connect_go").html(updraftlion.connecting),updraft_send_command("vault_connect",{email:t("#updraftvault_email").val(),pass:t("#updraftvault_pass").val()},function(a,r,n){t(e+"#updraftvault_connect_go").html(updraftlion.connect),a.hasOwnProperty("e")?(updraft_html_modal('<h4 style="margin-top:0px; padding-top:0px;">'+updraftlion.errornocolon+"</h4><p>"+a.e+"</p>",updraftlion.disconnect,400,250),a.hasOwnProperty("code")&&"no_quota"==a.code&&(t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_default").slideDown())):a.hasOwnProperty("connected")&&a.connected&&a.hasOwnProperty("html")?(t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_connected").html(a.html).slideDown()):(console.log(a),alert(updraftlion.unexpectedresponse+" "+n))}),!1})}),jQuery(document).ready(function(t){function e(){var t=new plupload.Uploader(updraft_plupload_config2);t.bind("Init",function(t){var e=jQuery("#plupload-upload-ui2");t.features.dragdrop?(e.addClass("drag-drop"),jQuery("#drag-drop-area2").bind("dragover.wp-uploader",function(){e.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){e.removeClass("drag-over")})):(e.removeClass("drag-drop"),jQuery("#drag-drop-area2").unbind(".wp-uploader"))}),t.init(),t.bind("FilesAdded",function(e,a){plupload.each(a,function(e){return/^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-db([0-9]+)?\.(gz\.crypt)$/i.test(e.name)?void jQuery("#filelist2").append('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(0)+"</span>/"+plupload.formatSize(e.size)+') <div class="fileprogress"></div></div>'):(alert(e.name+": "+updraftlion.notdba),void t.removeFile(e))}),e.refresh(),e.start()}),t.bind("UploadProgress",function(t,e){jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"),jQuery("#"+e.id+" span").html(plupload.formatSize(parseInt(e.size*e.percent/100)))}),t.bind("Error",function(t,e){"-200"==e.code?err_makesure="\n"+updraftlion.makesure2:err_makesure=updraftlion.makesure,alert(updraftlion.uploaderr+" (code "+e.code+") : "+e.message+" "+err_makesure)}),t.bind("FileUploaded",function(t,e,a){"200"==a.status?"ERROR:"==a.response.substring(0,6)?alert(updraftlion.uploaderror+" "+a.response.substring(6)):"OK:"==a.response.substring(0,3)?(bkey=a.response.substring(3),jQuery("#"+e.id+" .fileprogress").hide(),jQuery("#"+e.id).append(updraftlion.uploaded+' <a href="?page=updraftplus&action=downloadfile&updraftplus_file='+bkey+"&decrypt_key="+encodeURIComponent(jQuery("#updraftplus_db_decrypt").val())+'">'+updraftlion.followlink+"</a> "+updraftlion.thiskey+" "+jQuery("#updraftplus_db_decrypt").val().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"))):alert(updraftlion.unknownresp+" "+a.response):alert(updraftlion.ukrespstatus+" "+a.code)})}try{"undefined"!=typeof updraft_plupload_config2&&e()}catch(a){console.log(a)}jQuery("#updraft-hidethis").remove(),updraft_remote_storage_tabs_setup()}),jQuery(document).ready(function(t){function e(){var t=r("object"),e=new Date;t=JSON.stringify({version:"1.12.40",epoch_date:e.getTime(),local_date:e.toLocaleString(),network_site_url:updraftlion.network_site_url,data:t});var a=document.body.appendChild(document.createElement("a"));a.setAttribute("download","updraftplus-settings.json"),a.setAttribute("style","display:none;"),a.setAttribute("href","data:text/json;charset=UTF-8,"+encodeURIComponent(t)),a.click()}function a(e){var a,r=decodeURIComponent(e);try{a=ud_parse_json(r)}catch(o){return t.unblockUI(),jQuery("#import_settings").val(""),console.log(r),console.log(o),void alert(updraftlion.import_invalid_json_file)}if(window.confirm(updraftlion.importing_data_from+" "+r.network_site_url+"\n"+updraftlion.exported_on+" "+r.local_date+"\n"+updraftlion.continue_import)){var u=JSON.stringify(a.data);updraft_send_command("importsettings",{settings:u,updraftplus_version:updraftlion.updraftplus_version},function(e){var a=n(e);!a.hasOwnProperty("saved")||a.saved?(updraft_settings_form_changed=!1,location.replace(updraftlion.updraft_settings_url)):(t.unblockUI(),a.hasOwnProperty("error_message")&&a.error_message&&alert(a.error_message))},{action:"updraft_importsettings",nonce:updraftplus_settings_nonce,json_parse:!1})}else t.unblockUI()}function r(e){var a="",e="undefined"==typeof e?"string":e;return"object"==e?a=t("#updraft-navtab-settings-content form input[name!='action'][name!='option_page'][name!='_wpnonce'][name!='_wp_http_referer'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select, #updraft-navtab-settings-content form input[type=checkbox]").serializeJSON({
|
3 |
-
checkboxUncheckedValue:"0",useIntKeysAsArrayIndex:!0}):(a=t("#updraft-navtab-settings-content form input[name!='action'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select").serialize(),t.each(t("#updraft-navtab-settings-content form input[type=checkbox]").filter(function(e){return 0==t(this).prop("checked")}),function(e,r){var n="0";a+="&"+t(r).attr("name")+"="+n})),a}function n(e){try{var a=ud_parse_json(e),r=(a.messages,a.backup_dir.writable),n=a.backup_dir.message,o=a.backup_dir.button_title}catch(u){return console.log(u),console.log(e),alert(updraftlion.jsonnotunderstood),t.unblockUI(),{}}if(a.hasOwnProperty("changed")){console.log("UpdraftPlus: savesettings: some values were changed after being filtered"),console.log(a.changed);for(prop in a.changed)if("object"==typeof a.changed[prop])for(innerprop in a.changed[prop])t("[name='"+innerprop+"']").is(":checkbox")||t("[name='"+prop+"["+innerprop+"]']").val(a.changed[prop][innerprop]);else t("[name='"+prop+"']").is(":checkbox")||t("[name='"+prop+"']").val(a.changed[prop])}return t("#updraft_writable_mess").html(n),0==r?(t("#updraft-backupnow-button").attr("disabled","disabled"),t("#updraft-backupnow-button").attr("title",o),t(".backupdirrow").css("display","table-row")):(t("#updraft-backupnow-button").removeAttr("disabled"),t("#updraft-backupnow-button").removeAttr("title")),a.hasOwnProperty("updraft_include_more_path")&&t("#backupnow_includefiles_moreoptions").html(a.updraft_include_more_path),a.hasOwnProperty("backup_now_message")&&t("#backupnow_remote_container").html(a.backup_now_message),t(".updraftmessage").remove(),t("#updraft_backup_started").before(a.messages),t("#next-backup-table-inner").html(a.scheduled),a}function o(){var t=!1;if(jQuery("#updraft-authenticate-modal-innards").html(""),jQuery("div[class*=updraft_authenticate_] a.updraft_authlink").each(function(){jQuery("#updraft-authenticate-modal-innards").append('<p><a href="'+jQuery(this).attr("href")+'">'+jQuery(this).html()+"</a></p>"),t=!0}),t){var e={};e[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-authenticate-modal").dialog({autoOpen:!0,modal:!0,resizable:!1,draggable:!1,buttons:e,width:"auto"}).dialog("open")}}var u=new Image;u.src=updraftlion.ud_url+"/images/udlogo-rotating.gif",t("#updraft-navtab-settings-content input.updraft_include_entity").change(function(e){var a=t(this).attr("id"),r=t(this).is(":checked"),n="#backupnow_files_"+a;t(n).prop("checked",r)}),t("#updraftplus-settings-save").click(function(e){e.preventDefault(),t.blockUI({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.saving+"</div>"});var a=r("string");updraft_send_command("savesettings",{settings:a,updraftplus_version:updraftlion.updraftplus_version},function(e){n(e),t("#updraft-wrap .fade").delay(6e3).fadeOut(2e3),t("html, body").animate({scrollTop:t("#updraft-wrap").offset().top},1e3,function(){o()}),t.unblockUI()},{action:"updraft_savesettings",nonce:updraftplus_settings_nonce,json_parse:!1})}),t("#updraftplus-settings-export").click(function(){updraft_settings_form_changed&&alert(updraftlion.unsaved_settings_export),e()}),t("#updraftplus-settings-import").click(function(){t.blockUI({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.importing+"</div>"});var e=document.getElementById("import_settings");if(0==e.files.length)return alert(updraftlion.import_select_file),void t.unblockUI();var r=e.files[0],n=new FileReader;n.onload=function(){a(this.result)},n.readAsText(r)})});
|
1 |
+
function updraft_send_command(t,e,a,r){default_options={json_parse:!0,alert_on_error:!0,action:"updraft_ajax",nonce:updraft_credentialtest_nonce,nonce_key:"nonce",timeout:null,async:!0,type:"POST"},"undefined"==typeof r&&(r={});for(var n in default_options)r.hasOwnProperty(n)||(r[n]=default_options[n]);var o={action:r.action,subaction:t};if(o[r.nonce_key]=r.nonce,"object"==typeof e)for(var u in e)o[u]=e[u];else o.action_data=e;var d={type:r.type,url:ajaxurl,data:o,success:function(t,e){if(r.json_parse){try{var n=ud_parse_json(t)}catch(o){return console.log(o),console.log(t),void(r.alert_on_error&&alert(updraftlion.unexpectedresponse+" "+t))}"function"==typeof a&&a(n,e,t)}else"function"==typeof a&&a(t,e)},error:function(t,e,a){"function"==typeof r.error_callback?r.error_callback(t,e,a):(console.log("updraft_send_command: error: "+e+" ("+a+")"),console.log(t))},dataType:"text",async:r.async};null!=r.timeout&&(d.timeout=r.timeout),jQuery.ajax(d)}function updraft_delete(t,e,a){jQuery("#updraft_delete_timestamp").val(t),jQuery("#updraft_delete_nonce").val(e),a?jQuery("#updraft-delete-remote-section, #updraft_delete_remote").removeAttr("disabled").show():jQuery("#updraft-delete-remote-section, #updraft_delete_remote").hide().attr("disabled","disabled"),t.indexOf(",")>-1?(jQuery("#updraft_delete_question_singular").hide(),jQuery("#updraft_delete_question_plural").show()):(jQuery("#updraft_delete_question_plural").hide(),jQuery("#updraft_delete_question_singular").show()),jQuery("#updraft-delete-modal").dialog("open")}function updraft_remote_storage_tab_activation(t){jQuery(".updraftplusmethod").hide(),jQuery(".remote-tab").data("active",!1),jQuery(".remote-tab").removeClass("nav-tab-active"),jQuery(".updraftplusmethod."+t).show(),jQuery(".remote-tab-"+t).data("active",!0),jQuery(".remote-tab-"+t).addClass("nav-tab-active")}function updraft_check_overduecrons(){updraft_send_command("check_overdue_crons",null,function(t){t&&t.hasOwnProperty("m")&&jQuery("#updraft-insert-admin-warning").html(t.m)},{alert_on_error:!1})}function updraft_remote_storage_tabs_setup(){var t=0,e=jQuery(".updraft_servicecheckbox:checked");jQuery(e).each(function(a,r){var n=jQuery(r).val();"updraft_servicecheckbox_none"!=jQuery(r).attr("id")&&t++,jQuery(".remote-tab-"+n).show(),a==jQuery(e).length-1&&updraft_remote_storage_tab_activation(n)}),t>0&&jQuery(".updraftplusmethod.none").hide(),jQuery(document).keyup(function(t){if((32===t.keyCode||13===t.keyCode)&&jQuery(document.activeElement).is("input.labelauty + label")){var e=jQuery(document.activeElement).attr("for");e&&jQuery("#"+e).change()}}),jQuery(".updraft_servicecheckbox").change(function(){var e=jQuery(this).attr("id");if("updraft_servicecheckbox_"==e.substring(0,24)){var a=e.substring(24);null!=a&&""!=a&&(jQuery(this).is(":checked")?(t++,jQuery(".remote-tab-"+a).fadeIn(),updraft_remote_storage_tab_activation(a)):(t--,jQuery(".remote-tab-"+a).hide(),1==jQuery(".remote-tab-"+a).data("active")&&updraft_remote_storage_tab_activation(jQuery(".remote-tab:visible").last().attr("name"))))}t<=0?jQuery(".updraftplusmethod.none").fadeIn():jQuery(".updraftplusmethod.none").hide()}),jQuery(".updraft_servicecheckbox:not(.multi)").change(function(){var t=jQuery(this).attr("value");jQuery(this).is(":not(:checked)")?(jQuery(".updraftplusmethod."+t).hide(),jQuery(".updraftplusmethod.none").fadeIn()):jQuery(".updraft_servicecheckbox").not(this).prop("checked",!1)});var a=jQuery(".updraft_servicecheckbox");"function"==typeof a.labelauty&&a.labelauty()}function updraft_remote_storage_test(t,e,a){var r,n;a?(r=jQuery("#updraft-"+t+"-test-"+a),n=".updraftplusmethod."+t+"-"+a):(r=jQuery("#updraft-"+t+"-test"),n=".updraftplusmethod."+t);var o=r.data("method_label");r.html(updraftlion.testing_settings.replace("%s",o));var u={method:t};jQuery("#updraft-navtab-settings-content "+n+" input[data-updraft_settings_test], #updraft-navtab-settings-content .expertmode input[data-updraft_settings_test]").each(function(t,e){var a=jQuery(e).data("updraft_settings_test"),r=jQuery(e).attr("type");if(a){r||(console.log("UpdraftPlus: settings test input item with no type found"),console.log(e),r="text");var n=null;"checkbox"==r?n=jQuery(e).is(":checked")?1:0:"text"==r||"password"==r?n=jQuery(e).val():(console.log("UpdraftPlus: settings test input item with unrecognised type ("+r+") found"),console.log(e)),u[a]=n}}),jQuery("#updraft-navtab-settings-content "+n+" textarea[data-updraft_settings_test], #updraft-navtab-settings-content "+n+" select[data-updraft_settings_test]").each(function(t,e){var a=jQuery(e).data("updraft_settings_test");u[a]=jQuery(e).val()}),updraft_send_command("test_storage_settings",u,function(t,a){r.html(updraftlion.test_settings.replace("%s",o)),"undefined"!=typeof e&&0!=e&&(e=e.call(this,t,a,u)),"undefined"!=typeof e&&!1===e&&(alert(updraftlion.settings_test_result.replace("%s",o)+" "+t.output),t.hasOwnProperty("data")&&console.log(t.data))})}function backupnow_whichfiles_checked(t){return jQuery('#backupnow_includefiles_moreoptions input[type="checkbox"]').each(function(e){if(jQuery(this).is(":checked")){var a=jQuery(this).attr("name");if("updraft_include_"==a.substring(0,16)){var r=a.substring(16);""!=t&&(t+=","),t+=r}}}),t}function backupnow_whichtables_checked(t){var e=!1;return jQuery('#backupnow_database_moreoptions input[type="checkbox"]').each(function(t){if(!jQuery(this).is(":checked"))return void(e=!0)}),t=jQuery("input[name^='updraft_include_tables_']").serializeArray(),!e||t}function updraft_deleteallselected(){var t=0,e="",a="",r="";jQuery("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").each(function(n){t++;var o=jQuery(this).data("nonce");a&&(a+=","),a+=o;var u=jQuery(this).data("key");e&&(e+=","),e+=u;var d=jQuery(this).find(".updraftplus-remove").data("hasremote");r&&(r+=","),r+=d}),updraft_delete(e,a,r)}function updraft_openrestorepanel(t){updraft_console_focussed_tab=2,updraft_historytimertoggle(t),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-backups-content").show(),jQuery("#updraft-navtab-backups").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active")}function updraft_delete_old_dirs(){return!0}function updraft_initiate_restore(t){jQuery("#updraft-migrate-modal").dialog("close"),jQuery('#updraft-navtab-backups-content .updraft_existing_backups button[data-backup_timestamp="'+t+'"]').click()}function updraft_restore_setoptions(t){var e=0;jQuery('input[name="updraft_restore[]"]').each(function(a,r){var n=jQuery(r).val(),o=n+"=([0-9,]+)",u=new RegExp(o),d=t.match(u);d?(jQuery(r).removeAttr("disabled").data("howmany",d[1]).parent().show(),e++,"db"==n&&(e+=4.5),jQuery(r).is(":checked")&&jQuery("#updraft_restorer_"+n+"options").show()):jQuery(r).attr("disabled","disabled").parent().hide()});var a=t.match(/dbcrypted=1/);a?jQuery(".updraft_restore_crypteddb").show():jQuery(".updraft_restore_crypteddb").hide();var r=t.match(/meta_foreign=([12])/);r?jQuery("#updraft_restore_meta_foreign").val(r[1]):jQuery("#updraft_restore_meta_foreign").val("0");var n=336+20*e;jQuery("#updraft-restore-modal").dialog("option","height",n)}function updraft_backup_dialog_open(){jQuery("#backupnow_includefiles_moreoptions").hide(),updraft_settings_form_changed?window.confirm(updraftlion.unsavedsettingsbackup)&&(jQuery("#backupnow_label").val(""),jQuery("#updraft-backupnow-modal").dialog("open")):(jQuery("#backupnow_label").val(""),jQuery("#updraft-backupnow-modal").dialog("open"))}function updraft_migrate_dialog_open(){jQuery("#updraft_migrate_modal_alt").hide(),updraft_migrate_modal_default_buttons={},updraft_migrate_modal_default_buttons[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-migrate-modal").dialog("option","buttons",updraft_migrate_modal_default_buttons),jQuery("#updraft-migrate-modal").dialog("open"),jQuery("#updraft_migrate_modal_main").show()}function updraft_check_page_visibility(t){"hidden"==document.visibilityState?updraft_page_is_visible=0:(updraft_page_is_visible=1,1!==t&&updraft_activejobs_update(!0))}function updraft_backupnow_inpage_go(t,e,a,r,n,o,u){r="undefined"==typeof r?0:r,n="undefined"==typeof n?0:n,o="undefined"==typeof o?0:o,u="undefined"==typeof u?updraftlion.automaticbackupbeforeupdate:u,updraft_console_focussed_tab=1,updraft_inpage_success_callback=t;var d={},s=jQuery("#updraft-backupnow-inpage-modal").length;s&&jQuery("#updraft-backupnow-inpage-modal").dialog("option","buttons",d),jQuery("#updraft_inpage_prebackup").hide(),s&&jQuery("#updraft-backupnow-inpage-modal").dialog("open"),jQuery("#updraft_inpage_backup").show(),updraft_activejobslist_backupnownonce_only=1,updraft_inpage_hasbegun=0,updraft_backupnow_go(r,n,o,e,a,u,"")}function updraft_activejobs_update(t){var e=(new Date).getTime();if(!(0==t&&e<updraft_activejobs_nextupdate)){updraft_activejobs_nextupdate=e+5500;var a="";jQuery(".ud_downloadstatus .updraftplus_downloader, #ud_downloadstatus2 .updraftplus_downloader").each(function(t,e){var r=jQuery(e).data("downloaderfor");"object"==typeof r&&(""!=a&&(a+=":"),a=a+r.base+","+r.nonce+","+r.what+","+r.index)});var r={downloaders:a};try{jQuery("#updraft-poplog").dialog("isOpen")&&(r.log_fetch=1,r.log_nonce=updraft_poplog_log_nonce,r.log_pointer=updraft_poplog_log_pointer)}catch(n){console.log(n)}updraft_activejobslist_backupnownonce_only&&"undefined"!=typeof updraft_backupnow_nonce&&""!=updraft_backupnow_nonce&&(r.thisjobonly=updraft_backupnow_nonce),updraft_send_command("activejobs_list",r,function(t){try{resp=ud_parse_json(t),resp.hasOwnProperty("l")&&(resp.l?(jQuery("#updraft_lastlogmessagerow").show(),jQuery("#updraft_lastlogcontainer").html(resp.l)):(jQuery("#updraft_lastlogmessagerow").hide(),jQuery("#updraft_lastlogcontainer").html("("+updraftlion.nothing_yet_logged+")")));var n=-1;if(jQuery("#updraft_activejobs").html(resp.j),jQuery("#updraft_activejobs .updraft_jobtimings").each(function(t,a){var r=jQuery(a);if(r.data("lastactivity")&&r.data("jobid")){var o=r.data("jobid"),u=r.data("lastactivity");(n==-1||u<n)&&(n=u);var d=r.data("nextresumptionafter"),s=r.data("nextresumption");e=(new Date).getTime(),u>50&&s>0&&d<-30&&e>updraft_last_forced_when+1e5&&(updraft_last_forced_jobid!=o||s!=updraft_last_forced_resumption)&&(updraft_last_forced_resumption=s,updraft_last_forced_jobid=o,updraft_last_forced_when=e,console.log("UpdraftPlus: force resumption: job_id="+o+", resumption="+s),updraft_send_command("forcescheduledresumption",{resumption:s,job_id:o},function(t){console.log(t)},{json_parse:!1,alert_on_error:!1}))}}),e=(new Date).getTime(),updraft_activejobs_nextupdate=e+18e4,1==updraft_page_is_visible&&(1==updraft_console_focussed_tab||2==updraft_console_focussed_tab&&""!=a)&&(updraft_activejobs_nextupdate=n>-1?n<5?e+1750:e+5e3:lastlog_lastdata==t?e+7500:e+1750),lastlog_lastdata=t,null!=resp.j&&""!=resp.j?(jQuery("#updraft_activejobsrow").show(),r.hasOwnProperty("thisjobonly")&&!updraft_inpage_hasbegun&&jQuery("#updraft-jobid-"+r.thisjobonly).length?(updraft_inpage_hasbegun=1,console.log("UpdraftPlus: the start of the requested backup job has been detected")):!updraft_inpage_hasbegun&&updraft_activejobslist_backupnownonce_only&&jQuery(".updraft_jobtimings.isautobackup").length?(autobackup_nonce=jQuery(".updraft_jobtimings.isautobackup").first().data("jobid"),autobackup_nonce&&(updraft_inpage_hasbegun=1,updraft_backupnow_nonce=autobackup_nonce,r.thisjobonly=autobackup_nonce,console.log("UpdraftPlus: the start of the requested backup job has been detected; id: "+autobackup_nonce))):1==updraft_inpage_hasbegun&&jQuery("#updraft-jobid-"+r.thisjobonly+".updraft_finished").length&&(updraft_inpage_hasbegun=2,console.log("UpdraftPlus: the end of the requested backup job has been detected"),"undefined"!=typeof updraft_inpage_success_callback&&""!=updraft_inpage_success_callback?updraft_inpage_success_callback.call(!1):jQuery("#updraft-backupnow-inpage-modal").dialog("close")),""==lastlog_jobs&&setTimeout(function(){jQuery("#updraft_backup_started").slideUp()},3500)):jQuery("#updraft_activejobsrow").is(":hidden")||("undefined"!=typeof lastbackup_laststatus&&updraft_showlastbackup(),jQuery("#updraft_activejobsrow").hide()),lastlog_jobs=resp.j,null!=resp.ds&&""!=resp.ds&&jQuery(resp.ds).each(function(e,a){""!=a.base&&updraft_downloader_status_update(a.base,a.timestamp,a.what,a.findex,a,t)}),null!=resp.u&&""!=resp.u&&jQuery("#updraft-poplog").dialog("isOpen")){var o=resp.u;if(o.nonce==updraft_poplog_log_nonce&&(updraft_poplog_log_pointer=o.pointer,null!=o.log&&""!=o.log)){var u=jQuery("#updraft-poplog").scrollTop();jQuery("#updraft-poplog-content").append(o.log),updraft_poplog_lastscroll!=u&&updraft_poplog_lastscroll!=-1||(jQuery("#updraft-poplog").scrollTop(jQuery("#updraft-poplog-content").prop("scrollHeight")),updraft_poplog_lastscroll=jQuery("#updraft-poplog").scrollTop())}}}catch(d){console.log(updraftlion.unexpectedresponse+" "+t),console.log(d)}},{json_parse:!1,type:"GET"})}}function updraft_popuplog(t){var e=updraftlion.loading_log_file;t&&(e+=" (log."+t+".txt)"),jQuery("#updraft-poplog").dialog("option","title",e),jQuery("#updraft-poplog-content").html("<em>"+e+" ...</em> "),jQuery("#updraft-poplog").dialog("open"),updraft_send_command("get_log",t,function(t){updraft_poplog_log_pointer=t.pointer,updraft_poplog_log_nonce=t.nonce;var e="?page=updraftplus&action=downloadlog&force_download=1&updraftplus_backup_nonce="+t.nonce;jQuery("#updraft-poplog-content").html(t.log);var a={};a[updraftlion.downloadlogfile]=function(){window.location.href=e},a[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-poplog").dialog("option","buttons",a),jQuery("#updraft-poplog").dialog("option","title","log."+t.nonce+".txt"),updraft_poplog_lastscroll=-1},{type:"GET",timeout:6e4,error_callback:function(t,e,a){var r=e==a?a:a+" ("+e+")";jQuery("#updraft-poplog-content").append(r),console.log(t)}})}function updraft_showlastbackup(){updraft_send_command("get_fragment","last_backup_html",function(t){response=t.output,lastbackup_laststatus==response?setTimeout(function(){updraft_showlastbackup()},7e3):jQuery("#updraft_last_backup").html(response),lastbackup_laststatus=response},{type:"GET"})}function updraft_historytimertoggle(t){updraft_historytimer&&1!=t?(clearTimeout(updraft_historytimer),updraft_historytimer=0):(updraft_updatehistory(0,0),updraft_historytimer=setInterval(function(){updraft_updatehistory(0,0)},3e4),calculated_diskspace||(updraftplus_diskspace(),calculated_diskspace=1))}function updraft_updatehistory(t,e){var a=Math.round((new Date).getTime()/1e3);if(1==t||1==e)updraft_historytimer_notbefore=a+30;else if(a<updraft_historytimer_notbefore)return void console.log("Update history skipped: "+a.toString()+" < "+updraft_historytimer_notbefore.toString());1==t&&(1==e?(updraft_history_lastchecksum=!1,jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html('<p style="text-align:center;"><em>'+updraftlion.rescanningremote+"</em></p>")):(updraft_history_lastchecksum=!1,jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html('<p style="text-align:center;"><em>'+updraftlion.rescanning+"</em></p>")));var r=e?"remotescan":!!t&&"rescan";updraft_send_command("rescan",r,function(t){if(t.hasOwnProperty("logs_exist")&&t.logs_exist&&jQuery("#updraft_lastlogmessagerow .updraft-log-link").show(),t.hasOwnProperty("migrate_modal")&&t.migrate_modal&&jQuery("#updraft_migrate_modal_main").replaceWith(t.migrate_modal),null!=t.n&&jQuery("#updraft-navtab-backups").html(t.n),null!=t.t){if(null!=t.cksum){if(t.cksum==updraft_history_lastchecksum)return;updraft_history_lastchecksum=t.cksum}jQuery("#updraft-navtab-backups-content .updraft_existing_backups").html(t.t),t.data&&console.log(t.data)}})}function updraft_intervals_monthly_or_not(t,e){var a="#updraft-navtab-settings-content #"+t,r=jQuery(a+" option").length,n="monthly"==e,o=!1;if(r>10&&(o=!0),n||o){if(n&&o)return void("monthly"==e&&(jQuery(".updraft_monthly_extra_words_"+t).remove(),jQuery(a).before('<span class="updraft_monthly_extra_words_'+t+'">'+updraftlion.day+" </span>").after('<span class="updraft_monthly_extra_words_'+t+'"> '+updraftlion.inthemonth+" </span>")));if(jQuery(".updraft_monthly_extra_words_"+t).remove(),n){updraft_interval_week_val=jQuery(a+" option:selected").val(),jQuery(a).html(updraftlion.mdayselector).before('<span class="updraft_monthly_extra_words_'+t+'">'+updraftlion.day+" </span>").after('<span class="updraft_monthly_extra_words_'+t+'"> '+updraftlion.inthemonth+" </span>");var u=updraft_interval_month_val===!1?1:updraft_interval_month_val;u-=1,jQuery(a+" option:eq("+u+")").prop("selected",!0)}else{updraft_interval_month_val=jQuery(a+" option:selected").val(),jQuery(a).html(updraftlion.dayselector);var d=updraft_interval_week_val===!1?1:updraft_interval_week_val;jQuery(a+" option:eq("+d+")").prop("selected",!0)}}}function updraft_check_same_times(){var t=0,e=jQuery("#updraft-navtab-settings-content .updraft_interval").val();"manual"==e?jQuery("#updraft-navtab-settings-content .updraft_files_timings").hide():jQuery("#updraft-navtab-settings-content .updraft_files_timings").show(),"weekly"==e||"fortnightly"==e||"monthly"==e?(updraft_intervals_monthly_or_not("updraft_startday_files",e),jQuery("#updraft-navtab-settings-content #updraft_startday_files").show()):(jQuery(".updraft_monthly_extra_words_updraft_startday_files").remove(),jQuery("#updraft-navtab-settings-content #updraft_startday_files").hide());var a=jQuery("#updraft-navtab-settings-content .updraft_interval_database").val();"manual"==a&&(t=1,jQuery("#updraft-navtab-settings-content .updraft_db_timings").hide()),"weekly"==a||"fortnightly"==a||"monthly"==a?(updraft_intervals_monthly_or_not("updraft_startday_db",a),jQuery("#updraft-navtab-settings-content #updraft_startday_db").show()):(jQuery(".updraft_monthly_extra_words_updraft_startday_db").remove(),jQuery("#updraft-navtab-settings-content #updraft_startday_db").hide()),a==e?(jQuery("#updraft-navtab-settings-content .updraft_db_timings").hide(),0==t?jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").show():jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").hide()):(jQuery("#updraft-navtab-settings-content .updraft_same_schedules_message").hide(),0==t&&jQuery("#updraft-navtab-settings-content .updraft_db_timings").show())}function updraft_activejobs_delete(t){updraft_send_command("activejobs_delete",t,function(e){"Y"==e.ok?jQuery("#updraft-jobid-"+t).html(e.m).fadeOut("slow").remove():"N"==e.ok?alert(e.m):(alert(updraftlion.unexpectedresponse),console.log(e))})}function updraftplus_diskspace_entity(t){jQuery("#updraft_diskspaceused_"+t).html("<em>"+updraftlion.calculating+"</em>"),updraft_send_command("get_fragment",{fragment:"disk_usage",data:t},function(e){jQuery("#updraft_diskspaceused_"+t).html(e.output)},{type:"GET"})}function updraft_iframe_modal(t,e){var a=780,r=500;jQuery("#updraft-iframe-modal-innards").html('<iframe width="100%" height="430px" src="'+ajaxurl+"?action=updraft_ajax&subaction="+t+"&nonce="+updraft_credentialtest_nonce+'"></iframe>'),jQuery("#updraft-iframe-modal").dialog("option","title",e).dialog("option","width",a).dialog("option","height",r).dialog("open")}function updraft_html_modal(t,e,a,r){jQuery("#updraft-iframe-modal-innards").html(t);var n={};a<450&&(n[updraftlion.close]=function(){jQuery(this).dialog("close")}),jQuery("#updraft-iframe-modal").dialog("option","title",e).dialog("option","width",a).dialog("option","height",r).dialog("option","buttons",n).dialog("open")}function updraftplus_diskspace(){jQuery("#updraft-navtab-backups-content .updraft_diskspaceused").html("<em>"+updraftlion.calculating+"</em>"),updraft_send_command("get_fragment",{fragment:"disk_usage",data:"updraft"},function(t){jQuery("#updraft-navtab-backups-content .updraft_diskspaceused").html(t.output)},{type:"GET"})}function updraftplus_deletefromserver(t,e,a){a||(a=0);var r={stage:"delete",timestamp:t,type:e,findex:a};updraft_send_command("updraft_download_backup",r,null,{action:"updraft_download_backup",nonce:updraft_download_nonce,nonce_key:"_wpnonce"})}function updraftplus_downloadstage2(t,e,a){location.href=ajaxurl+"?_wpnonce="+updraft_download_nonce+"×tamp="+t+"&type="+e+"&stage=2&findex="+a+"&action=updraft_download_backup"}function updraftplus_show_contents(t,e,a){var r='<div id="updraft_zip_files_container" class="hidden-in-updraftcentral" style="clear:left;"><div id="updraft_zip_info_container"><p><span id="updraft_zip_path_text">'+updraftlion.zip_file_contents_info+'</span> - <span id="updraft_zip_size_text"></span></p>'+updraftlion.browse_download_link+'</div><div id="updraft_zip_files_jstree_container"><input type="search" id="zip_files_jstree_search" name="zip_files_jstree_search" placeholder="'+updraftlion.search+'"><div id="updraft_zip_files_jstree"></div></div></div>';updraft_html_modal(r,updraftlion.zip_file_contents,780,500),zip_files_jstree("zipbrowser",t,e,a)}function zip_files_jstree(t,e,a,r){jQuery("#updraft_zip_files_jstree").jstree({core:{multiple:!1,data:function(n,o){updraft_send_command("get_jstree_directory_nodes",{entity:t,node:n,timestamp:e,type:a,findex:r},function(t){t.hasOwnProperty("error")?alert(t.error):o.call(this,t.nodes)})},error:function(t){alert(t),console.log(t)}},search:{show_only_matches:!0},plugins:["search","sort"]}),jQuery("#updraft_zip_files_jstree").on("ready.jstree",function(t,e){jQuery("#updraft-iframe-modal").dialog("option","title",updraftlion.zip_file_contents+": "+e.instance.get_node("#").children[0])});var n=!1;jQuery("#zip_files_jstree_search").keyup(function(){n&&clearTimeout(n),n=setTimeout(function(){var t=jQuery("#zip_files_jstree_search").val();jQuery("#updraft_zip_files_jstree").jstree(!0).search(t)},250)}),jQuery("#updraft_zip_files_jstree").on("changed.jstree",function(t,e){jQuery("#updraft_zip_path_text").text(e.node.li_attr.path),e.node.li_attr.size?(jQuery("#updraft_zip_size_text").text(e.node.li_attr.size),jQuery("#updraft_zip_download_item").show()):(jQuery("#updraft_zip_size_text").text(""),jQuery("#updraft_zip_download_item").hide())}),jQuery("#updraft_zip_download_item").click(function(t){t.preventDefault();var n=jQuery("#updraft_zip_path_text").text();updraft_send_command("get_zipfile_download",{path:n,timestamp:e,type:a,findex:r},function(t){t.hasOwnProperty("error")?alert(t.error):t.hasOwnProperty("path")?location.href=ajaxurl+"?_wpnonce="+updraft_download_nonce+"×tamp="+e+"&type="+a+"&stage=2&findex="+r+"&filepath="+t.path+"&action=updraft_download_backup":alert(updraftlion.download_timeout)})})}function updraft_downloader(t,e,a,r,n,o,u){"string"!=typeof n&&(n=n.toString());for(var n=n.split(","),d=0;d<n.length;d++){var s=t+e+"_"+a+"_"+n[d],i="."+s,p=parseInt(n[d]);p++;var l=0==n[d]?"":" ("+p+")";if(!jQuery(i).length){var c=o?o:e;jQuery(r).append('<div style="clear:left; border: 1px solid; padding: 8px; margin-top: 4px; max-width:840px;" class="'+s+' updraftplus_downloader"><button onclick="jQuery(this).parent().fadeOut().remove();" type="button" style="float:right; margin-bottom: 8px;">X</button><strong>'+updraftlion.download+" "+a+l+" ("+c+')</strong>:<div class="raw">'+updraftlion.begunlooking+'</div><div class="file '+s+'_st"><div class="dlfileprogress" style="width: 0;"></div></div></div>'),jQuery(i).data("downloaderfor",{base:t,nonce:e,what:a,index:n[d]}),setTimeout(function(){updraft_activejobs_update(!0)},1500)}jQuery(i).data("lasttimebegan",(new Date).getTime()),u=!!u;var f=jQuery("#updraft-navtab-backups-content .uddownloadform_"+a+"_"+e+"_"+n[d]).data("wp_nonce").toString(),_={type:a,timestamp:e,findex:n[d]},y={action:"updraft_download_backup",nonce_key:"_wpnonce",nonce:f,timeout:1e4,async:u};updraft_send_command("updraft_download_backup",_,function(t){},y)}return!1}function ud_parse_json(t){t.charAt(0),t.charAt(t.length-1);try{var e=JSON.parse(t);return e}catch(a){console.log("UpdraftPlus: Exception when trying to parse JSON (1) - will attempt to fix/re-parse"),console.log(t)}var r=t.indexOf("{"),n=t.lastIndexOf("}");if(r>-1&&n>-1){var o=t.slice(r,n+1);try{var u=JSON.parse(o);return console.log("UpdraftPlus: JSON re-parse successful"),u}catch(a){throw console.log("UpdraftPlus: Exception when trying to parse JSON (2)"),a}}throw"UpdraftPlus: could not parse the JSON"}function updraft_restorer_checkstage2(t){var e=jQuery("#ud_downloadstatus2 .file").length;return e>0?void(t&&alert(updraftlion.stilldownloading)):(jQuery("#updraft-restore-modal-stage2a").html(updraftlion.processing),void updraft_send_command("restore_alldownloaded",{timestamp:jQuery("#updraft_restore_timestamp").val(),restoreopts:jQuery("#updraft_restore_form").serialize()},function(t){var e=null;jQuery("#updraft_restorer_restore_options").val("");try{var a=ud_parse_json(t);if(null==a)return void jQuery("#updraft-restore-modal-stage2a").html(updraftlion.emptyresponse);var r=a.m;if(""!=a.w&&(r=r+"<p><strong>"+updraftlion.warnings+"</strong><br>"+a.w+"</p>"),""!=a.e?r=r+"<p><strong>"+updraftlion.errors+"</strong><br>"+a.e+"</p>":updraft_restore_stage=3,a.hasOwnProperty("i")){try{if(e=ud_parse_json(a.i),e.hasOwnProperty("addui")){console.log("Further UI options are being displayed");var n=e.addui;r+='<div id="updraft_restoreoptions_ui" style="clear:left; padding-top:10px;">'+n+"</div>","object"==typeof JSON&&"function"==typeof JSON.stringify&&(delete e.addui,a.i=JSON.stringify(e))}}catch(o){console.log(o),console.log(a)}jQuery("#updraft_restorer_backup_info").val(a.i)}else jQuery("#updraft_restorer_backup_info").val();jQuery("#updraft-restore-modal-stage2a").html(r),jQuery("#updraft-restore-modal-stage2a .updraft_select2").length>0&&jQuery("#updraft-restore-modal-stage2a .updraft_select2").select2()}catch(o){console.log(t),console.log(o),jQuery("#updraft-restore-modal-stage2a").text(updraftlion.jsonnotunderstood+" "+updraftlion.errordata+": "+t).html()}},{json_parse:!1}))}function updraft_downloader_status(t,e,a,r){}function updraft_downloader_status_update(t,e,a,r,n,o){var u=t+e+"_"+a+"_"+r,d="."+u,s=0;if(null!=n.e)jQuery(d+" .raw").html("<strong>"+updraftlion.error+"</strong> "+n.e),console.log(n);else if(null!=n.p){if(jQuery(d+"_st .dlfileprogress").width(n.p+"%"),null!=n.a&&n.a>0){var i=(new Date).getTime(),p=jQuery(d).data("lasttimebegan"),l=i-p;if(n.a>90&&l>6e4){console.log(e+" "+a+" "+r+": restarting download: file_age="+n.a+", sincelastrestart_ms="+l),jQuery(d).data("lasttimebegan",(new Date).getTime());var c=jQuery("#updraft-navtab-backups-content .uddownloadform_"+a+"_"+e+"_"+r),f={type:a,timestamp:e,findex:r},_={action:"updraft_download_backup",nonce_key:"_wpnonce",nonce:c.data("wp_nonce").toString(),timeout:1e4};updraft_send_command("updraft_download_backup",f,function(t){},_),jQuery(d).data("lasttimebegan",(new Date).getTime())}}if(null!=n.m)if(n.p>=100&&"udrestoredlstatus_"==t)jQuery(d+" .raw").html(n.m),jQuery(d).fadeOut("slow",function(){jQuery(this).remove(),updraft_restorer_checkstage2(0)});else if(n.p<100||"uddlstatus_"!=t)jQuery(d+" .raw").html(n.m);else{var y=updraftlion.fileready+" "+updraftlion.actions+': \t\t\t\t<button type="button" onclick="updraftplus_downloadstage2(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.downloadtocomputer+'</button> \t\t\t\t<button id="uddownloaddelete_'+e+"_"+a+'" type="button" onclick="updraftplus_deletefromserver(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.deletefromserver+"</button>";n.hasOwnProperty("can_show_contents")&&n.can_show_contents&&(y+=' <button type="button" onclick="updraftplus_show_contents(\''+e+"', '"+a+"', '"+r+"')\">"+updraftlion.browse_contents+"</button>"),jQuery(d+" .raw").html(y)}}else null!=n.m?jQuery(d+" .raw").html(n.m):(jQuery(d+" .raw").html(updraftlion.jsonnotunderstood+" ("+o+")"),s=1);return s}function updraft_backupnow_go(t,e,a,r,n,o,u){jQuery("#updraft_backup_started").html("<em>"+updraftlion.requeststart+"</em>").slideDown(""),setTimeout(function(){jQuery("#updraft_backup_started").fadeOut("slow")},75e3);var d={backupnow_nodb:t,backupnow_nofiles:e,backupnow_nocloud:a,backupnow_label:o,extradata:n};""!=r&&(d.onlythisfileentity=r),""!=u&&(d.onlythesetableentities=u),updraft_send_command("backupnow",d,function(t){jQuery("#updraft_backup_started").html(t.m),t.hasOwnProperty("nonce")&&(updraft_backupnow_nonce=t.nonce,console.log("UpdraftPlus: ID of started job: "+updraft_backupnow_nonce)),setTimeout(function(){updraft_activejobs_update(!0)},500)})}var onlythesefileentities=backupnow_whichfiles_checked("");""==onlythesefileentities?jQuery("#backupnow_includefiles_moreoptions").show():jQuery("#backupnow_includefiles_moreoptions").hide();var updraft_restore_stage=1,lastlog_lastmessage="",lastlog_lastdata="",lastlog_jobs="",updraft_activejobs_nextupdate=(new Date).getTime()+1e3,updraft_page_is_visible=1,updraft_console_focussed_tab=1,updraft_settings_form_changed=!1;window.onbeforeunload=function(t){if(updraft_settings_form_changed)return updraftlion.unsavedsettings},"undefined"!=typeof document.hidden&&document.addEventListener("visibilitychange",function(){updraft_check_page_visibility(0)},!1),updraft_check_page_visibility(1);var updraft_poplog_log_nonce,updraft_poplog_log_pointer=0,updraft_poplog_lastscroll=-1,updraft_last_forced_jobid=-1,updraft_last_forced_resumption=-1,updraft_last_forced_when=-1,updraft_backupnow_nonce="",updraft_activejobslist_backupnownonce_only=0,updraft_inpage_hasbegun=0,updraft_historytimer=0,calculated_diskspace=0,updraft_historytimer_notbefore=0,updraft_history_lastchecksum=!1,updraft_interval_week_val=!1,updraft_interval_month_val=!1;"undefined"!=typeof updraft_siteurl&&setInterval(function(){jQuery.get(updraft_siteurl+"/wp-cron.php")},21e4);var lastlog_lastmessage="";jQuery(document).ajaxError(function(t,e,a,r){if(null!=r&&""!=r&&null!=e.responseText&&""!=e.responseText&&(console.log("Error caught by UpdraftPlus ajaxError handler (follows) for "+a.url),console.log(r),0==a.url.search(ajaxurl)))if(a.url.search("subaction=downloadstatus")>=0){var n=a.url.match(/timestamp=\d+/),o=a.url.match(/type=[a-z]+/),u=a.url.match(/findex=\d+/),d=a.url.match(/base=[a-z_]+/);if(u=u instanceof Array?parseInt(u[0].substr(7)):0,o=o instanceof Array?o[0].substr(5):"",d=d instanceof Array?d[0].substr(5):"",n=n instanceof Array?parseInt(n[0].substr(10)):0,""!=d&&""!=o&&n>0){var s=d+n+"_"+o+"_"+u;jQuery("."+s+" .raw").html("<strong>"+updraftlion.error+"</strong> "+updraftlion.servererrorcode)}}else a.url.search("subaction=restore_alldownloaded")>=0&&jQuery("#updraft-restore-modal-stage2a").append("<br><strong>"+updraftlion.error+"</strong> "+updraftlion.servererrorcode+": "+r)}),jQuery(document).ready(function(t){function e(e){t('.expertmode .advanced_settings_container .advanced_tools:not(".'+e+'")').hide(),t(".expertmode .advanced_settings_container .advanced_tools."+e).fadeIn("slow"),t(".expertmode .advanced_settings_container .advanced_tools_button:not(#"+e+")").removeClass("active"),t(".expertmode .advanced_settings_container .advanced_tools_button#"+e).addClass("active")}function a(t){var e=!!jQuery("#updraftcentral_mothership_other").is(":checked");e?(jQuery("#updraftcentral_keycreate_mothership").prop("disabled",!1),t?jQuery("#updraftcentral_keycreate_mothership_firewalled_container").show():(jQuery(".updraftcentral_wizard_self_hosted_stage2").show(),jQuery("#updraftcentral_keycreate_mothership_firewalled_container").slideDown(),jQuery("#updraftcentral_keycreate_mothership").focus())):(jQuery("#updraftcentral_keycreate_mothership").prop("disabled",!0),t||(jQuery(".updraftcentral_wizard_self_hosted_stage2").hide(),r()))}function r(){jQuery("#updraftcentral_wizard_stage1_error").text("");
|
2 |
+
var t="";if(jQuery("#updraftcentral_mothership_updraftpluscom").is(":checked"))jQuery(".updraftcentral_keycreate_description").hide(),t="updraftplus.com";else if(jQuery("#updraftcentral_mothership_other").is(":checked")){jQuery(".updraftcentral_keycreate_description").show();var e=jQuery("#updraftcentral_keycreate_mothership").val();if(""==e)return void jQuery("#updraftcentral_wizard_stage1_error").text(updraftlion.updraftcentral_wizard_empty_url);try{var a=new URL(e);t=a.hostname}catch(r){if("undefined"==typeof URL&&(t=jQuery("<a>").prop("href",e).prop("hostname")),!t||"undefined"!=typeof URL)return void jQuery("#updraftcentral_wizard_stage1_error").text(updraftlion.updraftcentral_wizard_invalid_url)}}jQuery("#updraftcentral_keycreate_description").val(t),jQuery(".updraftcentral_wizard_stage1").hide(),jQuery(".updraftcentral_wizard_stage2").show()}function n(e,a,r,o){jQuery("#updraft-delete-waitwarning").slideDown();var u=e,d=a,s=r,i=o,p=jQuery("#updraft_delete_timestamp").val().split(","),l=jQuery("#updraft_delete_form").serializeArray(),c={};t.each(l,function(){void 0!==c[this.name]?(c[this.name].push||(c[this.name]=[c[this.name]]),c[this.name].push(this.value||"")):c[this.name]=this.value||""}),c.remote_delete_limit=updraftlion.remote_delete_limit,delete c.action,delete c.subaction,delete c.nonce,updraft_send_command("deleteset",c,function(t){if(t.hasOwnProperty("result")&&null!=t.result)if("error"==t.result)alert(updraftlion.error+" "+t.message);else if("continue"==t.result)u=u+t.backup_local+t.backup_remote,d+=t.backup_local,s+=t.backup_remote,i+=t.backup_sets,jQuery("#updraft-deleted-files-total").text(u+" "+updraftlion.remote_files_deleted),n(u,d,s,i);else if("success"==t.result){jQuery("#updraft-deleted-files-total").text(""),jQuery("#updraft-delete-waitwarning").slideUp(),t.hasOwnProperty("count_backups")&&jQuery("#updraft-navtab-backups").html(updraftlion.existing_backups+" ("+t.count_backups+")");for(var e=0;e<p.length;e++){var a=p[e];jQuery("#updraft-navtab-backups-content .updraft_existing_backups_row_"+a).slideUp().remove()}jQuery("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").length<1&&jQuery("#ud_massactions").hide(),updraft_history_lastchecksum=!1,jQuery("#updraft-delete-modal").dialog("close"),d+=t.backup_local,s+=t.backup_remote,i+=t.backup_sets,alert(t.set_message+" "+i+"\n"+t.local_message+" "+d+"\n"+t.remote_message+" "+s)}})}function o(t,e){jQuery("#updraft-navtab-settings-content #updraft_include_"+t).is(":checked")?e?jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").show():jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").slideDown():e?jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").hide():jQuery("#updraft-navtab-settings-content #updraft_include_"+t+"_exclude").slideUp()}function u(){var t=new plupload.Uploader(updraft_plupload_config);t.bind("Init",function(t){var e=jQuery("#plupload-upload-ui");t.features.dragdrop?(e.addClass("drag-drop"),jQuery("#drag-drop-area").bind("dragover.wp-uploader",function(){e.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){e.removeClass("drag-over")})):(e.removeClass("drag-drop"),jQuery("#drag-drop-area").unbind(".wp-uploader"))}),t.init(),t.bind("FilesAdded",function(e,a){plupload.each(a,function(e){if(!/^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-[\-a-z]+([0-9]+?)?(\.(zip|gz|gz\.crypt))?$/i.test(e.name)&&!/^log\.([0-9a-f]{12})\.txt$/.test(e.name)){for(var a=!1,r=0;r<updraft_accept_archivename.length;r++)if(updraft_accept_archivename[r].test(e.name))var a=!0;if(!a)return/\.(zip|tar|tar\.gz|tar\.bz2)$/i.test(e.name)||/\.sql(\.gz)?$/i.test(e.name)?(jQuery("#updraft-message-modal-innards").html("<p><strong>"+e.name+"</strong></p> "+updraftlion.notarchive2),jQuery("#updraft-message-modal").dialog("open")):alert(e.name+": "+updraftlion.notarchive),void t.removeFile(e)}jQuery("#filelist").append('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(0)+"</span>/"+plupload.formatSize(e.size)+') <div class="fileprogress"></div></div>')}),e.refresh(),e.start()}),t.bind("UploadProgress",function(t,e){jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"),jQuery("#"+e.id+" span").html(plupload.formatSize(parseInt(e.size*e.percent/100))),e.size==e.loaded&&(jQuery("#"+e.id).html('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(parseInt(e.size*e.percent/100))+"</span>/"+plupload.formatSize(e.size)+") - "+updraftlion.complete+"</div>"),jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"))}),t.bind("Error",function(t,e){console.log(e);var a;a="-200"==e.code?"\n"+updraftlion.makesure2:updraftlion.makesure;var r=updraftlion.uploaderr+" (code "+e.code+") : "+e.message;e.hasOwnProperty("status")&&e.status&&(r+=" ("+updraftlion.http_code+" "+e.status+")"),e.hasOwnProperty("response")&&(console.log("UpdraftPlus: plupload error: "+e.response),e.response.length<100&&(r+=" "+updraftlion.error+" "+e.response+"\n")),r+=" "+a,alert(r)}),t.bind("FileUploaded",function(t,e,a){if("200"==a.status)try{resp=ud_parse_json(a.response),resp.e?alert(updraftlion.uploaderror+" "+resp.e):resp.dm?(alert(resp.dm),updraft_updatehistory(1,0)):resp.m?updraft_updatehistory(1,0):alert("Unknown server response: "+a.response)}catch(r){console.log(a),alert(updraftlion.jsonnotunderstood)}else alert("Unknown server response status: "+a.code),console.log(a)})}function d(t){params={uri:jQuery("#updraftplus_httpget_uri").val()},params.curl=t,updraft_send_command("httpget",params,function(t){t.e&&alert(t.e),t.r?jQuery("#updraftplus_httpget_results").html("<pre>"+t.r+"</pre>"):console.log(t)},{type:"GET"})}function s(t,e,a){updraft_restore_setoptions(t),jQuery("#updraft_restore_timestamp").val(e),jQuery(".updraft_restore_date").html(a),updraft_restore_stage=1,jQuery("#updraft-migrate-modal").dialog("close"),jQuery("#updraft-restore-modal").dialog("open"),jQuery("#updraft-restore-modal-stage1").show(),jQuery("#updraft-restore-modal-stage2").hide(),jQuery("#updraft-restore-modal-stage2a").html(""),updraft_activejobs_update(!0)}function i(t){t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var e="[\\?&]"+t+"=([^&#]*)",a=new RegExp(e),r=a.exec(window.location.href);return null==r?"":decodeURIComponent(r[1].replace(/\+/g," "))}if(t(".expertmode .advanced_settings_container .advanced_tools_button").click(function(){e(t(this).attr("id"))}),jQuery.ui&&jQuery.ui.dialog&&jQuery.ui.dialog.prototype._allowInteraction){var p=jQuery.ui.dialog.prototype._allowInteraction;jQuery.ui.dialog.prototype._allowInteraction=function(t){return!!jQuery(t.target).closest(".select2-dropdown").length||p.apply(this,arguments)}}t("#updraftcentral_keys").on("click","a.updraftcentral_keys_show",function(e){e.preventDefault(),t(this).remove(),t("#updraftcentral_keys_table").slideDown()}),t("#updraftcentral_keycreate_altmethod_moreinfo_get").click(function(e){e.preventDefault(),t(this).remove(),t("#updraftcentral_keycreate_altmethod_moreinfo").slideDown()}),t(".updraft_webdav_settings").on("change keyup paste",function(){var e=[],a="";t(".updraft_webdav_settings").each(function(r,n){var o=t(n).attr("id");if(o&&"updraft_webdav_"==o.substring(0,15)){var u=o.substring(15);id_split=u.split("_"),u=id_split[0],a=id_split[1],e[u]=this.value}});var r="",n="@",o="/",u=":",d=":";(e.host.indexOf("@")>=0||""===e.host)&&(n=""),e.host.indexOf("/")>=0?t("#updraft_webdav_host_error").show():t("#updraft_webdav_host_error").hide(),0!=e.path.indexOf("/")&&""!==e.path||(o=""),""!==e.user&&""!==e.pass||(u=""),""!==e.host&&""!==e.port||(d=""),r=e.webdav+e.user+u+e.pass+n+encodeURIComponent(e.host)+d+e.port+o+e.path,t("#updraft_webdav_url_"+a).val(r)}),t("#updraft-navtab-backups-content").on("click",".updraft_existing_backups .updraft_existing_backups_row",function(e){(e.ctrlKey||e.metaKey)&&(t(this).toggleClass("backuprowselected"),t("#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected").length>0?t("#ud_massactions").show():t("#ud_massactions").hide())}),jQuery("#updraft-navtab-settings-content .updraftplusmethod").on("click","button.updraft-test-button",function(){var t=jQuery(this).data("method"),e=jQuery(this).data("instance_id");updraft_remote_storage_test(t,function(e,a,r){return"sftp"==t&&(r.hasOwnProperty("scp")&&r.scp?alert(updraftlion.settings_test_result.replace("%s","SCP")+" "+e.output):alert(updraftlion.settings_test_result.replace("%s","SFTP")+" "+e.output),e.hasOwnProperty("data")&&console.log(e.data),!0)},e)}),t("#updraft-navtab-settings-content select.updraft_interval, #updraft-navtab-settings-content select.updraft_interval_database").change(function(){updraft_check_same_times()}),t("#backupnow_includefiles_showmoreoptions").click(function(e){e.preventDefault(),t("#backupnow_includefiles_moreoptions").toggle()}),t("#backupnow_database_showmoreoptions").click(function(e){e.preventDefault(),t("#backupnow_database_moreoptions").toggle()}),t("#updraft-navtab-backups-content a.updraft_diskspaceused_update").click(function(t){t.preventDefault(),updraftplus_diskspace()}),t("#updraft-navtab-backups-content a.updraft_uploader_toggle").click(function(e){e.preventDefault(),t("#updraft-plupload-modal").slideToggle()}),t("#updraft-navtab-backups-content a.updraft_rescan_local").click(function(t){t.preventDefault(),updraft_updatehistory(1,0)}),t("#updraft-navtab-backups-content a.updraft_rescan_remote").click(function(t){t.preventDefault(),updraft_updatehistory(1,1)}),jQuery("#updraftcentral_keys").on("click",'input[type="radio"]',function(){a(!1)}),a(!0),jQuery("#updraftcentral_keys").on("click","#updraftcentral_view_log",function(t){t.preventDefault(),jQuery("#updraftcentral_view_log_container").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.fetching+"</div>"});try{updraft_send_command("updraftcentral_get_log",null,function(t){jQuery("#updraftcentral_view_log_container").unblock(),t.hasOwnProperty("log_contents")?jQuery("#updraftcentral_view_log_contents").html('<div style="border:1px solid;padding: 2px;max-height: 400px; overflow-y:scroll;">'+t.log_contents+"</div>"):console.response(resp)})}catch(e){jQuery("#updraft_central_key").html(),console.log(e)}}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_wizard_go",function(t){jQuery("#updraftcentral_wizard_go").hide(),jQuery(".updraftcentral_wizard_success").remove(),jQuery(".create_key_container").show()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_stage1_go",function(t){t.preventDefault(),jQuery(".updraftcentral_wizard_stage2").hide(),jQuery(".updraftcentral_wizard_stage1").show()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_stage2_go",function(t){t.preventDefault(),r()}),jQuery("#updraftcentral_keys").on("click","#updraftcentral_keycreate_go",function(t){t.preventDefault();var e=!!jQuery("#updraftcentral_mothership_other").is(":checked"),a=jQuery("#updraftcentral_keycreate_description").val(),r=jQuery("#updraftcentral_keycreate_keysize").val(),n="__updraftpluscom";if(data={key_description:a,key_size:r},e&&(n=jQuery("#updraftcentral_keycreate_mothership").val(),"http"!=n.substring(0,4)))return void alert(updraftlion.enter_mothership_url);data.mothership_firewalled=jQuery("#updraftcentral_keycreate_mothership_firewalled").is(":checked")?1:0,data.where_send=n,jQuery(".create_key_container").hide(),jQuery(".updraftcentral_wizard_stage1").show(),jQuery(".updraftcentral_wizard_stage2").hide(),jQuery("#updraftcentral_keys").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.creating_please_allow+"</div>"});try{updraft_send_command("updraftcentral_create_key",data,function(t){jQuery("#updraftcentral_keys").unblock();try{if(resp=ud_parse_json(t),resp.hasOwnProperty("error"))return alert(resp.error),void console.log(resp);alert(resp.r),resp.hasOwnProperty("bundle")&&resp.hasOwnProperty("keys_guide")?(jQuery("#updraftcentral_keys_content").html(resp.keys_guide),jQuery("#updraftcentral_keys_content").append('<div class="updraftcentral_wizard_success">'+resp.r+'<br><textarea onclick="this.select();" style="width:620px; height:165px; word-wrap:break-word; border: 1px solid #aaa; border-radius: 3px; padding:4px;">'+resp.bundle+"</textarea></div>")):console.log(resp),resp.hasOwnProperty("keys_table")&&jQuery("#updraftcentral_keys_content").append(resp.keys_table),jQuery("#updraftcentral_wizard_go").show()}catch(e){alert(updraftlion.unexpectedresponse+" "+t),console.log(e)}},{json_parse:!1})}catch(o){jQuery("#updraft_central_key").html(),console.log(o)}}),jQuery("#updraftcentral_keys").on("click",".updraftcentral_key_delete",function(t){t.preventDefault();var e=jQuery(this).data("key_id");return"undefined"==typeof e?void console.log("UpdraftPlus: .updraftcentral_key_delete clicked, but no key ID found"):(jQuery("#updraftcentral_keys").block({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.deleting+"</div>"}),void updraft_send_command("updraftcentral_delete_key",{key_id:e},function(t){jQuery("#updraftcentral_keys").unblock(),t.hasOwnProperty("keys_table")&&jQuery("#updraftcentral_keys_content").html(t.keys_table)}))}),jQuery("#updraft_reset_sid").click(function(t){t.preventDefault(),updraft_send_command("reset_site_id",null,function(t){jQuery("#updraft_show_sid").html(t)},{json_parse:!1})}),jQuery("#updraft-navtab-settings-content form input:not('.udignorechange'), #updraft-navtab-settings-content form select").change(function(t){updraft_settings_form_changed=!0}),jQuery("#updraft-navtab-settings-content form input[type='submit']").click(function(t){updraft_settings_form_changed=!1});var l=180;jQuery(".updraft-bigbutton").each(function(t,e){var a=jQuery(e).width();a>l&&(l=a)}),l>180&&jQuery(".updraft-bigbutton").width(l),setInterval(function(){updraft_activejobs_update(!1)},1250),setTimeout(function(){jQuery("#setting-error-settings_updated").slideUp()},5e3),jQuery(".updraftplusmethod").hide(),jQuery("#updraft_restore_db").change(function(){jQuery("#updraft_restore_db").is(":checked")?jQuery("#updraft_restorer_dboptions").slideDown():jQuery("#updraft_restorer_dboptions").slideUp()}),updraft_check_same_times();var c={};c[updraftlion.close]=function(){jQuery(this).dialog("close")},jQuery("#updraft-message-modal").dialog({autoOpen:!1,height:350,width:520,modal:!0,buttons:c});var f={};f[updraftlion.deletebutton]=function(){n(0,0,0,0)},f[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-delete-modal").dialog({autoOpen:!1,height:262,width:430,modal:!0,buttons:f});var _={};_[updraftlion.restore]=function(){var t=0,e=[],a=0,r=jQuery("#updraft_restore_meta_foreign").val();if(jQuery('input[name="updraft_restore[]"]').each(function(n,o){if(jQuery(o).is(":checked")&&!jQuery(o).is(":disabled")){t=1;var u=jQuery(o).data("howmany"),d=jQuery(o).val();if((1==r||2==r&&"db"!=d)&&("wpcore"!=d&&(u=jQuery("#updraft_restore_form #updraft_restore_wpcore").data("howmany")),d="wpcore"),"wpcore"!=d||0==a){var s=[d,u];e.push(s),"wpcore"==d&&(a=1)}}}),1==t){if(1==updraft_restore_stage){jQuery("#updraft-restore-modal-stage1").slideUp("slow"),jQuery("#updraft-restore-modal-stage2").show(),updraft_restore_stage=2;var n=jQuery(".updraft_restore_date").first().text(),o=e,u=jQuery("#updraft_restore_timestamp").val();try{updraft_send_command("whichdownloadsneeded",{downloads:e,timestamp:u},function(t){if(t.hasOwnProperty("downloads")&&(console.log("UpdraftPlus: items which still require downloading follow"),o=t.downloads,console.log(o)),0==o.length)updraft_restorer_checkstage2(0);else for(var e=0;e<o.length;e++)updraft_downloader("udrestoredlstatus_",u,o[e][0],"#ud_downloadstatus2",o[e][1],n,!1)},{alert_on_error:!1})}catch(d){console.log("UpdraftPlus: error (follows) when looking for items needing downloading"),console.log(d),alert(updraftlion.jsonnotunderstood)}}else if(2==updraft_restore_stage)updraft_restorer_checkstage2(1);else if(3==updraft_restore_stage){var s=1;if(jQuery("#updraft_restoreoptions_ui input.required").each(function(t){if(0!=s){var e=jQuery(this).val();if(""==e)alert(updraftlion.pleasefillinrequired),s=0;else if(""!=jQuery(this).attr("pattern")){var a=jQuery(this).attr("pattern"),r=new RegExp(a,"g");r.test(e)||(alert(jQuery(this).data("invalidpattern")),s=0)}}}),!s)return;var i=jQuery("#updraft_restoreoptions_ui select, #updraft_restoreoptions_ui input").serialize();console.log("Restore options: "+i),jQuery("#updraft_restorer_restore_options").val(i),jQuery("#updraft-restore-modal-stage2a").html(updraftlion.restore_proceeding),jQuery("#updraft_restore_form").submit(),updraft_restore_stage=4}}else alert(updraftlion.youdidnotselectany)},_[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-restore-modal").dialog({autoOpen:!1,height:505,width:590,modal:!0,buttons:_}),jQuery("#updraft-iframe-modal").dialog({autoOpen:!1,height:500,width:780,modal:!0}),jQuery("#updraft-backupnow-inpage-modal").dialog({autoOpen:!1,height:345,width:580,modal:!0});var y={};y[updraftlion.backupnow]=function(){var t=jQuery("#backupnow_includedb").is(":checked")?0:1,e=jQuery("#backupnow_includefiles").is(":checked")?0:1,a=jQuery("#backupnow_includecloud").is(":checked")?0:1,r=backupnow_whichtables_checked("");if(""==r&&0==t)return alert(updraftlion.notableschosen),void jQuery("#backupnow_includefiles_moreoptions").show();"boolean"==typeof r&&(r=null);var n=backupnow_whichfiles_checked("");return""==n&&0==e?(alert(updraftlion.nofileschosen),void jQuery("#backupnow_includefiles_moreoptions").show()):t&&e?void alert(updraftlion.excludedeverything):(jQuery(this).dialog("close"),setTimeout(function(){jQuery("#updraft_lastlogmessagerow").fadeOut("slow",function(){jQuery(this).fadeIn("slow")})},1700),void updraft_backupnow_go(t,e,a,n,"",jQuery("#backupnow_label").val(),r))},y[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-backupnow-modal").dialog({autoOpen:!1,height:472,width:610,modal:!0,buttons:y}),jQuery("#updraft-migrate-modal").dialog({autoOpen:!1,height:updraftlion.migratemodalheight,width:updraftlion.migratemodalwidth,modal:!0}),jQuery("#updraft-poplog").dialog({autoOpen:!1,height:600,width:"75%",modal:!0}),jQuery("#updraft-navtab-settings-content .enableexpertmode").click(function(){return jQuery("#updraft-navtab-settings-content .expertmode").fadeIn(),jQuery("#updraft-navtab-settings-content .enableexpertmode").off("click"),!1}),jQuery("#updraft-navtab-settings-content .backupdirrow").on("click","a.updraft_backup_dir_reset",function(){return jQuery("#updraft_dir").val("updraft"),!1}),jQuery("#updraft-navtab-settings-content .updraft_include_entity").click(function(){var t=jQuery(this).data("toggle_exclude_field");t&&o(t,!1)}),jQuery("#updraft-navtab-settings-content .updraft-service").change(function(){var t=jQuery(this).val();jQuery("#updraft-navtab-settings-content .updraftplusmethod").hide(),jQuery("#updraft-navtab-settings-content ."+t).show()}),jQuery("#updraft-navtab-settings-content a.updraft_show_decryption_widget").click(function(t){t.preventDefault(),jQuery("#updraftplus_db_decrypt").val(jQuery("#updraft_encryptionphrase").val()),jQuery("#updraft-manualdecrypt-modal").slideToggle()}),jQuery("#updraftplus-phpinfo").click(function(t){t.preventDefault(),updraft_iframe_modal("phpinfo",updraftlion.phpinfo)}),jQuery("#updraftplus-rawbackuphistory").click(function(t){t.preventDefault(),updraft_iframe_modal("rawbackuphistory",updraftlion.raw)}),jQuery("#updraft-navtab-status").click(function(t){t.preventDefault(),jQuery(this).addClass("nav-tab-active"),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-status-content").show(),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=1,updraft_activejobs_update(!0)}),jQuery("#updraft-navtab-expert").click(function(t){t.preventDefault(),jQuery(this).addClass("nav-tab-active"),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-expert-content").show(),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=4}),jQuery("#updraft-navtab-settings, #updraft-navtab-settings2, #updraft_backupnow_gotosettings").click(function(t){t.preventDefault(),jQuery(this).parents(".updraftmessage").remove(),jQuery("#updraft-backupnow-modal").dialog("close"),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-addons-content").hide(),jQuery("#updraft-navtab-settings-content").show(),jQuery("#updraft-navtab-settings").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-addons").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=3}),jQuery("#updraft-navtab-addons").click(function(t){t.preventDefault(),jQuery(this).addClass("b#nav-tab-active"),jQuery("#updraft-navtab-status-content").hide(),jQuery("#updraft-navtab-backups-content").hide(),jQuery("#updraft-navtab-expert-content").hide(),jQuery("#updraft-navtab-settings-content").hide(),jQuery("#updraft-navtab-addons-content").show(),jQuery("#updraft-navtab-addons").addClass("nav-tab-active"),jQuery("#updraft-navtab-expert").removeClass("nav-tab-active"),jQuery("#updraft-navtab-backups").removeClass("nav-tab-active"),jQuery("#updraft-navtab-status").removeClass("nav-tab-active"),jQuery("#updraft-navtab-settings").removeClass("nav-tab-active"),updraft_page_is_visible=1,updraft_console_focussed_tab=5}),jQuery("#updraft-navtab-backups").click(function(t){t.preventDefault(),updraft_openrestorepanel(1)}),updraft_send_command("ping",null,function(t,e){"success"==e&&"pong"!=t&&t.indexOf("pong")>=0&&(jQuery("#updraft-navtab-backups-content .ud-whitespace-warning").show(),console.log("UpdraftPlus: Extra output warning: response (which should be just (string)'pong') follows."),console.log(t))},{json_parse:!1,type:"GET"});try{"undefined"!=typeof updraft_plupload_config&&u()}catch(g){console.log(g)}if(jQuery("#updraftplus_httpget_go").click(function(t){t.preventDefault(),d(0)}),jQuery("#updraftplus_httpget_gocurl").click(function(t){t.preventDefault(),d(1)}),jQuery("#updraftplus_callwpaction_go").click(function(t){t.preventDefault(),params={wpaction:jQuery("#updraftplus_callwpaction").val()},updraft_send_command("call_wordpress_action",params,function(t){t.e?alert(t.e):t.s||(t.r?jQuery("#updraftplus_callwpaction_results").html(t.r):(console.log(t),alert(updraftlion.jsonnotunderstood)))})}),jQuery("#updraft_activejobs_table").on("click",".updraft_jobinfo_delete",function(t){t.preventDefault();var e=jQuery(this).data("jobid");e?updraft_activejobs_delete(e):console.log("UpdraftPlus: A stop job link was clicked, but the Job ID could not be found")}),jQuery("#updraft_activejobs_table, #updraft-navtab-backups-content .updraft_existing_backups, #updraft-backupnow-inpage-modal").on("click",".updraft-log-link",function(t){t.preventDefault();var e=jQuery(this).data("jobid");e?updraft_popuplog(e):console.log("UpdraftPlus: A log link was clicked, but the Job ID could not be found")}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click","button.choose-components-button",function(t){var e=jQuery(this).data("entities"),a=jQuery(this).data("backup_timestamp"),r=jQuery(this).data("showdata");s(e,a,r)}),"initiate_restore"==i("udaction")){var h=i("entities"),m=i("backup_timestamp"),v=i("showdata");s(h,m,v)}jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click",".updraft-delete-link",function(t){t.preventDefault();var e=jQuery(this).data("hasremote"),a=jQuery(this).data("nonce").toString(),r=jQuery(this).data("key").toString();a?updraft_delete(r,a,e):console.log("UpdraftPlus: A delete link was clicked, but the Job ID could not be found")}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("click","button.updraft_download_button",function(t){t.preventDefault();var e="uddlstatus_",a=jQuery(this).data("backup_timestamp"),r=jQuery(this).data("what"),n=".ud_downloadstatus",o=jQuery(this).data("set_contents"),u=jQuery(this).data("prettydate"),d=!0;updraft_downloader(e,a,r,n,o,u,d)}),jQuery("#updraft-navtab-backups-content .updraft_existing_backups").on("dblclick",".updraft_existingbackup_date",function(t){t.preventDefault();var e=jQuery(this).data("rawbackup");null!=e&&""!=e&&updraft_html_modal(e,updraftlion.raw,780,500)})}),jQuery(document).ready(function(t){var e="#updraft-navtab-settings-content ";t(e+"#updraftvault_settings_cell").on("click",".updraftvault_backtostart",function(a){a.preventDefault(),t(e+"#updraftvault_settings_showoptions").slideUp(),t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_connected").slideUp(),t(e+"#updraftvault_settings_default").slideDown()}),t(e+"#updraftvault_settings_connect input").keypress(function(a){if(13==a.which)return t(e+"#updraftvault_connect_go").click(),!1}),t(e+"#updraftvault_settings_cell").on("click","#updraftvault_recountquota",function(a){a.preventDefault(),t(e+"#updraftvault_recountquota").html(updraftlion.counting);try{updraft_send_command("vault_recountquota",{instance_id:t("#updraftvault_settings_connect").data("instance_id")},function(a){t(e+"#updraftvault_recountquota").html(updraftlion.updatequotacount),a.hasOwnProperty("html")&&(t(e+"#updraftvault_settings_connected").html(a.html),a.hasOwnProperty("connected")&&(a.connected?(t(e+"#updraftvault_settings_default").hide(),t(e+"#updraftvault_settings_connected").show()):(t(e+"#updraftvault_settings_connected").hide(),t(e+"#updraftvault_settings_default").show())))})}catch(r){t(e+"#updraftvault_recountquota").html(updraftlion.updatequotacount),console.log(r)}}),t(e+"#updraftvault_settings_cell").on("click","#updraftvault_disconnect",function(a){a.preventDefault(),t(e+"#updraftvault_disconnect").html(updraftlion.disconnecting);try{updraft_send_command("vault_disconnect",{immediate_echo:!0,instance_id:t("#updraftvault_settings_connect").data("instance_id")},function(a){t(e+"#updraftvault_disconnect").html(updraftlion.disconnect),a.hasOwnProperty("html")&&(t(e+"#updraftvault_settings_connected").html(a.html).slideUp(),t(e+"#updraftvault_settings_default").slideDown())})}catch(r){t(e+"#updraftvault_disconnect").html(updraftlion.disconnect),console.log(r)}}),t(e+"#updraftvault_connect").click(function(a){a.preventDefault(),t(e+"#updraftvault_settings_default").slideUp(),t(e+"#updraftvault_settings_connect").slideDown()}),t(e+"#updraftvault_showoptions").click(function(a){a.preventDefault(),t(e+"#updraftvault_settings_default").slideUp(),t(e+"#updraftvault_settings_showoptions").slideDown()}),t(e+"#updraftvault_connect_go").click(function(a){return t(e+"#updraftvault_connect_go").html(updraftlion.connecting),updraft_send_command("vault_connect",{email:t("#updraftvault_email").val(),pass:t("#updraftvault_pass").val(),instance_id:t("#updraftvault_settings_connect").data("instance_id")},function(a,r,n){t(e+"#updraftvault_connect_go").html(updraftlion.connect),a.hasOwnProperty("e")?(updraft_html_modal('<h4 style="margin-top:0px; padding-top:0px;">'+updraftlion.errornocolon+"</h4><p>"+a.e+"</p>",updraftlion.disconnect,400,250),a.hasOwnProperty("code")&&"no_quota"==a.code&&(t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_default").slideDown())):a.hasOwnProperty("connected")&&a.connected&&a.hasOwnProperty("html")?(t(e+"#updraftvault_settings_connect").slideUp(),t(e+"#updraftvault_settings_connected").html(a.html).slideDown()):(console.log(a),alert(updraftlion.unexpectedresponse+" "+n))}),!1})}),jQuery(document).ready(function(t){function e(){var t=new plupload.Uploader(updraft_plupload_config2);t.bind("Init",function(t){var e=jQuery("#plupload-upload-ui2");t.features.dragdrop?(e.addClass("drag-drop"),jQuery("#drag-drop-area2").bind("dragover.wp-uploader",function(){e.addClass("drag-over")}).bind("dragleave.wp-uploader, drop.wp-uploader",function(){e.removeClass("drag-over")})):(e.removeClass("drag-drop"),jQuery("#drag-drop-area2").unbind(".wp-uploader"))}),t.init(),t.bind("FilesAdded",function(e,a){plupload.each(a,function(e){return/^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-db([0-9]+)?\.(gz\.crypt)$/i.test(e.name)?void jQuery("#filelist2").append('<div class="file" id="'+e.id+'"><b>'+e.name+"</b> (<span>"+plupload.formatSize(0)+"</span>/"+plupload.formatSize(e.size)+') <div class="fileprogress"></div></div>'):(alert(e.name+": "+updraftlion.notdba),void t.removeFile(e))}),e.refresh(),e.start()}),t.bind("UploadProgress",function(t,e){jQuery("#"+e.id+" .fileprogress").width(e.percent+"%"),jQuery("#"+e.id+" span").html(plupload.formatSize(parseInt(e.size*e.percent/100)))}),t.bind("Error",function(t,e){"-200"==e.code?err_makesure="\n"+updraftlion.makesure2:err_makesure=updraftlion.makesure,alert(updraftlion.uploaderr+" (code "+e.code+") : "+e.message+" "+err_makesure)}),t.bind("FileUploaded",function(t,e,a){"200"==a.status?"ERROR:"==a.response.substring(0,6)?alert(updraftlion.uploaderror+" "+a.response.substring(6)):"OK:"==a.response.substring(0,3)?(bkey=a.response.substring(3),jQuery("#"+e.id+" .fileprogress").hide(),jQuery("#"+e.id).append(updraftlion.uploaded+' <a href="?page=updraftplus&action=downloadfile&updraftplus_file='+bkey+"&decrypt_key="+encodeURIComponent(jQuery("#updraftplus_db_decrypt").val())+'">'+updraftlion.followlink+"</a> "+updraftlion.thiskey+" "+jQuery("#updraftplus_db_decrypt").val().replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"))):alert(updraftlion.unknownresp+" "+a.response):alert(updraftlion.ukrespstatus+" "+a.code)})}try{"undefined"!=typeof updraft_plupload_config2&&e()}catch(a){console.log(a)}jQuery("#updraft-hidethis").remove(),updraft_remote_storage_tabs_setup()}),jQuery(document).ready(function(t){function e(){var t=r("object"),e=new Date;t=JSON.stringify({version:"1.12.40",epoch_date:e.getTime(),local_date:e.toLocaleString(),network_site_url:updraftlion.network_site_url,data:t});var a=document.body.appendChild(document.createElement("a"));a.setAttribute("download","updraftplus-settings.json"),a.setAttribute("style","display:none;"),a.setAttribute("href","data:text/json;charset=UTF-8,"+encodeURIComponent(t)),a.click()}function a(e){var a,r=decodeURIComponent(e);try{a=ud_parse_json(r)}catch(o){return t.unblockUI(),jQuery("#import_settings").val(""),console.log(r),console.log(o),void alert(updraftlion.import_invalid_json_file)}if(window.confirm(updraftlion.importing_data_from+" "+r.network_site_url+"\n"+updraftlion.exported_on+" "+r.local_date+"\n"+updraftlion.continue_import)){var u=JSON.stringify(a.data);updraft_send_command("importsettings",{settings:u,updraftplus_version:updraftlion.updraftplus_version
|
3 |
+
},function(e){var a=n(e);!a.hasOwnProperty("saved")||a.saved?(updraft_settings_form_changed=!1,location.replace(updraftlion.updraft_settings_url)):(t.unblockUI(),a.hasOwnProperty("error_message")&&a.error_message&&alert(a.error_message))},{action:"updraft_importsettings",nonce:updraftplus_settings_nonce,json_parse:!1})}else t.unblockUI()}function r(e){var a="",e="undefined"==typeof e?"string":e;return"object"==e?a=t("#updraft-navtab-settings-content form input[name!='action'][name!='option_page'][name!='_wpnonce'][name!='_wp_http_referer'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select, #updraft-navtab-settings-content form input[type=checkbox]").serializeJSON({checkboxUncheckedValue:"0",useIntKeysAsArrayIndex:!0}):(a=t("#updraft-navtab-settings-content form input[name!='action'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select").serialize(),t.each(t("#updraft-navtab-settings-content form input[type=checkbox]").filter(function(e){return 0==t(this).prop("checked")}),function(e,r){var n="0";a+="&"+t(r).attr("name")+"="+n})),a}function n(e){try{var a=ud_parse_json(e),r=(a.messages,a.backup_dir.writable),n=a.backup_dir.message,o=a.backup_dir.button_title}catch(u){return console.log(u),console.log(e),alert(updraftlion.jsonnotunderstood),t.unblockUI(),{}}if(a.hasOwnProperty("changed")){console.log("UpdraftPlus: savesettings: some values were changed after being filtered"),console.log(a.changed);for(prop in a.changed)if("object"==typeof a.changed[prop])for(innerprop in a.changed[prop])t("[name='"+innerprop+"']").is(":checkbox")||t("[name='"+prop+"["+innerprop+"]']").val(a.changed[prop][innerprop]);else t("[name='"+prop+"']").is(":checkbox")||t("[name='"+prop+"']").val(a.changed[prop])}return t("#updraft_writable_mess").html(n),0==r?(t("#updraft-backupnow-button").attr("disabled","disabled"),t("#updraft-backupnow-button").attr("title",o),t(".backupdirrow").css("display","table-row")):(t("#updraft-backupnow-button").removeAttr("disabled"),t("#updraft-backupnow-button").removeAttr("title")),a.hasOwnProperty("updraft_include_more_path")&&t("#backupnow_includefiles_moreoptions").html(a.updraft_include_more_path),a.hasOwnProperty("backup_now_message")&&t("#backupnow_remote_container").html(a.backup_now_message),t(".updraftmessage").remove(),t("#updraft_backup_started").before(a.messages),t("#next-backup-table-inner").html(a.scheduled),a}function o(){var t=!1;if(jQuery("#updraft-authenticate-modal-innards").html(""),jQuery("div[class*=updraft_authenticate_] a.updraft_authlink").each(function(){jQuery("#updraft-authenticate-modal-innards").append('<p><a href="'+jQuery(this).attr("href")+'">'+jQuery(this).html()+"</a></p>"),t=!0}),t){var e={};e[updraftlion.cancel]=function(){jQuery(this).dialog("close")},jQuery("#updraft-authenticate-modal").dialog({autoOpen:!0,modal:!0,resizable:!1,draggable:!1,buttons:e,width:"auto"}).dialog("open")}}var u=new Image;u.src=updraftlion.ud_url+"/images/udlogo-rotating.gif",t("#updraft-navtab-settings-content input.updraft_include_entity").change(function(e){var a=t(this).attr("id"),r=t(this).is(":checked"),n="#backupnow_files_"+a;t(n).prop("checked",r)}),t("#updraftplus-settings-save").click(function(e){e.preventDefault(),t.blockUI({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.saving+"</div>"});var a=r("string");updraft_send_command("savesettings",{settings:a,updraftplus_version:updraftlion.updraftplus_version},function(e){n(e),t("#updraft-wrap .fade").delay(6e3).fadeOut(2e3),t("html, body").animate({scrollTop:t("#updraft-wrap").offset().top},1e3,function(){o()}),t.unblockUI()},{action:"updraft_savesettings",nonce:updraftplus_settings_nonce,json_parse:!1})}),t("#updraftplus-settings-export").click(function(){updraft_settings_form_changed&&alert(updraftlion.unsaved_settings_export),e()}),t("#updraftplus-settings-import").click(function(){t.blockUI({message:'<div style="margin: 8px; font-size:150%;"><img src="'+updraftlion.ud_url+'/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>'+updraftlion.importing+"</div>"});var e=document.getElementById("import_settings");if(0==e.files.length)return alert(updraftlion.import_select_file),void t.unblockUI();var r=e.files[0],n=new FileReader;n.onload=function(){a(this.result)},n.readAsText(r)})}),jQuery(document).ready(function(t){jQuery("#updraft-restore-modal").on("change","#updraft_restorer_charset",function(e){if(t("#updraft_restorer_charset").length&&t("#updraft_restorer_collate").length&&t("#collate_change_on_charset_selection_data").length){var a=t("#updraft_restorer_charset").val();t("#updraft_restorer_collate option").show(),t("#updraft_restorer_collate option[data-charset!="+a+"]").hide(),updraft_send_command("collate_change_on_charset_selection",{collate_change_on_charset_selection_data:t("#collate_change_on_charset_selection_data").val(),updraft_restorer_charset:a,updraft_restorer_collate:t("#updraft_restorer_collate").val()},function(e){e.hasOwnProperty("is_action_required")&&1==e.is_action_required&&e.hasOwnProperty("similar_type_collate")&&t("#updraft_restorer_collate").val(e.similar_type_collate)})}})});
|
@@ -375,7 +375,7 @@ class UpdraftPlus_Notices extends Updraft_Notices {
|
|
375 |
return false;
|
376 |
}
|
377 |
|
378 |
-
protected function check_notice_dismissed($dismiss_time){
|
379 |
|
380 |
$time_now = defined('UPDRAFTPLUS_NOTICES_FORCE_TIME') ? UPDRAFTPLUS_NOTICES_FORCE_TIME : time();
|
381 |
|
375 |
return false;
|
376 |
}
|
377 |
|
378 |
+
protected function check_notice_dismissed($dismiss_time) {
|
379 |
|
380 |
$time_now = defined('UPDRAFTPLUS_NOTICES_FORCE_TIME') ? UPDRAFTPLUS_NOTICES_FORCE_TIME : time();
|
381 |
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
if (!defined('UPDRAFTPLUS_DIR')) die('No access.');
|
4 |
+
|
5 |
+
/**
|
6 |
+
* Handles UpdraftVault Commands to pull Amazon S3 Bucket credentials
|
7 |
+
* from user's UpdraftVault and some default filters for per page display
|
8 |
+
*
|
9 |
+
* @method array get_credentials()
|
10 |
+
*/
|
11 |
+
class UpdraftCentral_UpdraftVault_Commands extends UpdraftCentral_Commands {
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Gets the Amazon S3 Credentials
|
15 |
+
*
|
16 |
+
* Extract the needed credentials to connect to the user's Amazon S3 Bucket
|
17 |
+
* by pulling this info from the UpdraftVault server.
|
18 |
+
*
|
19 |
+
* @return array $result - An array containing the Amazon S3 settings/config if successful,
|
20 |
+
* otherwise, it will contain the error details/info of the generated error.
|
21 |
+
*/
|
22 |
+
public function get_credentials() {
|
23 |
+
global $updraftplus;
|
24 |
+
|
25 |
+
$storage_objects_and_ids = $updraftplus->get_storage_objects_and_ids(array('updraftvault'));
|
26 |
+
|
27 |
+
// UpdraftVault isn't expected to have multiple options currently, so we just grab the first instance_id in the settings and use the options from that. If in future we do decide we want to make UpdraftVault multiple options then we will need to update this part of the code e.g a instance_id needs to be passed in and used by the following lines of code.
|
28 |
+
if (isset($storage_objects_and_ids['updraftvault']['instance_settings'])) {
|
29 |
+
$instance_id = key($storage_objects_and_ids['updraftvault']['instance_settings']);
|
30 |
+
$opts = $storage_objects_and_ids['updraftvault']['instance_settings'][$instance_id];
|
31 |
+
$vault = $storage_objects_and_ids['updraftvault']['object'];
|
32 |
+
$vault->set_options($opts, false, $instance_id);
|
33 |
+
} else {
|
34 |
+
if (!class_exists('UpdraftPlus_BackupModule_updraftvault')) include_once(UPDRAFTPLUS_DIR.'/methods/updraftvault.php');
|
35 |
+
$vault = new UpdraftPlus_BackupModule_updraftvault();
|
36 |
+
}
|
37 |
+
|
38 |
+
$result = $vault->get_config();
|
39 |
+
|
40 |
+
if (isset($result['error']) && !empty($result['error'])) {
|
41 |
+
$result = array('error' => true, 'message' => $result['error']['message'], 'values' => $result['error']['values']);
|
42 |
+
}
|
43 |
+
|
44 |
+
return $this->_response($result);
|
45 |
+
}
|
46 |
+
}
|
@@ -11,77 +11,168 @@ msgstr ""
|
|
11 |
"Language: af_ZA\n"
|
12 |
"Project-Id-Version: UpdraftPlus\n"
|
13 |
|
14 |
-
#: src/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
16 |
msgstr ""
|
17 |
|
18 |
-
#: src/class-updraftplus.php:
|
19 |
msgid "Your chosen character set to use instead:"
|
20 |
msgstr ""
|
21 |
|
22 |
-
#: src/class-updraftplus.php:
|
23 |
msgid "You can choose another suitable character set instead and continue with the restoration at your own risk."
|
24 |
msgstr ""
|
25 |
|
26 |
-
#: src/class-updraftplus.php:
|
27 |
msgid "The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import."
|
28 |
msgid_plural "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import."
|
29 |
msgstr[0] ""
|
30 |
msgstr[1] ""
|
31 |
|
32 |
-
#: src/central/bootstrap.php:
|
33 |
msgid "Create another key"
|
34 |
msgstr ""
|
35 |
|
36 |
-
#: src/central/bootstrap.php:
|
37 |
msgid "UpdraftCentral dashboard connection details"
|
38 |
msgstr ""
|
39 |
|
40 |
-
#: src/central/bootstrap.php:
|
41 |
msgid "Next"
|
42 |
msgstr ""
|
43 |
|
44 |
-
#: src/central/bootstrap.php:
|
45 |
-
msgid "the UpdraftCentral dashboard plugin"
|
46 |
-
msgstr ""
|
47 |
-
|
48 |
-
#: src/central/bootstrap.php:490
|
49 |
-
msgid "On my own website on which I have installed"
|
50 |
-
msgstr ""
|
51 |
-
|
52 |
-
#: src/central/bootstrap.php:485
|
53 |
msgid "an account"
|
54 |
msgstr ""
|
55 |
|
56 |
-
#: src/central/bootstrap.php:
|
57 |
msgid "i.e. if you have %s there"
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: src/central/bootstrap.php:
|
61 |
msgid "Connect this site to an UpdraftCentral dashboard found at..."
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: src/central/bootstrap.php:
|
65 |
msgid "Manage existing keys (%d)..."
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: src/central/bootstrap.php:
|
69 |
msgid "There are no UpdraftCentral dashboards that can currently control this site."
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: src/central/bootstrap.php:
|
73 |
msgid "You can now control this site via your UpdraftCentral dashboard at %s."
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: src/central/bootstrap.php:
|
77 |
msgid "Detailed instructions for this can be found at %s"
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: src/central/bootstrap.php:
|
81 |
msgid "You now need to copy the key below and enter it at your %s."
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: src/admin.php:
|
85 |
msgid "Please enter a valid URL e.g http://example.com"
|
86 |
msgstr ""
|
87 |
|
@@ -133,31 +224,31 @@ msgstr ""
|
|
133 |
msgid "Account ID"
|
134 |
msgstr ""
|
135 |
|
136 |
-
#: src/class-updraftplus.php:
|
137 |
msgid "As long as your web hosting allows http (i.e. non-SSL access) or will forward requests to https (which is almost always the case), this is no problem. If that is not yet set up, then you should set it up, or use %s so that the non-https links are automatically replaced."
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: src/class-updraftplus.php:
|
141 |
msgid "the migrator add-on"
|
142 |
msgstr ""
|
143 |
|
144 |
-
#: src/class-updraftplus.php:
|
145 |
msgid "This restoration will work if you still have an SSL certificate (i.e. can use https) to access the site. Otherwise, you will want to use %s to search/replace the site address so that the site can be visited without https."
|
146 |
msgstr ""
|
147 |
|
148 |
-
#: src/class-updraftplus.php:
|
149 |
msgid "This backup set is of this site, but at the time of the backup you were using %s, whereas the site now uses %s."
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: src/class-updraftplus.php:
|
153 |
msgid "The website address in the backup set (%s) is slightly different from that of the site now (%s). This is not expected to be a problem for restoring the site, as long as visits to the former address still reach the site."
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: src/methods/googledrive.php:
|
157 |
msgid "To de-authorize UpdraftPlus (all sites) from accessing your Google Drive, follow this link to your Google account settings."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: src/methods/googledrive.php:
|
161 |
msgid "Follow this link to remove this site's settings for %s."
|
162 |
msgstr ""
|
163 |
|
@@ -165,29 +256,31 @@ msgstr ""
|
|
165 |
msgid "UpdraftPlus debug mode is on: detailed debugging data follows."
|
166 |
msgstr ""
|
167 |
|
168 |
-
#: src/admin.php:
|
169 |
msgid "Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file."
|
170 |
msgstr ""
|
171 |
|
172 |
-
#: src/admin.php:
|
173 |
-
#: src/class-updraftplus.php:
|
|
|
174 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
175 |
msgstr ""
|
176 |
|
177 |
-
#: src/admin.php:
|
178 |
-
#: src/class-updraftplus.php:
|
|
|
179 |
msgid "A PHP exception (%s) has occurred: %s"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#: src/addons/googlecloud.php:
|
183 |
msgid "South-east Australia"
|
184 |
msgstr ""
|
185 |
|
186 |
-
#: src/addons/googlecloud.php:
|
187 |
msgid "South-east Asia"
|
188 |
msgstr ""
|
189 |
|
190 |
-
#: src/addons/googlecloud.php:
|
191 |
msgid "North-east Asia"
|
192 |
msgstr ""
|
193 |
|
@@ -219,7 +312,7 @@ msgstr ""
|
|
219 |
msgid "Select Files"
|
220 |
msgstr ""
|
221 |
|
222 |
-
#: src/methods/cloudfiles.php:
|
223 |
msgid "Rackspace Storage Region"
|
224 |
msgstr ""
|
225 |
|
@@ -231,19 +324,19 @@ msgstr ""
|
|
231 |
msgid "Instant and secure logon with a wave of your phone."
|
232 |
msgstr ""
|
233 |
|
234 |
-
#: src/backup.php:
|
235 |
msgid "As previously warned (see: %s), encryption is no longer a feature of the free edition of UpdraftPlus"
|
236 |
msgstr ""
|
237 |
|
238 |
-
#: src/admin.php:
|
239 |
msgid "Value"
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: src/admin.php:
|
243 |
msgid "Did not know how to delete from this cloud service."
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: src/addons/sftp.php:
|
247 |
msgid "Encrypted login failed; trying non-encrypted"
|
248 |
msgstr ""
|
249 |
|
@@ -251,7 +344,7 @@ msgstr ""
|
|
251 |
msgid "__Check this box to use Amazon's server-side encryption"
|
252 |
msgstr ""
|
253 |
|
254 |
-
#: src/addons/azure.php:
|
255 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
256 |
msgstr ""
|
257 |
|
@@ -259,15 +352,15 @@ msgstr ""
|
|
259 |
msgid "Stored at: %s"
|
260 |
msgstr ""
|
261 |
|
262 |
-
#: src/methods/cloudfiles.php:
|
263 |
msgid "Cloud Files"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#: src/admin.php:
|
267 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
268 |
msgstr ""
|
269 |
|
270 |
-
#: src/admin.php:
|
271 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
272 |
msgstr ""
|
273 |
|
@@ -284,87 +377,87 @@ msgstr ""
|
|
284 |
msgid "Extra database"
|
285 |
msgstr ""
|
286 |
|
287 |
-
#: src/admin.php:
|
288 |
msgid "Press here to download or browse"
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: src/admin.php:
|
292 |
msgid "Error: invalid path"
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: src/admin.php:
|
296 |
msgid "An error occurred when fetching storage module options: "
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: src/admin.php:
|
300 |
msgid "Loading log file"
|
301 |
msgstr ""
|
302 |
|
303 |
-
#: src/admin.php:
|
304 |
msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
|
305 |
msgstr ""
|
306 |
|
307 |
-
#: src/admin.php:
|
308 |
msgid "Search"
|
309 |
msgstr ""
|
310 |
|
311 |
-
#: src/admin.php:
|
312 |
msgid "Select a file to view information about it"
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: src/admin.php:
|
316 |
msgid "Browsing zip file"
|
317 |
msgstr ""
|
318 |
|
319 |
-
#: src/admin.php:
|
320 |
msgid "With UpdraftPlus Premium, you can directly download individual files from here."
|
321 |
msgstr ""
|
322 |
|
323 |
-
#: src/admin.php:
|
324 |
msgid "Browse contents"
|
325 |
msgstr ""
|
326 |
|
327 |
-
#: src/restorer.php:
|
328 |
msgid "Skipped tables:"
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: src/class-updraftplus.php:
|
332 |
msgid "This database backup has the following WordPress tables excluded: %s"
|
333 |
msgstr ""
|
334 |
|
335 |
-
#: src/admin.php:
|
336 |
msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: src/admin.php:
|
340 |
msgid "All WordPress tables will be backed up."
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: src/admin.php:
|
344 |
msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: src/admin.php:
|
348 |
msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: src/admin.php:
|
352 |
msgid "The available memory on the server."
|
353 |
msgstr ""
|
354 |
|
355 |
-
#: src/admin.php:
|
356 |
msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
|
357 |
msgstr ""
|
358 |
|
359 |
-
#: src/admin.php:
|
360 |
msgid "The file failed to upload. Please check the following:"
|
361 |
msgstr ""
|
362 |
|
363 |
-
#: src/admin.php:
|
364 |
msgid "HTTP code:"
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: src/admin.php:
|
368 |
msgid "You have chosen to backup a database, but no tables have been selected"
|
369 |
msgstr ""
|
370 |
|
@@ -660,31 +753,31 @@ msgstr ""
|
|
660 |
msgid "Apache modules"
|
661 |
msgstr ""
|
662 |
|
663 |
-
#: src/includes/updraftplus-notices.php:
|
664 |
msgid "Summer sale - 20% off UpdraftPlus Premium until July 31st"
|
665 |
msgstr ""
|
666 |
|
667 |
-
#: src/includes/updraftplus-notices.php:
|
668 |
msgid "Spring sale - 20% off UpdraftPlus Premium until April 31st"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: src/includes/updraftplus-notices.php:
|
672 |
msgid "Happy New Year - 20% off UpdraftPlus Premium until January 1st"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: src/includes/updraftplus-notices.php:
|
676 |
msgid "Christmas sale - 20% off UpdraftPlus Premium until December 25th"
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: src/includes/updraftplus-notices.php:
|
680 |
-
#: src/includes/updraftplus-notices.php:
|
681 |
-
#: src/includes/updraftplus-notices.php:
|
682 |
-
#: src/includes/updraftplus-notices.php:
|
683 |
-
#: src/includes/updraftplus-notices.php:
|
684 |
msgid "To benefit, use this discount code:"
|
685 |
msgstr ""
|
686 |
|
687 |
-
#: src/includes/updraftplus-notices.php:
|
688 |
msgid "Black Friday - 20% off UpdraftPlus Premium until November 30th"
|
689 |
msgstr ""
|
690 |
|
@@ -828,35 +921,35 @@ msgstr ""
|
|
828 |
msgid "Export / import settings"
|
829 |
msgstr ""
|
830 |
|
831 |
-
#: src/restorer.php:
|
832 |
msgid "Processing table (%s)"
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: src/restorer.php:
|
836 |
msgid "Backup of: %s"
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: src/methods/googledrive.php:
|
840 |
msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: src/methods/dropbox.php:
|
844 |
msgid "%s de-authentication"
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: src/methods/dropbox.php:
|
848 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: src/methods/dropbox.php:
|
852 |
msgid "Follow this link to deauthenticate with %s."
|
853 |
msgstr ""
|
854 |
|
855 |
-
#: src/central/bootstrap.php:
|
856 |
msgid "UpdraftCentral enables control of your WordPress sites (including management of backups and updates) from a central dashboard."
|
857 |
msgstr ""
|
858 |
|
859 |
-
#: src/backup.php:
|
860 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
861 |
msgstr ""
|
862 |
|
@@ -864,51 +957,51 @@ msgstr ""
|
|
864 |
msgid "You have selected a remote storage option which has an authorization step to complete:"
|
865 |
msgstr ""
|
866 |
|
867 |
-
#: src/admin.php:
|
868 |
msgid "Remote files deleted:"
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: src/admin.php:
|
872 |
msgid "Local files deleted:"
|
873 |
msgstr ""
|
874 |
|
875 |
-
#: src/admin.php:
|
876 |
msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: src/admin.php:
|
880 |
msgid "remote files deleted"
|
881 |
msgstr ""
|
882 |
|
883 |
-
#: src/admin.php:
|
884 |
msgid "Complete"
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: src/admin.php:
|
888 |
msgid "Do you want to carry out the import?"
|
889 |
msgstr ""
|
890 |
|
891 |
-
#: src/admin.php:
|
892 |
msgid "Which was exported on:"
|
893 |
msgstr ""
|
894 |
|
895 |
-
#: src/admin.php:
|
896 |
msgid "This will import data from:"
|
897 |
msgstr ""
|
898 |
|
899 |
-
#: src/admin.php:
|
900 |
msgid "Importing..."
|
901 |
msgstr ""
|
902 |
|
903 |
-
#: src/admin.php:
|
904 |
msgid "You have not yet selected a file to import."
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: src/admin.php:
|
908 |
msgid "Your export file will be of your displayed settings, not your saved ones."
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: src/admin.php:
|
912 |
msgid "template not found"
|
913 |
msgstr ""
|
914 |
|
@@ -916,28 +1009,28 @@ msgstr ""
|
|
916 |
msgid "US East (Ohio)"
|
917 |
msgstr ""
|
918 |
|
919 |
-
#: src/addons/onedrive.php:
|
920 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
921 |
msgstr ""
|
922 |
|
923 |
-
#: src/addons/onedrive.php:
|
924 |
msgid "Account is not authorized (%s)."
|
925 |
msgstr ""
|
926 |
|
927 |
-
#: src/addons/onedrive.php:
|
928 |
msgid "Your IP address:"
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: src/addons/onedrive.php:
|
932 |
-
#: src/udaddons/updraftplus-addons.php:
|
933 |
msgid "To remove any block, please go here."
|
934 |
msgstr ""
|
935 |
|
936 |
-
#: src/addons/onedrive.php:
|
937 |
msgid "An error response was received; HTTP code:"
|
938 |
msgstr ""
|
939 |
|
940 |
-
#: src/includes/class-commands.php:
|
941 |
msgid "%s add-on not found"
|
942 |
msgstr ""
|
943 |
|
@@ -949,47 +1042,47 @@ msgstr ""
|
|
949 |
msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
|
950 |
msgstr ""
|
951 |
|
952 |
-
#: src/admin.php:
|
953 |
msgid "To fix this problem go here."
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: src/admin.php:
|
957 |
msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: src/admin.php:
|
961 |
msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: src/addons/webdav.php:
|
965 |
msgid "Path"
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: src/addons/webdav.php:
|
969 |
msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: src/addons/webdav.php:
|
973 |
msgid "Enter any path in the field below."
|
974 |
msgstr ""
|
975 |
|
976 |
-
#: src/addons/webdav.php:
|
977 |
msgid "A host name cannot contain a slash."
|
978 |
msgstr ""
|
979 |
|
980 |
-
#: src/addons/webdav.php:
|
981 |
msgid "Protocol (SSL or not)"
|
982 |
msgstr ""
|
983 |
|
984 |
-
#: src/addons/webdav.php:
|
985 |
msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
|
986 |
msgstr ""
|
987 |
|
988 |
-
#: src/udaddons/updraftplus-addons.php:
|
989 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
990 |
msgstr ""
|
991 |
|
992 |
-
#: src/methods/s3.php:
|
993 |
msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
|
994 |
msgstr ""
|
995 |
|
@@ -1013,73 +1106,73 @@ msgstr ""
|
|
1013 |
msgid "FAQs"
|
1014 |
msgstr ""
|
1015 |
|
1016 |
-
#: src/central/bootstrap.php:
|
1017 |
msgid "More information..."
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: src/central/bootstrap.php:
|
1021 |
msgid "Use the alternative method for making a connection with the dashboard."
|
1022 |
msgstr ""
|
1023 |
|
1024 |
-
#: src/central/bootstrap.php:
|
1025 |
msgid "Key size: %d bits"
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: src/central/bootstrap.php:
|
1029 |
msgid "Public key was sent to:"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
-
#: src/backup.php:
|
1033 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
-
#: src/backup.php:
|
1037 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
-
#: src/addons/migrator.php:
|
1041 |
msgid "Create key"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
-
#: src/addons/migrator.php:
|
1045 |
msgid "slower, strongest"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
-
#: src/addons/migrator.php:
|
1049 |
msgid "recommended"
|
1050 |
msgstr ""
|
1051 |
|
1052 |
-
#: src/addons/migrator.php:
|
1053 |
msgid "%s bytes"
|
1054 |
msgstr ""
|
1055 |
|
1056 |
-
#: src/addons/migrator.php:
|
1057 |
msgid "faster (possibility for slow PHP installs)"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: src/addons/migrator.php:
|
1061 |
msgid "easy to break, fastest"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: src/addons/migrator.php:
|
1065 |
-
#: src/addons/migrator.php:
|
1066 |
-
#: src/central/bootstrap.php:
|
1067 |
msgid "%s bits"
|
1068 |
msgstr ""
|
1069 |
|
1070 |
-
#: src/addons/migrator.php:
|
1071 |
msgid "Encryption key size:"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: src/addons/migrator.php:
|
1075 |
msgid "Enter your chosen name"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: src/addons/migrator.php:
|
1079 |
msgid "Create a key: give this key a unique name (e.g. indicate the site it is for), then press \"Create Key\":"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: src/methods/googledrive.php:
|
1083 |
msgid "Upload expected to fail: the %s limit for any single file is %s, whereas this file is %s GB (%d bytes)"
|
1084 |
msgstr ""
|
1085 |
|
@@ -1099,7 +1192,7 @@ msgstr ""
|
|
1099 |
msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
|
1100 |
msgstr ""
|
1101 |
|
1102 |
-
#: src/class-updraftplus.php:
|
1103 |
msgid "Size: %s MB"
|
1104 |
msgstr ""
|
1105 |
|
@@ -1111,7 +1204,7 @@ msgstr ""
|
|
1111 |
msgid "Now"
|
1112 |
msgstr ""
|
1113 |
|
1114 |
-
#: src/class-updraftplus.php:
|
1115 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
1116 |
msgstr ""
|
1117 |
|
@@ -1119,13 +1212,13 @@ msgstr ""
|
|
1119 |
msgid "(tap on an icon to select or unselect)"
|
1120 |
msgstr ""
|
1121 |
|
1122 |
-
#: src/methods/updraftvault.php:
|
1123 |
-
#: src/methods/updraftvault.php:
|
1124 |
msgid "%s per year"
|
1125 |
msgstr ""
|
1126 |
|
1127 |
-
#: src/methods/updraftvault.php:
|
1128 |
-
#: src/methods/updraftvault.php:
|
1129 |
msgid "or (annual discount)"
|
1130 |
msgstr ""
|
1131 |
|
@@ -1133,111 +1226,107 @@ msgstr ""
|
|
1133 |
msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
|
1134 |
msgstr ""
|
1135 |
|
1136 |
-
#: src/class-updraftplus.php:
|
1137 |
msgid "The given file was not found, or could not be read."
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#: src/central/bootstrap.php:
|
1141 |
msgid "UpdraftCentral (Remote Control)"
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: src/central/bootstrap.php:
|
1145 |
msgid "View recent UpdraftCentral log events"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: src/central/bootstrap.php:
|
1149 |
-
msgid "URL of mothership"
|
1150 |
-
msgstr ""
|
1151 |
-
|
1152 |
-
#: src/central/bootstrap.php:504
|
1153 |
msgid "Enter any description"
|
1154 |
msgstr ""
|
1155 |
|
1156 |
-
#: src/central/bootstrap.php:
|
1157 |
msgid "Description"
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: src/central/bootstrap.php:
|
1161 |
msgid "Delete..."
|
1162 |
msgstr ""
|
1163 |
|
1164 |
-
#: src/central/bootstrap.php:
|
1165 |
msgid "Created:"
|
1166 |
msgstr ""
|
1167 |
|
1168 |
-
#: src/central/bootstrap.php:
|
1169 |
msgid "Access this site as user:"
|
1170 |
msgstr ""
|
1171 |
|
1172 |
-
#: src/central/bootstrap.php:
|
1173 |
msgid "Details"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
-
#: src/central/bootstrap.php:
|
1177 |
msgid "Key description"
|
1178 |
msgstr ""
|
1179 |
|
1180 |
-
#: src/central/bootstrap.php:
|
1181 |
msgid "A key was created, but the attempt to register it with %s was unsuccessful - please try again later."
|
1182 |
msgstr ""
|
1183 |
|
1184 |
-
#: src/central/bootstrap.php:
|
1185 |
msgid "An invalid URL was entered"
|
1186 |
msgstr ""
|
1187 |
|
1188 |
-
#: src/central/bootstrap.php:
|
1189 |
msgid "Close..."
|
1190 |
msgstr ""
|
1191 |
|
1192 |
-
#: src/central/bootstrap.php:
|
1193 |
msgid "This connection appears to already have been made."
|
1194 |
msgstr ""
|
1195 |
|
1196 |
-
#: src/central/bootstrap.php:
|
1197 |
msgid "You must visit this link in the same browser and login session as you created the key in."
|
1198 |
msgstr ""
|
1199 |
|
1200 |
-
#: src/central/bootstrap.php:
|
1201 |
msgid "You must visit this URL in the same browser and login session as you created the key in."
|
1202 |
msgstr ""
|
1203 |
|
1204 |
-
#: src/central/bootstrap.php:
|
1205 |
msgid "You are not logged into this WordPress site in your web browser."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
-
#: src/central/bootstrap.php:
|
1209 |
msgid "The key referred to was unknown."
|
1210 |
msgstr ""
|
1211 |
|
1212 |
-
#: src/central/bootstrap.php:
|
1213 |
msgid "A new UpdraftCentral connection has not been made."
|
1214 |
msgstr ""
|
1215 |
|
1216 |
-
#: src/central/bootstrap.php:
|
1217 |
msgid "An UpdraftCentral connection has been made successfully."
|
1218 |
msgstr ""
|
1219 |
|
1220 |
-
#: src/central/bootstrap.php:
|
1221 |
msgid "UpdraftCentral Connection"
|
1222 |
msgstr ""
|
1223 |
|
1224 |
-
#: src/backup.php:
|
1225 |
msgid "The backup was aborted by the user"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
-
#: src/admin.php:
|
1229 |
msgid "Your settings have been saved."
|
1230 |
msgstr ""
|
1231 |
|
1232 |
-
#: src/admin.php:
|
1233 |
msgid "Total backup size:"
|
1234 |
msgstr ""
|
1235 |
|
1236 |
-
#: src/admin.php:
|
1237 |
msgid "stop"
|
1238 |
msgstr ""
|
1239 |
|
1240 |
-
#: src/admin.php:
|
1241 |
msgid "The backup has finished running"
|
1242 |
msgstr ""
|
1243 |
|
@@ -1263,27 +1352,27 @@ msgstr ""
|
|
1263 |
msgid "calculate"
|
1264 |
msgstr ""
|
1265 |
|
1266 |
-
#: src/admin.php:
|
1267 |
msgid "You should save your changes to ensure that they are used for making your backup."
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: src/admin.php:
|
1271 |
msgid "We requested to delete the file, but could not understand the server's response"
|
1272 |
msgstr ""
|
1273 |
|
1274 |
-
#: src/admin.php:
|
1275 |
msgid "Please enter a valid URL"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#: src/admin.php:
|
1279 |
msgid "Saving..."
|
1280 |
msgstr ""
|
1281 |
|
1282 |
-
#: src/admin.php:
|
1283 |
msgid "Error: the server sent us a response which we did not understand."
|
1284 |
msgstr ""
|
1285 |
|
1286 |
-
#: src/admin.php:
|
1287 |
msgid "Fetching..."
|
1288 |
msgstr ""
|
1289 |
|
@@ -1291,11 +1380,11 @@ msgstr ""
|
|
1291 |
msgid "Asia Pacific (Seoul)"
|
1292 |
msgstr ""
|
1293 |
|
1294 |
-
#: src/restorer.php:
|
1295 |
msgid "Uploads URL:"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
-
#: src/backup.php:
|
1299 |
msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
|
1300 |
msgstr ""
|
1301 |
|
@@ -1303,24 +1392,24 @@ msgstr ""
|
|
1303 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1304 |
msgstr ""
|
1305 |
|
1306 |
-
#: src/class-updraftplus.php:
|
1307 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
1308 |
msgstr ""
|
1309 |
|
1310 |
-
#: src/class-updraftplus.php:
|
1311 |
msgid "Please read this link for important information on this process."
|
1312 |
msgstr ""
|
1313 |
|
1314 |
-
#: src/class-updraftplus.php:
|
1315 |
msgid "It will be imported as a new site."
|
1316 |
msgstr ""
|
1317 |
|
1318 |
-
#: src/admin.php:
|
1319 |
#: src/templates/wp-admin/notices/horizontal-notice.php:18
|
1320 |
msgid "Dismiss"
|
1321 |
msgstr ""
|
1322 |
|
1323 |
-
#: src/admin.php:
|
1324 |
msgid "Please fill in the required information."
|
1325 |
msgstr ""
|
1326 |
|
@@ -1340,40 +1429,40 @@ msgstr ""
|
|
1340 |
msgid "Which site to restore"
|
1341 |
msgstr ""
|
1342 |
|
1343 |
-
#: src/addons/migrator.php:
|
1344 |
msgid "Error when creating new site at your chosen address:"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/addons/migrator.php:
|
1348 |
msgid "Required information for restoring this backup was not given (%s)"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: src/addons/migrator.php:
|
1352 |
msgid "Attribute imported content to user"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: src/addons/migrator.php:
|
1356 |
msgid "You must use lower-case letters or numbers for the site path, only."
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: src/addons/migrator.php:
|
1360 |
msgid "This feature is not compatible with %s"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: src/addons/migrator.php:
|
1364 |
msgid "Importing a single site into a multisite install"
|
1365 |
msgstr ""
|
1366 |
|
1367 |
-
#: src/addons/migrator.php:
|
1368 |
msgid "other content from wp-content"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#: src/addons/migrator.php:
|
1372 |
msgid "WordPress core"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: src/addons/migrator.php:
|
1376 |
-
#: src/addons/migrator.php:
|
1377 |
msgid "You selected %s to be included in the restoration - this cannot / should not be done when importing a single site into a network."
|
1378 |
msgstr ""
|
1379 |
|
@@ -1381,11 +1470,11 @@ msgstr ""
|
|
1381 |
msgid "Call WordPress action:"
|
1382 |
msgstr ""
|
1383 |
|
1384 |
-
#: src/admin.php:
|
1385 |
msgid "Your saved settings also affect what is backed up - e.g. files excluded."
|
1386 |
msgstr ""
|
1387 |
|
1388 |
-
#: src/admin.php:
|
1389 |
msgid "Skipping: this archive was already restored."
|
1390 |
msgstr ""
|
1391 |
|
@@ -1417,51 +1506,51 @@ msgstr ""
|
|
1417 |
msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
|
1418 |
msgstr ""
|
1419 |
|
1420 |
-
#: src/admin.php:
|
1421 |
msgid "Send this backup to remote storage"
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: src/admin.php:
|
1425 |
msgid "Check out UpdraftPlus Vault."
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: src/admin.php:
|
1429 |
msgid "Not got any remote storage?"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#: src/admin.php:
|
1433 |
msgid "settings"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
-
#: src/admin.php:
|
1437 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
-
#: src/admin.php:
|
1441 |
msgid "Include any files in the backup"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
-
#: src/admin.php:
|
1445 |
msgid "Include the database in the backup"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
-
#: src/admin.php:
|
1449 |
msgid "Continue restoration"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
-
#: src/admin.php:
|
1453 |
msgid "You have an unfinished restoration operation, begun %s ago."
|
1454 |
msgstr ""
|
1455 |
|
1456 |
-
#: src/admin.php:
|
1457 |
msgid "Unfinished restoration"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
-
#: src/admin.php:
|
1461 |
msgid "%s minutes, %s seconds"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
-
#: src/admin.php:
|
1465 |
msgid "Backup Contents And Schedule"
|
1466 |
msgstr ""
|
1467 |
|
@@ -1469,142 +1558,136 @@ msgstr ""
|
|
1469 |
msgid "Premium / Extensions"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
-
#: src/admin.php:
|
1473 |
msgid "Sufficient information about the in-progress restoration operation could not be found."
|
1474 |
msgstr ""
|
1475 |
|
1476 |
-
#: src/addons/morefiles.php:55, src/admin.php:
|
1477 |
msgctxt "(verb)"
|
1478 |
msgid "Download"
|
1479 |
msgstr ""
|
1480 |
|
1481 |
-
#: src/admin.php:
|
1482 |
msgid "You have chosen to backup files, but no file entities have been selected"
|
1483 |
msgstr ""
|
1484 |
|
1485 |
-
#: src/admin.php:
|
1486 |
msgid "Extensions"
|
1487 |
msgstr ""
|
1488 |
|
1489 |
-
#: src/admin.php:
|
1490 |
msgid "Advanced Tools"
|
1491 |
msgstr ""
|
1492 |
|
1493 |
-
#: src/addons/googlecloud.php:
|
1494 |
msgid "Bucket location"
|
1495 |
msgstr ""
|
1496 |
|
1497 |
-
#: src/addons/googlecloud.php:
|
1498 |
msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
|
1499 |
msgstr ""
|
1500 |
|
1501 |
-
#: src/addons/googlecloud.php:
|
1502 |
msgid "This setting applies only when a new bucket is being created."
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: src/addons/googlecloud.php:
|
1506 |
msgid "You must use a bucket name that is unique, for all %s users."
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: src/addons/googlecloud.php:
|
1510 |
msgid "Do not confuse %s with %s - they are separate things."
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: src/addons/googlecloud.php:
|
1514 |
msgid "You do not have access to this bucket"
|
1515 |
msgstr ""
|
1516 |
|
1517 |
-
#: src/addons/googlecloud.php:
|
1518 |
-
#: src/addons/googlecloud.php:
|
1519 |
msgid "Western Europe"
|
1520 |
msgstr ""
|
1521 |
|
1522 |
-
#: src/addons/googlecloud.php:
|
1523 |
msgid "Eastern Asia-Pacific"
|
1524 |
msgstr ""
|
1525 |
|
1526 |
-
#: src/addons/googlecloud.php:
|
1527 |
msgid "Western United States"
|
1528 |
msgstr ""
|
1529 |
|
1530 |
-
#: src/addons/googlecloud.php:
|
1531 |
msgid "Eastern United States"
|
1532 |
msgstr ""
|
1533 |
|
1534 |
-
#: src/addons/googlecloud.php:
|
1535 |
msgid " Eastern United States"
|
1536 |
msgstr ""
|
1537 |
|
1538 |
-
#: src/addons/googlecloud.php:
|
1539 |
msgid "Central United States"
|
1540 |
msgstr ""
|
1541 |
|
1542 |
-
#: src/addons/googlecloud.php:
|
1543 |
msgid "European Union"
|
1544 |
msgstr ""
|
1545 |
|
1546 |
-
#: src/addons/googlecloud.php:
|
1547 |
msgid "Asia Pacific"
|
1548 |
msgstr ""
|
1549 |
|
1550 |
-
#: src/addons/googlecloud.php:
|
1551 |
-
#: src/addons/googlecloud.php:
|
1552 |
msgid "multi-region location"
|
1553 |
msgstr ""
|
1554 |
|
1555 |
-
#: src/addons/googlecloud.php:
|
1556 |
msgid "United States"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
-
#: src/addons/googlecloud.php:
|
1560 |
msgid "Nearline"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
-
#: src/addons/googlecloud.php:
|
1564 |
msgid "Durable reduced availability"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
-
#: src/addons/googlecloud.php:
|
|
|
1568 |
msgid "Standard"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
-
#: src/addons/azure.php:
|
1572 |
msgid "container"
|
1573 |
msgstr ""
|
1574 |
|
1575 |
-
#: src/addons/azure.php:
|
1576 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
1577 |
msgstr ""
|
1578 |
|
1579 |
-
#: src/addons/azure.php:
|
1580 |
msgid "optional"
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: src/addons/azure.php:
|
1584 |
-
msgid "Prefix"
|
1585 |
-
msgstr ""
|
1586 |
-
|
1587 |
-
#: src/addons/azure.php:571
|
1588 |
msgid "See Microsoft's guidelines on container naming by following this link."
|
1589 |
msgstr ""
|
1590 |
|
1591 |
-
#: src/addons/azure.php:
|
1592 |
msgid "Enter the path of the %s you wish to use here."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: src/addons/azure.php:
|
1596 |
msgid "This is not your Azure login - see the instructions if needing more guidance."
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: src/addons/azure.php:
|
1600 |
-
|
1601 |
-
msgstr ""
|
1602 |
-
|
1603 |
-
#: src/addons/azure.php:559, src/addons/azure.php:563
|
1604 |
msgid "Azure"
|
1605 |
msgstr ""
|
1606 |
|
1607 |
-
#: src/addons/azure.php:
|
1608 |
msgid "Create Azure credentials in your Azure developer console."
|
1609 |
msgstr ""
|
1610 |
|
@@ -1616,23 +1699,23 @@ msgstr ""
|
|
1616 |
msgid "Could not access container"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
-
#: src/class-updraftplus.php:
|
1620 |
msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: src/backup.php:
|
1624 |
msgid "the options table was not found"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: src/backup.php:
|
1628 |
msgid "no options or sitemeta table was found"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: src/backup.php:
|
1632 |
msgid "The database backup appears to have failed"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: src/backup.php:
|
1636 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
1637 |
msgstr ""
|
1638 |
|
@@ -1644,39 +1727,39 @@ msgstr ""
|
|
1644 |
msgid "Not installed"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
-
#: src/addons/googlecloud.php:
|
1648 |
msgid "Storage class"
|
1649 |
msgstr ""
|
1650 |
|
1651 |
-
#: src/addons/googlecloud.php:
|
1652 |
msgid "See Google's guidelines on bucket naming by following this link."
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: src/addons/googlecloud.php:
|
1656 |
msgid "Enter the name of the %s bucket you wish to use here."
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: src/addons/googlecloud.php:
|
1660 |
msgid "Bucket"
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: src/addons/googlecloud.php:
|
1664 |
msgid "Otherwise, you can leave it blank."
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: src/addons/googlecloud.php:
|
1668 |
msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: src/addons/googlecloud.php:
|
1672 |
msgid "Enter the ID of the %s project you wish to use here."
|
1673 |
msgstr ""
|
1674 |
|
1675 |
-
#: src/addons/googlecloud.php:
|
1676 |
msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
-
#: src/addons/googlecloud.php:
|
1680 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
1681 |
msgstr ""
|
1682 |
|
@@ -1684,31 +1767,31 @@ msgstr ""
|
|
1684 |
msgid "Project ID"
|
1685 |
msgstr ""
|
1686 |
|
1687 |
-
#: src/addons/googlecloud.php:
|
1688 |
msgid "You must save and authenticate before you can test your settings."
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: src/addons/googlecloud.php:
|
1692 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
|
1693 |
msgstr ""
|
1694 |
|
1695 |
-
#: src/addons/googlecloud.php:
|
1696 |
-
#: src/addons/googlecloud.php:
|
1697 |
msgid "You do not have access to this bucket."
|
1698 |
msgstr ""
|
1699 |
|
1700 |
-
#: src/addons/googlecloud.php:
|
1701 |
-
#: src/addons/googlecloud.php:
|
1702 |
-
#: src/addons/googlecloud.php:
|
1703 |
-
#: src/addons/googlecloud.php:
|
1704 |
-
#: src/addons/googlecloud.php:
|
1705 |
-
#: src/addons/googlecloud.php:
|
1706 |
msgid "Google Cloud"
|
1707 |
msgstr ""
|
1708 |
|
1709 |
-
#: src/addons/googlecloud.php:
|
1710 |
-
#: src/addons/googlecloud.php:
|
1711 |
-
#: src/addons/googlecloud.php:
|
1712 |
msgid "%s Service Exception."
|
1713 |
msgstr ""
|
1714 |
|
@@ -1745,35 +1828,35 @@ msgstr ""
|
|
1745 |
msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
|
1746 |
msgstr ""
|
1747 |
|
1748 |
-
#: src/admin.php:
|
1749 |
msgid "Backup sets removed:"
|
1750 |
msgstr ""
|
1751 |
|
1752 |
-
#: src/admin.php:
|
1753 |
msgid "Processing..."
|
1754 |
msgstr ""
|
1755 |
|
1756 |
-
#: src/admin.php:
|
1757 |
msgid "For backups older than"
|
1758 |
msgstr ""
|
1759 |
|
1760 |
-
#: src/admin.php:
|
1761 |
msgid "week(s)"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#: src/admin.php:
|
1765 |
msgid "hour(s)"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#: src/admin.php:
|
1769 |
msgid "day(s)"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: src/admin.php:
|
1773 |
msgid "in the month"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: src/admin.php:
|
1777 |
msgid "day"
|
1778 |
msgstr ""
|
1779 |
|
@@ -1785,39 +1868,39 @@ msgstr ""
|
|
1785 |
msgid "Add an additional retention rule..."
|
1786 |
msgstr ""
|
1787 |
|
1788 |
-
#: src/restorer.php:
|
1789 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
1790 |
msgstr ""
|
1791 |
|
1792 |
-
#: src/restorer.php:
|
1793 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
1794 |
msgstr ""
|
1795 |
|
1796 |
-
#: src/methods/updraftvault.php:
|
1797 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
1798 |
msgstr ""
|
1799 |
|
1800 |
-
#: src/class-updraftplus.php:
|
1801 |
msgid "You must upgrade MySQL to be able to use this database."
|
1802 |
msgstr ""
|
1803 |
|
1804 |
-
#: src/class-updraftplus.php:
|
1805 |
msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: src/admin.php:
|
1809 |
msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
|
1810 |
msgstr ""
|
1811 |
|
1812 |
-
#: src/methods/updraftvault.php:
|
1813 |
msgid "Don't know your email address, or forgotten your password?"
|
1814 |
msgstr ""
|
1815 |
|
1816 |
-
#: src/methods/updraftvault.php:
|
1817 |
msgid "Enter your UpdraftPlus.Com email / password here to connect:"
|
1818 |
msgstr ""
|
1819 |
|
1820 |
-
#: src/methods/updraftvault.php:
|
1821 |
msgid "Read the FAQs here."
|
1822 |
msgstr ""
|
1823 |
|
@@ -1829,132 +1912,133 @@ msgstr ""
|
|
1829 |
msgid "Server-side encryption"
|
1830 |
msgstr ""
|
1831 |
|
1832 |
-
#: src/methods/updraftvault.php:
|
1833 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: src/admin.php:
|
1837 |
msgid "Go to the remote storage settings in order to connect."
|
1838 |
msgstr ""
|
1839 |
|
1840 |
-
#: src/admin.php:
|
1841 |
msgid "%s has been chosen for remote storage, but you are not currently connected."
|
1842 |
msgstr ""
|
1843 |
|
1844 |
-
#: src/methods/updraftvault.php:
|
1845 |
msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: src/admin.php:
|
1849 |
msgid "Update quota count"
|
1850 |
msgstr ""
|
1851 |
|
1852 |
-
#: src/admin.php:
|
1853 |
msgid "Counting..."
|
1854 |
msgstr ""
|
1855 |
|
1856 |
-
#: src/admin.php:
|
1857 |
msgid "Disconnecting..."
|
1858 |
msgstr ""
|
1859 |
|
1860 |
-
#: src/admin.php:
|
1861 |
msgid "Connecting..."
|
1862 |
msgstr ""
|
1863 |
|
1864 |
-
#: src/methods/updraftvault.php:
|
1865 |
msgid "Refresh current status"
|
1866 |
msgstr ""
|
1867 |
|
1868 |
-
#: src/methods/updraftvault.php:
|
1869 |
-
#: src/methods/updraftvault.php:
|
1870 |
msgid "Get more quota"
|
1871 |
msgstr ""
|
1872 |
|
1873 |
-
#: src/methods/updraftvault.php:
|
1874 |
-
#: src/methods/updraftvault.php:
|
1875 |
msgid "Current use:"
|
1876 |
msgstr ""
|
1877 |
|
1878 |
-
#: src/methods/updraftvault.php:
|
1879 |
msgid "You can get more quota here"
|
1880 |
msgstr ""
|
1881 |
|
1882 |
-
#: src/methods/updraftvault.php:
|
1883 |
msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
|
1884 |
msgstr ""
|
1885 |
|
1886 |
-
#: src/admin.php:
|
|
|
1887 |
msgid "Disconnect"
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: src/methods/updraftvault.php:
|
1891 |
msgid "Quota:"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#: src/methods/updraftvault.php:
|
1895 |
msgid "Vault owner"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#: src/methods/updraftvault.php:
|
1899 |
msgid "Well done - there's nothing more needed to set up."
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: src/methods/updraftvault.php:
|
1903 |
msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: src/methods/updraftvault.php:
|
1907 |
msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#: src/methods/updraftvault.php:
|
1911 |
msgid "Go here for help"
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#: src/methods/updraftvault.php:
|
1915 |
msgid "E-mail"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: src/central/bootstrap.php:
|
1919 |
-
#: src/methods/updraftvault.php:
|
1920 |
msgid "Back..."
|
1921 |
msgstr ""
|
1922 |
|
1923 |
-
#: src/methods/updraftvault.php:
|
1924 |
msgid "Subscriptions can be cancelled at any time."
|
1925 |
msgstr ""
|
1926 |
|
1927 |
-
#: src/methods/updraftvault.php:
|
1928 |
-
#: src/methods/updraftvault.php:
|
1929 |
msgid "%s per quarter"
|
1930 |
msgstr ""
|
1931 |
|
1932 |
-
#: src/central/bootstrap.php:
|
1933 |
-
#: src/methods/updraftvault.php:
|
1934 |
msgid "Read more about it here."
|
1935 |
msgstr ""
|
1936 |
|
1937 |
-
#: src/methods/updraftvault.php:
|
1938 |
msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
|
1939 |
msgstr ""
|
1940 |
|
1941 |
-
#: src/methods/updraftvault.php:
|
1942 |
msgid "Already purchased space?"
|
1943 |
msgstr ""
|
1944 |
|
1945 |
-
#: src/methods/updraftvault.php:
|
1946 |
msgid "Show the options"
|
1947 |
msgstr ""
|
1948 |
|
1949 |
-
#: src/methods/updraftvault.php:
|
1950 |
msgid "First time user?"
|
1951 |
msgstr ""
|
1952 |
|
1953 |
-
#: src/methods/updraftvault.php:
|
1954 |
msgid "Press a button to get started."
|
1955 |
msgstr ""
|
1956 |
|
1957 |
-
#: src/methods/updraftvault.php:
|
1958 |
msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
|
1959 |
msgstr ""
|
1960 |
|
@@ -1975,11 +2059,11 @@ msgid "Updraft Vault"
|
|
1975 |
msgstr ""
|
1976 |
|
1977 |
#: src/addons/azure.php:388, src/addons/backblaze.php:464,
|
1978 |
-
#: src/addons/googlecloud.php:
|
1979 |
msgid "Delete failed:"
|
1980 |
msgstr ""
|
1981 |
|
1982 |
-
#: src/backup.php:
|
1983 |
msgid "The zip engine returned the message: %s."
|
1984 |
msgstr ""
|
1985 |
|
@@ -1999,75 +2083,75 @@ msgstr ""
|
|
1999 |
msgid "Allow download"
|
2000 |
msgstr ""
|
2001 |
|
2002 |
-
#: src/addons/migrator.php:
|
2003 |
msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
|
2004 |
msgstr ""
|
2005 |
|
2006 |
-
#: src/addons/migrator.php:
|
2007 |
msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
|
2008 |
msgstr ""
|
2009 |
|
2010 |
-
#: src/addons/migrator.php:
|
2011 |
msgid "Existing keys"
|
2012 |
msgstr ""
|
2013 |
|
2014 |
-
#: src/addons/migrator.php:
|
2015 |
msgid "No keys to allow remote sites to connect have yet been created."
|
2016 |
msgstr ""
|
2017 |
|
2018 |
-
#: src/addons/migrator.php:
|
2019 |
msgid "Your new key:"
|
2020 |
msgstr ""
|
2021 |
|
2022 |
-
#: src/addons/migrator.php:
|
2023 |
msgid "To allow another site to send a backup to this site, create a key, and then press the 'Migrate' button on the sending site, and copy-and-paste the key there."
|
2024 |
msgstr ""
|
2025 |
|
2026 |
-
#: src/addons/migrator.php:
|
2027 |
msgid "So, to get the key for the remote site, open the 'Migrate' window on that site, scroll down, and you can create one there."
|
2028 |
msgstr ""
|
2029 |
|
2030 |
-
#: src/addons/migrator.php:
|
2031 |
msgid "Keys for this site are created in the section below the one you just pressed in."
|
2032 |
msgstr ""
|
2033 |
|
2034 |
-
#: src/addons/migrator.php:
|
2035 |
msgid "You must copy and paste this key now - it cannot be shown again."
|
2036 |
msgstr ""
|
2037 |
|
2038 |
-
#: src/addons/migrator.php:
|
2039 |
msgid "Key created successfully."
|
2040 |
msgstr ""
|
2041 |
|
2042 |
-
#: src/addons/migrator.php:
|
2043 |
msgid "A key with this name already exists; you must use a unique name."
|
2044 |
msgstr ""
|
2045 |
|
2046 |
-
#: src/addons/migrator.php:
|
2047 |
msgid "Also send this backup to the active remote storage locations"
|
2048 |
msgstr ""
|
2049 |
|
2050 |
-
#: src/addons/migrator.php:
|
2051 |
msgid "The site URL you are sending to (%s) looks like a local development website. If you are sending from an external network, it is likely that a firewall will be blocking this."
|
2052 |
msgstr ""
|
2053 |
|
2054 |
-
#: src/addons/migrator.php:
|
2055 |
msgid "site not found"
|
2056 |
msgstr ""
|
2057 |
|
2058 |
-
#: src/addons/migrator.php:
|
2059 |
msgid "Backup data will be sent to:"
|
2060 |
msgstr ""
|
2061 |
|
2062 |
-
#: src/addons/migrator.php:
|
2063 |
msgid "Restore an existing backup set onto this site"
|
2064 |
msgstr ""
|
2065 |
|
2066 |
-
#: src/addons/migrator.php:
|
2067 |
msgid "This site has no backups to restore from yet."
|
2068 |
msgstr ""
|
2069 |
|
2070 |
-
#: src/addons/reporting.php:
|
2071 |
msgid "Backup made by %s"
|
2072 |
msgstr ""
|
2073 |
|
@@ -2075,7 +2159,7 @@ msgstr ""
|
|
2075 |
msgid "This storage method does not allow downloading"
|
2076 |
msgstr ""
|
2077 |
|
2078 |
-
#: src/admin.php:
|
2079 |
msgid "(backup set imported from remote location)"
|
2080 |
msgstr ""
|
2081 |
|
@@ -2095,80 +2179,80 @@ msgstr ""
|
|
2095 |
msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
|
2096 |
msgstr ""
|
2097 |
|
2098 |
-
#: src/addons/migrator.php:
|
2099 |
msgid "Testing connection..."
|
2100 |
msgstr ""
|
2101 |
|
2102 |
-
#: src/admin.php:
|
2103 |
msgid "Deleting..."
|
2104 |
msgstr ""
|
2105 |
|
2106 |
-
#: src/admin.php:
|
2107 |
msgid "key name"
|
2108 |
msgstr ""
|
2109 |
|
2110 |
-
#: src/admin.php:
|
2111 |
msgid "Please give this key a name (e.g. indicate the site it is for):"
|
2112 |
msgstr ""
|
2113 |
|
2114 |
-
#: src/admin.php:
|
2115 |
msgid "Creating..."
|
2116 |
msgstr ""
|
2117 |
|
2118 |
-
#: src/addons/migrator.php:
|
2119 |
msgid "Or, receive a backup from a remote site"
|
2120 |
msgstr ""
|
2121 |
|
2122 |
-
#: src/addons/migrator.php:
|
2123 |
msgid "Paste key here"
|
2124 |
msgstr ""
|
2125 |
|
2126 |
-
#: src/addons/migrator.php:
|
2127 |
msgid "How do I get a site's key?"
|
2128 |
msgstr ""
|
2129 |
|
2130 |
-
#: src/addons/migrator.php:
|
2131 |
msgid "To add a site as a destination for sending to, enter that site's key below."
|
2132 |
msgstr ""
|
2133 |
|
2134 |
-
#: src/addons/migrator.php:
|
2135 |
msgid "Or, send a backup to another site"
|
2136 |
msgstr ""
|
2137 |
|
2138 |
-
#: src/addons/migrator.php:
|
2139 |
msgid "Send"
|
2140 |
msgstr ""
|
2141 |
|
2142 |
-
#: src/addons/migrator.php:
|
2143 |
msgid "Send to site:"
|
2144 |
msgstr ""
|
2145 |
|
2146 |
-
#: src/addons/migrator.php:
|
2147 |
msgid "No receiving sites have yet been added."
|
2148 |
msgstr ""
|
2149 |
|
2150 |
-
#: src/addons/migrator.php:
|
2151 |
msgid "It is for sending backups to the following site: "
|
2152 |
msgstr ""
|
2153 |
|
2154 |
-
#: src/addons/migrator.php:
|
2155 |
msgid "The key was successfully added."
|
2156 |
msgstr ""
|
2157 |
|
2158 |
-
#: src/addons/migrator.php:
|
2159 |
msgid "The entered key does not belong to a remote site (it belongs to this one)."
|
2160 |
msgstr ""
|
2161 |
|
2162 |
-
#: src/addons/migrator.php:
|
2163 |
-
#: src/addons/migrator.php:
|
2164 |
msgid "The entered key was corrupt - please try again."
|
2165 |
msgstr ""
|
2166 |
|
2167 |
-
#: src/addons/migrator.php:
|
2168 |
msgid "The entered key was the wrong length - please try again."
|
2169 |
msgstr ""
|
2170 |
|
2171 |
-
#: src/addons/migrator.php:
|
2172 |
msgid "key"
|
2173 |
msgstr ""
|
2174 |
|
@@ -2196,84 +2280,84 @@ msgstr ""
|
|
2196 |
msgid "FTP server"
|
2197 |
msgstr ""
|
2198 |
|
2199 |
-
#: src/addons/migrator.php:
|
2200 |
msgid "The UpdraftPlus Migrator modifies the restoration operation appropriately, to fit the backup data to the new site."
|
2201 |
msgstr ""
|
2202 |
|
2203 |
-
#: src/addons/migrator.php:
|
2204 |
msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
|
2205 |
msgstr ""
|
2206 |
|
2207 |
-
#: src/admin.php:
|
2208 |
msgid "Resetting..."
|
2209 |
msgstr ""
|
2210 |
|
2211 |
-
#: src/addons/migrator.php:
|
2212 |
msgid "Add site"
|
2213 |
msgstr ""
|
2214 |
|
2215 |
-
#: src/admin.php:
|
2216 |
msgid "Adding..."
|
2217 |
msgstr ""
|
2218 |
|
2219 |
-
#: src/udaddons/options.php:
|
2220 |
msgid "Claim not granted - perhaps you have already used this purchase somewhere else, or your paid period for downloading from updraftplus.com has expired?"
|
2221 |
msgstr ""
|
2222 |
|
2223 |
-
#: src/restorer.php:
|
2224 |
msgid "To use this backup, your database server needs to support the %s character set."
|
2225 |
msgstr ""
|
2226 |
|
2227 |
-
#: src/udaddons/updraftplus-addons.php:
|
2228 |
msgid "go here to change your password on updraftplus.com."
|
2229 |
msgstr ""
|
2230 |
|
2231 |
-
#: src/udaddons/updraftplus-addons.php:
|
2232 |
msgid "If you have forgotten your password "
|
2233 |
msgstr ""
|
2234 |
|
2235 |
-
#: src/udaddons/updraftplus-addons.php:
|
2236 |
msgid "Go here to re-enter your password."
|
2237 |
msgstr ""
|
2238 |
|
2239 |
-
#: src/addons/migrator.php:
|
2240 |
msgid "After pressing this button, you will be given the option to choose which components you wish to migrate"
|
2241 |
msgstr ""
|
2242 |
|
2243 |
-
#: src/addons/migrator.php:
|
2244 |
msgid "To import a backup set, go to the \"Existing Backups\" tab"
|
2245 |
msgstr ""
|
2246 |
|
2247 |
-
#: src/addons/migrator.php:
|
2248 |
msgid "To restore using any of the backup sets below, press the button."
|
2249 |
msgstr ""
|
2250 |
|
2251 |
-
#: src/admin.php:
|
2252 |
msgid "You have made changes to your settings, and not saved."
|
2253 |
msgstr ""
|
2254 |
|
2255 |
-
#: src/addons/onedrive.php:
|
2256 |
msgid "N.B. %s is not case-sensitive."
|
2257 |
msgstr ""
|
2258 |
|
2259 |
-
#: src/addons/onedrive.php:
|
2260 |
msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
|
2261 |
msgstr ""
|
2262 |
|
2263 |
-
#: src/addons/azure.php:
|
2264 |
-
#: src/addons/onedrive.php:
|
2265 |
msgid "For longer help, including screenshots, follow this link."
|
2266 |
msgstr ""
|
2267 |
|
2268 |
-
#: src/addons/onedrive.php:
|
2269 |
msgid "Create OneDrive credentials in your OneDrive developer console."
|
2270 |
msgstr ""
|
2271 |
|
2272 |
-
#: src/addons/onedrive.php:
|
2273 |
msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
|
2274 |
msgstr ""
|
2275 |
|
2276 |
-
#: src/addons/azure.php:
|
2277 |
msgid "Microsoft Azure is not compatible with sites hosted on a localhost or 127.0.0.1 URL - their developer console forbids these (current URL is: %s)."
|
2278 |
msgstr ""
|
2279 |
|
@@ -2281,12 +2365,12 @@ msgstr ""
|
|
2281 |
msgid "%s authorisation failed:"
|
2282 |
msgstr ""
|
2283 |
|
2284 |
-
#: src/addons/onedrive.php:
|
2285 |
-
#: src/addons/onedrive.php:
|
2286 |
msgid "OneDrive"
|
2287 |
msgstr ""
|
2288 |
|
2289 |
-
#: src/addons/onedrive.php:
|
2290 |
msgid "Please re-authorize the connection to your %s account."
|
2291 |
msgstr ""
|
2292 |
|
@@ -2294,7 +2378,7 @@ msgstr ""
|
|
2294 |
msgid "configure it here"
|
2295 |
msgstr ""
|
2296 |
|
2297 |
-
#: src/addons/onedrive.php:
|
2298 |
msgid "To remove the block, please go here."
|
2299 |
msgstr ""
|
2300 |
|
@@ -2439,7 +2523,7 @@ msgstr ""
|
|
2439 |
msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
|
2440 |
msgstr ""
|
2441 |
|
2442 |
-
#: src/methods/s3.php:875
|
2443 |
msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
|
2444 |
msgstr ""
|
2445 |
|
@@ -2451,19 +2535,19 @@ msgstr ""
|
|
2451 |
msgid "UpdraftPlus news, high-quality training materials for WordPress developers and site-owners, and general WordPress news. You can de-subscribe at any time."
|
2452 |
msgstr ""
|
2453 |
|
2454 |
-
#: src/addons/onedrive.php:
|
2455 |
-
#: src/methods/updraftvault.php:
|
2456 |
-
#: src/udaddons/updraftplus-addons.php:
|
2457 |
msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
|
2458 |
msgstr ""
|
2459 |
|
2460 |
-
#: src/addons/onedrive.php:
|
2461 |
-
#: src/udaddons/updraftplus-addons.php:
|
2462 |
msgid "It appears that your web server's IP Address (%s) is blocked."
|
2463 |
msgstr ""
|
2464 |
|
2465 |
-
#: src/addons/onedrive.php:
|
2466 |
-
#: src/udaddons/updraftplus-addons.php:
|
2467 |
msgid "UpdraftPlus.com has responded with 'Access Denied'."
|
2468 |
msgstr ""
|
2469 |
|
@@ -2514,7 +2598,7 @@ msgstr ""
|
|
2514 |
msgid "(at same time as files backup)"
|
2515 |
msgstr ""
|
2516 |
|
2517 |
-
#: src/admin.php:
|
2518 |
msgid "No backup has been completed"
|
2519 |
msgstr ""
|
2520 |
|
@@ -2573,16 +2657,16 @@ msgctxt "Uploader: Drop db.gz.crypt files here to upload them for decryption - o
|
|
2573 |
msgid "or"
|
2574 |
msgstr ""
|
2575 |
|
2576 |
-
#: src/admin.php:
|
2577 |
msgid "You did not select any components to restore. Please select at least one, and then try again."
|
2578 |
msgstr ""
|
2579 |
|
2580 |
-
#: src/addons/sftp.php:
|
2581 |
msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
|
2582 |
msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
|
2583 |
msgstr ""
|
2584 |
|
2585 |
-
#: src/addons/sftp.php:
|
2586 |
msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
|
2587 |
msgstr ""
|
2588 |
|
@@ -2591,7 +2675,7 @@ msgctxt "\"tenant\" is a term used with OpenStack storage - Google for \"OpenSta
|
|
2591 |
msgid "tenant"
|
2592 |
msgstr ""
|
2593 |
|
2594 |
-
#: src/methods/openstack2.php:
|
2595 |
msgctxt "Keystone and swauth are technical terms which cannot be translated"
|
2596 |
msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
|
2597 |
msgstr ""
|
@@ -2604,12 +2688,12 @@ msgstr ""
|
|
2604 |
msgid "Check this box to have a basic report sent to"
|
2605 |
msgstr ""
|
2606 |
|
2607 |
-
#: src/admin.php:
|
2608 |
msgctxt "i.e. Non-automatic"
|
2609 |
msgid "Manual"
|
2610 |
msgstr ""
|
2611 |
|
2612 |
-
#: src/restorer.php:
|
2613 |
msgctxt "The user is being told the number of times an error has happened, e.g. An error (27) occurred"
|
2614 |
msgid "An error (%s) occurred:"
|
2615 |
msgstr ""
|
@@ -2622,7 +2706,7 @@ msgstr ""
|
|
2622 |
msgid "Any other file/directory on your server that you wish to back up"
|
2623 |
msgstr ""
|
2624 |
|
2625 |
-
#: src/admin.php:
|
2626 |
msgid "For even more features and personal support, check out "
|
2627 |
msgstr ""
|
2628 |
|
@@ -2631,7 +2715,7 @@ msgid "Database decryption phrase"
|
|
2631 |
msgstr ""
|
2632 |
|
2633 |
#: src/addons/autobackup.php:143, src/addons/autobackup.php:1007,
|
2634 |
-
#: src/admin.php:
|
2635 |
msgid "Automatic backup before update"
|
2636 |
msgstr ""
|
2637 |
|
@@ -2716,7 +2800,7 @@ msgstr ""
|
|
2716 |
msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
|
2717 |
msgstr ""
|
2718 |
|
2719 |
-
#: src/admin.php:
|
2720 |
msgid "View Log"
|
2721 |
msgstr ""
|
2722 |
|
@@ -2733,7 +2817,7 @@ msgstr ""
|
|
2733 |
msgid "and retain this many scheduled backups"
|
2734 |
msgstr ""
|
2735 |
|
2736 |
-
#: src/admin.php:
|
2737 |
msgid "incremental backup; base backup: %s"
|
2738 |
msgstr ""
|
2739 |
|
@@ -2745,28 +2829,28 @@ msgstr ""
|
|
2745 |
msgid "Upload files into UpdraftPlus."
|
2746 |
msgstr ""
|
2747 |
|
2748 |
-
#: src/admin.php:
|
2749 |
#: src/templates/wp-admin/settings/tab-status.php:22
|
2750 |
msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
|
2751 |
msgstr ""
|
2752 |
|
2753 |
-
#: src/class-updraftplus.php:
|
2754 |
msgid "Backup label:"
|
2755 |
msgstr ""
|
2756 |
|
2757 |
-
#: src/addons/backblaze.php:189, src/admin.php:
|
2758 |
msgid "Error: unexpected file read fail"
|
2759 |
msgstr ""
|
2760 |
|
2761 |
-
#: src/backup.php:
|
2762 |
msgid "check your log for more details."
|
2763 |
msgstr ""
|
2764 |
|
2765 |
-
#: src/backup.php:
|
2766 |
msgid "your web hosting account appears to be full; please see: %s"
|
2767 |
msgstr ""
|
2768 |
|
2769 |
-
#: src/backup.php:
|
2770 |
msgid "A zip error occurred"
|
2771 |
msgstr ""
|
2772 |
|
@@ -2774,19 +2858,19 @@ msgstr ""
|
|
2774 |
msgid "Your label for this backup (optional)"
|
2775 |
msgstr ""
|
2776 |
|
2777 |
-
#: src/addons/googlecloud.php:
|
2778 |
msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
|
2779 |
msgstr ""
|
2780 |
|
2781 |
-
#: src/methods/updraftvault.php:
|
2782 |
msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
|
2783 |
msgstr ""
|
2784 |
|
2785 |
-
#: src/methods/updraftvault.php:
|
2786 |
msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
|
2787 |
msgstr ""
|
2788 |
|
2789 |
-
#: src/methods/updraftvault.php:
|
2790 |
msgid "You need to supply both an email address and a password"
|
2791 |
msgstr ""
|
2792 |
|
@@ -2794,36 +2878,36 @@ msgstr ""
|
|
2794 |
msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
|
2795 |
msgstr ""
|
2796 |
|
2797 |
-
#: src/class-updraftplus.php:
|
2798 |
msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
|
2799 |
msgstr ""
|
2800 |
|
2801 |
-
#: src/class-updraftplus.php:
|
2802 |
msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
|
2803 |
msgstr ""
|
2804 |
|
2805 |
-
#: src/addons/migrator.php:
|
2806 |
msgid "already done"
|
2807 |
msgstr ""
|
2808 |
|
2809 |
-
#: src/addons/migrator.php:
|
2810 |
msgid "skipped (not in list)"
|
2811 |
msgstr ""
|
2812 |
|
2813 |
-
#: src/addons/migrator.php:
|
2814 |
-
#: src/addons/migrator.php:
|
2815 |
msgid "Search and replacing table:"
|
2816 |
msgstr ""
|
2817 |
|
2818 |
-
#: src/addons/migrator.php:
|
2819 |
msgid "Enter a comma-separated list; otherwise, leave blank for all tables."
|
2820 |
msgstr ""
|
2821 |
|
2822 |
-
#: src/addons/migrator.php:
|
2823 |
msgid "These tables only"
|
2824 |
msgstr ""
|
2825 |
|
2826 |
-
#: src/addons/migrator.php:
|
2827 |
msgid "Rows per batch"
|
2828 |
msgstr ""
|
2829 |
|
@@ -2835,19 +2919,19 @@ msgstr ""
|
|
2835 |
msgid "You need to connect to receive future updates to UpdraftPlus."
|
2836 |
msgstr ""
|
2837 |
|
2838 |
-
#: src/class-updraftplus.php:
|
2839 |
msgid "Any support requests to do with %s should be raised with your web hosting company."
|
2840 |
msgstr ""
|
2841 |
|
2842 |
-
#: src/class-updraftplus.php:
|
2843 |
msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
|
2844 |
msgstr ""
|
2845 |
|
2846 |
-
#: src/class-updraftplus.php:
|
2847 |
msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
|
2848 |
msgstr ""
|
2849 |
|
2850 |
-
#: src/class-updraftplus.php:
|
2851 |
msgid "The site in this backup was running on a webserver with version %s of %s. "
|
2852 |
msgstr ""
|
2853 |
|
@@ -2876,7 +2960,7 @@ msgstr ""
|
|
2876 |
msgid "UpdraftPlus is on social media - check us out!"
|
2877 |
msgstr ""
|
2878 |
|
2879 |
-
#: src/admin.php:
|
2880 |
msgid "Why am I seeing this?"
|
2881 |
msgstr ""
|
2882 |
|
@@ -2888,15 +2972,15 @@ msgstr ""
|
|
2888 |
msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
|
2889 |
msgstr ""
|
2890 |
|
2891 |
-
#: src/admin.php:
|
2892 |
msgid "Start backup"
|
2893 |
msgstr ""
|
2894 |
|
2895 |
-
#: src/class-updraftplus.php:
|
2896 |
msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
|
2897 |
msgstr ""
|
2898 |
|
2899 |
-
#: src/admin.php:
|
2900 |
msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
|
2901 |
msgstr ""
|
2902 |
|
@@ -2904,11 +2988,11 @@ msgstr ""
|
|
2904 |
msgid "Unless you have a problem, you can completely ignore everything here."
|
2905 |
msgstr ""
|
2906 |
|
2907 |
-
#: src/admin.php:
|
2908 |
msgid "This file could not be uploaded"
|
2909 |
msgstr ""
|
2910 |
|
2911 |
-
#: src/admin.php:
|
2912 |
msgid "You will find more information about this in the Settings section."
|
2913 |
msgstr ""
|
2914 |
|
@@ -2928,15 +3012,15 @@ msgstr ""
|
|
2928 |
msgid "Memory limit"
|
2929 |
msgstr ""
|
2930 |
|
2931 |
-
#: src/class-updraftplus.php:
|
2932 |
msgid "restoration"
|
2933 |
msgstr ""
|
2934 |
|
2935 |
-
#: src/backup.php:
|
2936 |
msgid "Incremental"
|
2937 |
msgstr ""
|
2938 |
|
2939 |
-
#: src/backup.php:
|
2940 |
msgid "Full backup"
|
2941 |
msgstr ""
|
2942 |
|
@@ -2952,62 +3036,62 @@ msgstr ""
|
|
2952 |
msgid "Backup succeeded"
|
2953 |
msgstr ""
|
2954 |
|
2955 |
-
#: src/admin.php:
|
2956 |
#: src/updraftplus.php:99, src/updraftplus.php:100
|
2957 |
msgid "Every %s hours"
|
2958 |
msgstr ""
|
2959 |
|
2960 |
-
#: src/addons/migrator.php:
|
2961 |
msgid "search and replace"
|
2962 |
msgstr ""
|
2963 |
|
2964 |
-
#: src/addons/migrator.php:
|
2965 |
msgid "Go"
|
2966 |
msgstr ""
|
2967 |
|
2968 |
-
#: src/addons/migrator.php:
|
2969 |
msgid "A search/replace cannot be undone - are you sure you want to do this?"
|
2970 |
msgstr ""
|
2971 |
|
2972 |
-
#: src/addons/migrator.php:
|
2973 |
msgid "This can easily destroy your site; so, use it with care!"
|
2974 |
msgstr ""
|
2975 |
|
2976 |
-
#: src/addons/migrator.php:
|
2977 |
msgid "Replace with"
|
2978 |
msgstr ""
|
2979 |
|
2980 |
-
#: src/addons/migrator.php:
|
2981 |
msgid "Search for"
|
2982 |
msgstr ""
|
2983 |
|
2984 |
-
#: src/addons/migrator.php:
|
2985 |
#: src/templates/wp-admin/advanced/search-replace.php:7,
|
2986 |
#: src/templates/wp-admin/advanced/tools-menu.php:18
|
2987 |
msgid "Search / replace database"
|
2988 |
msgstr ""
|
2989 |
|
2990 |
-
#: src/addons/migrator.php:
|
2991 |
msgid "search term"
|
2992 |
msgstr ""
|
2993 |
|
2994 |
-
#: src/restorer.php:
|
2995 |
msgid "Too many database errors have occurred - aborting"
|
2996 |
msgstr ""
|
2997 |
|
2998 |
-
#: src/backup.php:
|
2999 |
msgid "read more at %s"
|
3000 |
msgstr ""
|
3001 |
|
3002 |
-
#: src/backup.php:
|
3003 |
msgid "Email reports created by UpdraftPlus (free edition) bring you the latest UpdraftPlus.com news"
|
3004 |
msgstr ""
|
3005 |
|
3006 |
-
#: src/methods/googledrive.php:
|
3007 |
msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
|
3008 |
msgstr ""
|
3009 |
|
3010 |
-
#: src/admin.php:
|
3011 |
msgid "You have not yet made any backups."
|
3012 |
msgstr ""
|
3013 |
|
@@ -3027,30 +3111,30 @@ msgstr ""
|
|
3027 |
msgid "Free disk space in account:"
|
3028 |
msgstr ""
|
3029 |
|
3030 |
-
#: src/admin.php:
|
3031 |
msgid "This button is disabled because your backup directory is not writable (see the settings)."
|
3032 |
msgstr ""
|
3033 |
|
3034 |
-
#: src/admin.php:
|
3035 |
#: src/includes/deprecated-actions.php:29,
|
3036 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:21,
|
3037 |
#: src/templates/wp-admin/settings/tab-bar.php:6
|
3038 |
msgid "Existing Backups"
|
3039 |
msgstr ""
|
3040 |
|
3041 |
-
#: src/admin.php:
|
3042 |
msgid "Current Status"
|
3043 |
msgstr ""
|
3044 |
|
3045 |
-
#: src/admin.php:
|
3046 |
msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
|
3047 |
msgstr ""
|
3048 |
|
3049 |
-
#: src/admin.php:
|
3050 |
msgid "To make a backup, just press the Backup Now button."
|
3051 |
msgstr ""
|
3052 |
|
3053 |
-
#: src/admin.php:
|
3054 |
msgid "Welcome to UpdraftPlus!"
|
3055 |
msgstr ""
|
3056 |
|
@@ -3122,24 +3206,24 @@ msgstr ""
|
|
3122 |
msgid "user"
|
3123 |
msgstr ""
|
3124 |
|
3125 |
-
#: src/class-updraftplus.php:
|
3126 |
msgid "External database (%s)"
|
3127 |
msgstr ""
|
3128 |
|
3129 |
-
#: src/methods/googledrive.php:
|
3130 |
msgid "Follow this link to your Google API Console, and there activate the Drive API and create a Client ID in the API Access section."
|
3131 |
msgstr ""
|
3132 |
|
3133 |
-
#: src/methods/googledrive.php:
|
3134 |
msgid "failed to access parent folder"
|
3135 |
msgstr ""
|
3136 |
|
3137 |
-
#: src/addons/googlecloud.php:
|
3138 |
-
#: src/addons/onedrive.php:
|
3139 |
msgid "However, subsequent access attempts failed:"
|
3140 |
msgstr ""
|
3141 |
|
3142 |
-
#: src/admin.php:
|
3143 |
msgid "External database"
|
3144 |
msgstr ""
|
3145 |
|
@@ -3171,7 +3255,7 @@ msgstr ""
|
|
3171 |
msgid "use UpdraftPlus Premium"
|
3172 |
msgstr ""
|
3173 |
|
3174 |
-
#: src/class-updraftplus.php:
|
3175 |
msgid "Decryption failed. The database file is encrypted."
|
3176 |
msgstr ""
|
3177 |
|
@@ -3179,62 +3263,62 @@ msgstr ""
|
|
3179 |
msgid "Only the WordPress database can be restored; you will need to deal with the external database manually."
|
3180 |
msgstr ""
|
3181 |
|
3182 |
-
#: src/restorer.php:
|
3183 |
-
#: src/restorer.php:
|
3184 |
msgid "An error occurred on the first %s command - aborting run"
|
3185 |
msgstr ""
|
3186 |
|
3187 |
-
#: src/addons/moredatabase.php:105, src/backup.php:
|
3188 |
msgid "Connection failed: check your access details, that the database server is up, and that the network connection is not firewalled."
|
3189 |
msgstr ""
|
3190 |
|
3191 |
-
#: src/backup.php:
|
3192 |
msgid "database connection attempt failed."
|
3193 |
msgstr ""
|
3194 |
|
3195 |
-
#: src/addons/migrator.php:
|
3196 |
msgid "Warning: the database's home URL (%s) is different to what we expected (%s)"
|
3197 |
msgstr ""
|
3198 |
|
3199 |
-
#: src/addons/google-enhanced.php:
|
3200 |
msgid "In %s, path names are case sensitive."
|
3201 |
msgstr ""
|
3202 |
|
3203 |
-
#: src/addons/azure.php:
|
3204 |
-
#: src/addons/onedrive.php:
|
3205 |
msgid "If you leave it blank, then the backup will be placed in the root of your %s"
|
3206 |
msgstr ""
|
3207 |
|
3208 |
-
#: src/addons/google-enhanced.php:
|
3209 |
-
#: src/addons/onedrive.php:
|
3210 |
msgid "e.g. %s"
|
3211 |
msgstr ""
|
3212 |
|
3213 |
-
#: src/addons/google-enhanced.php:
|
3214 |
msgid "Enter the path of the %s folder you wish to use here."
|
3215 |
msgstr ""
|
3216 |
|
3217 |
-
#: src/
|
3218 |
msgid "Container"
|
3219 |
msgstr ""
|
3220 |
|
3221 |
-
#: src/methods/openstack2.php:
|
3222 |
msgid "Leave this blank, and a default will be chosen."
|
3223 |
msgstr ""
|
3224 |
|
3225 |
-
#: src/methods/openstack2.php:
|
3226 |
msgid "Tenant"
|
3227 |
msgstr ""
|
3228 |
|
3229 |
-
#: src/methods/openstack2.php:
|
3230 |
msgid "Follow this link for more information"
|
3231 |
msgstr ""
|
3232 |
|
3233 |
-
#: src/methods/openstack2.php:
|
3234 |
msgid "authentication URI"
|
3235 |
msgstr ""
|
3236 |
|
3237 |
-
#: src/methods/openstack2.php:
|
3238 |
msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
|
3239 |
msgstr ""
|
3240 |
|
@@ -3254,24 +3338,24 @@ msgstr ""
|
|
3254 |
msgid "Failed to upload %s"
|
3255 |
msgstr ""
|
3256 |
|
3257 |
-
#: src/methods/dropbox.php:
|
3258 |
msgid "Success:"
|
3259 |
msgstr ""
|
3260 |
|
3261 |
-
#: src/addons/onedrive.php:
|
3262 |
msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
|
3263 |
msgstr ""
|
3264 |
|
3265 |
-
#: src/addons/onedrive.php:
|
3266 |
msgid "(You appear to be already authenticated)."
|
3267 |
msgstr ""
|
3268 |
|
3269 |
-
#: src/methods/dropbox.php:
|
3270 |
-
#: src/methods/dropbox.php:
|
3271 |
msgid "Dropbox"
|
3272 |
msgstr ""
|
3273 |
|
3274 |
-
#: src/addons/onedrive.php:
|
3275 |
msgid "Authenticate with %s"
|
3276 |
msgstr ""
|
3277 |
|
@@ -3302,46 +3386,46 @@ msgstr ""
|
|
3302 |
msgid "%s error - failed to access the container"
|
3303 |
msgstr ""
|
3304 |
|
3305 |
-
#: src/addons/googlecloud.php:
|
3306 |
-
#: src/methods/dropbox.php:
|
3307 |
msgid "Account holder's name: %s."
|
3308 |
msgstr ""
|
3309 |
|
3310 |
-
#: src/methods/googledrive.php:
|
3311 |
msgid "To be able to set a custom folder name, use UpdraftPlus Premium."
|
3312 |
msgstr ""
|
3313 |
|
3314 |
-
#: src/methods/googledrive.php:
|
3315 |
msgid "It is an ID number internal to Google Drive"
|
3316 |
msgstr ""
|
3317 |
|
3318 |
-
#: src/methods/googledrive.php:
|
3319 |
msgid "<strong>This is NOT a folder name</strong>."
|
3320 |
msgstr ""
|
3321 |
|
3322 |
-
#: src/addons/google-enhanced.php:
|
3323 |
-
#: src/methods/googledrive.php:
|
3324 |
msgid "Folder"
|
3325 |
msgstr ""
|
3326 |
|
3327 |
-
#: src/addons/googlecloud.php:
|
3328 |
-
#: src/methods/googledrive.php:
|
3329 |
msgid "%s download: failed: file not found"
|
3330 |
msgstr ""
|
3331 |
|
3332 |
-
#: src/addons/googlecloud.php:
|
3333 |
msgid "Name: %s."
|
3334 |
msgstr ""
|
3335 |
|
3336 |
-
#: src/methods/googledrive.php:
|
3337 |
msgid "Google Drive list files: failed to access parent folder"
|
3338 |
msgstr ""
|
3339 |
|
3340 |
-
#: src/methods/addon-not-yet-present.php:
|
3341 |
msgid "Your %s version: %s."
|
3342 |
msgstr ""
|
3343 |
|
3344 |
-
#: src/methods/addon-not-yet-present.php:
|
3345 |
msgid "You will need to ask your web hosting company to upgrade."
|
3346 |
msgstr ""
|
3347 |
|
@@ -3358,7 +3442,7 @@ msgstr ""
|
|
3358 |
msgid "Fetch"
|
3359 |
msgstr ""
|
3360 |
|
3361 |
-
#: src/addons/migrator.php:
|
3362 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:61,
|
3363 |
#: src/templates/wp-admin/settings/form-contents.php:210
|
3364 |
msgid "This feature requires %s version %s or later"
|
@@ -3368,7 +3452,7 @@ msgstr ""
|
|
3368 |
msgid "Failed to unpack the archive"
|
3369 |
msgstr ""
|
3370 |
|
3371 |
-
#: src/class-updraftplus.php:
|
3372 |
msgid "Error - failed to download the file"
|
3373 |
msgstr ""
|
3374 |
|
@@ -3376,28 +3460,28 @@ msgstr ""
|
|
3376 |
msgid "Rescan local folder for new backup sets"
|
3377 |
msgstr ""
|
3378 |
|
3379 |
-
#: src/udaddons/updraftplus-addons.php:
|
3380 |
msgid "You should update UpdraftPlus to make sure that you have a version that has been tested for compatibility."
|
3381 |
msgstr ""
|
3382 |
|
3383 |
-
#: src/udaddons/updraftplus-addons.php:
|
3384 |
msgid "It has been tested up to version %s."
|
3385 |
msgstr ""
|
3386 |
|
3387 |
-
#: src/udaddons/updraftplus-addons.php:
|
3388 |
msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
|
3389 |
msgstr ""
|
3390 |
|
3391 |
-
#: src/addons/sftp.php:
|
3392 |
msgid "password/key"
|
3393 |
msgstr ""
|
3394 |
|
3395 |
-
#: src/addons/
|
3396 |
-
#: src/
|
3397 |
msgid "Key"
|
3398 |
msgstr ""
|
3399 |
|
3400 |
-
#: src/addons/sftp.php:
|
3401 |
msgid "Your login may be either password or key-based - you only need to enter one, not both."
|
3402 |
msgstr ""
|
3403 |
|
@@ -3409,24 +3493,24 @@ msgstr ""
|
|
3409 |
msgid "SCP/SFTP password/key"
|
3410 |
msgstr ""
|
3411 |
|
3412 |
-
#: src/admin.php:
|
3413 |
msgid "Files backup (created by %s)"
|
3414 |
msgstr ""
|
3415 |
|
3416 |
-
#: src/admin.php:
|
3417 |
msgid "Files and database WordPress backup (created by %s)"
|
3418 |
msgstr ""
|
3419 |
|
3420 |
-
#: src/addons/importer.php:276, src/admin.php:
|
3421 |
#: src/includes/class-backup-history.php:279
|
3422 |
msgid "Backup created by: %s."
|
3423 |
msgstr ""
|
3424 |
|
3425 |
-
#: src/admin.php:
|
3426 |
msgid "Database (created by %s)"
|
3427 |
msgstr ""
|
3428 |
|
3429 |
-
#: src/admin.php:
|
3430 |
msgid "unknown source"
|
3431 |
msgstr ""
|
3432 |
|
@@ -3438,33 +3522,33 @@ msgstr ""
|
|
3438 |
msgid "Upload backup files"
|
3439 |
msgstr ""
|
3440 |
|
3441 |
-
#: src/admin.php:
|
3442 |
msgid "This backup was created by %s, and can be imported."
|
3443 |
msgstr ""
|
3444 |
|
3445 |
-
#: src/admin.php:
|
3446 |
msgid "Read this page for a guide to possible causes and how to fix it."
|
3447 |
msgstr ""
|
3448 |
|
3449 |
-
#: src/admin.php:
|
3450 |
msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
|
3451 |
msgstr ""
|
3452 |
|
3453 |
-
#: src/admin.php:
|
3454 |
msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
|
3455 |
msgstr ""
|
3456 |
|
3457 |
-
#: src/admin.php:
|
3458 |
msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
|
3459 |
msgstr ""
|
3460 |
|
3461 |
-
#: src/admin.php:
|
3462 |
#: src/includes/class-backup-history.php:286
|
3463 |
msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
|
3464 |
msgstr ""
|
3465 |
|
3466 |
-
#: src/admin.php:
|
3467 |
-
#: src/restorer.php:
|
3468 |
msgid "Backup created by unknown source (%s) - cannot be restored."
|
3469 |
msgstr ""
|
3470 |
|
@@ -3476,16 +3560,16 @@ msgstr ""
|
|
3476 |
msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
|
3477 |
msgstr ""
|
3478 |
|
3479 |
-
#: src/methods/dropbox.php:
|
3480 |
msgid "%s returned an unexpected HTTP response: %s"
|
3481 |
msgstr ""
|
3482 |
|
3483 |
-
#: src/addons/sftp.php:
|
3484 |
msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
|
3485 |
msgstr ""
|
3486 |
|
3487 |
#: src/addons/backblaze.php:515, src/methods/cloudfiles.php:246,
|
3488 |
-
#: src/methods/dropbox.php:
|
3489 |
msgid "No settings were found"
|
3490 |
msgstr ""
|
3491 |
|
@@ -3493,16 +3577,16 @@ msgstr ""
|
|
3493 |
msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
|
3494 |
msgstr ""
|
3495 |
|
3496 |
-
#: src/admin.php:
|
3497 |
msgid "Rescanning remote and local storage for backup sets..."
|
3498 |
msgstr ""
|
3499 |
|
3500 |
-
#: src/addons/googlecloud.php:
|
3501 |
#: src/addons/s3-enhanced.php:54, src/addons/s3-enhanced.php:67
|
3502 |
msgid "(Read more)"
|
3503 |
msgstr ""
|
3504 |
|
3505 |
-
#: src/addons/reporting.php:
|
3506 |
msgid "Log all messages to syslog (only server admins are likely to want this)"
|
3507 |
msgstr ""
|
3508 |
|
@@ -3515,7 +3599,7 @@ msgstr ""
|
|
3515 |
msgid "Remove"
|
3516 |
msgstr ""
|
3517 |
|
3518 |
-
#: src/methods/s3.php:847
|
3519 |
msgid "Other %s FAQs."
|
3520 |
msgstr ""
|
3521 |
|
@@ -3523,16 +3607,16 @@ msgstr ""
|
|
3523 |
msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
|
3524 |
msgstr ""
|
3525 |
|
3526 |
-
#: src/addons/morefiles.php:445, src/admin.php:
|
3527 |
msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
|
3528 |
msgstr ""
|
3529 |
|
3530 |
-
#: src/class-updraftplus.php:
|
3531 |
-
#: src/restorer.php:
|
3532 |
msgid "Your hosting company must enable these functions before %s can work."
|
3533 |
msgstr ""
|
3534 |
|
3535 |
-
#: src/class-updraftplus.php:
|
3536 |
msgid "Your web server's PHP installation has these functions disabled: %s."
|
3537 |
msgstr ""
|
3538 |
|
@@ -3548,69 +3632,69 @@ msgstr ""
|
|
3548 |
msgid "regular non-encrypted FTP"
|
3549 |
msgstr ""
|
3550 |
|
3551 |
-
#: src/restorer.php:
|
3552 |
msgid "Backup created by:"
|
3553 |
msgstr ""
|
3554 |
|
3555 |
-
#: src/udaddons/options.php:
|
3556 |
msgid "Available to claim on this site"
|
3557 |
msgstr ""
|
3558 |
|
3559 |
-
#: src/udaddons/updraftplus-addons.php:
|
3560 |
msgid "To maintain your access to support, please renew."
|
3561 |
msgstr ""
|
3562 |
|
3563 |
-
#: src/udaddons/updraftplus-addons.php:
|
3564 |
msgid "Your paid access to UpdraftPlus support will soon expire."
|
3565 |
msgstr ""
|
3566 |
|
3567 |
-
#: src/udaddons/updraftplus-addons.php:
|
3568 |
msgid "To regain your access, please renew."
|
3569 |
msgstr ""
|
3570 |
|
3571 |
-
#: src/udaddons/updraftplus-addons.php:
|
3572 |
msgid "Your paid access to UpdraftPlus support has expired."
|
3573 |
msgstr ""
|
3574 |
|
3575 |
-
#: src/udaddons/updraftplus-addons.php:
|
3576 |
msgid "Your paid access to UpdraftPlus updates for this site will soon expire."
|
3577 |
msgstr ""
|
3578 |
|
3579 |
-
#: src/udaddons/updraftplus-addons.php:
|
3580 |
-
#: src/udaddons/updraftplus-addons.php:
|
3581 |
msgid "To retain your access, and maintain access to updates (including future features and compatibility with future WordPress releases) and support, please renew."
|
3582 |
msgstr ""
|
3583 |
|
3584 |
-
#: src/udaddons/updraftplus-addons.php:
|
3585 |
msgid "Your paid access to UpdraftPlus updates for %s of the %s add-ons on this site will soon expire."
|
3586 |
msgstr ""
|
3587 |
|
3588 |
-
#: src/udaddons/updraftplus-addons.php:
|
3589 |
msgid "Your paid access to UpdraftPlus updates for %s add-ons on this site has expired."
|
3590 |
msgstr ""
|
3591 |
|
3592 |
-
#: src/udaddons/updraftplus-addons.php:
|
3593 |
-
#: src/udaddons/updraftplus-addons.php:
|
3594 |
msgid "To regain access to updates (including future features and compatibility with future WordPress releases) and support, please renew."
|
3595 |
msgstr ""
|
3596 |
|
3597 |
-
#: src/udaddons/updraftplus-addons.php:
|
3598 |
msgid "Your paid access to UpdraftPlus updates for this site has expired. You will no longer receive updates to UpdraftPlus."
|
3599 |
msgstr ""
|
3600 |
|
3601 |
-
#: src/udaddons/updraftplus-addons.php:
|
3602 |
msgid "Dismiss from main dashboard (for %s weeks)"
|
3603 |
msgstr ""
|
3604 |
|
3605 |
-
#: src/class-updraftplus.php:
|
3606 |
msgid "The attempt to undo the double-compression succeeded."
|
3607 |
msgstr ""
|
3608 |
|
3609 |
-
#: src/class-updraftplus.php:
|
3610 |
msgid "The attempt to undo the double-compression failed."
|
3611 |
msgstr ""
|
3612 |
|
3613 |
-
#: src/class-updraftplus.php:
|
3614 |
msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
|
3615 |
msgstr ""
|
3616 |
|
@@ -3618,32 +3702,32 @@ msgstr ""
|
|
3618 |
msgid "Constants"
|
3619 |
msgstr ""
|
3620 |
|
3621 |
-
#: src/backup.php:
|
3622 |
msgid "Failed to open database file for reading:"
|
3623 |
msgstr ""
|
3624 |
|
3625 |
-
#: src/backup.php:
|
3626 |
msgid "No database tables found"
|
3627 |
msgstr ""
|
3628 |
|
3629 |
-
#: src/backup.php:
|
3630 |
msgid "please wait for the rescheduled attempt"
|
3631 |
msgstr ""
|
3632 |
|
3633 |
-
#: src/addons/reporting.php:
|
3634 |
msgid "Note that warning messages are advisory - the backup process does not stop for them. Instead, they provide information that you might find useful, or that may indicate the source of a problem if the backup did not succeed."
|
3635 |
msgstr ""
|
3636 |
|
3637 |
-
#: src/addons/onedrive.php:91, src/methods/dropbox.php:
|
3638 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
|
3639 |
msgstr ""
|
3640 |
|
3641 |
-
#: src/udaddons/updraftplus-addons.php:
|
3642 |
-
#: src/udaddons/updraftplus-addons.php:
|
3643 |
msgid "Errors occurred:"
|
3644 |
msgstr ""
|
3645 |
|
3646 |
-
#: src/admin.php:
|
3647 |
msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
|
3648 |
msgstr ""
|
3649 |
|
@@ -3667,24 +3751,24 @@ msgstr ""
|
|
3667 |
msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
|
3668 |
msgstr ""
|
3669 |
|
3670 |
-
#: src/admin.php:
|
3671 |
msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
|
3672 |
msgstr ""
|
3673 |
|
3674 |
-
#: src/addons/migrator.php:
|
3675 |
msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
|
3676 |
msgstr ""
|
3677 |
|
3678 |
-
#: src/addons/sftp.php:
|
3679 |
#: src/includes/ftp.class.php:58, src/includes/ftp.class.php:61
|
3680 |
msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
|
3681 |
msgstr ""
|
3682 |
|
3683 |
-
#: src/addons/moredatabase.php:137, src/admin.php:
|
3684 |
msgid "Messages:"
|
3685 |
msgstr ""
|
3686 |
|
3687 |
-
#: src/restorer.php:
|
3688 |
msgid "An SQL line that is larger than the maximum packet size and cannot be split was found; this line will not be processed, but will be dropped: %s"
|
3689 |
msgstr ""
|
3690 |
|
@@ -3777,59 +3861,66 @@ msgstr ""
|
|
3777 |
msgid "Rackspace Cloud Files, enhanced"
|
3778 |
msgstr ""
|
3779 |
|
3780 |
-
#: src/addons/cloudfiles-enhanced.php:278, src/methods/cloudfiles-new.php:
|
|
|
3781 |
msgid "Cloud Files Container"
|
3782 |
msgstr ""
|
3783 |
|
3784 |
-
#: src/methods/cloudfiles-new.php:
|
3785 |
msgid "Cloud Files API Key"
|
3786 |
msgstr ""
|
3787 |
|
3788 |
-
#: src/methods/cloudfiles-new.php:
|
3789 |
msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
|
3790 |
msgstr ""
|
3791 |
|
3792 |
-
#: src/methods/cloudfiles-new.php:
|
3793 |
msgid "Cloud Files Username"
|
3794 |
msgstr ""
|
3795 |
|
3796 |
-
#: src/addons/cloudfiles-enhanced.php:47, src/methods/cloudfiles-new.php:
|
|
|
3797 |
msgid "London (LON)"
|
3798 |
msgstr ""
|
3799 |
|
3800 |
-
#: src/addons/cloudfiles-enhanced.php:46, src/methods/cloudfiles-new.php:
|
|
|
3801 |
msgid "Hong Kong (HKG)"
|
3802 |
msgstr ""
|
3803 |
|
3804 |
-
#: src/addons/cloudfiles-enhanced.php:45, src/methods/cloudfiles-new.php:
|
|
|
3805 |
msgid "Northern Virginia (IAD)"
|
3806 |
msgstr ""
|
3807 |
|
3808 |
-
#: src/addons/cloudfiles-enhanced.php:44, src/methods/cloudfiles-new.php:
|
|
|
3809 |
msgid "Chicago (ORD)"
|
3810 |
msgstr ""
|
3811 |
|
3812 |
-
#: src/addons/cloudfiles-enhanced.php:43, src/methods/cloudfiles-new.php:
|
|
|
3813 |
msgid "Sydney (SYD)"
|
3814 |
msgstr ""
|
3815 |
|
3816 |
-
#: src/addons/cloudfiles-enhanced.php:42, src/methods/cloudfiles-new.php:
|
|
|
3817 |
msgid "Dallas (DFW) (default)"
|
3818 |
msgstr ""
|
3819 |
|
3820 |
-
#: src/addons/cloudfiles-enhanced.php:274, src/methods/cloudfiles-new.php:
|
3821 |
msgid "Cloud Files Storage Region"
|
3822 |
msgstr ""
|
3823 |
|
3824 |
-
#: src/methods/cloudfiles-new.php:
|
3825 |
msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
|
3826 |
msgstr ""
|
3827 |
|
3828 |
-
#: src/methods/cloudfiles-new.php:
|
3829 |
msgid "US or UK-based Rackspace Account"
|
3830 |
msgstr ""
|
3831 |
|
3832 |
-
#: src/addons/cloudfiles-enhanced.php:258, src/methods/cloudfiles-new.php:
|
3833 |
msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
|
3834 |
msgstr ""
|
3835 |
|
@@ -3840,39 +3931,39 @@ msgstr ""
|
|
3840 |
msgid "Authorisation failed (check your credentials)"
|
3841 |
msgstr ""
|
3842 |
|
3843 |
-
#: src/methods/updraftvault.php:
|
3844 |
msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
|
3845 |
msgstr ""
|
3846 |
|
3847 |
-
#: src/admin.php:
|
3848 |
msgid "Create"
|
3849 |
msgstr ""
|
3850 |
|
3851 |
-
#: src/admin.php:
|
3852 |
msgid "Trying..."
|
3853 |
msgstr ""
|
3854 |
|
3855 |
-
#: src/admin.php:
|
3856 |
msgid "The new user's RackSpace console password is (this will not be shown again):"
|
3857 |
msgstr ""
|
3858 |
|
3859 |
-
#: src/admin.php:
|
3860 |
msgid "Error data:"
|
3861 |
msgstr ""
|
3862 |
|
3863 |
-
#: src/admin.php:
|
3864 |
msgid "Backup does not exist in the backup history"
|
3865 |
msgstr ""
|
3866 |
|
3867 |
-
#: src/admin.php:
|
3868 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
|
3869 |
msgstr ""
|
3870 |
|
3871 |
-
#: src/restorer.php:
|
3872 |
msgid "Split line to avoid exceeding maximum packet size"
|
3873 |
msgstr ""
|
3874 |
|
3875 |
-
#: src/restorer.php:
|
3876 |
msgid "Your database user does not have permission to drop tables. We will attempt to restore by simply emptying the tables; this should work as long as you are restoring from a WordPress version with the same database structure (%s)"
|
3877 |
msgstr ""
|
3878 |
|
@@ -3892,91 +3983,91 @@ msgstr ""
|
|
3892 |
msgid "Moving old data out of the way..."
|
3893 |
msgstr ""
|
3894 |
|
3895 |
-
#: src/addons/reporting.php:
|
3896 |
msgid "Add another address..."
|
3897 |
msgstr ""
|
3898 |
|
3899 |
-
#: src/addons/reporting.php:
|
3900 |
msgid "Enter addresses here to have a report sent to them when a backup job finishes."
|
3901 |
msgstr ""
|
3902 |
|
3903 |
-
#: src/addons/reporting.php:
|
3904 |
msgid "Email reports"
|
3905 |
msgstr ""
|
3906 |
|
3907 |
-
#: src/class-updraftplus.php:
|
3908 |
msgid "%s checksum: %s"
|
3909 |
msgstr ""
|
3910 |
|
3911 |
-
#: src/class-updraftplus.php:
|
3912 |
msgid "files: %s"
|
3913 |
msgstr ""
|
3914 |
|
3915 |
-
#: src/addons/reporting.php:
|
3916 |
msgid "Use the \"Reporting\" section to configure the email addresses to be used."
|
3917 |
msgstr ""
|
3918 |
|
3919 |
-
#: src/addons/reporting.php:
|
3920 |
msgid "Debugging information"
|
3921 |
msgstr ""
|
3922 |
|
3923 |
-
#: src/addons/reporting.php:
|
3924 |
msgid "Uploaded to:"
|
3925 |
msgstr ""
|
3926 |
|
3927 |
-
#: src/addons/reporting.php:
|
3928 |
msgid "Time taken:"
|
3929 |
msgstr ""
|
3930 |
|
3931 |
-
#: src/addons/reporting.php:
|
3932 |
msgid "Warnings"
|
3933 |
msgstr ""
|
3934 |
|
3935 |
-
#: src/addons/reporting.php:
|
3936 |
msgid "Errors"
|
3937 |
msgstr ""
|
3938 |
|
3939 |
-
#: src/addons/reporting.php:
|
3940 |
msgid "Errors / warnings:"
|
3941 |
msgstr ""
|
3942 |
|
3943 |
#: src/addons/morefiles.php:119, src/addons/morefiles.php:120,
|
3944 |
-
#: src/addons/reporting.php:
|
3945 |
msgid "Contains:"
|
3946 |
msgstr ""
|
3947 |
|
3948 |
-
#: src/addons/reporting.php:
|
3949 |
msgid "Backup began:"
|
3950 |
msgstr ""
|
3951 |
|
3952 |
-
#: src/addons/reporting.php:
|
3953 |
msgid "Backup Report"
|
3954 |
msgstr ""
|
3955 |
|
3956 |
-
#: src/addons/reporting.php:
|
3957 |
msgid "%d hours, %d minutes, %d seconds"
|
3958 |
msgstr ""
|
3959 |
|
3960 |
-
#: src/addons/reporting.php:
|
3961 |
msgid "%d errors, %d warnings"
|
3962 |
msgstr ""
|
3963 |
|
3964 |
-
#: src/addons/onedrive.php:
|
3965 |
msgid "%s authentication"
|
3966 |
msgstr ""
|
3967 |
|
3968 |
-
#: src/addons/onedrive.php:
|
3969 |
-
#: src/methods/dropbox.php:
|
3970 |
-
#: src/methods/dropbox.php:
|
3971 |
-
#: src/methods/dropbox.php:
|
3972 |
msgid "%s error: %s"
|
3973 |
msgstr ""
|
3974 |
|
3975 |
-
#: src/addons/googlecloud.php:
|
3976 |
msgid "%s logo"
|
3977 |
msgstr ""
|
3978 |
|
3979 |
-
#: src/methods/dropbox.php:
|
3980 |
msgid "%s did not return the expected response - check your log file for more details"
|
3981 |
msgstr ""
|
3982 |
|
@@ -3992,8 +4083,8 @@ msgstr ""
|
|
3992 |
msgid "Your site's admin email address (%s) will be used."
|
3993 |
msgstr ""
|
3994 |
|
3995 |
-
#: src/admin.php:
|
3996 |
-
#: src/methods/updraftvault.php:
|
3997 |
msgid "Connect"
|
3998 |
msgstr ""
|
3999 |
|
@@ -4001,56 +4092,56 @@ msgstr ""
|
|
4001 |
msgid "For more reporting features, use the Reporting add-on."
|
4002 |
msgstr ""
|
4003 |
|
4004 |
-
#: src/class-updraftplus.php:
|
4005 |
msgid "(version: %s)"
|
4006 |
msgstr ""
|
4007 |
|
4008 |
-
#: src/addons/reporting.php:
|
4009 |
-
#: src/admin.php:
|
4010 |
msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
|
4011 |
msgstr ""
|
4012 |
|
4013 |
-
#: src/addons/reporting.php:
|
4014 |
msgid "When the Email storage method is enabled, also send the entire backup"
|
4015 |
msgstr ""
|
4016 |
|
4017 |
-
#: src/addons/reporting.php:
|
4018 |
msgid "Latest status:"
|
4019 |
msgstr ""
|
4020 |
|
4021 |
-
#: src/backup.php:
|
4022 |
msgid "Backup contains:"
|
4023 |
msgstr ""
|
4024 |
|
4025 |
-
#: src/backup.php:
|
4026 |
msgid "Backed up: %s"
|
4027 |
msgstr ""
|
4028 |
|
4029 |
-
#: src/addons/reporting.php:
|
4030 |
msgid "The log file has been attached to this email."
|
4031 |
msgstr ""
|
4032 |
|
4033 |
-
#: src/backup.php:
|
4034 |
msgid "Unknown/unexpected error - please raise a support request"
|
4035 |
msgstr ""
|
4036 |
|
4037 |
-
#: src/backup.php:
|
4038 |
msgid "Database only (files were not part of this particular schedule)"
|
4039 |
msgstr ""
|
4040 |
|
4041 |
-
#: src/backup.php:
|
4042 |
msgid "Database (files backup has not completed)"
|
4043 |
msgstr ""
|
4044 |
|
4045 |
-
#: src/backup.php:
|
4046 |
msgid "Files only (database was not part of this particular schedule)"
|
4047 |
msgstr ""
|
4048 |
|
4049 |
-
#: src/backup.php:
|
4050 |
msgid "Files (database backup has not completed)"
|
4051 |
msgstr ""
|
4052 |
|
4053 |
-
#: src/admin.php:
|
4054 |
msgid "Files and database"
|
4055 |
msgstr ""
|
4056 |
|
@@ -4074,39 +4165,39 @@ msgstr ""
|
|
4074 |
msgid "UpdraftPlus warning:"
|
4075 |
msgstr ""
|
4076 |
|
4077 |
-
#: src/udaddons/options.php:
|
4078 |
msgid "(or connect using the form on this page if you have already purchased it)"
|
4079 |
msgstr ""
|
4080 |
|
4081 |
-
#: src/udaddons/options.php:
|
4082 |
msgid "please follow this link to update the plugin in order to activate it"
|
4083 |
msgstr ""
|
4084 |
|
4085 |
-
#: src/udaddons/options.php:
|
4086 |
msgid "please follow this link to update the plugin in order to get it"
|
4087 |
msgstr ""
|
4088 |
|
4089 |
-
#: src/udaddons/options.php:
|
4090 |
msgid "latest"
|
4091 |
msgstr ""
|
4092 |
|
4093 |
-
#: src/udaddons/options.php:
|
4094 |
msgid "Your version: %s"
|
4095 |
msgstr ""
|
4096 |
|
4097 |
-
#: src/udaddons/options.php:
|
4098 |
msgid "You've got it"
|
4099 |
msgstr ""
|
4100 |
|
4101 |
-
#: src/udaddons/options.php:
|
4102 |
msgid "UpdraftPlus Support"
|
4103 |
msgstr ""
|
4104 |
|
4105 |
-
#: src/udaddons/options.php:
|
4106 |
msgid "An update containing your addons is available for UpdraftPlus - please follow this link to get it."
|
4107 |
msgstr ""
|
4108 |
|
4109 |
-
#: src/udaddons/options.php:
|
4110 |
msgid "UpdraftPlus Addons"
|
4111 |
msgstr ""
|
4112 |
|
@@ -4114,24 +4205,24 @@ msgstr ""
|
|
4114 |
msgid "An update is available for UpdraftPlus - please follow this link to get it."
|
4115 |
msgstr ""
|
4116 |
|
4117 |
-
#: src/methods/updraftvault.php:
|
4118 |
-
#: src/udaddons/updraftplus-addons.php:
|
4119 |
msgid "UpdraftPlus.Com returned a response, but we could not understand it"
|
4120 |
msgstr ""
|
4121 |
|
4122 |
-
#: src/methods/updraftvault.php:
|
4123 |
msgid "Your email address and password were not recognised by UpdraftPlus.Com"
|
4124 |
msgstr ""
|
4125 |
|
4126 |
-
#: src/methods/updraftvault.php:
|
4127 |
msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
|
4128 |
msgstr ""
|
4129 |
|
4130 |
-
#: src/udaddons/updraftplus-addons.php:
|
4131 |
msgid "UpdraftPlus.Com responded, but we did not understand the response"
|
4132 |
msgstr ""
|
4133 |
|
4134 |
-
#: src/udaddons/updraftplus-addons.php:
|
4135 |
msgid "We failed to successfully connect to UpdraftPlus.Com"
|
4136 |
msgstr ""
|
4137 |
|
@@ -4142,15 +4233,15 @@ msgstr ""
|
|
4142 |
msgid "Reporting"
|
4143 |
msgstr ""
|
4144 |
|
4145 |
-
#: src/admin.php:
|
4146 |
msgid "Options (raw)"
|
4147 |
msgstr ""
|
4148 |
|
4149 |
-
#: src/addons/reporting.php:
|
4150 |
msgid "Send a report only when there are warnings/errors"
|
4151 |
msgstr ""
|
4152 |
|
4153 |
-
#: src/restorer.php:
|
4154 |
msgid "Content URL:"
|
4155 |
msgstr ""
|
4156 |
|
@@ -4162,67 +4253,67 @@ msgstr ""
|
|
4162 |
msgid "See also the \"More Files\" add-on from our shop."
|
4163 |
msgstr ""
|
4164 |
|
4165 |
-
#: src/backup.php:
|
4166 |
msgid "Your free space in your hosting account is very low - only %s Mb remain"
|
4167 |
msgstr ""
|
4168 |
|
4169 |
-
#: src/class-updraftplus.php:
|
4170 |
msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
|
4171 |
msgstr ""
|
4172 |
|
4173 |
-
#: src/udaddons/options.php:
|
4174 |
msgid "Manage Addons"
|
4175 |
msgstr ""
|
4176 |
|
4177 |
-
#: src/udaddons/options.php:
|
4178 |
msgid "Buy It"
|
4179 |
msgstr ""
|
4180 |
|
4181 |
-
#: src/udaddons/options.php:
|
4182 |
msgid "Get it from the UpdraftPlus.Com Store"
|
4183 |
msgstr ""
|
4184 |
|
4185 |
-
#: src/udaddons/options.php:
|
4186 |
msgid "activate it on this site"
|
4187 |
msgstr ""
|
4188 |
|
4189 |
-
#: src/udaddons/options.php:
|
4190 |
msgid "You have an inactive purchase"
|
4191 |
msgstr ""
|
4192 |
|
4193 |
-
#: src/udaddons/options.php:
|
4194 |
msgid "Assigned to this site"
|
4195 |
msgstr ""
|
4196 |
|
4197 |
-
#: src/udaddons/options.php:
|
4198 |
msgid "Available for this site (via your all-addons purchase)"
|
4199 |
msgstr ""
|
4200 |
|
4201 |
-
#: src/udaddons/options.php:
|
4202 |
msgid "(apparently a pre-release or withdrawn release)"
|
4203 |
msgstr ""
|
4204 |
|
4205 |
-
#: src/udaddons/options.php:
|
4206 |
msgid "Go here"
|
4207 |
msgstr ""
|
4208 |
|
4209 |
-
#: src/udaddons/options.php:
|
4210 |
msgid "Need to get support?"
|
4211 |
msgstr ""
|
4212 |
|
4213 |
-
#: src/udaddons/options.php:
|
4214 |
msgid "An error occurred when trying to retrieve your add-ons."
|
4215 |
msgstr ""
|
4216 |
|
4217 |
-
#: src/udaddons/options.php:
|
4218 |
msgid "An unknown response was received. Response was:"
|
4219 |
msgstr ""
|
4220 |
|
4221 |
-
#: src/udaddons/options.php:
|
4222 |
msgid "Claim not granted - your account login details were wrong"
|
4223 |
msgstr ""
|
4224 |
|
4225 |
-
#: src/udaddons/options.php:
|
4226 |
msgid "Please wait whilst we make the claim..."
|
4227 |
msgstr ""
|
4228 |
|
@@ -4294,7 +4385,7 @@ msgstr ""
|
|
4294 |
msgid "Your web-server does not have the %s module installed."
|
4295 |
msgstr ""
|
4296 |
|
4297 |
-
#: src/addons/googlecloud.php:
|
4298 |
msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
|
4299 |
msgstr ""
|
4300 |
|
@@ -4302,23 +4393,19 @@ msgstr ""
|
|
4302 |
msgid "Drop backup files here"
|
4303 |
msgstr ""
|
4304 |
|
4305 |
-
#: src/admin.php:
|
4306 |
-
msgid "Does nothing happen when you attempt backups?"
|
4307 |
-
msgstr ""
|
4308 |
-
|
4309 |
-
#: src/admin.php:651
|
4310 |
msgid "The web server returned an error code (try again, or check your web server logs)"
|
4311 |
msgstr ""
|
4312 |
|
4313 |
-
#: src/admin.php:
|
4314 |
msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
|
4315 |
msgstr ""
|
4316 |
|
4317 |
-
#: src/admin.php:
|
4318 |
msgid "If you exclude both the database and the files, then you have excluded everything!"
|
4319 |
msgstr ""
|
4320 |
|
4321 |
-
#: src/restorer.php:
|
4322 |
msgid "Site home:"
|
4323 |
msgstr ""
|
4324 |
|
@@ -4343,11 +4430,11 @@ msgstr ""
|
|
4343 |
msgid "You can send a backup to more than one destination with an add-on."
|
4344 |
msgstr ""
|
4345 |
|
4346 |
-
#: src/admin.php:
|
4347 |
msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
|
4348 |
msgstr ""
|
4349 |
|
4350 |
-
#: src/admin.php:
|
4351 |
msgid "(%s%%, file %s of %s)"
|
4352 |
msgstr ""
|
4353 |
|
@@ -4356,15 +4443,15 @@ msgstr ""
|
|
4356 |
msgid "Read more about how this works..."
|
4357 |
msgstr ""
|
4358 |
|
4359 |
-
#: src/addons/sftp.php:
|
4360 |
msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
|
4361 |
msgstr ""
|
4362 |
|
4363 |
-
#: src/addons/sftp.php:
|
4364 |
msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
|
4365 |
msgstr ""
|
4366 |
|
4367 |
-
#: src/addons/sftp.php:
|
4368 |
msgid "Use SCP instead of SFTP"
|
4369 |
msgstr ""
|
4370 |
|
@@ -4384,15 +4471,15 @@ msgstr ""
|
|
4384 |
msgid "Backup is of: %s."
|
4385 |
msgstr ""
|
4386 |
|
4387 |
-
#: src/admin.php:
|
4388 |
msgid "%s settings test result:"
|
4389 |
msgstr ""
|
4390 |
|
4391 |
-
#: src/admin.php:
|
4392 |
msgid "(Not finished)"
|
4393 |
msgstr ""
|
4394 |
|
4395 |
-
#: src/admin.php:
|
4396 |
msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
|
4397 |
msgstr ""
|
4398 |
|
@@ -4404,77 +4491,77 @@ msgstr ""
|
|
4404 |
msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
|
4405 |
msgstr ""
|
4406 |
|
4407 |
-
#: src/admin.php:
|
4408 |
msgid "Job ID: %s"
|
4409 |
msgstr ""
|
4410 |
|
4411 |
-
#: src/admin.php:
|
4412 |
msgid "last activity: %ss ago"
|
4413 |
msgstr ""
|
4414 |
|
4415 |
-
#: src/admin.php:
|
4416 |
msgid "next resumption: %d (after %ss)"
|
4417 |
msgstr ""
|
4418 |
|
4419 |
-
#: src/admin.php:
|
4420 |
-
#: src/central/bootstrap.php:
|
4421 |
-
#: src/methods/updraftvault.php:
|
4422 |
msgid "Unknown"
|
4423 |
msgstr ""
|
4424 |
|
4425 |
-
#: src/admin.php:
|
4426 |
msgid "Backup finished"
|
4427 |
msgstr ""
|
4428 |
|
4429 |
-
#: src/admin.php:
|
4430 |
msgid "Waiting until scheduled time to retry because of errors"
|
4431 |
msgstr ""
|
4432 |
|
4433 |
-
#: src/admin.php:
|
4434 |
msgid "Pruning old backup sets"
|
4435 |
msgstr ""
|
4436 |
|
4437 |
-
#: src/admin.php:
|
4438 |
msgid "Uploading files to remote storage"
|
4439 |
msgstr ""
|
4440 |
|
4441 |
-
#: src/admin.php:
|
4442 |
msgid "Encrypted database"
|
4443 |
msgstr ""
|
4444 |
|
4445 |
-
#: src/admin.php:
|
4446 |
msgid "Encrypting database"
|
4447 |
msgstr ""
|
4448 |
|
4449 |
-
#: src/admin.php:
|
4450 |
msgid "Created database backup"
|
4451 |
msgstr ""
|
4452 |
|
4453 |
-
#: src/admin.php:
|
4454 |
msgid "table: %s"
|
4455 |
msgstr ""
|
4456 |
|
4457 |
-
#: src/admin.php:
|
4458 |
msgid "Creating database backup"
|
4459 |
msgstr ""
|
4460 |
|
4461 |
-
#: src/admin.php:
|
4462 |
msgid "Created file backup zips"
|
4463 |
msgstr ""
|
4464 |
|
4465 |
-
#: src/admin.php:
|
4466 |
msgid "Creating file backup zips"
|
4467 |
msgstr ""
|
4468 |
|
4469 |
-
#: src/admin.php:
|
4470 |
msgid "Backup begun"
|
4471 |
msgstr ""
|
4472 |
|
4473 |
-
#: src/admin.php:
|
4474 |
msgid "Backups in progress:"
|
4475 |
msgstr ""
|
4476 |
|
4477 |
-
#: src/admin.php:
|
4478 |
msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even "Backup Now") unless either you have set up a facility to call the scheduler manually, or until it is enabled."
|
4479 |
msgstr ""
|
4480 |
|
@@ -4490,25 +4577,24 @@ msgstr ""
|
|
4490 |
msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
|
4491 |
msgstr ""
|
4492 |
|
4493 |
-
#: src/class-updraftplus.php:
|
4494 |
msgid "The backup has not finished; a resumption is scheduled"
|
4495 |
msgstr ""
|
4496 |
|
4497 |
-
#: src/class-updraftplus.php:
|
4498 |
msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
|
4499 |
msgstr ""
|
4500 |
|
4501 |
#: src/addons/onedrive.php:865,
|
4502 |
-
#: src/includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:115,
|
4503 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
|
4504 |
msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
|
4505 |
msgstr ""
|
4506 |
|
4507 |
-
#: src/admin.php:
|
4508 |
msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
|
4509 |
msgstr ""
|
4510 |
|
4511 |
-
#: src/addons/autobackup.php:1085, src/admin.php:
|
4512 |
msgid "Proceed with update"
|
4513 |
msgstr ""
|
4514 |
|
@@ -4583,84 +4669,84 @@ msgstr ""
|
|
4583 |
msgid "Support"
|
4584 |
msgstr ""
|
4585 |
|
4586 |
-
#: src/class-updraftplus.php:
|
4587 |
msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
|
4588 |
msgstr ""
|
4589 |
|
4590 |
-
#: src/class-updraftplus.php:
|
4591 |
msgid "This database backup is missing core WordPress tables: %s"
|
4592 |
msgstr ""
|
4593 |
|
4594 |
-
#: src/class-updraftplus.php:
|
4595 |
msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
|
4596 |
msgstr ""
|
4597 |
|
4598 |
-
#: src/class-updraftplus.php:
|
4599 |
msgid "%s version: %s"
|
4600 |
msgstr ""
|
4601 |
|
4602 |
-
#: src/class-updraftplus.php:
|
4603 |
msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
|
4604 |
msgstr ""
|
4605 |
|
4606 |
-
#: src/addons/autobackup.php:1053, src/admin.php:
|
4607 |
#: src/includes/updraftplus-notices.php:171
|
4608 |
msgid "Be safe with an automatic backup"
|
4609 |
msgstr ""
|
4610 |
|
4611 |
-
#: src/admin.php:
|
4612 |
msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
|
4613 |
msgstr ""
|
4614 |
|
4615 |
-
#: src/admin.php:
|
4616 |
msgid "The file was uploaded."
|
4617 |
msgstr ""
|
4618 |
|
4619 |
-
#: src/admin.php:
|
4620 |
msgid "Unknown server response status:"
|
4621 |
msgstr ""
|
4622 |
|
4623 |
-
#: src/admin.php:
|
4624 |
msgid "Unknown server response:"
|
4625 |
msgstr ""
|
4626 |
|
4627 |
-
#: src/admin.php:
|
4628 |
msgid "This decryption key will be attempted:"
|
4629 |
msgstr ""
|
4630 |
|
4631 |
-
#: src/admin.php:
|
4632 |
msgid "Follow this link to attempt decryption and download the database file to your computer."
|
4633 |
msgstr ""
|
4634 |
|
4635 |
-
#: src/admin.php:
|
4636 |
msgid "Upload error"
|
4637 |
msgstr ""
|
4638 |
|
4639 |
-
#: src/admin.php:
|
4640 |
msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
|
4641 |
msgstr ""
|
4642 |
|
4643 |
-
#: src/admin.php:
|
4644 |
msgid "Upload error:"
|
4645 |
msgstr ""
|
4646 |
|
4647 |
-
#: src/admin.php:
|
4648 |
msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
|
4649 |
msgstr ""
|
4650 |
|
4651 |
-
#: src/admin.php:
|
4652 |
msgid "Download to your computer"
|
4653 |
msgstr ""
|
4654 |
|
4655 |
-
#: src/admin.php:
|
4656 |
msgid "Delete from your web server"
|
4657 |
msgstr ""
|
4658 |
|
4659 |
-
#: src/admin.php:
|
4660 |
msgid "You appear to be missing one or more archives from this multi-archive set."
|
4661 |
msgstr ""
|
4662 |
|
4663 |
-
#: src/admin.php:
|
4664 |
msgid "(%d archive(s) in set)."
|
4665 |
msgstr ""
|
4666 |
|
@@ -4672,15 +4758,15 @@ msgstr ""
|
|
4672 |
msgid "Error: the server sent us a response (JSON) which we did not understand."
|
4673 |
msgstr ""
|
4674 |
|
4675 |
-
#: src/admin.php:
|
4676 |
msgid "Warnings:"
|
4677 |
msgstr ""
|
4678 |
|
4679 |
-
#: src/admin.php:
|
4680 |
msgid "Error: the server sent an empty response."
|
4681 |
msgstr ""
|
4682 |
|
4683 |
-
#: src/admin.php:
|
4684 |
msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
|
4685 |
msgstr ""
|
4686 |
|
@@ -4716,7 +4802,7 @@ msgstr ""
|
|
4716 |
msgid "No such backup set exists"
|
4717 |
msgstr ""
|
4718 |
|
4719 |
-
#: src/admin.php:
|
4720 |
msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
|
4721 |
msgstr ""
|
4722 |
|
@@ -4724,7 +4810,7 @@ msgstr ""
|
|
4724 |
msgid "Moving unpacked backup into place..."
|
4725 |
msgstr ""
|
4726 |
|
4727 |
-
#: src/backup.php:
|
4728 |
msgid "Failed to open the zip file (%s) - %s"
|
4729 |
msgstr ""
|
4730 |
|
@@ -4732,11 +4818,11 @@ msgstr ""
|
|
4732 |
msgid "WordPress root directory server path: %s"
|
4733 |
msgstr ""
|
4734 |
|
4735 |
-
#: src/methods/s3.php:852
|
4736 |
msgid "%s end-point"
|
4737 |
msgstr ""
|
4738 |
|
4739 |
-
#: src/methods/s3.php:814
|
4740 |
msgid "... and many more!"
|
4741 |
msgstr ""
|
4742 |
|
@@ -4744,15 +4830,15 @@ msgstr ""
|
|
4744 |
msgid "S3 (Compatible)"
|
4745 |
msgstr ""
|
4746 |
|
4747 |
-
#: src/admin.php:
|
4748 |
msgid "File is not locally present - needs retrieving from remote storage"
|
4749 |
msgstr ""
|
4750 |
|
4751 |
-
#: src/admin.php:
|
4752 |
msgid "Looking for %s archive: file name: %s"
|
4753 |
msgstr ""
|
4754 |
|
4755 |
-
#: src/admin.php:
|
4756 |
msgid "Final checks"
|
4757 |
msgstr ""
|
4758 |
|
@@ -4764,11 +4850,11 @@ msgstr ""
|
|
4764 |
msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
|
4765 |
msgstr ""
|
4766 |
|
4767 |
-
#: src/admin.php:
|
4768 |
msgid "Your wp-content directory server path: %s"
|
4769 |
msgstr ""
|
4770 |
|
4771 |
-
#: src/admin.php:
|
4772 |
msgid "Raw backup history"
|
4773 |
msgstr ""
|
4774 |
|
@@ -4776,11 +4862,11 @@ msgstr ""
|
|
4776 |
msgid "Show raw backup and file list"
|
4777 |
msgstr ""
|
4778 |
|
4779 |
-
#: src/admin.php:
|
4780 |
msgid "Processing files - please wait..."
|
4781 |
msgstr ""
|
4782 |
|
4783 |
-
#: src/admin.php:
|
4784 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:27
|
4785 |
msgid "Please consult this FAQ for help on what to do about it."
|
4786 |
msgstr ""
|
@@ -4789,42 +4875,42 @@ msgstr ""
|
|
4789 |
msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
|
4790 |
msgstr ""
|
4791 |
|
4792 |
-
#: src/class-updraftplus.php:
|
4793 |
msgid "Failed to open database file."
|
4794 |
msgstr ""
|
4795 |
|
4796 |
-
#: src/admin.php:
|
4797 |
msgid "Known backups (raw)"
|
4798 |
msgstr ""
|
4799 |
|
4800 |
-
#: src/restorer.php:
|
4801 |
msgid "Files found:"
|
4802 |
msgstr ""
|
4803 |
|
4804 |
-
#: src/restorer.php:
|
4805 |
msgid "Requested table engine (%s) is not present - changing to MyISAM."
|
4806 |
msgstr ""
|
4807 |
|
4808 |
-
#: src/addons/migrator.php:
|
4809 |
msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
|
4810 |
msgstr ""
|
4811 |
|
4812 |
-
#: src/admin.php:
|
4813 |
msgid "file is size:"
|
4814 |
msgstr ""
|
4815 |
|
4816 |
-
#: src/addons/googlecloud.php:
|
4817 |
-
#: src/addons/migrator.php:
|
4818 |
-
#: src/admin.php:
|
4819 |
#: src/updraftplus.php:156
|
4820 |
msgid "Go here for more information."
|
4821 |
msgstr ""
|
4822 |
|
4823 |
-
#: src/admin.php:
|
4824 |
msgid "Some files are still downloading or being processed - please wait."
|
4825 |
msgstr ""
|
4826 |
|
4827 |
-
#: src/class-updraftplus.php:
|
4828 |
msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
|
4829 |
msgstr ""
|
4830 |
|
@@ -4844,15 +4930,15 @@ msgstr ""
|
|
4844 |
msgid "%s login failure"
|
4845 |
msgstr ""
|
4846 |
|
4847 |
-
#: src/methods/dropbox.php:
|
4848 |
msgid "You do not appear to be authenticated with %s"
|
4849 |
msgstr ""
|
4850 |
|
4851 |
-
#: src/methods/dropbox.php:
|
4852 |
msgid "Failed to access %s when deleting (see log file for more)"
|
4853 |
msgstr ""
|
4854 |
|
4855 |
-
#: src/methods/dropbox.php:
|
4856 |
msgid "You do not appear to be authenticated with %s (whilst deleting)"
|
4857 |
msgstr ""
|
4858 |
|
@@ -4870,9 +4956,9 @@ msgstr ""
|
|
4870 |
|
4871 |
#: src/addons/azure.php:218, src/methods/addon-base-v2.php:219,
|
4872 |
#: src/methods/cloudfiles.php:405, src/methods/cloudfiles.php:422,
|
4873 |
-
#: src/methods/googledrive.php:
|
4874 |
-
#: src/methods/stream-base.php:
|
4875 |
-
#: src/methods/stream-base.php:
|
4876 |
msgid "%s Error"
|
4877 |
msgstr ""
|
4878 |
|
@@ -4880,7 +4966,7 @@ msgstr ""
|
|
4880 |
msgid "%s error - failed to upload file"
|
4881 |
msgstr ""
|
4882 |
|
4883 |
-
#: src/class-updraftplus.php:
|
4884 |
msgid "%s error - failed to re-assemble chunks"
|
4885 |
msgstr ""
|
4886 |
|
@@ -4894,25 +4980,25 @@ msgstr ""
|
|
4894 |
msgid "%s authentication failed"
|
4895 |
msgstr ""
|
4896 |
|
4897 |
-
#: src/addons/googlecloud.php:
|
4898 |
-
#: src/admin.php:
|
4899 |
-
#: src/class-updraftplus.php:
|
4900 |
-
#: src/class-updraftplus.php:
|
4901 |
-
#: src/class-updraftplus.php:
|
4902 |
-
#: src/class-updraftplus.php:
|
4903 |
#: src/methods/s3.php:322
|
4904 |
msgid "Error: %s"
|
4905 |
msgstr ""
|
4906 |
|
4907 |
-
#: src/admin.php:
|
4908 |
msgid "Backup directory specified exists, but is <b>not</b> writable."
|
4909 |
msgstr ""
|
4910 |
|
4911 |
-
#: src/admin.php:
|
4912 |
msgid "Backup directory specified does <b>not</b> exist."
|
4913 |
msgstr ""
|
4914 |
|
4915 |
-
#: src/admin.php:
|
4916 |
msgid "Warning: %s"
|
4917 |
msgstr ""
|
4918 |
|
@@ -4920,55 +5006,55 @@ msgstr ""
|
|
4920 |
msgid "Last backup job run:"
|
4921 |
msgstr ""
|
4922 |
|
4923 |
-
#: src/backup.php:
|
4924 |
msgid "A very large file was encountered: %s (size: %s Mb)"
|
4925 |
msgstr ""
|
4926 |
|
4927 |
-
#: src/backup.php:
|
4928 |
msgid "%s: unreadable file - could not be backed up"
|
4929 |
msgstr ""
|
4930 |
|
4931 |
-
#: src/backup.php:
|
4932 |
msgid "Table %s has very many rows (%s) - we hope your web hosting company gives you enough resources to dump out that table in the backup"
|
4933 |
msgstr ""
|
4934 |
|
4935 |
-
#: src/backup.php:
|
4936 |
msgid "An error occurred whilst closing the final database file"
|
4937 |
msgstr ""
|
4938 |
|
4939 |
-
#: src/backup.php:
|
4940 |
msgid "Warnings encountered:"
|
4941 |
msgstr ""
|
4942 |
|
4943 |
-
#: src/class-updraftplus.php:
|
4944 |
msgid "The backup apparently succeeded (with warnings) and is now complete"
|
4945 |
msgstr ""
|
4946 |
|
4947 |
-
#: src/class-updraftplus.php:
|
4948 |
msgid "Your free disk space is very low - only %s Mb remain"
|
4949 |
msgstr ""
|
4950 |
|
4951 |
-
#: src/addons/migrator.php:
|
4952 |
msgid "New site:"
|
4953 |
msgstr ""
|
4954 |
|
4955 |
-
#: src/addons/migrator.php:
|
4956 |
msgid "Migrated site (from UpdraftPlus)"
|
4957 |
msgstr ""
|
4958 |
|
4959 |
-
#: src/addons/migrator.php:
|
4960 |
msgid "Enter details for where this new site is to live within your multisite install:"
|
4961 |
msgstr ""
|
4962 |
|
4963 |
-
#: src/addons/migrator.php:
|
4964 |
msgid "Information needed to continue:"
|
4965 |
msgstr ""
|
4966 |
|
4967 |
-
#: src/addons/migrator.php:
|
4968 |
msgid "Network activating theme:"
|
4969 |
msgstr ""
|
4970 |
|
4971 |
-
#: src/addons/migrator.php:
|
4972 |
msgid "Processed plugin:"
|
4973 |
msgstr ""
|
4974 |
|
@@ -4980,64 +5066,64 @@ msgstr ""
|
|
4980 |
msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
|
4981 |
msgstr ""
|
4982 |
|
4983 |
-
#: src/methods/s3.php:828
|
4984 |
msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
4985 |
msgstr ""
|
4986 |
|
4987 |
-
#: src/methods/s3.php:
|
4988 |
msgid "Please check your access credentials."
|
4989 |
msgstr ""
|
4990 |
|
4991 |
-
#: src/addons/s3-enhanced.php:179, src/methods/s3.php:
|
4992 |
msgid "The error reported by %s was:"
|
4993 |
msgstr ""
|
4994 |
|
4995 |
-
#: src/restorer.php:
|
4996 |
msgid "Please supply the requested information, and then continue."
|
4997 |
msgstr ""
|
4998 |
|
4999 |
-
#: src/class-updraftplus.php:
|
5000 |
msgid "Site information:"
|
5001 |
msgstr ""
|
5002 |
|
5003 |
-
#: src/restorer.php:
|
5004 |
msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
|
5005 |
msgstr ""
|
5006 |
|
5007 |
-
#: src/addons/migrator.php:
|
5008 |
-
#: src/class-updraftplus.php:
|
5009 |
msgid "Warning:"
|
5010 |
msgstr ""
|
5011 |
|
5012 |
-
#: src/class-updraftplus.php:
|
5013 |
#: src/restorer.php:154
|
5014 |
msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
|
5015 |
msgstr ""
|
5016 |
|
5017 |
-
#: src/admin.php:
|
5018 |
msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
|
5019 |
msgstr ""
|
5020 |
|
5021 |
-
#: src/admin.php:
|
5022 |
msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
5023 |
msgstr ""
|
5024 |
|
5025 |
-
#: src/admin.php:
|
5026 |
msgid "Close"
|
5027 |
msgstr ""
|
5028 |
|
5029 |
#: src/addons/autobackup.php:330, src/addons/autobackup.php:422,
|
5030 |
-
#: src/admin.php:
|
5031 |
#: src/methods/remotesend.php:74, src/methods/remotesend.php:225,
|
5032 |
#: src/methods/remotesend.php:242
|
5033 |
msgid "Unexpected response:"
|
5034 |
msgstr ""
|
5035 |
|
5036 |
-
#: src/addons/reporting.php:
|
5037 |
msgid "To send to more than one address, separate each address with a comma."
|
5038 |
msgstr ""
|
5039 |
|
5040 |
-
#: src/admin.php:
|
5041 |
msgid "PHP information"
|
5042 |
msgstr ""
|
5043 |
|
@@ -5057,7 +5143,7 @@ msgstr ""
|
|
5057 |
msgid "Do you want to migrate or clone/duplicate a site?"
|
5058 |
msgstr ""
|
5059 |
|
5060 |
-
#: src/addons/migrator.php:
|
5061 |
msgid "<a href=\"%s\">Read this article to see step-by-step how it's done.</a>"
|
5062 |
msgstr ""
|
5063 |
|
@@ -5073,7 +5159,7 @@ msgstr ""
|
|
5073 |
msgid "Also delete from remote storage"
|
5074 |
msgstr ""
|
5075 |
|
5076 |
-
#: src/admin.php:
|
5077 |
msgid "Latest UpdraftPlus.com news:"
|
5078 |
msgstr ""
|
5079 |
|
@@ -5090,11 +5176,11 @@ msgstr ""
|
|
5090 |
msgid "News"
|
5091 |
msgstr ""
|
5092 |
|
5093 |
-
#: src/admin.php:
|
5094 |
msgid "Backup set not found"
|
5095 |
msgstr ""
|
5096 |
|
5097 |
-
#: src/backup.php:
|
5098 |
msgid "%s - could not back this entity up; the corresponding directory does not exist (%s)"
|
5099 |
msgstr ""
|
5100 |
|
@@ -5112,7 +5198,7 @@ msgstr ""
|
|
5112 |
msgid "Blog link"
|
5113 |
msgstr ""
|
5114 |
|
5115 |
-
#: src/admin.php:
|
5116 |
msgid "Testing %s Settings..."
|
5117 |
msgstr ""
|
5118 |
|
@@ -5120,101 +5206,101 @@ msgstr ""
|
|
5120 |
msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
|
5121 |
msgstr ""
|
5122 |
|
5123 |
-
#: src/admin.php:
|
5124 |
msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
|
5125 |
msgstr ""
|
5126 |
|
5127 |
-
#: src/admin.php:
|
5128 |
msgid "Notice"
|
5129 |
msgstr ""
|
5130 |
|
5131 |
-
#: src/backup.php:
|
5132 |
msgid "Errors encountered:"
|
5133 |
msgstr ""
|
5134 |
|
5135 |
-
#: src/admin.php:
|
5136 |
msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
|
5137 |
msgstr ""
|
5138 |
|
5139 |
-
#: src/admin.php:
|
5140 |
msgid "Begun looking for this entity"
|
5141 |
msgstr ""
|
5142 |
|
5143 |
-
#: src/addons/dropbox-folders.php:
|
5144 |
msgid "Store at"
|
5145 |
msgstr ""
|
5146 |
|
5147 |
-
#: src/addons/migrator.php:
|
5148 |
msgid "\"%s\" has no primary key, manual change needed on row %s."
|
5149 |
msgstr ""
|
5150 |
|
5151 |
-
#: src/addons/migrator.php:
|
5152 |
msgid "rows: %d"
|
5153 |
msgstr ""
|
5154 |
|
5155 |
-
#: src/addons/migrator.php:
|
5156 |
msgid "Time taken (seconds):"
|
5157 |
msgstr ""
|
5158 |
|
5159 |
-
#: src/addons/migrator.php:
|
5160 |
msgid "Errors:"
|
5161 |
msgstr ""
|
5162 |
|
5163 |
-
#: src/addons/migrator.php:
|
5164 |
msgid "SQL update commands run:"
|
5165 |
msgstr ""
|
5166 |
|
5167 |
-
#: src/addons/migrator.php:
|
5168 |
msgid "Changes made:"
|
5169 |
msgstr ""
|
5170 |
|
5171 |
-
#: src/addons/migrator.php:
|
5172 |
msgid "Rows examined:"
|
5173 |
msgstr ""
|
5174 |
|
5175 |
-
#: src/addons/migrator.php:
|
5176 |
msgid "Tables examined:"
|
5177 |
msgstr ""
|
5178 |
|
5179 |
-
#: src/addons/migrator.php:
|
5180 |
msgid "Could not get list of tables"
|
5181 |
msgstr ""
|
5182 |
|
5183 |
-
#: src/addons/migrator.php:
|
5184 |
msgid "Warning: the database's site URL (%s) is different to what we expected (%s)"
|
5185 |
msgstr ""
|
5186 |
|
5187 |
-
#: src/addons/migrator.php:
|
5188 |
msgid "Nothing to do: the site URL is already: %s"
|
5189 |
msgstr ""
|
5190 |
|
5191 |
-
#: src/addons/migrator.php:
|
5192 |
-
#: src/addons/migrator.php:
|
5193 |
-
#: src/addons/migrator.php:
|
5194 |
msgid "Error: unexpected empty parameter (%s, %s)"
|
5195 |
msgstr ""
|
5196 |
|
5197 |
-
#: src/addons/migrator.php:
|
5198 |
msgid "Database: search and replace site URL"
|
5199 |
msgstr ""
|
5200 |
|
5201 |
-
#: src/addons/migrator.php:
|
5202 |
msgid "Failed: we did not understand the result returned by the %s operation."
|
5203 |
msgstr ""
|
5204 |
|
5205 |
-
#: src/addons/migrator.php:
|
5206 |
msgid "Failed: the %s operation was not able to start."
|
5207 |
msgstr ""
|
5208 |
|
5209 |
-
#: src/addons/migrator.php:
|
5210 |
msgid "(learn more)"
|
5211 |
msgstr ""
|
5212 |
|
5213 |
-
#: src/addons/migrator.php:
|
5214 |
msgid "Search and replace site location in the database (migrate)"
|
5215 |
msgstr ""
|
5216 |
|
5217 |
-
#: src/addons/migrator.php:
|
5218 |
msgid "All references to the site location in the database will be replaced with your current site URL, which is: %s"
|
5219 |
msgstr ""
|
5220 |
|
@@ -5222,7 +5308,7 @@ msgstr ""
|
|
5222 |
msgid "Blog uploads"
|
5223 |
msgstr ""
|
5224 |
|
5225 |
-
#: src/addons/migrator.php:
|
5226 |
msgid "Must-use plugins"
|
5227 |
msgstr ""
|
5228 |
|
@@ -5234,7 +5320,7 @@ msgstr ""
|
|
5234 |
msgid "starting from next time it is"
|
5235 |
msgstr ""
|
5236 |
|
5237 |
-
#: src/addons/sftp.php:
|
5238 |
msgid "Failure: Port must be an integer."
|
5239 |
msgstr ""
|
5240 |
|
@@ -5242,35 +5328,35 @@ msgstr ""
|
|
5242 |
msgid "password"
|
5243 |
msgstr ""
|
5244 |
|
5245 |
-
#: src/addons/sftp.php:
|
5246 |
msgid "username"
|
5247 |
msgstr ""
|
5248 |
|
5249 |
-
#: src/addons/sftp.php:
|
5250 |
msgid "host name"
|
5251 |
msgstr ""
|
5252 |
|
5253 |
-
#: src/addons/sftp.php:
|
5254 |
msgid "Where to change directory to after logging in - often this is relative to your home directory."
|
5255 |
msgstr ""
|
5256 |
|
5257 |
-
#: src/addons/sftp.php:
|
5258 |
msgid "Directory path"
|
5259 |
msgstr ""
|
5260 |
|
5261 |
#: src/addons/lockadmin.php:156, src/addons/moredatabase.php:246,
|
5262 |
-
#: src/addons/sftp.php:
|
5263 |
-
#: src/methods/openstack2.php:
|
5264 |
#: src/udaddons/options.php:135
|
5265 |
msgid "Password"
|
5266 |
msgstr ""
|
5267 |
|
5268 |
-
#: src/addons/sftp.php:
|
5269 |
msgid "Port"
|
5270 |
msgstr ""
|
5271 |
|
5272 |
-
#: src/addons/moredatabase.php:244, src/addons/sftp.php:
|
5273 |
-
#: src/addons/webdav.php:
|
5274 |
msgid "Host"
|
5275 |
msgstr ""
|
5276 |
|
@@ -5278,7 +5364,7 @@ msgstr ""
|
|
5278 |
msgid "%s Error: Failed to download"
|
5279 |
msgstr ""
|
5280 |
|
5281 |
-
#: src/addons/sftp.php:
|
5282 |
msgid "Check your file permissions: Could not successfully create and enter:"
|
5283 |
msgstr ""
|
5284 |
|
@@ -5322,26 +5408,26 @@ msgstr ""
|
|
5322 |
msgid "WordPress Core"
|
5323 |
msgstr ""
|
5324 |
|
5325 |
-
#: src/methods/addon-base-v2.php:
|
5326 |
msgid "Failed: We were not able to place a file in that directory - please check your credentials."
|
5327 |
msgstr ""
|
5328 |
|
5329 |
-
#: src/addons/googlecloud.php:
|
5330 |
-
#: src/addons/googlecloud.php:
|
5331 |
-
#: src/admin.php:
|
5332 |
-
#: src/methods/stream-base.php:
|
5333 |
msgid "Failed"
|
5334 |
msgstr ""
|
5335 |
|
5336 |
-
#: src/addons/webdav.php:
|
5337 |
msgid "WebDAV URL"
|
5338 |
msgstr ""
|
5339 |
|
5340 |
-
#: src/methods/stream-base.php:
|
5341 |
msgid "Local write failed: Failed to download"
|
5342 |
msgstr ""
|
5343 |
|
5344 |
-
#: src/methods/stream-base.php:
|
5345 |
msgid "Error opening remote file: Failed to download"
|
5346 |
msgstr ""
|
5347 |
|
@@ -5349,14 +5435,14 @@ msgstr ""
|
|
5349 |
msgid "Chunk %s: A %s error occurred"
|
5350 |
msgstr ""
|
5351 |
|
5352 |
-
#: src/addons/googlecloud.php:
|
5353 |
#: src/methods/addon-base-v2.php:76, src/methods/addon-base-v2.php:117,
|
5354 |
#: src/methods/addon-base-v2.php:149, src/methods/addon-base-v2.php:195,
|
5355 |
-
#: src/methods/addon-base-v2.php:
|
5356 |
-
#: src/methods/googledrive.php:
|
5357 |
#: src/methods/stream-base.php:27, src/methods/stream-base.php:144,
|
5358 |
#: src/methods/stream-base.php:150, src/methods/stream-base.php:184,
|
5359 |
-
#: src/methods/stream-base.php:
|
5360 |
msgid "No %s settings were found"
|
5361 |
msgstr ""
|
5362 |
|
@@ -5384,36 +5470,36 @@ msgstr ""
|
|
5384 |
msgid "If you want encryption (e.g. you are storing sensitive business data), then an add-on is available."
|
5385 |
msgstr ""
|
5386 |
|
5387 |
-
#: src/addons/onedrive.php:
|
5388 |
msgid "Your %s account name: %s"
|
5389 |
msgstr ""
|
5390 |
|
5391 |
-
#: src/methods/dropbox.php:
|
5392 |
msgid "though part of the returned information was not as expected - your mileage may vary"
|
5393 |
msgstr ""
|
5394 |
|
5395 |
-
#: src/methods/dropbox.php:
|
5396 |
msgid "you have authenticated your %s account"
|
5397 |
msgstr ""
|
5398 |
|
5399 |
-
#: src/methods/dropbox.php:
|
5400 |
msgid "there's an add-on for that."
|
5401 |
msgstr ""
|
5402 |
|
5403 |
-
#: src/methods/dropbox.php:
|
5404 |
msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
|
5405 |
msgstr ""
|
5406 |
|
5407 |
-
#: src/methods/dropbox.php:
|
5408 |
msgid "Backups are saved in"
|
5409 |
msgstr ""
|
5410 |
|
5411 |
-
#: src/methods/dropbox.php:
|
5412 |
msgid "Need to use sub-folders?"
|
5413 |
msgstr ""
|
5414 |
|
5415 |
-
#: src/methods/dropbox.php:
|
5416 |
-
#: src/methods/dropbox.php:
|
5417 |
msgid "error: failed to upload file to %s (see log file for more)"
|
5418 |
msgstr ""
|
5419 |
|
@@ -5421,67 +5507,67 @@ msgstr ""
|
|
5421 |
msgid "You do not appear to be authenticated with Dropbox"
|
5422 |
msgstr ""
|
5423 |
|
5424 |
-
#: src/methods/s3.php:
|
5425 |
msgid "The communication with %s was not encrypted."
|
5426 |
msgstr ""
|
5427 |
|
5428 |
-
#: src/methods/s3.php:
|
5429 |
msgid "The communication with %s was encrypted."
|
5430 |
msgstr ""
|
5431 |
|
5432 |
-
#: src/addons/googlecloud.php:
|
5433 |
msgid "We accessed the bucket, and were able to create files within it."
|
5434 |
msgstr ""
|
5435 |
|
5436 |
-
#: src/addons/googlecloud.php:
|
5437 |
-
#: src/methods/s3.php:
|
5438 |
msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
|
5439 |
msgstr ""
|
5440 |
|
5441 |
-
#: src/addons/googlecloud.php:
|
5442 |
-
#: src/methods/s3.php:
|
5443 |
msgid "Failure"
|
5444 |
msgstr ""
|
5445 |
|
5446 |
-
#: src/methods/s3.php:
|
5447 |
msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
|
5448 |
msgstr ""
|
5449 |
|
5450 |
-
#: src/addons/s3-enhanced.php:152, src/methods/openstack2.php:
|
5451 |
-
#: src/methods/s3.php:
|
5452 |
msgid "Region"
|
5453 |
msgstr ""
|
5454 |
|
5455 |
-
#: src/addons/googlecloud.php:
|
5456 |
-
#: src/methods/s3.php:
|
5457 |
msgid "Failure: No bucket details were given."
|
5458 |
msgstr ""
|
5459 |
|
5460 |
-
#: src/methods/s3.php:
|
5461 |
msgid "API secret"
|
5462 |
msgstr ""
|
5463 |
|
5464 |
-
#: src/methods/s3.php:889
|
5465 |
msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
|
5466 |
msgstr ""
|
5467 |
|
5468 |
-
#: src/methods/s3.php:888
|
5469 |
msgid "%s location"
|
5470 |
msgstr ""
|
5471 |
|
5472 |
-
#: src/methods/s3.php:884
|
5473 |
msgid "%s secret key"
|
5474 |
msgstr ""
|
5475 |
|
5476 |
-
#: src/methods/s3.php:880
|
5477 |
msgid "%s access key"
|
5478 |
msgstr ""
|
5479 |
|
5480 |
-
#: src/methods/s3.php:845
|
5481 |
msgid "If you see errors about SSL certificates, then please go here for help."
|
5482 |
msgstr ""
|
5483 |
|
5484 |
-
#: src/methods/s3.php:843
|
5485 |
msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
|
5486 |
msgstr ""
|
5487 |
|
@@ -5522,89 +5608,82 @@ msgstr ""
|
|
5522 |
msgid "WordPress Backup"
|
5523 |
msgstr ""
|
5524 |
|
5525 |
-
#: src/methods/cloudfiles.php:
|
5526 |
msgid "We accessed the container, and were able to create files within it."
|
5527 |
msgstr ""
|
5528 |
|
5529 |
-
#: src/methods/cloudfiles.php:
|
5530 |
msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
|
5531 |
msgstr ""
|
5532 |
|
5533 |
-
#: src/methods/cloudfiles.php:
|
5534 |
msgid "Failure: No container details were given."
|
5535 |
msgstr ""
|
5536 |
|
5537 |
-
#: src/addons/moredatabase.php:245, src/addons/sftp.php:
|
5538 |
-
#: src/addons/webdav.php:
|
5539 |
-
#: src/methods/cloudfiles.php:
|
5540 |
msgid "Username"
|
5541 |
msgstr ""
|
5542 |
|
5543 |
-
#: src/methods/cloudfiles-new.php:
|
5544 |
-
#: src/methods/s3.php:
|
5545 |
msgid "API key"
|
5546 |
msgstr ""
|
5547 |
|
5548 |
-
#: src/addons/migrator.php:
|
5549 |
#: src/addons/moredatabase.php:82, src/addons/moredatabase.php:84,
|
5550 |
-
#: src/addons/moredatabase.php:86, src/addons/sftp.php:
|
5551 |
-
#: src/addons/sftp.php:
|
5552 |
-
#: src/admin.php:
|
5553 |
-
#: src/methods/cloudfiles-new.php:
|
5554 |
-
#: src/methods/cloudfiles.php:
|
5555 |
#: src/methods/ftp.php:380, src/methods/ftp.php:384,
|
5556 |
#: src/methods/openstack2.php:173, src/methods/openstack2.php:178,
|
5557 |
#: src/methods/openstack2.php:183, src/methods/openstack2.php:188,
|
5558 |
-
#: src/methods/s3.php:
|
5559 |
msgid "Failure: No %s was given."
|
5560 |
msgstr ""
|
5561 |
|
5562 |
-
#: src/methods/cloudfiles-new.php:
|
5563 |
-
#: src/methods/openstack-base.php:549, src/methods/
|
|
|
5564 |
msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
|
5565 |
msgstr ""
|
5566 |
|
5567 |
-
#: src/methods/cloudfiles.php:
|
5568 |
-
msgid "Cloud Files container"
|
5569 |
-
msgstr ""
|
5570 |
-
|
5571 |
-
#: src/methods/cloudfiles.php:510
|
5572 |
-
msgid "Cloud Files API key"
|
5573 |
-
msgstr ""
|
5574 |
-
|
5575 |
-
#: src/methods/cloudfiles.php:506
|
5576 |
msgid "Cloud Files username"
|
5577 |
msgstr ""
|
5578 |
|
5579 |
-
#: src/addons/cloudfiles-enhanced.php:38, src/methods/cloudfiles-new.php:
|
5580 |
-
#: src/methods/cloudfiles.php:
|
5581 |
msgid "UK"
|
5582 |
msgstr ""
|
5583 |
|
5584 |
-
#: src/addons/cloudfiles-enhanced.php:37, src/methods/cloudfiles-new.php:
|
5585 |
-
#: src/methods/cloudfiles.php:
|
5586 |
msgid "US (default)"
|
5587 |
msgstr ""
|
5588 |
|
5589 |
-
#: src/methods/cloudfiles.php:
|
5590 |
msgid "US or UK Cloud"
|
5591 |
msgstr ""
|
5592 |
|
5593 |
-
#: src/methods/cloudfiles-new.php:
|
5594 |
-
#: src/methods/openstack2.php:
|
5595 |
msgid "Also, you should read this important FAQ."
|
5596 |
msgstr ""
|
5597 |
|
5598 |
-
#: src/methods/cloudfiles-new.php:
|
5599 |
msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
|
5600 |
msgstr ""
|
5601 |
|
5602 |
-
#: src/admin.php:
|
5603 |
msgid "Test %s Settings"
|
5604 |
msgstr ""
|
5605 |
|
5606 |
-
#: src/class-updraftplus.php:
|
5607 |
-
#: src/methods/cloudfiles.php:405, src/methods/stream-base.php:
|
5608 |
msgid "Error opening local file: Failed to download"
|
5609 |
msgstr ""
|
5610 |
|
@@ -5619,9 +5698,9 @@ msgstr ""
|
|
5619 |
msgid "%s Error: Failed to upload"
|
5620 |
msgstr ""
|
5621 |
|
5622 |
-
#: src/addons/googlecloud.php:
|
5623 |
-
#: src/class-updraftplus.php:
|
5624 |
-
#: src/methods/googledrive.php:
|
5625 |
msgid "%s Error: Failed to open local file"
|
5626 |
msgstr ""
|
5627 |
|
@@ -5632,154 +5711,157 @@ msgstr ""
|
|
5632 |
|
5633 |
#: src/addons/cloudfiles-enhanced.php:99,
|
5634 |
#: src/addons/cloudfiles-enhanced.php:112,
|
5635 |
-
#: src/addons/cloudfiles-enhanced.php:116, src/methods/cloudfiles.php:
|
5636 |
-
#: src/methods/cloudfiles.php:
|
5637 |
msgid "Cloud Files authentication failed"
|
5638 |
msgstr ""
|
5639 |
|
5640 |
-
#: src/addons/googlecloud.php:
|
5641 |
msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
|
5642 |
msgstr ""
|
5643 |
|
5644 |
-
#: src/
|
5645 |
-
|
|
|
|
|
|
|
|
|
5646 |
msgid "Client Secret"
|
5647 |
msgstr ""
|
5648 |
|
5649 |
-
#: src/addons/googlecloud.php:
|
5650 |
msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
|
5651 |
msgstr ""
|
5652 |
|
5653 |
-
#: src/addons/googlecloud.php:
|
5654 |
-
#: src/methods/googledrive.php:
|
5655 |
msgid "Client ID"
|
5656 |
msgstr ""
|
5657 |
|
5658 |
-
#: src/addons/googlecloud.php:
|
5659 |
msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
|
5660 |
msgstr ""
|
5661 |
|
5662 |
-
#: src/addons/googlecloud.php:
|
5663 |
msgid "Select 'Web Application' as the application type."
|
5664 |
msgstr ""
|
5665 |
|
5666 |
-
#: src/addons/googlecloud.php:
|
5667 |
msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
|
5668 |
msgstr ""
|
5669 |
|
5670 |
-
#: src/methods/addon-base-v2.php:243, src/methods/
|
5671 |
-
#: src/methods/
|
5672 |
-
#: src/methods/
|
5673 |
-
#: src/methods/
|
|
|
|
|
5674 |
msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
|
5675 |
msgstr ""
|
5676 |
|
5677 |
-
#: src/addons/googlecloud.php:
|
5678 |
-
#: src/addons/googlecloud.php:
|
5679 |
-
#: src/methods/googledrive.php:
|
5680 |
-
#: src/methods/googledrive.php:
|
5681 |
msgid "Account is not authorized."
|
5682 |
msgstr ""
|
5683 |
|
5684 |
-
#: src/methods/googledrive.php:
|
5685 |
-
#: src/methods/googledrive.php:
|
5686 |
#: src/methods/stream-base.php:200
|
5687 |
msgid "Failed to upload to %s"
|
5688 |
msgstr ""
|
5689 |
|
5690 |
-
#: src/methods/googledrive.php:
|
5691 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded is %d bytes"
|
5692 |
msgstr ""
|
5693 |
|
5694 |
-
#: src/methods/googledrive.php:
|
5695 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
|
5696 |
msgstr ""
|
5697 |
|
5698 |
-
#: src/addons/googlecloud.php:
|
5699 |
-
#: src/methods/googledrive.php:
|
5700 |
msgid "you have authenticated your %s account."
|
5701 |
msgstr ""
|
5702 |
|
5703 |
-
#: src/addons/googlecloud.php:
|
5704 |
-
#: src/addons/onedrive.php:
|
5705 |
-
#: src/methods/addon-base-v2.php:
|
5706 |
-
#: src/methods/googledrive.php:
|
5707 |
-
#: src/methods/s3.php:
|
5708 |
msgid "Success"
|
5709 |
msgstr ""
|
5710 |
|
5711 |
-
#: src/addons/onedrive.php:
|
5712 |
-
#: src/methods/dropbox.php:
|
5713 |
msgid "Your %s quota usage: %s %% used, %s available"
|
5714 |
msgstr ""
|
5715 |
|
5716 |
-
#: src/addons/googlecloud.php:
|
5717 |
msgid "Authorization failed"
|
5718 |
msgstr ""
|
5719 |
|
5720 |
-
#: src/addons/googlecloud.php:
|
5721 |
msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
|
5722 |
msgstr ""
|
5723 |
|
5724 |
-
#: src/methods/addon-not-yet-present.php:
|
5725 |
msgid "follow this link to get it"
|
5726 |
msgstr ""
|
5727 |
|
5728 |
-
#: src/methods/addon-not-yet-present.php:
|
5729 |
msgid "%s support is available as an add-on"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
#: src/methods/addon-not-yet-present.php:28,
|
5733 |
-
#: src/methods/addon-not-yet-present.php:
|
5734 |
-
#: src/methods/addon-not-yet-present.php:
|
5735 |
-
#: src/methods/addon-not-yet-present.php:61
|
5736 |
msgid "You do not have the UpdraftPlus %s add-on installed - get it from %s"
|
5737 |
msgstr ""
|
5738 |
|
5739 |
-
#: src/includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:123,
|
5740 |
-
#: src/includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php:124,
|
5741 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:126,
|
5742 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:127
|
5743 |
msgid "You need to re-authenticate with %s, as your existing credentials are not working."
|
5744 |
msgstr ""
|
5745 |
|
5746 |
-
#: src/addons/migrator.php:
|
5747 |
-
#: src/admin.php:
|
5748 |
-
#: src/restorer.php:
|
5749 |
msgid "OK"
|
5750 |
msgstr ""
|
5751 |
|
5752 |
-
#: src/restorer.php:
|
5753 |
msgid "Table prefix has changed: changing %s table field(s) accordingly:"
|
5754 |
msgstr ""
|
5755 |
|
5756 |
-
#: src/addons/migrator.php:
|
5757 |
msgid "the database query being run was:"
|
5758 |
msgstr ""
|
5759 |
|
5760 |
-
#: src/restorer.php:
|
5761 |
msgid "will restore as:"
|
5762 |
msgstr ""
|
5763 |
|
5764 |
-
#: src/class-updraftplus.php:
|
5765 |
-
#: src/restorer.php:
|
5766 |
msgid "Old table prefix:"
|
5767 |
msgstr ""
|
5768 |
|
5769 |
-
#: src/addons/reporting.php:70, src/addons/reporting.php:
|
5770 |
-
#: src/backup.php:
|
5771 |
msgid "Backup of:"
|
5772 |
msgstr ""
|
5773 |
|
5774 |
-
#: src/restorer.php:
|
5775 |
msgid "Failed to open database file"
|
5776 |
msgstr ""
|
5777 |
|
5778 |
-
#: src/restorer.php:
|
5779 |
msgid "Failed to find database file"
|
5780 |
msgstr ""
|
5781 |
|
5782 |
-
#: src/restorer.php:
|
5783 |
msgid "Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method."
|
5784 |
msgstr ""
|
5785 |
|
@@ -5839,60 +5921,61 @@ msgstr ""
|
|
5839 |
msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
|
5840 |
msgstr ""
|
5841 |
|
5842 |
-
#: src/admin.php:
|
5843 |
msgid "Could not find one of the files for restoration"
|
5844 |
msgstr ""
|
5845 |
|
5846 |
-
#: src/admin.php:
|
5847 |
msgid "Error message"
|
5848 |
msgstr ""
|
5849 |
|
5850 |
-
#: src/admin.php:
|
5851 |
msgid "The backup records do not contain information about the proper size of this file."
|
5852 |
msgstr ""
|
5853 |
|
5854 |
-
#: src/admin.php:
|
5855 |
msgid "Archive is expected to be size:"
|
5856 |
msgstr ""
|
5857 |
|
5858 |
-
#: src/admin.php:
|
5859 |
msgid "If making a request for support, please include this information:"
|
5860 |
msgstr ""
|
5861 |
|
5862 |
-
#: src/admin.php:
|
5863 |
msgid "ABORT: Could not find the information on which entities to restore."
|
5864 |
msgstr ""
|
5865 |
|
5866 |
-
#: src/admin.php:
|
5867 |
msgid "UpdraftPlus Restoration: Progress"
|
5868 |
msgstr ""
|
5869 |
|
5870 |
-
#: src/admin.php:
|
5871 |
msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
|
5872 |
msgstr ""
|
5873 |
|
5874 |
-
#: src/admin.php:
|
5875 |
msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
|
5876 |
msgstr ""
|
5877 |
|
5878 |
-
#: src/admin.php:
|
5879 |
msgid "Delete this backup set"
|
5880 |
msgstr ""
|
5881 |
|
5882 |
-
#: src/admin.php:
|
5883 |
msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
|
5884 |
msgstr ""
|
5885 |
|
5886 |
-
#: src/admin.php:
|
5887 |
msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
|
5888 |
msgstr ""
|
5889 |
|
5890 |
-
#: src/admin.php:
|
5891 |
msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
|
5892 |
msgstr ""
|
5893 |
|
5894 |
-
#: src/methods/cloudfiles-new.php:
|
5895 |
-
#: src/methods/openstack-base.php:549, src/methods/
|
|
|
5896 |
msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
|
5897 |
msgstr ""
|
5898 |
|
@@ -5928,23 +6011,23 @@ msgstr ""
|
|
5928 |
msgid "Use the server's SSL certificates"
|
5929 |
msgstr ""
|
5930 |
|
5931 |
-
#: src/admin.php:
|
5932 |
msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
|
5933 |
msgstr ""
|
5934 |
|
5935 |
-
#: src/admin.php:
|
5936 |
msgid "click here"
|
5937 |
msgstr ""
|
5938 |
|
5939 |
-
#: src/admin.php:
|
5940 |
msgid "or, to reset this option"
|
5941 |
msgstr ""
|
5942 |
|
5943 |
-
#: src/admin.php:
|
5944 |
msgid "Follow this link to attempt to create the directory and set the permissions"
|
5945 |
msgstr ""
|
5946 |
|
5947 |
-
#: src/admin.php:
|
5948 |
msgid "Backup directory specified is writable, which is good."
|
5949 |
msgstr ""
|
5950 |
|
@@ -5976,15 +6059,15 @@ msgstr ""
|
|
5976 |
msgid "Advanced / Debugging Settings"
|
5977 |
msgstr ""
|
5978 |
|
5979 |
-
#: src/admin.php:
|
5980 |
msgid "Requesting start of backup..."
|
5981 |
msgstr ""
|
5982 |
|
5983 |
-
#: src/addons/morefiles.php:297, src/admin.php:
|
5984 |
msgid "Cancel"
|
5985 |
msgstr ""
|
5986 |
|
5987 |
-
#: src/addons/reporting.php:
|
5988 |
msgid "None"
|
5989 |
msgstr ""
|
5990 |
|
@@ -6009,11 +6092,11 @@ msgstr ""
|
|
6009 |
msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
|
6010 |
msgstr ""
|
6011 |
|
6012 |
-
#: src/addons/morefiles.php:443, src/admin.php:
|
6013 |
msgid "Exclude these:"
|
6014 |
msgstr ""
|
6015 |
|
6016 |
-
#: src/admin.php:
|
6017 |
msgid "Any other directories found inside wp-content"
|
6018 |
msgstr ""
|
6019 |
|
@@ -6029,49 +6112,45 @@ msgstr ""
|
|
6029 |
msgid "To fix the time at which a backup should take place,"
|
6030 |
msgstr ""
|
6031 |
|
6032 |
-
#: src/admin.php:
|
6033 |
msgid "Monthly"
|
6034 |
msgstr ""
|
6035 |
|
6036 |
-
#: src/admin.php:
|
6037 |
msgid "Fortnightly"
|
6038 |
msgstr ""
|
6039 |
|
6040 |
-
#: src/admin.php:
|
6041 |
msgid "Weekly"
|
6042 |
msgstr ""
|
6043 |
|
6044 |
-
#: src/admin.php:
|
6045 |
msgid "Daily"
|
6046 |
msgstr ""
|
6047 |
|
6048 |
-
#: src/admin.php:
|
6049 |
msgid "Download log file"
|
6050 |
msgstr ""
|
6051 |
|
6052 |
-
#: src/admin.php:
|
6053 |
msgid "The folder exists, but your webserver does not have permission to write to it."
|
6054 |
msgstr ""
|
6055 |
|
6056 |
-
#: src/admin.php:
|
6057 |
msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
|
6058 |
msgstr ""
|
6059 |
|
6060 |
-
#: src/admin.php:
|
6061 |
msgid "The request to the filesystem to create the directory failed."
|
6062 |
msgstr ""
|
6063 |
|
6064 |
-
#: src/addons/migrator.php:
|
6065 |
-
#: src/admin.php:
|
6066 |
#: src/templates/wp-admin/settings/delete-and-restore-modals.php:5
|
6067 |
msgid "Delete"
|
6068 |
msgstr ""
|
6069 |
|
6070 |
-
#: src/admin.php:
|
6071 |
-
msgid "(None)"
|
6072 |
-
msgstr ""
|
6073 |
-
|
6074 |
-
#: src/admin.php:2844
|
6075 |
msgid "show log"
|
6076 |
msgstr ""
|
6077 |
|
@@ -6176,10 +6255,6 @@ msgstr ""
|
|
6176 |
msgid "Multisite"
|
6177 |
msgstr ""
|
6178 |
|
6179 |
-
#: src/admin.php:2507
|
6180 |
-
msgid "Go here for help."
|
6181 |
-
msgstr ""
|
6182 |
-
|
6183 |
#: src/templates/wp-admin/settings/tab-status.php:86
|
6184 |
msgid "Perform a one-time backup"
|
6185 |
msgstr ""
|
@@ -6229,27 +6304,27 @@ msgstr ""
|
|
6229 |
msgid "Delete backup set"
|
6230 |
msgstr ""
|
6231 |
|
6232 |
-
#: src/admin.php:
|
6233 |
msgid "Download error: the server sent us a response which we did not understand."
|
6234 |
msgstr ""
|
6235 |
|
6236 |
#: src/addons/backblaze.php:209, src/addons/cloudfiles-enhanced.php:102,
|
6237 |
-
#: src/addons/migrator.php:
|
6238 |
-
#: src/addons/migrator.php:
|
6239 |
-
#: src/addons/migrator.php:
|
6240 |
-
#: src/addons/migrator.php:
|
6241 |
-
#: src/addons/migrator.php:
|
6242 |
-
#: src/addons/migrator.php:
|
6243 |
-
#: src/addons/migrator.php:
|
6244 |
#: src/addons/s3-enhanced.php:132, src/addons/s3-enhanced.php:134,
|
6245 |
-
#: src/addons/sftp.php:
|
6246 |
-
#: src/admin.php:
|
6247 |
#: src/methods/remotesend.php:71, src/methods/remotesend.php:239,
|
6248 |
-
#: src/methods/updraftvault.php:
|
6249 |
msgid "Error:"
|
6250 |
msgstr ""
|
6251 |
|
6252 |
-
#: src/admin.php:
|
6253 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:32
|
6254 |
msgid "calculating..."
|
6255 |
msgstr ""
|
@@ -6270,15 +6345,15 @@ msgstr ""
|
|
6270 |
msgid "This is a count of the contents of your Updraft directory"
|
6271 |
msgstr ""
|
6272 |
|
6273 |
-
#: src/addons/google-enhanced.php:
|
6274 |
-
#: src/methods/googledrive.php:
|
6275 |
-
#: src/methods/googledrive.php:
|
6276 |
-
#: src/methods/googledrive.php:
|
6277 |
-
#: src/methods/googledrive.php:
|
6278 |
-
#: src/methods/googledrive.php:
|
6279 |
-
#: src/methods/googledrive.php:
|
6280 |
-
#: src/methods/googledrive.php:
|
6281 |
-
#: src/methods/googledrive.php:
|
6282 |
msgid "Google Drive"
|
6283 |
msgstr ""
|
6284 |
|
@@ -6294,32 +6369,32 @@ msgstr ""
|
|
6294 |
msgid "More tasks:"
|
6295 |
msgstr ""
|
6296 |
|
6297 |
-
#: src/admin.php:
|
6298 |
msgid "Download most recently modified log file"
|
6299 |
msgstr ""
|
6300 |
|
6301 |
-
#: src/admin.php:
|
6302 |
msgid "(Nothing yet logged)"
|
6303 |
msgstr ""
|
6304 |
|
6305 |
#: src/addons/autobackup.php:325, src/addons/autobackup.php:420,
|
6306 |
-
#: src/admin.php:
|
6307 |
msgid "Last log message"
|
6308 |
msgstr ""
|
6309 |
|
6310 |
-
#: src/addons/migrator.php:
|
6311 |
#: src/templates/wp-admin/settings/tab-status.php:30
|
6312 |
msgid "Restore"
|
6313 |
msgstr ""
|
6314 |
|
6315 |
-
#: src/admin.php:
|
6316 |
#: src/templates/wp-admin/settings/tab-status.php:27
|
6317 |
msgid "Backup Now"
|
6318 |
msgstr ""
|
6319 |
|
6320 |
-
#: src/addons/migrator.php:
|
6321 |
-
#: src/addons/reporting.php:
|
6322 |
-
#: src/admin.php:
|
6323 |
#: src/includes/class-wpadmin-commands.php:147,
|
6324 |
#: src/includes/class-wpadmin-commands.php:480,
|
6325 |
#: src/templates/wp-admin/settings/delete-and-restore-modals.php:81,
|
@@ -6327,7 +6402,7 @@ msgstr ""
|
|
6327 |
msgid "Database"
|
6328 |
msgstr ""
|
6329 |
|
6330 |
-
#: src/admin.php:
|
6331 |
msgid "Files"
|
6332 |
msgstr ""
|
6333 |
|
@@ -6339,11 +6414,11 @@ msgstr ""
|
|
6339 |
msgid "All the times shown in this section are using WordPress's configured time zone, which you can set in Settings -> General"
|
6340 |
msgstr ""
|
6341 |
|
6342 |
-
#: src/admin.php:
|
6343 |
msgid "At the same time as the files backup"
|
6344 |
msgstr ""
|
6345 |
|
6346 |
-
#: src/admin.php:
|
6347 |
msgid "Nothing currently scheduled"
|
6348 |
msgstr ""
|
6349 |
|
@@ -6355,15 +6430,15 @@ msgstr ""
|
|
6355 |
msgid "JavaScript warning"
|
6356 |
msgstr ""
|
6357 |
|
6358 |
-
#: src/admin.php:
|
6359 |
msgid "Delete Old Directories"
|
6360 |
msgstr ""
|
6361 |
|
6362 |
-
#: src/admin.php:
|
6363 |
msgid "Current limit is:"
|
6364 |
msgstr ""
|
6365 |
|
6366 |
-
#: src/admin.php:
|
6367 |
msgid "Your backup has been restored."
|
6368 |
msgstr ""
|
6369 |
|
@@ -6375,132 +6450,138 @@ msgstr ""
|
|
6375 |
msgid "Lead developer's homepage"
|
6376 |
msgstr ""
|
6377 |
|
6378 |
-
#: src/
|
|
|
|
|
|
|
|
|
6379 |
msgid "Your settings have been wiped."
|
6380 |
msgstr ""
|
6381 |
|
6382 |
-
#: src/admin.php:
|
6383 |
msgid "Backup directory successfully created."
|
6384 |
msgstr ""
|
6385 |
|
6386 |
-
#: src/admin.php:
|
6387 |
msgid "Backup directory could not be created"
|
6388 |
msgstr ""
|
6389 |
|
6390 |
-
#: src/admin.php:
|
6391 |
msgid "Old directory removal failed for some reason. You may want to do this manually."
|
6392 |
msgstr ""
|
6393 |
|
6394 |
-
#: src/admin.php:
|
6395 |
msgid "Old directories successfully removed."
|
6396 |
msgstr ""
|
6397 |
|
6398 |
-
#: src/admin.php:
|
6399 |
msgid "Remove old directories"
|
6400 |
msgstr ""
|
6401 |
|
6402 |
-
#: src/addons/migrator.php:
|
6403 |
-
#: src/admin.php:
|
6404 |
-
#: src/admin.php:
|
6405 |
msgid "Return to UpdraftPlus Configuration"
|
6406 |
msgstr ""
|
6407 |
|
6408 |
-
#: src/admin.php:
|
6409 |
-
#: src/admin.php:
|
6410 |
#: src/templates/wp-admin/settings/existing-backups-table.php:16
|
6411 |
msgid "Actions"
|
6412 |
msgstr ""
|
6413 |
|
6414 |
-
#: src/admin.php:
|
6415 |
msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
|
6416 |
msgstr ""
|
6417 |
|
6418 |
-
#: src/admin.php:
|
6419 |
msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
|
6420 |
msgstr ""
|
6421 |
|
6422 |
-
#: src/admin.php:
|
6423 |
msgid "No local copy present."
|
6424 |
msgstr ""
|
6425 |
|
6426 |
-
#: src/admin.php:
|
6427 |
msgid "Download in progress"
|
6428 |
msgstr ""
|
6429 |
|
6430 |
-
#: src/admin.php:
|
6431 |
msgid "File ready."
|
6432 |
msgstr ""
|
6433 |
|
6434 |
-
#: src/admin.php:
|
6435 |
msgid "Download failed"
|
6436 |
msgstr ""
|
6437 |
|
6438 |
-
#: src/admin.php:
|
6439 |
-
#: src/class-updraftplus.php:
|
6440 |
#: src/methods/addon-base-v2.php:95, src/methods/addon-base-v2.php:100,
|
6441 |
#: src/methods/addon-base-v2.php:205, src/methods/addon-base-v2.php:225,
|
6442 |
-
#: src/methods/stream-base.php:200, src/restorer.php:
|
6443 |
-
#: src/restorer.php:
|
6444 |
msgid "Error"
|
6445 |
msgstr ""
|
6446 |
|
6447 |
-
#: src/admin.php:
|
6448 |
msgid "Could not find that job - perhaps it has already finished?"
|
6449 |
msgstr ""
|
6450 |
|
6451 |
-
#: src/admin.php:
|
6452 |
msgid "Job deleted"
|
6453 |
msgstr ""
|
6454 |
|
6455 |
-
#: src/admin.php:
|
6456 |
msgid "OK. You should soon see activity in the \"Last log message\" field below."
|
6457 |
msgstr ""
|
6458 |
|
6459 |
-
#: src/admin.php:
|
6460 |
msgid "Nothing yet logged"
|
6461 |
msgstr ""
|
6462 |
|
6463 |
-
#: src/admin.php:
|
6464 |
msgid "Please consult this FAQ if you have problems backing up."
|
6465 |
msgstr ""
|
6466 |
|
6467 |
-
#: src/admin.php:
|
6468 |
msgid "Your website is hosted using the %s web server."
|
6469 |
msgstr ""
|
6470 |
|
6471 |
-
#: src/admin.php:
|
6472 |
msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
|
6473 |
msgstr ""
|
6474 |
|
6475 |
-
#: src/admin.php:
|
6476 |
msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
|
6477 |
msgstr ""
|
6478 |
|
6479 |
-
#: src/
|
6480 |
-
#: src/admin.php:
|
6481 |
-
#: src/admin.php:
|
6482 |
-
#: src/methods/cloudfiles.php:
|
6483 |
-
#: src/methods/
|
6484 |
-
#: src/methods/
|
|
|
|
|
6485 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:27,
|
6486 |
-
#: src/udaddons/updraftplus-addons.php:
|
6487 |
msgid "Warning"
|
6488 |
msgstr ""
|
6489 |
|
6490 |
-
#: src/admin.php:
|
6491 |
msgid "Add-Ons / Pro Support"
|
6492 |
msgstr ""
|
6493 |
|
6494 |
-
#: src/admin.php:
|
6495 |
#: src/templates/wp-admin/settings/tab-bar.php:7
|
6496 |
msgid "Settings"
|
6497 |
msgstr ""
|
6498 |
|
6499 |
-
#: src/backup.php:
|
6500 |
msgid "Could not create %s zip. Consult the log file for more information."
|
6501 |
msgstr ""
|
6502 |
|
6503 |
-
#: src/backup.php:
|
6504 |
msgid "Infinite recursion: consult your log for more information"
|
6505 |
msgstr ""
|
6506 |
|
@@ -6512,50 +6593,50 @@ msgstr ""
|
|
6512 |
msgid "Like UpdraftPlus and can spare one minute?"
|
6513 |
msgstr ""
|
6514 |
|
6515 |
-
#: src/addons/azure.php:218, src/class-updraftplus.php:
|
6516 |
-
#: src/methods/googledrive.php:
|
6517 |
msgid "File not found"
|
6518 |
msgstr ""
|
6519 |
|
6520 |
-
#: src/class-updraftplus.php:
|
6521 |
msgid "The decryption key used:"
|
6522 |
msgstr ""
|
6523 |
|
6524 |
-
#: src/class-updraftplus.php:
|
6525 |
#: src/restorer.php:389
|
6526 |
msgid "Decryption failed. The most likely cause is that you used the wrong key."
|
6527 |
msgstr ""
|
6528 |
|
6529 |
-
#: src/class-updraftplus.php:
|
6530 |
#: src/restorer.php:376
|
6531 |
msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
|
6532 |
msgstr ""
|
6533 |
|
6534 |
-
#: src/backup.php:
|
6535 |
msgid "Could not open the backup file for writing"
|
6536 |
msgstr ""
|
6537 |
|
6538 |
-
#: src/class-updraftplus.php:
|
6539 |
msgid "Could not save backup history because we have no backup array. Backup probably failed."
|
6540 |
msgstr ""
|
6541 |
|
6542 |
-
#: src/class-updraftplus.php:
|
6543 |
msgid "Could not read the directory"
|
6544 |
msgstr ""
|
6545 |
|
6546 |
-
#: src/admin.php:
|
6547 |
msgid "Backup directory (%s) is not writable, or does not exist."
|
6548 |
msgstr ""
|
6549 |
|
6550 |
-
#: src/backup.php:
|
6551 |
msgid "WordPress backup is complete"
|
6552 |
msgstr ""
|
6553 |
|
6554 |
-
#: src/class-updraftplus.php:
|
6555 |
msgid "The backup attempt has finished, apparently unsuccessfully"
|
6556 |
msgstr ""
|
6557 |
|
6558 |
-
#: src/class-updraftplus.php:
|
6559 |
msgid "The backup apparently succeeded and is now complete"
|
6560 |
msgstr ""
|
6561 |
|
@@ -6563,38 +6644,38 @@ msgstr ""
|
|
6563 |
msgid "Encryption error occurred when encrypting database. Encryption aborted."
|
6564 |
msgstr ""
|
6565 |
|
6566 |
-
#: src/class-updraftplus.php:
|
6567 |
msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
|
6568 |
msgstr ""
|
6569 |
|
6570 |
-
#: src/class-updraftplus.php:
|
6571 |
msgid "Others"
|
6572 |
msgstr ""
|
6573 |
|
6574 |
-
#: src/addons/multisite.php:467, src/class-updraftplus.php:
|
6575 |
msgid "Uploads"
|
6576 |
msgstr ""
|
6577 |
|
6578 |
-
#: src/class-updraftplus.php:
|
6579 |
msgid "Themes"
|
6580 |
msgstr ""
|
6581 |
|
6582 |
-
#: src/class-updraftplus.php:
|
6583 |
msgid "Plugins"
|
6584 |
msgstr ""
|
6585 |
|
6586 |
-
#: src/class-updraftplus.php:
|
6587 |
msgid "No log files were found."
|
6588 |
msgstr ""
|
6589 |
|
6590 |
-
#: src/admin.php:
|
6591 |
msgid "The log file could not be read."
|
6592 |
msgstr ""
|
6593 |
|
6594 |
-
#: src/admin.php:
|
6595 |
-
#: src/admin.php:
|
6596 |
-
#: src/class-updraftplus.php:
|
6597 |
-
#: src/class-updraftplus.php:
|
6598 |
msgid "UpdraftPlus notice:"
|
6599 |
msgstr ""
|
6600 |
|
11 |
"Language: af_ZA\n"
|
12 |
"Project-Id-Version: UpdraftPlus\n"
|
13 |
|
14 |
+
#: src/addons/googlecloud.php:979, src/addons/googlecloud.php:980,
|
15 |
+
#: src/addons/googlecloud.php:981
|
16 |
+
msgid "Western Europe %s"
|
17 |
+
msgstr ""
|
18 |
+
|
19 |
+
#: src/addons/googlecloud.php:978
|
20 |
+
msgid "South-east Australia %s"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: src/addons/googlecloud.php:977
|
24 |
+
msgid "South-east Asia %s"
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: src/addons/googlecloud.php:976
|
28 |
+
msgid "North-east Asia %s"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: src/addons/googlecloud.php:975
|
32 |
+
msgid "Eastern Asia-Pacific %s"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: src/addons/googlecloud.php:974
|
36 |
+
msgid "Western United States %s"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: src/addons/googlecloud.php:972, src/addons/googlecloud.php:973
|
40 |
+
msgid "Eastern United States %s"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: src/addons/googlecloud.php:970
|
44 |
+
msgid "European Union (multi-region location)"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: src/addons/googlecloud.php:969
|
48 |
+
msgid "Asia Pacific (multi-region location)"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: src/addons/googlecloud.php:968
|
52 |
+
msgid "United States (multi-region location)"
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: src/addons/azure.php:552
|
56 |
+
msgid "%s Prefix"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: src/addons/azure.php:547
|
60 |
+
msgid "%s Container"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: src/addons/azure.php:542
|
64 |
+
msgid "%s Key"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: src/addons/azure.php:538
|
68 |
+
msgid "%s Account Name"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: src/addons/googlecloud.php:623
|
72 |
+
msgid "But no %s settings were found. Please complete all fields in %s settings and save the settings."
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: src/addons/googlecloud.php:621
|
76 |
+
msgid "But no bucket was defined, so backups may not complete. Please enter a bucket name in the %s settings and save settings."
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: src/includes/updraftplus-notices.php:202
|
80 |
+
msgid "Find out more."
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: src/includes/updraftplus-notices.php:202
|
84 |
+
msgid "From the team behind UpdraftPlus."
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: src/central/bootstrap.php:506
|
88 |
+
msgid "URL for the site of your UpdraftCentral dashboard"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: src/central/bootstrap.php:504
|
92 |
+
msgid "Enter the URL where your self-hosted install of UpdraftCentral is located:"
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: src/central/bootstrap.php:501
|
96 |
+
msgid "A website where you have installed %s"
|
97 |
+
msgstr ""
|
98 |
+
|
99 |
+
#: src/central/bootstrap.php:499
|
100 |
+
msgid "Self-hosted dashboard"
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: src/central/bootstrap.php:241
|
104 |
+
msgid "At your UpdraftCentral dashboard you should press the \"Add Site\" button then paste the key in the input box."
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: src/addons/migrator.php:838
|
108 |
+
msgid "Your .htaccess has an old site reference on line number %s. You should remove it manually."
|
109 |
+
msgid_plural "Your .htaccess has an old site references on line numbers %s. You should remove them manually."
|
110 |
+
msgstr[0] ""
|
111 |
+
msgstr[1] ""
|
112 |
+
|
113 |
+
#: src/restorer.php:1878
|
114 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
115 |
msgstr ""
|
116 |
|
117 |
+
#: src/class-updraftplus.php:4528
|
118 |
msgid "Your chosen character set to use instead:"
|
119 |
msgstr ""
|
120 |
|
121 |
+
#: src/class-updraftplus.php:4521
|
122 |
msgid "You can choose another suitable character set instead and continue with the restoration at your own risk."
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: src/class-updraftplus.php:4521
|
126 |
msgid "The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import."
|
127 |
msgid_plural "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import."
|
128 |
msgstr[0] ""
|
129 |
msgstr[1] ""
|
130 |
|
131 |
+
#: src/central/bootstrap.php:584
|
132 |
msgid "Create another key"
|
133 |
msgstr ""
|
134 |
|
135 |
+
#: src/central/bootstrap.php:513
|
136 |
msgid "UpdraftCentral dashboard connection details"
|
137 |
msgstr ""
|
138 |
|
139 |
+
#: src/central/bootstrap.php:507
|
140 |
msgid "Next"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: src/central/bootstrap.php:493
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
144 |
msgid "an account"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: src/central/bootstrap.php:493
|
148 |
msgid "i.e. if you have %s there"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: src/central/bootstrap.php:482
|
152 |
msgid "Connect this site to an UpdraftCentral dashboard found at..."
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: src/central/bootstrap.php:456
|
156 |
msgid "Manage existing keys (%d)..."
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: src/central/bootstrap.php:406
|
160 |
msgid "There are no UpdraftCentral dashboards that can currently control this site."
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: src/central/bootstrap.php:243
|
164 |
msgid "You can now control this site via your UpdraftCentral dashboard at %s."
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: src/central/bootstrap.php:241
|
168 |
msgid "Detailed instructions for this can be found at %s"
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: src/central/bootstrap.php:241
|
172 |
msgid "You now need to copy the key below and enter it at your %s."
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: src/admin.php:770
|
176 |
msgid "Please enter a valid URL e.g http://example.com"
|
177 |
msgstr ""
|
178 |
|
224 |
msgid "Account ID"
|
225 |
msgstr ""
|
226 |
|
227 |
+
#: src/class-updraftplus.php:4399
|
228 |
msgid "As long as your web hosting allows http (i.e. non-SSL access) or will forward requests to https (which is almost always the case), this is no problem. If that is not yet set up, then you should set it up, or use %s so that the non-https links are automatically replaced."
|
229 |
msgstr ""
|
230 |
|
231 |
+
#: src/class-updraftplus.php:4397, src/class-updraftplus.php:4399
|
232 |
msgid "the migrator add-on"
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: src/class-updraftplus.php:4397
|
236 |
msgid "This restoration will work if you still have an SSL certificate (i.e. can use https) to access the site. Otherwise, you will want to use %s to search/replace the site address so that the site can be visited without https."
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: src/class-updraftplus.php:4395
|
240 |
msgid "This backup set is of this site, but at the time of the backup you were using %s, whereas the site now uses %s."
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: src/class-updraftplus.php:4392
|
244 |
msgid "The website address in the backup set (%s) is slightly different from that of the site now (%s). This is not expected to be a problem for restoring the site, as long as visits to the former address still reach the site."
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: src/methods/googledrive.php:1162
|
248 |
msgid "To de-authorize UpdraftPlus (all sites) from accessing your Google Drive, follow this link to your Google account settings."
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: src/methods/googledrive.php:1159
|
252 |
msgid "Follow this link to remove this site's settings for %s."
|
253 |
msgstr ""
|
254 |
|
256 |
msgid "UpdraftPlus debug mode is on: detailed debugging data follows."
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: src/admin.php:751
|
260 |
msgid "Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file."
|
261 |
msgstr ""
|
262 |
|
263 |
+
#: src/admin.php:1338, src/admin.php:4160, src/backup.php:2017,
|
264 |
+
#: src/class-updraftplus.php:2147, src/class-updraftplus.php:2212,
|
265 |
+
#: src/class-updraftplus.php:2346
|
266 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
267 |
msgstr ""
|
268 |
|
269 |
+
#: src/admin.php:1329, src/admin.php:4146, src/backup.php:2008,
|
270 |
+
#: src/class-updraftplus.php:2138, src/class-updraftplus.php:2205,
|
271 |
+
#: src/class-updraftplus.php:2339
|
272 |
msgid "A PHP exception (%s) has occurred: %s"
|
273 |
msgstr ""
|
274 |
|
275 |
+
#: src/addons/googlecloud.php:58
|
276 |
msgid "South-east Australia"
|
277 |
msgstr ""
|
278 |
|
279 |
+
#: src/addons/googlecloud.php:57
|
280 |
msgid "South-east Asia"
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: src/addons/googlecloud.php:56
|
284 |
msgid "North-east Asia"
|
285 |
msgstr ""
|
286 |
|
312 |
msgid "Select Files"
|
313 |
msgstr ""
|
314 |
|
315 |
+
#: src/methods/cloudfiles.php:487
|
316 |
msgid "Rackspace Storage Region"
|
317 |
msgstr ""
|
318 |
|
324 |
msgid "Instant and secure logon with a wave of your phone."
|
325 |
msgstr ""
|
326 |
|
327 |
+
#: src/backup.php:2021
|
328 |
msgid "As previously warned (see: %s), encryption is no longer a feature of the free edition of UpdraftPlus"
|
329 |
msgstr ""
|
330 |
|
331 |
+
#: src/admin.php:4688
|
332 |
msgid "Value"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: src/admin.php:1604
|
336 |
msgid "Did not know how to delete from this cloud service."
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: src/addons/sftp.php:700
|
340 |
msgid "Encrypted login failed; trying non-encrypted"
|
341 |
msgstr ""
|
342 |
|
344 |
msgid "__Check this box to use Amazon's server-side encryption"
|
345 |
msgstr ""
|
346 |
|
347 |
+
#: src/addons/azure.php:529
|
348 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
349 |
msgstr ""
|
350 |
|
352 |
msgid "Stored at: %s"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: src/methods/cloudfiles.php:507
|
356 |
msgid "Cloud Files"
|
357 |
msgstr ""
|
358 |
|
359 |
+
#: src/admin.php:4501
|
360 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: src/admin.php:4460
|
364 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
365 |
msgstr ""
|
366 |
|
377 |
msgid "Extra database"
|
378 |
msgstr ""
|
379 |
|
380 |
+
#: src/admin.php:3720
|
381 |
msgid "Press here to download or browse"
|
382 |
msgstr ""
|
383 |
|
384 |
+
#: src/admin.php:1117, src/admin.php:1127
|
385 |
msgid "Error: invalid path"
|
386 |
msgstr ""
|
387 |
|
388 |
+
#: src/admin.php:941
|
389 |
msgid "An error occurred when fetching storage module options: "
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: src/admin.php:767
|
393 |
msgid "Loading log file"
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: src/admin.php:766
|
397 |
msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: src/admin.php:765
|
401 |
msgid "Search"
|
402 |
msgstr ""
|
403 |
|
404 |
+
#: src/admin.php:764
|
405 |
msgid "Select a file to view information about it"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: src/admin.php:763
|
409 |
msgid "Browsing zip file"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: src/admin.php:732
|
413 |
msgid "With UpdraftPlus Premium, you can directly download individual files from here."
|
414 |
msgstr ""
|
415 |
|
416 |
+
#: src/admin.php:680
|
417 |
msgid "Browse contents"
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: src/restorer.php:1699
|
421 |
msgid "Skipped tables:"
|
422 |
msgstr ""
|
423 |
|
424 |
+
#: src/class-updraftplus.php:4579
|
425 |
msgid "This database backup has the following WordPress tables excluded: %s"
|
426 |
msgstr ""
|
427 |
|
428 |
+
#: src/admin.php:2615
|
429 |
msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: src/admin.php:2615
|
433 |
msgid "All WordPress tables will be backed up."
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: src/admin.php:762
|
437 |
msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
|
438 |
msgstr ""
|
439 |
|
440 |
+
#: src/admin.php:762
|
441 |
msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
|
442 |
msgstr ""
|
443 |
|
444 |
+
#: src/admin.php:762
|
445 |
msgid "The available memory on the server."
|
446 |
msgstr ""
|
447 |
|
448 |
+
#: src/admin.php:762
|
449 |
msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: src/admin.php:762
|
453 |
msgid "The file failed to upload. Please check the following:"
|
454 |
msgstr ""
|
455 |
|
456 |
+
#: src/admin.php:761
|
457 |
msgid "HTTP code:"
|
458 |
msgstr ""
|
459 |
|
460 |
+
#: src/admin.php:657
|
461 |
msgid "You have chosen to backup a database, but no tables have been selected"
|
462 |
msgstr ""
|
463 |
|
753 |
msgid "Apache modules"
|
754 |
msgstr ""
|
755 |
|
756 |
+
#: src/includes/updraftplus-notices.php:264
|
757 |
msgid "Summer sale - 20% off UpdraftPlus Premium until July 31st"
|
758 |
msgstr ""
|
759 |
|
760 |
+
#: src/includes/updraftplus-notices.php:251
|
761 |
msgid "Spring sale - 20% off UpdraftPlus Premium until April 31st"
|
762 |
msgstr ""
|
763 |
|
764 |
+
#: src/includes/updraftplus-notices.php:238
|
765 |
msgid "Happy New Year - 20% off UpdraftPlus Premium until January 1st"
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: src/includes/updraftplus-notices.php:225
|
769 |
msgid "Christmas sale - 20% off UpdraftPlus Premium until December 25th"
|
770 |
msgstr ""
|
771 |
|
772 |
+
#: src/includes/updraftplus-notices.php:213,
|
773 |
+
#: src/includes/updraftplus-notices.php:226,
|
774 |
+
#: src/includes/updraftplus-notices.php:239,
|
775 |
+
#: src/includes/updraftplus-notices.php:252,
|
776 |
+
#: src/includes/updraftplus-notices.php:265
|
777 |
msgid "To benefit, use this discount code:"
|
778 |
msgstr ""
|
779 |
|
780 |
+
#: src/includes/updraftplus-notices.php:212
|
781 |
msgid "Black Friday - 20% off UpdraftPlus Premium until November 30th"
|
782 |
msgstr ""
|
783 |
|
921 |
msgid "Export / import settings"
|
922 |
msgstr ""
|
923 |
|
924 |
+
#: src/restorer.php:1887
|
925 |
msgid "Processing table (%s)"
|
926 |
msgstr ""
|
927 |
|
928 |
+
#: src/restorer.php:1665
|
929 |
msgid "Backup of: %s"
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: src/methods/googledrive.php:252
|
933 |
msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
|
934 |
msgstr ""
|
935 |
|
936 |
+
#: src/methods/dropbox.php:589
|
937 |
msgid "%s de-authentication"
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: src/methods/dropbox.php:530
|
941 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: src/methods/dropbox.php:505
|
945 |
msgid "Follow this link to deauthenticate with %s."
|
946 |
msgstr ""
|
947 |
|
948 |
+
#: src/central/bootstrap.php:579
|
949 |
msgid "UpdraftCentral enables control of your WordPress sites (including management of backups and updates) from a central dashboard."
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: src/backup.php:1615
|
953 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
954 |
msgstr ""
|
955 |
|
957 |
msgid "You have selected a remote storage option which has an authorization step to complete:"
|
958 |
msgstr ""
|
959 |
|
960 |
+
#: src/admin.php:1680
|
961 |
msgid "Remote files deleted:"
|
962 |
msgstr ""
|
963 |
|
964 |
+
#: src/admin.php:1679
|
965 |
msgid "Local files deleted:"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: src/admin.php:989, src/admin.php:998, src/admin.php:1011, src/admin.php:1020
|
969 |
msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
|
970 |
msgstr ""
|
971 |
|
972 |
+
#: src/admin.php:760
|
973 |
msgid "remote files deleted"
|
974 |
msgstr ""
|
975 |
|
976 |
+
#: src/admin.php:758
|
977 |
msgid "Complete"
|
978 |
msgstr ""
|
979 |
|
980 |
+
#: src/admin.php:757
|
981 |
msgid "Do you want to carry out the import?"
|
982 |
msgstr ""
|
983 |
|
984 |
+
#: src/admin.php:756
|
985 |
msgid "Which was exported on:"
|
986 |
msgstr ""
|
987 |
|
988 |
+
#: src/admin.php:755
|
989 |
msgid "This will import data from:"
|
990 |
msgstr ""
|
991 |
|
992 |
+
#: src/admin.php:754
|
993 |
msgid "Importing..."
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: src/admin.php:750
|
997 |
msgid "You have not yet selected a file to import."
|
998 |
msgstr ""
|
999 |
|
1000 |
+
#: src/admin.php:734
|
1001 |
msgid "Your export file will be of your displayed settings, not your saved ones."
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: src/admin.php:87
|
1005 |
msgid "template not found"
|
1006 |
msgstr ""
|
1007 |
|
1009 |
msgid "US East (Ohio)"
|
1010 |
msgstr ""
|
1011 |
|
1012 |
+
#: src/addons/onedrive.php:949
|
1013 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
1014 |
msgstr ""
|
1015 |
|
1016 |
+
#: src/addons/onedrive.php:635
|
1017 |
msgid "Account is not authorized (%s)."
|
1018 |
msgstr ""
|
1019 |
|
1020 |
+
#: src/addons/onedrive.php:596, src/udaddons/updraftplus-addons.php:872
|
1021 |
msgid "Your IP address:"
|
1022 |
msgstr ""
|
1023 |
|
1024 |
+
#: src/addons/onedrive.php:596, src/udaddons/updraftplus-addons.php:872,
|
1025 |
+
#: src/udaddons/updraftplus-addons.php:886
|
1026 |
msgid "To remove any block, please go here."
|
1027 |
msgstr ""
|
1028 |
|
1029 |
+
#: src/addons/onedrive.php:581, src/udaddons/updraftplus-addons.php:857
|
1030 |
msgid "An error response was received; HTTP code:"
|
1031 |
msgstr ""
|
1032 |
|
1033 |
+
#: src/includes/class-commands.php:336
|
1034 |
msgid "%s add-on not found"
|
1035 |
msgstr ""
|
1036 |
|
1042 |
msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
|
1043 |
msgstr ""
|
1044 |
|
1045 |
+
#: src/admin.php:2429
|
1046 |
msgid "To fix this problem go here."
|
1047 |
msgstr ""
|
1048 |
|
1049 |
+
#: src/admin.php:2429
|
1050 |
msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: src/admin.php:718
|
1054 |
msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: src/addons/webdav.php:121
|
1058 |
msgid "Path"
|
1059 |
msgstr ""
|
1060 |
|
1061 |
+
#: src/addons/webdav.php:116
|
1062 |
msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
|
1063 |
msgstr ""
|
1064 |
|
1065 |
+
#: src/addons/webdav.php:108
|
1066 |
msgid "Enter any path in the field below."
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: src/addons/webdav.php:108
|
1070 |
msgid "A host name cannot contain a slash."
|
1071 |
msgstr ""
|
1072 |
|
1073 |
+
#: src/addons/webdav.php:83
|
1074 |
msgid "Protocol (SSL or not)"
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: src/addons/webdav.php:78
|
1078 |
msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: src/udaddons/updraftplus-addons.php:889
|
1082 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
1083 |
msgstr ""
|
1084 |
|
1085 |
+
#: src/methods/s3.php:1168
|
1086 |
msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
|
1087 |
msgstr ""
|
1088 |
|
1106 |
msgid "FAQs"
|
1107 |
msgstr ""
|
1108 |
|
1109 |
+
#: src/central/bootstrap.php:535
|
1110 |
msgid "More information..."
|
1111 |
msgstr ""
|
1112 |
|
1113 |
+
#: src/central/bootstrap.php:533
|
1114 |
msgid "Use the alternative method for making a connection with the dashboard."
|
1115 |
msgstr ""
|
1116 |
|
1117 |
+
#: src/central/bootstrap.php:443
|
1118 |
msgid "Key size: %d bits"
|
1119 |
msgstr ""
|
1120 |
|
1121 |
+
#: src/central/bootstrap.php:438
|
1122 |
msgid "Public key was sent to:"
|
1123 |
msgstr ""
|
1124 |
|
1125 |
+
#: src/backup.php:2233
|
1126 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
1127 |
msgstr ""
|
1128 |
|
1129 |
+
#: src/backup.php:2211
|
1130 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
+
#: src/addons/migrator.php:2286
|
1134 |
msgid "Create key"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
+
#: src/addons/migrator.php:2283, src/central/bootstrap.php:527
|
1138 |
msgid "slower, strongest"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
+
#: src/addons/migrator.php:2282, src/central/bootstrap.php:526
|
1142 |
msgid "recommended"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
+
#: src/addons/migrator.php:2282, src/central/bootstrap.php:526
|
1146 |
msgid "%s bytes"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
+
#: src/addons/migrator.php:2281, src/central/bootstrap.php:525
|
1150 |
msgid "faster (possibility for slow PHP installs)"
|
1151 |
msgstr ""
|
1152 |
|
1153 |
+
#: src/addons/migrator.php:2280, src/central/bootstrap.php:524
|
1154 |
msgid "easy to break, fastest"
|
1155 |
msgstr ""
|
1156 |
|
1157 |
+
#: src/addons/migrator.php:2280, src/addons/migrator.php:2281,
|
1158 |
+
#: src/addons/migrator.php:2283, src/central/bootstrap.php:524,
|
1159 |
+
#: src/central/bootstrap.php:525, src/central/bootstrap.php:527
|
1160 |
msgid "%s bits"
|
1161 |
msgstr ""
|
1162 |
|
1163 |
+
#: src/addons/migrator.php:2278, src/central/bootstrap.php:522
|
1164 |
msgid "Encryption key size:"
|
1165 |
msgstr ""
|
1166 |
|
1167 |
+
#: src/addons/migrator.php:2276
|
1168 |
msgid "Enter your chosen name"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: src/addons/migrator.php:2275
|
1172 |
msgid "Create a key: give this key a unique name (e.g. indicate the site it is for), then press \"Create Key\":"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: src/methods/googledrive.php:497
|
1176 |
msgid "Upload expected to fail: the %s limit for any single file is %s, whereas this file is %s GB (%d bytes)"
|
1177 |
msgstr ""
|
1178 |
|
1192 |
msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
|
1193 |
msgstr ""
|
1194 |
|
1195 |
+
#: src/class-updraftplus.php:1754
|
1196 |
msgid "Size: %s MB"
|
1197 |
msgstr ""
|
1198 |
|
1204 |
msgid "Now"
|
1205 |
msgstr ""
|
1206 |
|
1207 |
+
#: src/class-updraftplus.php:4411, src/restorer.php:1015
|
1208 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
1209 |
msgstr ""
|
1210 |
|
1212 |
msgid "(tap on an icon to select or unselect)"
|
1213 |
msgstr ""
|
1214 |
|
1215 |
+
#: src/methods/updraftvault.php:310, src/methods/updraftvault.php:316,
|
1216 |
+
#: src/methods/updraftvault.php:322
|
1217 |
msgid "%s per year"
|
1218 |
msgstr ""
|
1219 |
|
1220 |
+
#: src/methods/updraftvault.php:309, src/methods/updraftvault.php:315,
|
1221 |
+
#: src/methods/updraftvault.php:321
|
1222 |
msgid "or (annual discount)"
|
1223 |
msgstr ""
|
1224 |
|
1226 |
msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
|
1227 |
msgstr ""
|
1228 |
|
1229 |
+
#: src/class-updraftplus.php:538, src/class-updraftplus.php:583
|
1230 |
msgid "The given file was not found, or could not be read."
|
1231 |
msgstr ""
|
1232 |
|
1233 |
+
#: src/central/bootstrap.php:577
|
1234 |
msgid "UpdraftCentral (Remote Control)"
|
1235 |
msgstr ""
|
1236 |
|
1237 |
+
#: src/central/bootstrap.php:566
|
1238 |
msgid "View recent UpdraftCentral log events"
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: src/central/bootstrap.php:516
|
|
|
|
|
|
|
|
|
1242 |
msgid "Enter any description"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
+
#: src/central/bootstrap.php:515
|
1246 |
msgid "Description"
|
1247 |
msgstr ""
|
1248 |
|
1249 |
+
#: src/central/bootstrap.php:448
|
1250 |
msgid "Delete..."
|
1251 |
msgstr ""
|
1252 |
|
1253 |
+
#: src/central/bootstrap.php:441
|
1254 |
msgid "Created:"
|
1255 |
msgstr ""
|
1256 |
|
1257 |
+
#: src/central/bootstrap.php:438
|
1258 |
msgid "Access this site as user:"
|
1259 |
msgstr ""
|
1260 |
|
1261 |
+
#: src/central/bootstrap.php:462
|
1262 |
msgid "Details"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
+
#: src/central/bootstrap.php:461
|
1266 |
msgid "Key description"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
+
#: src/central/bootstrap.php:334, src/central/bootstrap.php:345
|
1270 |
msgid "A key was created, but the attempt to register it with %s was unsuccessful - please try again later."
|
1271 |
msgstr ""
|
1272 |
|
1273 |
+
#: src/central/bootstrap.php:206
|
1274 |
msgid "An invalid URL was entered"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
+
#: src/central/bootstrap.php:82
|
1278 |
msgid "Close..."
|
1279 |
msgstr ""
|
1280 |
|
1281 |
+
#: src/central/bootstrap.php:74
|
1282 |
msgid "This connection appears to already have been made."
|
1283 |
msgstr ""
|
1284 |
|
1285 |
+
#: src/central/bootstrap.php:71
|
1286 |
msgid "You must visit this link in the same browser and login session as you created the key in."
|
1287 |
msgstr ""
|
1288 |
|
1289 |
+
#: src/central/bootstrap.php:67
|
1290 |
msgid "You must visit this URL in the same browser and login session as you created the key in."
|
1291 |
msgstr ""
|
1292 |
|
1293 |
+
#: src/central/bootstrap.php:67
|
1294 |
msgid "You are not logged into this WordPress site in your web browser."
|
1295 |
msgstr ""
|
1296 |
|
1297 |
+
#: src/central/bootstrap.php:64
|
1298 |
msgid "The key referred to was unknown."
|
1299 |
msgstr ""
|
1300 |
|
1301 |
+
#: src/central/bootstrap.php:61
|
1302 |
msgid "A new UpdraftCentral connection has not been made."
|
1303 |
msgstr ""
|
1304 |
|
1305 |
+
#: src/central/bootstrap.php:59
|
1306 |
msgid "An UpdraftCentral connection has been made successfully."
|
1307 |
msgstr ""
|
1308 |
|
1309 |
+
#: src/central/bootstrap.php:56
|
1310 |
msgid "UpdraftCentral Connection"
|
1311 |
msgstr ""
|
1312 |
|
1313 |
+
#: src/backup.php:917, src/class-updraftplus.php:2828
|
1314 |
msgid "The backup was aborted by the user"
|
1315 |
msgstr ""
|
1316 |
|
1317 |
+
#: src/admin.php:4496
|
1318 |
msgid "Your settings have been saved."
|
1319 |
msgstr ""
|
1320 |
|
1321 |
+
#: src/admin.php:3598
|
1322 |
msgid "Total backup size:"
|
1323 |
msgstr ""
|
1324 |
|
1325 |
+
#: src/admin.php:2955
|
1326 |
msgid "stop"
|
1327 |
msgstr ""
|
1328 |
|
1329 |
+
#: src/admin.php:2797
|
1330 |
msgid "The backup has finished running"
|
1331 |
msgstr ""
|
1332 |
|
1352 |
msgid "calculate"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
+
#: src/admin.php:733
|
1356 |
msgid "You should save your changes to ensure that they are used for making your backup."
|
1357 |
msgstr ""
|
1358 |
|
1359 |
+
#: src/admin.php:726
|
1360 |
msgid "We requested to delete the file, but could not understand the server's response"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
+
#: src/admin.php:725
|
1364 |
msgid "Please enter a valid URL"
|
1365 |
msgstr ""
|
1366 |
|
1367 |
+
#: src/admin.php:708
|
1368 |
msgid "Saving..."
|
1369 |
msgstr ""
|
1370 |
|
1371 |
+
#: src/admin.php:671
|
1372 |
msgid "Error: the server sent us a response which we did not understand."
|
1373 |
msgstr ""
|
1374 |
|
1375 |
+
#: src/admin.php:663
|
1376 |
msgid "Fetching..."
|
1377 |
msgstr ""
|
1378 |
|
1380 |
msgid "Asia Pacific (Seoul)"
|
1381 |
msgstr ""
|
1382 |
|
1383 |
+
#: src/restorer.php:1688
|
1384 |
msgid "Uploads URL:"
|
1385 |
msgstr ""
|
1386 |
|
1387 |
+
#: src/backup.php:435
|
1388 |
msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
|
1389 |
msgstr ""
|
1390 |
|
1392 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1393 |
msgstr ""
|
1394 |
|
1395 |
+
#: src/class-updraftplus.php:4462, src/restorer.php:1707
|
1396 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
1397 |
msgstr ""
|
1398 |
|
1399 |
+
#: src/class-updraftplus.php:4458
|
1400 |
msgid "Please read this link for important information on this process."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: src/class-updraftplus.php:4458
|
1404 |
msgid "It will be imported as a new site."
|
1405 |
msgstr ""
|
1406 |
|
1407 |
+
#: src/admin.php:2588, src/templates/wp-admin/notices/horizontal-notice.php:16,
|
1408 |
#: src/templates/wp-admin/notices/horizontal-notice.php:18
|
1409 |
msgid "Dismiss"
|
1410 |
msgstr ""
|
1411 |
|
1412 |
+
#: src/admin.php:745
|
1413 |
msgid "Please fill in the required information."
|
1414 |
msgstr ""
|
1415 |
|
1429 |
msgid "Which site to restore"
|
1430 |
msgstr ""
|
1431 |
|
1432 |
+
#: src/addons/migrator.php:517, src/addons/migrator.php:518
|
1433 |
msgid "Error when creating new site at your chosen address:"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
+
#: src/addons/migrator.php:459
|
1437 |
msgid "Required information for restoring this backup was not given (%s)"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: src/addons/migrator.php:418
|
1441 |
msgid "Attribute imported content to user"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
+
#: src/addons/migrator.php:408, src/addons/migrator.php:410
|
1445 |
msgid "You must use lower-case letters or numbers for the site path, only."
|
1446 |
msgstr ""
|
1447 |
|
1448 |
+
#: src/addons/migrator.php:396
|
1449 |
msgid "This feature is not compatible with %s"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
+
#: src/addons/migrator.php:394, src/addons/migrator.php:396
|
1453 |
msgid "Importing a single site into a multisite install"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: src/addons/migrator.php:385
|
1457 |
msgid "other content from wp-content"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
+
#: src/addons/migrator.php:382
|
1461 |
msgid "WordPress core"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
+
#: src/addons/migrator.php:382, src/addons/migrator.php:385,
|
1465 |
+
#: src/addons/migrator.php:388
|
1466 |
msgid "You selected %s to be included in the restoration - this cannot / should not be done when importing a single site into a network."
|
1467 |
msgstr ""
|
1468 |
|
1470 |
msgid "Call WordPress action:"
|
1471 |
msgstr ""
|
1472 |
|
1473 |
+
#: src/admin.php:2623
|
1474 |
msgid "Your saved settings also affect what is backed up - e.g. files excluded."
|
1475 |
msgstr ""
|
1476 |
|
1477 |
+
#: src/admin.php:4035
|
1478 |
msgid "Skipping: this archive was already restored."
|
1479 |
msgstr ""
|
1480 |
|
1506 |
msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
|
1507 |
msgstr ""
|
1508 |
|
1509 |
+
#: src/admin.php:4370
|
1510 |
msgid "Send this backup to remote storage"
|
1511 |
msgstr ""
|
1512 |
|
1513 |
+
#: src/admin.php:4368
|
1514 |
msgid "Check out UpdraftPlus Vault."
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: src/admin.php:4368
|
1518 |
msgid "Not got any remote storage?"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: src/admin.php:4368
|
1522 |
msgid "settings"
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: src/admin.php:4368
|
1526 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: src/admin.php:2621
|
1530 |
msgid "Include any files in the backup"
|
1531 |
msgstr ""
|
1532 |
|
1533 |
+
#: src/admin.php:2607
|
1534 |
msgid "Include the database in the backup"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: src/admin.php:2587
|
1538 |
msgid "Continue restoration"
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#: src/admin.php:2582
|
1542 |
msgid "You have an unfinished restoration operation, begun %s ago."
|
1543 |
msgstr ""
|
1544 |
|
1545 |
+
#: src/admin.php:2581
|
1546 |
msgid "Unfinished restoration"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
+
#: src/admin.php:2579
|
1550 |
msgid "%s minutes, %s seconds"
|
1551 |
msgstr ""
|
1552 |
|
1553 |
+
#: src/admin.php:2526
|
1554 |
msgid "Backup Contents And Schedule"
|
1555 |
msgstr ""
|
1556 |
|
1558 |
msgid "Premium / Extensions"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
+
#: src/admin.php:2295, src/admin.php:2304
|
1562 |
msgid "Sufficient information about the in-progress restoration operation could not be found."
|
1563 |
msgstr ""
|
1564 |
|
1565 |
+
#: src/addons/morefiles.php:55, src/admin.php:731
|
1566 |
msgctxt "(verb)"
|
1567 |
msgid "Download"
|
1568 |
msgstr ""
|
1569 |
|
1570 |
+
#: src/admin.php:656
|
1571 |
msgid "You have chosen to backup files, but no file entities have been selected"
|
1572 |
msgstr ""
|
1573 |
|
1574 |
+
#: src/admin.php:558
|
1575 |
msgid "Extensions"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: src/admin.php:550, src/templates/wp-admin/settings/tab-bar.php:8
|
1579 |
msgid "Advanced Tools"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: src/addons/googlecloud.php:964
|
1583 |
msgid "Bucket location"
|
1584 |
msgstr ""
|
1585 |
|
1586 |
+
#: src/addons/googlecloud.php:959
|
1587 |
msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: src/addons/googlecloud.php:959, src/addons/googlecloud.php:984
|
1591 |
msgid "This setting applies only when a new bucket is being created."
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: src/addons/googlecloud.php:947
|
1595 |
msgid "You must use a bucket name that is unique, for all %s users."
|
1596 |
msgstr ""
|
1597 |
|
1598 |
+
#: src/addons/googlecloud.php:906
|
1599 |
msgid "Do not confuse %s with %s - they are separate things."
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: src/addons/googlecloud.php:312
|
1603 |
msgid "You do not have access to this bucket"
|
1604 |
msgstr ""
|
1605 |
|
1606 |
+
#: src/addons/googlecloud.php:59, src/addons/googlecloud.php:60,
|
1607 |
+
#: src/addons/googlecloud.php:61
|
1608 |
msgid "Western Europe"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
+
#: src/addons/googlecloud.php:55
|
1612 |
msgid "Eastern Asia-Pacific"
|
1613 |
msgstr ""
|
1614 |
|
1615 |
+
#: src/addons/googlecloud.php:54
|
1616 |
msgid "Western United States"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: src/addons/googlecloud.php:53
|
1620 |
msgid "Eastern United States"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: src/addons/googlecloud.php:52
|
1624 |
msgid " Eastern United States"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: src/addons/googlecloud.php:51, src/addons/googlecloud.php:971
|
1628 |
msgid "Central United States"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: src/addons/googlecloud.php:50
|
1632 |
msgid "European Union"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: src/addons/googlecloud.php:49
|
1636 |
msgid "Asia Pacific"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: src/addons/googlecloud.php:48, src/addons/googlecloud.php:49,
|
1640 |
+
#: src/addons/googlecloud.php:50
|
1641 |
msgid "multi-region location"
|
1642 |
msgstr ""
|
1643 |
|
1644 |
+
#: src/addons/googlecloud.php:48
|
1645 |
msgid "United States"
|
1646 |
msgstr ""
|
1647 |
|
1648 |
+
#: src/addons/googlecloud.php:43, src/addons/googlecloud.php:956
|
1649 |
msgid "Nearline"
|
1650 |
msgstr ""
|
1651 |
|
1652 |
+
#: src/addons/googlecloud.php:42, src/addons/googlecloud.php:955
|
1653 |
msgid "Durable reduced availability"
|
1654 |
msgstr ""
|
1655 |
|
1656 |
+
#: src/addons/googlecloud.php:41, src/addons/googlecloud.php:954,
|
1657 |
+
#: src/addons/s3-enhanced.php:61
|
1658 |
msgid "Standard"
|
1659 |
msgstr ""
|
1660 |
|
1661 |
+
#: src/addons/azure.php:553
|
1662 |
msgid "container"
|
1663 |
msgstr ""
|
1664 |
|
1665 |
+
#: src/addons/azure.php:553
|
1666 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
1667 |
msgstr ""
|
1668 |
|
1669 |
+
#: src/addons/azure.php:552
|
1670 |
msgid "optional"
|
1671 |
msgstr ""
|
1672 |
|
1673 |
+
#: src/addons/azure.php:548
|
|
|
|
|
|
|
|
|
1674 |
msgid "See Microsoft's guidelines on container naming by following this link."
|
1675 |
msgstr ""
|
1676 |
|
1677 |
+
#: src/addons/azure.php:548
|
1678 |
msgid "Enter the path of the %s you wish to use here."
|
1679 |
msgstr ""
|
1680 |
|
1681 |
+
#: src/addons/azure.php:539
|
1682 |
msgid "This is not your Azure login - see the instructions if needing more guidance."
|
1683 |
msgstr ""
|
1684 |
|
1685 |
+
#: src/addons/azure.php:538, src/addons/azure.php:542,
|
1686 |
+
#: src/addons/azure.php:547, src/addons/azure.php:552
|
|
|
|
|
|
|
1687 |
msgid "Azure"
|
1688 |
msgstr ""
|
1689 |
|
1690 |
+
#: src/addons/azure.php:534
|
1691 |
msgid "Create Azure credentials in your Azure developer console."
|
1692 |
msgstr ""
|
1693 |
|
1699 |
msgid "Could not access container"
|
1700 |
msgstr ""
|
1701 |
|
1702 |
+
#: src/class-updraftplus.php:2845
|
1703 |
msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
|
1704 |
msgstr ""
|
1705 |
|
1706 |
+
#: src/backup.php:1667
|
1707 |
msgid "the options table was not found"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
+
#: src/backup.php:1665
|
1711 |
msgid "no options or sitemeta table was found"
|
1712 |
msgstr ""
|
1713 |
|
1714 |
+
#: src/backup.php:1665, src/backup.php:1667
|
1715 |
msgid "The database backup appears to have failed"
|
1716 |
msgstr ""
|
1717 |
|
1718 |
+
#: src/backup.php:1537
|
1719 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
1720 |
msgstr ""
|
1721 |
|
1727 |
msgid "Not installed"
|
1728 |
msgstr ""
|
1729 |
|
1730 |
+
#: src/addons/googlecloud.php:950, src/addons/s3-enhanced.php:54
|
1731 |
msgid "Storage class"
|
1732 |
msgstr ""
|
1733 |
|
1734 |
+
#: src/addons/googlecloud.php:947
|
1735 |
msgid "See Google's guidelines on bucket naming by following this link."
|
1736 |
msgstr ""
|
1737 |
|
1738 |
+
#: src/addons/googlecloud.php:947
|
1739 |
msgid "Enter the name of the %s bucket you wish to use here."
|
1740 |
msgstr ""
|
1741 |
|
1742 |
+
#: src/addons/googlecloud.php:946
|
1743 |
msgid "Bucket"
|
1744 |
msgstr ""
|
1745 |
|
1746 |
+
#: src/addons/googlecloud.php:942
|
1747 |
msgid "Otherwise, you can leave it blank."
|
1748 |
msgstr ""
|
1749 |
|
1750 |
+
#: src/addons/googlecloud.php:942
|
1751 |
msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
|
1752 |
msgstr ""
|
1753 |
|
1754 |
+
#: src/addons/googlecloud.php:942
|
1755 |
msgid "Enter the ID of the %s project you wish to use here."
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: src/addons/googlecloud.php:918
|
1759 |
msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: src/addons/googlecloud.php:831
|
1763 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
1764 |
msgstr ""
|
1765 |
|
1767 |
msgid "Project ID"
|
1768 |
msgstr ""
|
1769 |
|
1770 |
+
#: src/addons/googlecloud.php:690
|
1771 |
msgid "You must save and authenticate before you can test your settings."
|
1772 |
msgstr ""
|
1773 |
|
1774 |
+
#: src/addons/googlecloud.php:537
|
1775 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
|
1776 |
msgstr ""
|
1777 |
|
1778 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:332,
|
1779 |
+
#: src/addons/googlecloud.php:823, src/addons/googlecloud.php:870
|
1780 |
msgid "You do not have access to this bucket."
|
1781 |
msgstr ""
|
1782 |
|
1783 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:312,
|
1784 |
+
#: src/addons/googlecloud.php:322, src/addons/googlecloud.php:332,
|
1785 |
+
#: src/addons/googlecloud.php:649, src/addons/googlecloud.php:823,
|
1786 |
+
#: src/addons/googlecloud.php:870, src/addons/googlecloud.php:912,
|
1787 |
+
#: src/addons/googlecloud.php:912, src/addons/googlecloud.php:927,
|
1788 |
+
#: src/addons/googlecloud.php:935, src/addons/googlecloud.php:947
|
1789 |
msgid "Google Cloud"
|
1790 |
msgstr ""
|
1791 |
|
1792 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:312,
|
1793 |
+
#: src/addons/googlecloud.php:332, src/addons/googlecloud.php:823,
|
1794 |
+
#: src/addons/googlecloud.php:870
|
1795 |
msgid "%s Service Exception."
|
1796 |
msgstr ""
|
1797 |
|
1828 |
msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
|
1829 |
msgstr ""
|
1830 |
|
1831 |
+
#: src/admin.php:1678
|
1832 |
msgid "Backup sets removed:"
|
1833 |
msgstr ""
|
1834 |
|
1835 |
+
#: src/admin.php:744
|
1836 |
msgid "Processing..."
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: src/admin.php:742
|
1840 |
msgid "For backups older than"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: src/admin.php:741
|
1844 |
msgid "week(s)"
|
1845 |
msgstr ""
|
1846 |
|
1847 |
+
#: src/admin.php:740
|
1848 |
msgid "hour(s)"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
+
#: src/admin.php:739
|
1852 |
msgid "day(s)"
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: src/admin.php:738
|
1856 |
msgid "in the month"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
+
#: src/admin.php:737
|
1860 |
msgid "day"
|
1861 |
msgstr ""
|
1862 |
|
1868 |
msgid "Add an additional retention rule..."
|
1869 |
msgstr ""
|
1870 |
|
1871 |
+
#: src/restorer.php:2210
|
1872 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
1873 |
msgstr ""
|
1874 |
|
1875 |
+
#: src/restorer.php:2210
|
1876 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: src/methods/updraftvault.php:670
|
1880 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: src/class-updraftplus.php:4500
|
1884 |
msgid "You must upgrade MySQL to be able to use this database."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: src/class-updraftplus.php:4500
|
1888 |
msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: src/admin.php:2414
|
1892 |
msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: src/methods/updraftvault.php:342
|
1896 |
msgid "Don't know your email address, or forgotten your password?"
|
1897 |
msgstr ""
|
1898 |
|
1899 |
+
#: src/methods/updraftvault.php:335
|
1900 |
msgid "Enter your UpdraftPlus.Com email / password here to connect:"
|
1901 |
msgstr ""
|
1902 |
|
1903 |
+
#: src/methods/updraftvault.php:299, src/methods/updraftvault.php:328
|
1904 |
msgid "Read the FAQs here."
|
1905 |
msgstr ""
|
1906 |
|
1912 |
msgid "Server-side encryption"
|
1913 |
msgstr ""
|
1914 |
|
1915 |
+
#: src/methods/updraftvault.php:678
|
1916 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
1917 |
msgstr ""
|
1918 |
|
1919 |
+
#: src/admin.php:1003
|
1920 |
msgid "Go to the remote storage settings in order to connect."
|
1921 |
msgstr ""
|
1922 |
|
1923 |
+
#: src/admin.php:1003
|
1924 |
msgid "%s has been chosen for remote storage, but you are not currently connected."
|
1925 |
msgstr ""
|
1926 |
|
1927 |
+
#: src/methods/updraftvault.php:325
|
1928 |
msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
|
1929 |
msgstr ""
|
1930 |
|
1931 |
+
#: src/admin.php:714
|
1932 |
msgid "Update quota count"
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: src/admin.php:713
|
1936 |
msgid "Counting..."
|
1937 |
msgstr ""
|
1938 |
|
1939 |
+
#: src/admin.php:712
|
1940 |
msgid "Disconnecting..."
|
1941 |
msgstr ""
|
1942 |
|
1943 |
+
#: src/admin.php:710
|
1944 |
msgid "Connecting..."
|
1945 |
msgstr ""
|
1946 |
|
1947 |
+
#: src/methods/updraftvault.php:431, src/methods/updraftvault.php:505
|
1948 |
msgid "Refresh current status"
|
1949 |
msgstr ""
|
1950 |
|
1951 |
+
#: src/methods/updraftvault.php:429, src/methods/updraftvault.php:445,
|
1952 |
+
#: src/methods/updraftvault.php:447, src/methods/updraftvault.php:505
|
1953 |
msgid "Get more quota"
|
1954 |
msgstr ""
|
1955 |
|
1956 |
+
#: src/methods/updraftvault.php:426, src/methods/updraftvault.php:442,
|
1957 |
+
#: src/methods/updraftvault.php:486
|
1958 |
msgid "Current use:"
|
1959 |
msgstr ""
|
1960 |
|
1961 |
+
#: src/methods/updraftvault.php:421
|
1962 |
msgid "You can get more quota here"
|
1963 |
msgstr ""
|
1964 |
|
1965 |
+
#: src/methods/updraftvault.php:421
|
1966 |
msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
|
1967 |
msgstr ""
|
1968 |
|
1969 |
+
#: src/admin.php:711, src/methods/updraftvault.php:369,
|
1970 |
+
#: src/methods/updraftvault.php:413
|
1971 |
msgid "Disconnect"
|
1972 |
msgstr ""
|
1973 |
|
1974 |
+
#: src/methods/updraftvault.php:366, src/methods/updraftvault.php:405
|
1975 |
msgid "Quota:"
|
1976 |
msgstr ""
|
1977 |
|
1978 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1979 |
msgid "Vault owner"
|
1980 |
msgstr ""
|
1981 |
|
1982 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1983 |
msgid "Well done - there's nothing more needed to set up."
|
1984 |
msgstr ""
|
1985 |
|
1986 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1987 |
msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
|
1988 |
msgstr ""
|
1989 |
|
1990 |
+
#: src/methods/updraftvault.php:371, src/methods/updraftvault.php:399
|
1991 |
msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
|
1992 |
msgstr ""
|
1993 |
|
1994 |
+
#: src/methods/updraftvault.php:342
|
1995 |
msgid "Go here for help"
|
1996 |
msgstr ""
|
1997 |
|
1998 |
+
#: src/methods/updraftvault.php:337
|
1999 |
msgid "E-mail"
|
2000 |
msgstr ""
|
2001 |
|
2002 |
+
#: src/central/bootstrap.php:552, src/methods/updraftvault.php:331,
|
2003 |
+
#: src/methods/updraftvault.php:345
|
2004 |
msgid "Back..."
|
2005 |
msgstr ""
|
2006 |
|
2007 |
+
#: src/methods/updraftvault.php:325
|
2008 |
msgid "Subscriptions can be cancelled at any time."
|
2009 |
msgstr ""
|
2010 |
|
2011 |
+
#: src/methods/updraftvault.php:308, src/methods/updraftvault.php:314,
|
2012 |
+
#: src/methods/updraftvault.php:320
|
2013 |
msgid "%s per quarter"
|
2014 |
msgstr ""
|
2015 |
|
2016 |
+
#: src/central/bootstrap.php:579, src/methods/updraftvault.php:299,
|
2017 |
+
#: src/methods/updraftvault.php:328
|
2018 |
msgid "Read more about it here."
|
2019 |
msgstr ""
|
2020 |
|
2021 |
+
#: src/methods/updraftvault.php:299, src/methods/updraftvault.php:328
|
2022 |
msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
|
2023 |
msgstr ""
|
2024 |
|
2025 |
+
#: src/methods/updraftvault.php:295
|
2026 |
msgid "Already purchased space?"
|
2027 |
msgstr ""
|
2028 |
|
2029 |
+
#: src/methods/updraftvault.php:292
|
2030 |
msgid "Show the options"
|
2031 |
msgstr ""
|
2032 |
|
2033 |
+
#: src/methods/updraftvault.php:291
|
2034 |
msgid "First time user?"
|
2035 |
msgstr ""
|
2036 |
|
2037 |
+
#: src/methods/updraftvault.php:288, src/methods/updraftvault.php:305
|
2038 |
msgid "Press a button to get started."
|
2039 |
msgstr ""
|
2040 |
|
2041 |
+
#: src/methods/updraftvault.php:288, src/methods/updraftvault.php:305
|
2042 |
msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
|
2043 |
msgstr ""
|
2044 |
|
2059 |
msgstr ""
|
2060 |
|
2061 |
#: src/addons/azure.php:388, src/addons/backblaze.php:464,
|
2062 |
+
#: src/addons/googlecloud.php:774, src/methods/s3.php:1196
|
2063 |
msgid "Delete failed:"
|
2064 |
msgstr ""
|
2065 |
|
2066 |
+
#: src/backup.php:3278
|
2067 |
msgid "The zip engine returned the message: %s."
|
2068 |
msgstr ""
|
2069 |
|
2083 |
msgid "Allow download"
|
2084 |
msgstr ""
|
2085 |
|
2086 |
+
#: src/addons/migrator.php:1830
|
2087 |
msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
|
2088 |
msgstr ""
|
2089 |
|
2090 |
+
#: src/addons/migrator.php:1815, src/admin.php:720
|
2091 |
msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
|
2092 |
msgstr ""
|
2093 |
|
2094 |
+
#: src/addons/migrator.php:2318
|
2095 |
msgid "Existing keys"
|
2096 |
msgstr ""
|
2097 |
|
2098 |
+
#: src/addons/migrator.php:2309
|
2099 |
msgid "No keys to allow remote sites to connect have yet been created."
|
2100 |
msgstr ""
|
2101 |
|
2102 |
+
#: src/addons/migrator.php:2291
|
2103 |
msgid "Your new key:"
|
2104 |
msgstr ""
|
2105 |
|
2106 |
+
#: src/addons/migrator.php:2270
|
2107 |
msgid "To allow another site to send a backup to this site, create a key, and then press the 'Migrate' button on the sending site, and copy-and-paste the key there."
|
2108 |
msgstr ""
|
2109 |
|
2110 |
+
#: src/addons/migrator.php:2252
|
2111 |
msgid "So, to get the key for the remote site, open the 'Migrate' window on that site, scroll down, and you can create one there."
|
2112 |
msgstr ""
|
2113 |
|
2114 |
+
#: src/addons/migrator.php:2252
|
2115 |
msgid "Keys for this site are created in the section below the one you just pressed in."
|
2116 |
msgstr ""
|
2117 |
|
2118 |
+
#: src/addons/migrator.php:1932, src/central/bootstrap.php:388
|
2119 |
msgid "You must copy and paste this key now - it cannot be shown again."
|
2120 |
msgstr ""
|
2121 |
|
2122 |
+
#: src/addons/migrator.php:1932, src/central/bootstrap.php:388
|
2123 |
msgid "Key created successfully."
|
2124 |
msgstr ""
|
2125 |
|
2126 |
+
#: src/addons/migrator.php:1917
|
2127 |
msgid "A key with this name already exists; you must use a unique name."
|
2128 |
msgstr ""
|
2129 |
|
2130 |
+
#: src/addons/migrator.php:1861
|
2131 |
msgid "Also send this backup to the active remote storage locations"
|
2132 |
msgstr ""
|
2133 |
|
2134 |
+
#: src/addons/migrator.php:1826
|
2135 |
msgid "The site URL you are sending to (%s) looks like a local development website. If you are sending from an external network, it is likely that a firewall will be blocking this."
|
2136 |
msgstr ""
|
2137 |
|
2138 |
+
#: src/addons/migrator.php:1782
|
2139 |
msgid "site not found"
|
2140 |
msgstr ""
|
2141 |
|
2142 |
+
#: src/addons/migrator.php:1767
|
2143 |
msgid "Backup data will be sent to:"
|
2144 |
msgstr ""
|
2145 |
|
2146 |
+
#: src/addons/migrator.php:206
|
2147 |
msgid "Restore an existing backup set onto this site"
|
2148 |
msgstr ""
|
2149 |
|
2150 |
+
#: src/addons/migrator.php:199
|
2151 |
msgid "This site has no backups to restore from yet."
|
2152 |
msgstr ""
|
2153 |
|
2154 |
+
#: src/addons/reporting.php:171
|
2155 |
msgid "Backup made by %s"
|
2156 |
msgstr ""
|
2157 |
|
2159 |
msgid "This storage method does not allow downloading"
|
2160 |
msgstr ""
|
2161 |
|
2162 |
+
#: src/admin.php:3783
|
2163 |
msgid "(backup set imported from remote location)"
|
2164 |
msgstr ""
|
2165 |
|
2179 |
msgid "This backup set was not known by UpdraftPlus to be created by the current WordPress installation, but was either found in remote storage, or was sent from a remote site."
|
2180 |
msgstr ""
|
2181 |
|
2182 |
+
#: src/addons/migrator.php:1843, src/admin.php:727
|
2183 |
msgid "Testing connection..."
|
2184 |
msgstr ""
|
2185 |
|
2186 |
+
#: src/admin.php:724
|
2187 |
msgid "Deleting..."
|
2188 |
msgstr ""
|
2189 |
|
2190 |
+
#: src/admin.php:723
|
2191 |
msgid "key name"
|
2192 |
msgstr ""
|
2193 |
|
2194 |
+
#: src/admin.php:721
|
2195 |
msgid "Please give this key a name (e.g. indicate the site it is for):"
|
2196 |
msgstr ""
|
2197 |
|
2198 |
+
#: src/admin.php:718
|
2199 |
msgid "Creating..."
|
2200 |
msgstr ""
|
2201 |
|
2202 |
+
#: src/addons/migrator.php:2269
|
2203 |
msgid "Or, receive a backup from a remote site"
|
2204 |
msgstr ""
|
2205 |
|
2206 |
+
#: src/addons/migrator.php:2258
|
2207 |
msgid "Paste key here"
|
2208 |
msgstr ""
|
2209 |
|
2210 |
+
#: src/addons/migrator.php:2252
|
2211 |
msgid "How do I get a site's key?"
|
2212 |
msgstr ""
|
2213 |
|
2214 |
+
#: src/addons/migrator.php:2252
|
2215 |
msgid "To add a site as a destination for sending to, enter that site's key below."
|
2216 |
msgstr ""
|
2217 |
|
2218 |
+
#: src/addons/migrator.php:2249
|
2219 |
msgid "Or, send a backup to another site"
|
2220 |
msgstr ""
|
2221 |
|
2222 |
+
#: src/addons/migrator.php:2014, src/admin.php:728
|
2223 |
msgid "Send"
|
2224 |
msgstr ""
|
2225 |
|
2226 |
+
#: src/addons/migrator.php:2008, src/admin.php:719
|
2227 |
msgid "Send to site:"
|
2228 |
msgstr ""
|
2229 |
|
2230 |
+
#: src/addons/migrator.php:2006
|
2231 |
msgid "No receiving sites have yet been added."
|
2232 |
msgstr ""
|
2233 |
|
2234 |
+
#: src/addons/migrator.php:1987
|
2235 |
msgid "It is for sending backups to the following site: "
|
2236 |
msgstr ""
|
2237 |
|
2238 |
+
#: src/addons/migrator.php:1987
|
2239 |
msgid "The key was successfully added."
|
2240 |
msgstr ""
|
2241 |
|
2242 |
+
#: src/addons/migrator.php:1971
|
2243 |
msgid "The entered key does not belong to a remote site (it belongs to this one)."
|
2244 |
msgstr ""
|
2245 |
|
2246 |
+
#: src/addons/migrator.php:1960, src/addons/migrator.php:1962,
|
2247 |
+
#: src/addons/migrator.php:1966
|
2248 |
msgid "The entered key was corrupt - please try again."
|
2249 |
msgstr ""
|
2250 |
|
2251 |
+
#: src/addons/migrator.php:1958
|
2252 |
msgid "The entered key was the wrong length - please try again."
|
2253 |
msgstr ""
|
2254 |
|
2255 |
+
#: src/addons/migrator.php:1948
|
2256 |
msgid "key"
|
2257 |
msgstr ""
|
2258 |
|
2280 |
msgid "FTP server"
|
2281 |
msgstr ""
|
2282 |
|
2283 |
+
#: src/addons/migrator.php:171
|
2284 |
msgid "The UpdraftPlus Migrator modifies the restoration operation appropriately, to fit the backup data to the new site."
|
2285 |
msgstr ""
|
2286 |
|
2287 |
+
#: src/addons/migrator.php:171
|
2288 |
msgid "A \"migration\" is ultimately the same as a restoration - but using backup archives that you import from another site."
|
2289 |
msgstr ""
|
2290 |
|
2291 |
+
#: src/admin.php:717
|
2292 |
msgid "Resetting..."
|
2293 |
msgstr ""
|
2294 |
|
2295 |
+
#: src/addons/migrator.php:2258, src/admin.php:716
|
2296 |
msgid "Add site"
|
2297 |
msgstr ""
|
2298 |
|
2299 |
+
#: src/admin.php:715
|
2300 |
msgid "Adding..."
|
2301 |
msgstr ""
|
2302 |
|
2303 |
+
#: src/udaddons/options.php:335
|
2304 |
msgid "Claim not granted - perhaps you have already used this purchase somewhere else, or your paid period for downloading from updraftplus.com has expired?"
|
2305 |
msgstr ""
|
2306 |
|
2307 |
+
#: src/restorer.php:2212
|
2308 |
msgid "To use this backup, your database server needs to support the %s character set."
|
2309 |
msgstr ""
|
2310 |
|
2311 |
+
#: src/udaddons/updraftplus-addons.php:922
|
2312 |
msgid "go here to change your password on updraftplus.com."
|
2313 |
msgstr ""
|
2314 |
|
2315 |
+
#: src/udaddons/updraftplus-addons.php:922
|
2316 |
msgid "If you have forgotten your password "
|
2317 |
msgstr ""
|
2318 |
|
2319 |
+
#: src/udaddons/updraftplus-addons.php:921
|
2320 |
msgid "Go here to re-enter your password."
|
2321 |
msgstr ""
|
2322 |
|
2323 |
+
#: src/addons/migrator.php:235
|
2324 |
msgid "After pressing this button, you will be given the option to choose which components you wish to migrate"
|
2325 |
msgstr ""
|
2326 |
|
2327 |
+
#: src/addons/migrator.php:206
|
2328 |
msgid "To import a backup set, go to the \"Existing Backups\" tab"
|
2329 |
msgstr ""
|
2330 |
|
2331 |
+
#: src/addons/migrator.php:173
|
2332 |
msgid "To restore using any of the backup sets below, press the button."
|
2333 |
msgstr ""
|
2334 |
|
2335 |
+
#: src/admin.php:707, src/admin.php:733, src/admin.php:734
|
2336 |
msgid "You have made changes to your settings, and not saved."
|
2337 |
msgstr ""
|
2338 |
|
2339 |
+
#: src/addons/onedrive.php:994
|
2340 |
msgid "N.B. %s is not case-sensitive."
|
2341 |
msgstr ""
|
2342 |
|
2343 |
+
#: src/addons/onedrive.php:984
|
2344 |
msgid "If OneDrive later shows you the message \"unauthorized_client\", then you did not enter a valid client ID here."
|
2345 |
msgstr ""
|
2346 |
|
2347 |
+
#: src/addons/azure.php:534, src/addons/migrator.php:1830,
|
2348 |
+
#: src/addons/onedrive.php:970
|
2349 |
msgid "For longer help, including screenshots, follow this link."
|
2350 |
msgstr ""
|
2351 |
|
2352 |
+
#: src/addons/onedrive.php:963
|
2353 |
msgid "Create OneDrive credentials in your OneDrive developer console."
|
2354 |
msgstr ""
|
2355 |
|
2356 |
+
#: src/addons/onedrive.php:956
|
2357 |
msgid "You must add the following as the authorised redirect URI in your OneDrive console (under \"API Settings\") when asked"
|
2358 |
msgstr ""
|
2359 |
|
2360 |
+
#: src/addons/azure.php:527
|
2361 |
msgid "Microsoft Azure is not compatible with sites hosted on a localhost or 127.0.0.1 URL - their developer console forbids these (current URL is: %s)."
|
2362 |
msgstr ""
|
2363 |
|
2365 |
msgid "%s authorisation failed:"
|
2366 |
msgstr ""
|
2367 |
|
2368 |
+
#: src/addons/onedrive.php:797, src/addons/onedrive.php:983,
|
2369 |
+
#: src/addons/onedrive.php:987
|
2370 |
msgid "OneDrive"
|
2371 |
msgstr ""
|
2372 |
|
2373 |
+
#: src/addons/onedrive.php:626
|
2374 |
msgid "Please re-authorize the connection to your %s account."
|
2375 |
msgstr ""
|
2376 |
|
2378 |
msgid "configure it here"
|
2379 |
msgstr ""
|
2380 |
|
2381 |
+
#: src/addons/onedrive.php:619, src/methods/updraftvault.php:643
|
2382 |
msgid "To remove the block, please go here."
|
2383 |
msgstr ""
|
2384 |
|
2523 |
msgid "If you have an AWS admin user, then you can use this wizard to quickly create a new AWS (IAM) user with access to only this bucket (rather than your whole account)"
|
2524 |
msgstr ""
|
2525 |
|
2526 |
+
#: src/methods/s3.php:875, src/methods/s3.php:972
|
2527 |
msgid "To create a new IAM sub-user and access key that has access only to this bucket, use this add-on."
|
2528 |
msgstr ""
|
2529 |
|
2535 |
msgid "UpdraftPlus news, high-quality training materials for WordPress developers and site-owners, and general WordPress news. You can de-subscribe at any time."
|
2536 |
msgstr ""
|
2537 |
|
2538 |
+
#: src/addons/onedrive.php:596, src/addons/onedrive.php:619,
|
2539 |
+
#: src/methods/updraftvault.php:643, src/udaddons/updraftplus-addons.php:872,
|
2540 |
+
#: src/udaddons/updraftplus-addons.php:886
|
2541 |
msgid "This most likely means that you share a webserver with a hacked website that has been used in previous attacks."
|
2542 |
msgstr ""
|
2543 |
|
2544 |
+
#: src/addons/onedrive.php:619, src/methods/updraftvault.php:643,
|
2545 |
+
#: src/udaddons/updraftplus-addons.php:886
|
2546 |
msgid "It appears that your web server's IP Address (%s) is blocked."
|
2547 |
msgstr ""
|
2548 |
|
2549 |
+
#: src/addons/onedrive.php:619, src/methods/updraftvault.php:643,
|
2550 |
+
#: src/udaddons/updraftplus-addons.php:886
|
2551 |
msgid "UpdraftPlus.com has responded with 'Access Denied'."
|
2552 |
msgstr ""
|
2553 |
|
2598 |
msgid "(at same time as files backup)"
|
2599 |
msgstr ""
|
2600 |
|
2601 |
+
#: src/admin.php:3254
|
2602 |
msgid "No backup has been completed"
|
2603 |
msgstr ""
|
2604 |
|
2657 |
msgid "or"
|
2658 |
msgstr ""
|
2659 |
|
2660 |
+
#: src/admin.php:701
|
2661 |
msgid "You did not select any components to restore. Please select at least one, and then try again."
|
2662 |
msgstr ""
|
2663 |
|
2664 |
+
#: src/addons/sftp.php:436
|
2665 |
msgctxt "Do not translate BEGIN RSA PRIVATE KEY. PCKS1, XML, PEM and PuTTY are also technical acronyms which should not be translated."
|
2666 |
msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
|
2667 |
msgstr ""
|
2668 |
|
2669 |
+
#: src/addons/sftp.php:399
|
2670 |
msgid "Resuming partial uploads is supported for SFTP, but not for SCP. Thus, if using SCP then you will need to ensure that your webserver allows PHP processes to run long enough to upload your largest backup file."
|
2671 |
msgstr ""
|
2672 |
|
2675 |
msgid "tenant"
|
2676 |
msgstr ""
|
2677 |
|
2678 |
+
#: src/methods/openstack2.php:132
|
2679 |
msgctxt "Keystone and swauth are technical terms which cannot be translated"
|
2680 |
msgid "This needs to be a v2 (Keystone) authentication URI; v1 (Swauth) is not supported."
|
2681 |
msgstr ""
|
2688 |
msgid "Check this box to have a basic report sent to"
|
2689 |
msgstr ""
|
2690 |
|
2691 |
+
#: src/admin.php:3268
|
2692 |
msgctxt "i.e. Non-automatic"
|
2693 |
msgid "Manual"
|
2694 |
msgstr ""
|
2695 |
|
2696 |
+
#: src/restorer.php:2189
|
2697 |
msgctxt "The user is being told the number of times an error has happened, e.g. An error (27) occurred"
|
2698 |
msgid "An error (%s) occurred:"
|
2699 |
msgstr ""
|
2706 |
msgid "Any other file/directory on your server that you wish to back up"
|
2707 |
msgstr ""
|
2708 |
|
2709 |
+
#: src/admin.php:2431
|
2710 |
msgid "For even more features and personal support, check out "
|
2711 |
msgstr ""
|
2712 |
|
2715 |
msgstr ""
|
2716 |
|
2717 |
#: src/addons/autobackup.php:143, src/addons/autobackup.php:1007,
|
2718 |
+
#: src/admin.php:706
|
2719 |
msgid "Automatic backup before update"
|
2720 |
msgstr ""
|
2721 |
|
2800 |
msgid "Note that after you have claimed your add-ons, you can remove your password (but not the email address) from the settings below, without affecting this site's access to updates."
|
2801 |
msgstr ""
|
2802 |
|
2803 |
+
#: src/admin.php:2797, src/admin.php:3814
|
2804 |
msgid "View Log"
|
2805 |
msgstr ""
|
2806 |
|
2817 |
msgid "and retain this many scheduled backups"
|
2818 |
msgstr ""
|
2819 |
|
2820 |
+
#: src/admin.php:3224
|
2821 |
msgid "incremental backup; base backup: %s"
|
2822 |
msgstr ""
|
2823 |
|
2829 |
msgid "Upload files into UpdraftPlus."
|
2830 |
msgstr ""
|
2831 |
|
2832 |
+
#: src/admin.php:945, src/includes/class-commands.php:390,
|
2833 |
#: src/templates/wp-admin/settings/tab-status.php:22
|
2834 |
msgid "The 'Backup Now' button is disabled as your backup directory is not writable (go to the 'Settings' tab and find the relevant option)."
|
2835 |
msgstr ""
|
2836 |
|
2837 |
+
#: src/class-updraftplus.php:4447
|
2838 |
msgid "Backup label:"
|
2839 |
msgstr ""
|
2840 |
|
2841 |
+
#: src/addons/backblaze.php:189, src/admin.php:1941
|
2842 |
msgid "Error: unexpected file read fail"
|
2843 |
msgstr ""
|
2844 |
|
2845 |
+
#: src/backup.php:3284
|
2846 |
msgid "check your log for more details."
|
2847 |
msgstr ""
|
2848 |
|
2849 |
+
#: src/backup.php:3282
|
2850 |
msgid "your web hosting account appears to be full; please see: %s"
|
2851 |
msgstr ""
|
2852 |
|
2853 |
+
#: src/backup.php:3280
|
2854 |
msgid "A zip error occurred"
|
2855 |
msgstr ""
|
2856 |
|
2858 |
msgid "Your label for this backup (optional)"
|
2859 |
msgstr ""
|
2860 |
|
2861 |
+
#: src/addons/googlecloud.php:912, src/methods/googledrive.php:1096
|
2862 |
msgid "%s does not allow authorisation of sites hosted on direct IP addresses. You will need to change your site's address (%s) before you can use %s for storage."
|
2863 |
msgstr ""
|
2864 |
|
2865 |
+
#: src/methods/updraftvault.php:681, src/udaddons/updraftplus-addons.php:925
|
2866 |
msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
|
2867 |
msgstr ""
|
2868 |
|
2869 |
+
#: src/methods/updraftvault.php:678, src/udaddons/updraftplus-addons.php:921
|
2870 |
msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
|
2871 |
msgstr ""
|
2872 |
|
2873 |
+
#: src/methods/updraftvault.php:619, src/udaddons/updraftplus-addons.php:789
|
2874 |
msgid "You need to supply both an email address and a password"
|
2875 |
msgstr ""
|
2876 |
|
2878 |
msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
|
2879 |
msgstr ""
|
2880 |
|
2881 |
+
#: src/class-updraftplus.php:4466
|
2882 |
msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
|
2883 |
msgstr ""
|
2884 |
|
2885 |
+
#: src/class-updraftplus.php:4466
|
2886 |
msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
|
2887 |
msgstr ""
|
2888 |
|
2889 |
+
#: src/addons/migrator.php:1132
|
2890 |
msgid "already done"
|
2891 |
msgstr ""
|
2892 |
|
2893 |
+
#: src/addons/migrator.php:1089
|
2894 |
msgid "skipped (not in list)"
|
2895 |
msgstr ""
|
2896 |
|
2897 |
+
#: src/addons/migrator.php:1089, src/addons/migrator.php:1132,
|
2898 |
+
#: src/addons/migrator.php:1266
|
2899 |
msgid "Search and replacing table:"
|
2900 |
msgstr ""
|
2901 |
|
2902 |
+
#: src/addons/migrator.php:333
|
2903 |
msgid "Enter a comma-separated list; otherwise, leave blank for all tables."
|
2904 |
msgstr ""
|
2905 |
|
2906 |
+
#: src/addons/migrator.php:333
|
2907 |
msgid "These tables only"
|
2908 |
msgstr ""
|
2909 |
|
2910 |
+
#: src/addons/migrator.php:332
|
2911 |
msgid "Rows per batch"
|
2912 |
msgstr ""
|
2913 |
|
2919 |
msgid "You need to connect to receive future updates to UpdraftPlus."
|
2920 |
msgstr ""
|
2921 |
|
2922 |
+
#: src/class-updraftplus.php:4439
|
2923 |
msgid "Any support requests to do with %s should be raised with your web hosting company."
|
2924 |
msgstr ""
|
2925 |
|
2926 |
+
#: src/class-updraftplus.php:4439
|
2927 |
msgid "You should only proceed if you cannot update the current server and are confident (or willing to risk) that your plugins/themes/etc. are compatible with the older %s version."
|
2928 |
msgstr ""
|
2929 |
|
2930 |
+
#: src/class-updraftplus.php:4439
|
2931 |
msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
|
2932 |
msgstr ""
|
2933 |
|
2934 |
+
#: src/class-updraftplus.php:4439
|
2935 |
msgid "The site in this backup was running on a webserver with version %s of %s. "
|
2936 |
msgstr ""
|
2937 |
|
2960 |
msgid "UpdraftPlus is on social media - check us out!"
|
2961 |
msgstr ""
|
2962 |
|
2963 |
+
#: src/admin.php:3881
|
2964 |
msgid "Why am I seeing this?"
|
2965 |
msgstr ""
|
2966 |
|
2972 |
msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
|
2973 |
msgstr ""
|
2974 |
|
2975 |
+
#: src/admin.php:1880, src/admin.php:1892
|
2976 |
msgid "Start backup"
|
2977 |
msgstr ""
|
2978 |
|
2979 |
+
#: src/class-updraftplus.php:4411, src/restorer.php:1015
|
2980 |
msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
|
2981 |
msgstr ""
|
2982 |
|
2983 |
+
#: src/admin.php:3122
|
2984 |
msgid "You will need to consult with your web hosting provider to find out how to set permissions for a WordPress plugin to write to the directory."
|
2985 |
msgstr ""
|
2986 |
|
2988 |
msgid "Unless you have a problem, you can completely ignore everything here."
|
2989 |
msgstr ""
|
2990 |
|
2991 |
+
#: src/admin.php:2112
|
2992 |
msgid "This file could not be uploaded"
|
2993 |
msgstr ""
|
2994 |
|
2995 |
+
#: src/admin.php:2077
|
2996 |
msgid "You will find more information about this in the Settings section."
|
2997 |
msgstr ""
|
2998 |
|
3012 |
msgid "Memory limit"
|
3013 |
msgstr ""
|
3014 |
|
3015 |
+
#: src/class-updraftplus.php:4643, src/restorer.php:1499
|
3016 |
msgid "restoration"
|
3017 |
msgstr ""
|
3018 |
|
3019 |
+
#: src/backup.php:912
|
3020 |
msgid "Incremental"
|
3021 |
msgstr ""
|
3022 |
|
3023 |
+
#: src/backup.php:912
|
3024 |
msgid "Full backup"
|
3025 |
msgstr ""
|
3026 |
|
3036 |
msgid "Backup succeeded"
|
3037 |
msgstr ""
|
3038 |
|
3039 |
+
#: src/admin.php:3269, src/admin.php:3270, src/admin.php:3271,
|
3040 |
#: src/updraftplus.php:99, src/updraftplus.php:100
|
3041 |
msgid "Every %s hours"
|
3042 |
msgstr ""
|
3043 |
|
3044 |
+
#: src/addons/migrator.php:796, src/addons/migrator.php:798
|
3045 |
msgid "search and replace"
|
3046 |
msgstr ""
|
3047 |
|
3048 |
+
#: src/addons/migrator.php:335
|
3049 |
msgid "Go"
|
3050 |
msgstr ""
|
3051 |
|
3052 |
+
#: src/addons/migrator.php:324
|
3053 |
msgid "A search/replace cannot be undone - are you sure you want to do this?"
|
3054 |
msgstr ""
|
3055 |
|
3056 |
+
#: src/addons/migrator.php:323
|
3057 |
msgid "This can easily destroy your site; so, use it with care!"
|
3058 |
msgstr ""
|
3059 |
|
3060 |
+
#: src/addons/migrator.php:293, src/addons/migrator.php:331
|
3061 |
msgid "Replace with"
|
3062 |
msgstr ""
|
3063 |
|
3064 |
+
#: src/addons/migrator.php:292, src/addons/migrator.php:330
|
3065 |
msgid "Search for"
|
3066 |
msgstr ""
|
3067 |
|
3068 |
+
#: src/addons/migrator.php:291, src/addons/migrator.php:322,
|
3069 |
#: src/templates/wp-admin/advanced/search-replace.php:7,
|
3070 |
#: src/templates/wp-admin/advanced/tools-menu.php:18
|
3071 |
msgid "Search / replace database"
|
3072 |
msgstr ""
|
3073 |
|
3074 |
+
#: src/addons/migrator.php:297
|
3075 |
msgid "search term"
|
3076 |
msgstr ""
|
3077 |
|
3078 |
+
#: src/restorer.php:2217
|
3079 |
msgid "Too many database errors have occurred - aborting"
|
3080 |
msgstr ""
|
3081 |
|
3082 |
+
#: src/backup.php:978
|
3083 |
msgid "read more at %s"
|
3084 |
msgstr ""
|
3085 |
|
3086 |
+
#: src/backup.php:978
|
3087 |
msgid "Email reports created by UpdraftPlus (free edition) bring you the latest UpdraftPlus.com news"
|
3088 |
msgstr ""
|
3089 |
|
3090 |
+
#: src/methods/googledrive.php:1103
|
3091 |
msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your project; you must create a new one from your Google API console for each site."
|
3092 |
msgstr ""
|
3093 |
|
3094 |
+
#: src/admin.php:3625
|
3095 |
msgid "You have not yet made any backups."
|
3096 |
msgstr ""
|
3097 |
|
3111 |
msgid "Free disk space in account:"
|
3112 |
msgstr ""
|
3113 |
|
3114 |
+
#: src/admin.php:4467, src/templates/wp-admin/settings/tab-status.php:27
|
3115 |
msgid "This button is disabled because your backup directory is not writable (see the settings)."
|
3116 |
msgstr ""
|
3117 |
|
3118 |
+
#: src/admin.php:534, src/admin.php:675, src/admin.php:1726,
|
3119 |
#: src/includes/deprecated-actions.php:29,
|
3120 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:21,
|
3121 |
#: src/templates/wp-admin/settings/tab-bar.php:6
|
3122 |
msgid "Existing Backups"
|
3123 |
msgstr ""
|
3124 |
|
3125 |
+
#: src/admin.php:526, src/templates/wp-admin/settings/tab-bar.php:5
|
3126 |
msgid "Current Status"
|
3127 |
msgstr ""
|
3128 |
|
3129 |
+
#: src/admin.php:950
|
3130 |
msgid "To change any of the default settings of what is backed up, to configure scheduled backups, to send your backups to remote storage (recommended), and more, go to the settings tab."
|
3131 |
msgstr ""
|
3132 |
|
3133 |
+
#: src/admin.php:950
|
3134 |
msgid "To make a backup, just press the Backup Now button."
|
3135 |
msgstr ""
|
3136 |
|
3137 |
+
#: src/admin.php:950
|
3138 |
msgid "Welcome to UpdraftPlus!"
|
3139 |
msgstr ""
|
3140 |
|
3206 |
msgid "user"
|
3207 |
msgstr ""
|
3208 |
|
3209 |
+
#: src/class-updraftplus.php:1751
|
3210 |
msgid "External database (%s)"
|
3211 |
msgstr ""
|
3212 |
|
3213 |
+
#: src/methods/googledrive.php:1103
|
3214 |
msgid "Follow this link to your Google API Console, and there activate the Drive API and create a Client ID in the API Access section."
|
3215 |
msgstr ""
|
3216 |
|
3217 |
+
#: src/methods/googledrive.php:461
|
3218 |
msgid "failed to access parent folder"
|
3219 |
msgstr ""
|
3220 |
|
3221 |
+
#: src/addons/googlecloud.php:629, src/addons/onedrive.php:765,
|
3222 |
+
#: src/addons/onedrive.php:776, src/methods/googledrive.php:414
|
3223 |
msgid "However, subsequent access attempts failed:"
|
3224 |
msgstr ""
|
3225 |
|
3226 |
+
#: src/admin.php:3650
|
3227 |
msgid "External database"
|
3228 |
msgstr ""
|
3229 |
|
3255 |
msgid "use UpdraftPlus Premium"
|
3256 |
msgstr ""
|
3257 |
|
3258 |
+
#: src/class-updraftplus.php:4308
|
3259 |
msgid "Decryption failed. The database file is encrypted."
|
3260 |
msgstr ""
|
3261 |
|
3263 |
msgid "Only the WordPress database can be restored; you will need to deal with the external database manually."
|
3264 |
msgstr ""
|
3265 |
|
3266 |
+
#: src/restorer.php:1764, src/restorer.php:2158, src/restorer.php:2199,
|
3267 |
+
#: src/restorer.php:2212
|
3268 |
msgid "An error occurred on the first %s command - aborting run"
|
3269 |
msgstr ""
|
3270 |
|
3271 |
+
#: src/addons/moredatabase.php:105, src/backup.php:1478
|
3272 |
msgid "Connection failed: check your access details, that the database server is up, and that the network connection is not firewalled."
|
3273 |
msgstr ""
|
3274 |
|
3275 |
+
#: src/backup.php:1478
|
3276 |
msgid "database connection attempt failed."
|
3277 |
msgstr ""
|
3278 |
|
3279 |
+
#: src/addons/migrator.php:1020
|
3280 |
msgid "Warning: the database's home URL (%s) is different to what we expected (%s)"
|
3281 |
msgstr ""
|
3282 |
|
3283 |
+
#: src/addons/google-enhanced.php:68
|
3284 |
msgid "In %s, path names are case sensitive."
|
3285 |
msgstr ""
|
3286 |
|
3287 |
+
#: src/addons/azure.php:553, src/addons/google-enhanced.php:66,
|
3288 |
+
#: src/addons/onedrive.php:994
|
3289 |
msgid "If you leave it blank, then the backup will be placed in the root of your %s"
|
3290 |
msgstr ""
|
3291 |
|
3292 |
+
#: src/addons/google-enhanced.php:66, src/addons/googlecloud.php:947,
|
3293 |
+
#: src/addons/onedrive.php:994
|
3294 |
msgid "e.g. %s"
|
3295 |
msgstr ""
|
3296 |
|
3297 |
+
#: src/addons/google-enhanced.php:66, src/addons/onedrive.php:994
|
3298 |
msgid "Enter the path of the %s folder you wish to use here."
|
3299 |
msgstr ""
|
3300 |
|
3301 |
+
#: src/methods/openstack2.php:163
|
3302 |
msgid "Container"
|
3303 |
msgstr ""
|
3304 |
|
3305 |
+
#: src/methods/openstack2.php:146
|
3306 |
msgid "Leave this blank, and a default will be chosen."
|
3307 |
msgstr ""
|
3308 |
|
3309 |
+
#: src/methods/openstack2.php:137
|
3310 |
msgid "Tenant"
|
3311 |
msgstr ""
|
3312 |
|
3313 |
+
#: src/methods/openstack2.php:137
|
3314 |
msgid "Follow this link for more information"
|
3315 |
msgstr ""
|
3316 |
|
3317 |
+
#: src/methods/openstack2.php:129, src/methods/openstack2.php:188
|
3318 |
msgid "authentication URI"
|
3319 |
msgstr ""
|
3320 |
|
3321 |
+
#: src/methods/openstack2.php:124
|
3322 |
msgid "Get your access credentials from your OpenStack Swift provider, and then pick a container name to use for storage. This container will be created for you if it does not already exist."
|
3323 |
msgstr ""
|
3324 |
|
3338 |
msgid "Failed to upload %s"
|
3339 |
msgstr ""
|
3340 |
|
3341 |
+
#: src/methods/dropbox.php:636, src/methods/dropbox.php:638
|
3342 |
msgid "Success:"
|
3343 |
msgstr ""
|
3344 |
|
3345 |
+
#: src/addons/onedrive.php:1015, src/methods/dropbox.php:513
|
3346 |
msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with %s."
|
3347 |
msgstr ""
|
3348 |
|
3349 |
+
#: src/addons/onedrive.php:1007, src/methods/dropbox.php:501
|
3350 |
msgid "(You appear to be already authenticated)."
|
3351 |
msgstr ""
|
3352 |
|
3353 |
+
#: src/methods/dropbox.php:497, src/methods/dropbox.php:505,
|
3354 |
+
#: src/methods/dropbox.php:513
|
3355 |
msgid "Dropbox"
|
3356 |
msgstr ""
|
3357 |
|
3358 |
+
#: src/addons/onedrive.php:1000, src/methods/dropbox.php:497
|
3359 |
msgid "Authenticate with %s"
|
3360 |
msgstr ""
|
3361 |
|
3386 |
msgid "%s error - failed to access the container"
|
3387 |
msgstr ""
|
3388 |
|
3389 |
+
#: src/addons/googlecloud.php:1024, src/addons/onedrive.php:1039,
|
3390 |
+
#: src/methods/dropbox.php:562, src/methods/googledrive.php:1168
|
3391 |
msgid "Account holder's name: %s."
|
3392 |
msgstr ""
|
3393 |
|
3394 |
+
#: src/methods/googledrive.php:1146
|
3395 |
msgid "To be able to set a custom folder name, use UpdraftPlus Premium."
|
3396 |
msgstr ""
|
3397 |
|
3398 |
+
#: src/methods/googledrive.php:1133
|
3399 |
msgid "It is an ID number internal to Google Drive"
|
3400 |
msgstr ""
|
3401 |
|
3402 |
+
#: src/methods/googledrive.php:1133
|
3403 |
msgid "<strong>This is NOT a folder name</strong>."
|
3404 |
msgstr ""
|
3405 |
|
3406 |
+
#: src/addons/google-enhanced.php:64, src/addons/onedrive.php:992,
|
3407 |
+
#: src/methods/googledrive.php:1128, src/methods/googledrive.php:1139
|
3408 |
msgid "Folder"
|
3409 |
msgstr ""
|
3410 |
|
3411 |
+
#: src/addons/googlecloud.php:298, src/addons/onedrive.php:366,
|
3412 |
+
#: src/methods/googledrive.php:1052
|
3413 |
msgid "%s download: failed: file not found"
|
3414 |
msgstr ""
|
3415 |
|
3416 |
+
#: src/addons/googlecloud.php:649, src/methods/googledrive.php:434
|
3417 |
msgid "Name: %s."
|
3418 |
msgstr ""
|
3419 |
|
3420 |
+
#: src/methods/googledrive.php:190
|
3421 |
msgid "Google Drive list files: failed to access parent folder"
|
3422 |
msgstr ""
|
3423 |
|
3424 |
+
#: src/methods/addon-not-yet-present.php:99, src/methods/insufficient.php:121
|
3425 |
msgid "Your %s version: %s."
|
3426 |
msgstr ""
|
3427 |
|
3428 |
+
#: src/methods/addon-not-yet-present.php:98, src/methods/insufficient.php:120
|
3429 |
msgid "You will need to ask your web hosting company to upgrade."
|
3430 |
msgstr ""
|
3431 |
|
3442 |
msgid "Fetch"
|
3443 |
msgstr ""
|
3444 |
|
3445 |
+
#: src/addons/migrator.php:394,
|
3446 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:61,
|
3447 |
#: src/templates/wp-admin/settings/form-contents.php:210
|
3448 |
msgid "This feature requires %s version %s or later"
|
3452 |
msgid "Failed to unpack the archive"
|
3453 |
msgstr ""
|
3454 |
|
3455 |
+
#: src/class-updraftplus.php:1283
|
3456 |
msgid "Error - failed to download the file"
|
3457 |
msgstr ""
|
3458 |
|
3460 |
msgid "Rescan local folder for new backup sets"
|
3461 |
msgstr ""
|
3462 |
|
3463 |
+
#: src/udaddons/updraftplus-addons.php:253
|
3464 |
msgid "You should update UpdraftPlus to make sure that you have a version that has been tested for compatibility."
|
3465 |
msgstr ""
|
3466 |
|
3467 |
+
#: src/udaddons/updraftplus-addons.php:253
|
3468 |
msgid "It has been tested up to version %s."
|
3469 |
msgstr ""
|
3470 |
|
3471 |
+
#: src/udaddons/updraftplus-addons.php:253
|
3472 |
msgid "The installed version of UpdraftPlus Backup/Restore has not been tested on your version of WordPress (%s)."
|
3473 |
msgstr ""
|
3474 |
|
3475 |
+
#: src/addons/sftp.php:497
|
3476 |
msgid "password/key"
|
3477 |
msgstr ""
|
3478 |
|
3479 |
+
#: src/addons/migrator.php:2276, src/addons/sftp.php:433, src/admin.php:722,
|
3480 |
+
#: src/admin.php:4688
|
3481 |
msgid "Key"
|
3482 |
msgstr ""
|
3483 |
|
3484 |
+
#: src/addons/sftp.php:428
|
3485 |
msgid "Your login may be either password or key-based - you only need to enter one, not both."
|
3486 |
msgstr ""
|
3487 |
|
3493 |
msgid "SCP/SFTP password/key"
|
3494 |
msgstr ""
|
3495 |
|
3496 |
+
#: src/admin.php:3694
|
3497 |
msgid "Files backup (created by %s)"
|
3498 |
msgstr ""
|
3499 |
|
3500 |
+
#: src/admin.php:3694
|
3501 |
msgid "Files and database WordPress backup (created by %s)"
|
3502 |
msgstr ""
|
3503 |
|
3504 |
+
#: src/addons/importer.php:276, src/admin.php:3688,
|
3505 |
#: src/includes/class-backup-history.php:279
|
3506 |
msgid "Backup created by: %s."
|
3507 |
msgstr ""
|
3508 |
|
3509 |
+
#: src/admin.php:3648
|
3510 |
msgid "Database (created by %s)"
|
3511 |
msgstr ""
|
3512 |
|
3513 |
+
#: src/admin.php:3642, src/admin.php:3690
|
3514 |
msgid "unknown source"
|
3515 |
msgstr ""
|
3516 |
|
3522 |
msgid "Upload backup files"
|
3523 |
msgstr ""
|
3524 |
|
3525 |
+
#: src/admin.php:2158
|
3526 |
msgid "This backup was created by %s, and can be imported."
|
3527 |
msgstr ""
|
3528 |
|
3529 |
+
#: src/admin.php:979
|
3530 |
msgid "Read this page for a guide to possible causes and how to fix it."
|
3531 |
msgstr ""
|
3532 |
|
3533 |
+
#: src/admin.php:979
|
3534 |
msgid "WordPress has a number (%d) of scheduled tasks which are overdue. Unless this is a development site, this probably means that the scheduler in your WordPress install is not working."
|
3535 |
msgstr ""
|
3536 |
|
3537 |
+
#: src/admin.php:687, src/includes/class-backup-history.php:286
|
3538 |
msgid "If this is a backup created by a different backup plugin, then UpdraftPlus Premium may be able to help you."
|
3539 |
msgstr ""
|
3540 |
|
3541 |
+
#: src/admin.php:686
|
3542 |
msgid "However, UpdraftPlus archives are standard zip/SQL files - so if you are sure that your file has the right format, then you can rename it to match that pattern."
|
3543 |
msgstr ""
|
3544 |
|
3545 |
+
#: src/admin.php:686, src/admin.php:687,
|
3546 |
#: src/includes/class-backup-history.php:286
|
3547 |
msgid "This file does not appear to be an UpdraftPlus backup archive (such files are .zip or .gz files which have a name like: backup_(time)_(site name)_(code)_(type).(zip|gz))."
|
3548 |
msgstr ""
|
3549 |
|
3550 |
+
#: src/admin.php:3691, src/includes/class-wpadmin-commands.php:152,
|
3551 |
+
#: src/restorer.php:1468
|
3552 |
msgid "Backup created by unknown source (%s) - cannot be restored."
|
3553 |
msgstr ""
|
3554 |
|
3560 |
msgid "This version of UpdraftPlus does not know how to handle this type of foreign backup"
|
3561 |
msgstr ""
|
3562 |
|
3563 |
+
#: src/methods/dropbox.php:309
|
3564 |
msgid "%s returned an unexpected HTTP response: %s"
|
3565 |
msgstr ""
|
3566 |
|
3567 |
+
#: src/addons/sftp.php:967
|
3568 |
msgid "The UpdraftPlus module for this file access method (%s) does not support listing files"
|
3569 |
msgstr ""
|
3570 |
|
3571 |
#: src/addons/backblaze.php:515, src/methods/cloudfiles.php:246,
|
3572 |
+
#: src/methods/dropbox.php:290, src/methods/openstack-base.php:111
|
3573 |
msgid "No settings were found"
|
3574 |
msgstr ""
|
3575 |
|
3577 |
msgid "One or more backups has been added from scanning remote storage; note that these backups will not be automatically deleted through the \"retain\" settings; if/when you wish to delete them then you must do so manually."
|
3578 |
msgstr ""
|
3579 |
|
3580 |
+
#: src/admin.php:653
|
3581 |
msgid "Rescanning remote and local storage for backup sets..."
|
3582 |
msgstr ""
|
3583 |
|
3584 |
+
#: src/addons/googlecloud.php:950, src/addons/googlecloud.php:964,
|
3585 |
#: src/addons/s3-enhanced.php:54, src/addons/s3-enhanced.php:67
|
3586 |
msgid "(Read more)"
|
3587 |
msgstr ""
|
3588 |
|
3589 |
+
#: src/addons/reporting.php:442
|
3590 |
msgid "Log all messages to syslog (only server admins are likely to want this)"
|
3591 |
msgstr ""
|
3592 |
|
3599 |
msgid "Remove"
|
3600 |
msgstr ""
|
3601 |
|
3602 |
+
#: src/methods/s3.php:847, src/methods/s3.php:960
|
3603 |
msgid "Other %s FAQs."
|
3604 |
msgstr ""
|
3605 |
|
3607 |
msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong."
|
3608 |
msgstr ""
|
3609 |
|
3610 |
+
#: src/addons/morefiles.php:445, src/admin.php:3373
|
3611 |
msgid "If entering multiple files/directories, then separate them with commas. For entities at the top level, you can use a * at the start or end of the entry as a wildcard."
|
3612 |
msgstr ""
|
3613 |
|
3614 |
+
#: src/class-updraftplus.php:4643, src/methods/ftp.php:309,
|
3615 |
+
#: src/restorer.php:1499
|
3616 |
msgid "Your hosting company must enable these functions before %s can work."
|
3617 |
msgstr ""
|
3618 |
|
3619 |
+
#: src/class-updraftplus.php:4643, src/methods/ftp.php:309
|
3620 |
msgid "Your web server's PHP installation has these functions disabled: %s."
|
3621 |
msgstr ""
|
3622 |
|
3632 |
msgid "regular non-encrypted FTP"
|
3633 |
msgstr ""
|
3634 |
|
3635 |
+
#: src/restorer.php:1672
|
3636 |
msgid "Backup created by:"
|
3637 |
msgstr ""
|
3638 |
|
3639 |
+
#: src/udaddons/options.php:503
|
3640 |
msgid "Available to claim on this site"
|
3641 |
msgstr ""
|
3642 |
|
3643 |
+
#: src/udaddons/updraftplus-addons.php:274
|
3644 |
msgid "To maintain your access to support, please renew."
|
3645 |
msgstr ""
|
3646 |
|
3647 |
+
#: src/udaddons/updraftplus-addons.php:274
|
3648 |
msgid "Your paid access to UpdraftPlus support will soon expire."
|
3649 |
msgstr ""
|
3650 |
|
3651 |
+
#: src/udaddons/updraftplus-addons.php:272
|
3652 |
msgid "To regain your access, please renew."
|
3653 |
msgstr ""
|
3654 |
|
3655 |
+
#: src/udaddons/updraftplus-addons.php:272
|
3656 |
msgid "Your paid access to UpdraftPlus support has expired."
|
3657 |
msgstr ""
|
3658 |
|
3659 |
+
#: src/udaddons/updraftplus-addons.php:268
|
3660 |
msgid "Your paid access to UpdraftPlus updates for this site will soon expire."
|
3661 |
msgstr ""
|
3662 |
|
3663 |
+
#: src/udaddons/updraftplus-addons.php:266,
|
3664 |
+
#: src/udaddons/updraftplus-addons.php:268
|
3665 |
msgid "To retain your access, and maintain access to updates (including future features and compatibility with future WordPress releases) and support, please renew."
|
3666 |
msgstr ""
|
3667 |
|
3668 |
+
#: src/udaddons/updraftplus-addons.php:266
|
3669 |
msgid "Your paid access to UpdraftPlus updates for %s of the %s add-ons on this site will soon expire."
|
3670 |
msgstr ""
|
3671 |
|
3672 |
+
#: src/udaddons/updraftplus-addons.php:262
|
3673 |
msgid "Your paid access to UpdraftPlus updates for %s add-ons on this site has expired."
|
3674 |
msgstr ""
|
3675 |
|
3676 |
+
#: src/udaddons/updraftplus-addons.php:260,
|
3677 |
+
#: src/udaddons/updraftplus-addons.php:262
|
3678 |
msgid "To regain access to updates (including future features and compatibility with future WordPress releases) and support, please renew."
|
3679 |
msgstr ""
|
3680 |
|
3681 |
+
#: src/udaddons/updraftplus-addons.php:260
|
3682 |
msgid "Your paid access to UpdraftPlus updates for this site has expired. You will no longer receive updates to UpdraftPlus."
|
3683 |
msgstr ""
|
3684 |
|
3685 |
+
#: src/udaddons/updraftplus-addons.php:225
|
3686 |
msgid "Dismiss from main dashboard (for %s weeks)"
|
3687 |
msgstr ""
|
3688 |
|
3689 |
+
#: src/class-updraftplus.php:4693
|
3690 |
msgid "The attempt to undo the double-compression succeeded."
|
3691 |
msgstr ""
|
3692 |
|
3693 |
+
#: src/class-updraftplus.php:4670, src/class-updraftplus.php:4691
|
3694 |
msgid "The attempt to undo the double-compression failed."
|
3695 |
msgstr ""
|
3696 |
|
3697 |
+
#: src/class-updraftplus.php:4663
|
3698 |
msgid "The database file appears to have been compressed twice - probably the website you downloaded it from had a mis-configured webserver."
|
3699 |
msgstr ""
|
3700 |
|
3702 |
msgid "Constants"
|
3703 |
msgstr ""
|
3704 |
|
3705 |
+
#: src/backup.php:1715
|
3706 |
msgid "Failed to open database file for reading:"
|
3707 |
msgstr ""
|
3708 |
|
3709 |
+
#: src/backup.php:1526
|
3710 |
msgid "No database tables found"
|
3711 |
msgstr ""
|
3712 |
|
3713 |
+
#: src/backup.php:1524
|
3714 |
msgid "please wait for the rescheduled attempt"
|
3715 |
msgstr ""
|
3716 |
|
3717 |
+
#: src/addons/reporting.php:217
|
3718 |
msgid "Note that warning messages are advisory - the backup process does not stop for them. Instead, they provide information that you might find useful, or that may indicate the source of a problem if the backup did not succeed."
|
3719 |
msgstr ""
|
3720 |
|
3721 |
+
#: src/addons/onedrive.php:91, src/methods/dropbox.php:199
|
3722 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded has %d bytes remaining (total size: %d bytes)"
|
3723 |
msgstr ""
|
3724 |
|
3725 |
+
#: src/udaddons/updraftplus-addons.php:459,
|
3726 |
+
#: src/udaddons/updraftplus-addons.php:495
|
3727 |
msgid "Errors occurred:"
|
3728 |
msgstr ""
|
3729 |
|
3730 |
+
#: src/admin.php:3900
|
3731 |
msgid "Follow this link to download the log file for this restoration (needed for any support requests)."
|
3732 |
msgstr ""
|
3733 |
|
3751 |
msgid "Existing unremoved folders from a previous restore exist (please use the \"Delete Old Directories\" button to delete them before trying again): %s"
|
3752 |
msgstr ""
|
3753 |
|
3754 |
+
#: src/admin.php:954, src/class-updraftplus.php:801
|
3755 |
msgid "The amount of time allowed for WordPress plugins to run is very low (%s seconds) - you should increase it to avoid backup failures due to time-outs (consult your web hosting company for more help - it is the max_execution_time PHP setting; the recommended value is %s seconds or more)"
|
3756 |
msgstr ""
|
3757 |
|
3758 |
+
#: src/addons/migrator.php:264
|
3759 |
msgid "Disabled this plugin: %s: re-activate it manually when you are ready."
|
3760 |
msgstr ""
|
3761 |
|
3762 |
+
#: src/addons/sftp.php:722, src/addons/sftp.php:725,
|
3763 |
#: src/includes/ftp.class.php:58, src/includes/ftp.class.php:61
|
3764 |
msgid "The %s connection timed out; if you entered the server correctly, then this is usually caused by a firewall blocking the connection - you should check with your web hosting company."
|
3765 |
msgstr ""
|
3766 |
|
3767 |
+
#: src/addons/moredatabase.php:137, src/admin.php:1470
|
3768 |
msgid "Messages:"
|
3769 |
msgstr ""
|
3770 |
|
3771 |
+
#: src/restorer.php:2052
|
3772 |
msgid "An SQL line that is larger than the maximum packet size and cannot be split was found; this line will not be processed, but will be dropped: %s"
|
3773 |
msgstr ""
|
3774 |
|
3861 |
msgid "Rackspace Cloud Files, enhanced"
|
3862 |
msgstr ""
|
3863 |
|
3864 |
+
#: src/addons/cloudfiles-enhanced.php:278, src/methods/cloudfiles-new.php:142,
|
3865 |
+
#: src/methods/cloudfiles.php:504
|
3866 |
msgid "Cloud Files Container"
|
3867 |
msgstr ""
|
3868 |
|
3869 |
+
#: src/methods/cloudfiles-new.php:137, src/methods/cloudfiles.php:499
|
3870 |
msgid "Cloud Files API Key"
|
3871 |
msgstr ""
|
3872 |
|
3873 |
+
#: src/methods/cloudfiles-new.php:132
|
3874 |
msgid "To create a new Rackspace API sub-user and API key that has access only to this Rackspace container, use this add-on."
|
3875 |
msgstr ""
|
3876 |
|
3877 |
+
#: src/methods/cloudfiles-new.php:129
|
3878 |
msgid "Cloud Files Username"
|
3879 |
msgstr ""
|
3880 |
|
3881 |
+
#: src/addons/cloudfiles-enhanced.php:47, src/methods/cloudfiles-new.php:124,
|
3882 |
+
#: src/methods/cloudfiles-new.php:169
|
3883 |
msgid "London (LON)"
|
3884 |
msgstr ""
|
3885 |
|
3886 |
+
#: src/addons/cloudfiles-enhanced.php:46, src/methods/cloudfiles-new.php:123,
|
3887 |
+
#: src/methods/cloudfiles-new.php:168
|
3888 |
msgid "Hong Kong (HKG)"
|
3889 |
msgstr ""
|
3890 |
|
3891 |
+
#: src/addons/cloudfiles-enhanced.php:45, src/methods/cloudfiles-new.php:122,
|
3892 |
+
#: src/methods/cloudfiles-new.php:167
|
3893 |
msgid "Northern Virginia (IAD)"
|
3894 |
msgstr ""
|
3895 |
|
3896 |
+
#: src/addons/cloudfiles-enhanced.php:44, src/methods/cloudfiles-new.php:121,
|
3897 |
+
#: src/methods/cloudfiles-new.php:166
|
3898 |
msgid "Chicago (ORD)"
|
3899 |
msgstr ""
|
3900 |
|
3901 |
+
#: src/addons/cloudfiles-enhanced.php:43, src/methods/cloudfiles-new.php:120,
|
3902 |
+
#: src/methods/cloudfiles-new.php:165
|
3903 |
msgid "Sydney (SYD)"
|
3904 |
msgstr ""
|
3905 |
|
3906 |
+
#: src/addons/cloudfiles-enhanced.php:42, src/methods/cloudfiles-new.php:119,
|
3907 |
+
#: src/methods/cloudfiles-new.php:164
|
3908 |
msgid "Dallas (DFW) (default)"
|
3909 |
msgstr ""
|
3910 |
|
3911 |
+
#: src/addons/cloudfiles-enhanced.php:274, src/methods/cloudfiles-new.php:116
|
3912 |
msgid "Cloud Files Storage Region"
|
3913 |
msgstr ""
|
3914 |
|
3915 |
+
#: src/methods/cloudfiles-new.php:109
|
3916 |
msgid "Accounts created at rackspacecloud.com are US-accounts; accounts created at rackspace.co.uk are UK-based"
|
3917 |
msgstr ""
|
3918 |
|
3919 |
+
#: src/methods/cloudfiles-new.php:107
|
3920 |
msgid "US or UK-based Rackspace Account"
|
3921 |
msgstr ""
|
3922 |
|
3923 |
+
#: src/addons/cloudfiles-enhanced.php:258, src/methods/cloudfiles-new.php:107
|
3924 |
msgid "Accounts created at rackspacecloud.com are US accounts; accounts created at rackspace.co.uk are UK accounts."
|
3925 |
msgstr ""
|
3926 |
|
3931 |
msgid "Authorisation failed (check your credentials)"
|
3932 |
msgstr ""
|
3933 |
|
3934 |
+
#: src/methods/updraftvault.php:593, src/udaddons/options.php:270
|
3935 |
msgid "An unknown error occurred when trying to connect to UpdraftPlus.Com"
|
3936 |
msgstr ""
|
3937 |
|
3938 |
+
#: src/admin.php:700, src/central/bootstrap.php:547
|
3939 |
msgid "Create"
|
3940 |
msgstr ""
|
3941 |
|
3942 |
+
#: src/admin.php:662
|
3943 |
msgid "Trying..."
|
3944 |
msgstr ""
|
3945 |
|
3946 |
+
#: src/admin.php:661
|
3947 |
msgid "The new user's RackSpace console password is (this will not be shown again):"
|
3948 |
msgstr ""
|
3949 |
|
3950 |
+
#: src/admin.php:672, src/admin.php:4180
|
3951 |
msgid "Error data:"
|
3952 |
msgstr ""
|
3953 |
|
3954 |
+
#: src/admin.php:3852
|
3955 |
msgid "Backup does not exist in the backup history"
|
3956 |
msgstr ""
|
3957 |
|
3958 |
+
#: src/admin.php:2732
|
3959 |
msgid "Your WordPress install has old directories from its state before you restored/migrated (technical information: these are suffixed with -old). You should press this button to delete them as soon as you have verified that the restoration worked."
|
3960 |
msgstr ""
|
3961 |
|
3962 |
+
#: src/restorer.php:1739
|
3963 |
msgid "Split line to avoid exceeding maximum packet size"
|
3964 |
msgstr ""
|
3965 |
|
3966 |
+
#: src/restorer.php:1619
|
3967 |
msgid "Your database user does not have permission to drop tables. We will attempt to restore by simply emptying the tables; this should work as long as you are restoring from a WordPress version with the same database structure (%s)"
|
3968 |
msgstr ""
|
3969 |
|
3983 |
msgid "Moving old data out of the way..."
|
3984 |
msgstr ""
|
3985 |
|
3986 |
+
#: src/addons/reporting.php:433
|
3987 |
msgid "Add another address..."
|
3988 |
msgstr ""
|
3989 |
|
3990 |
+
#: src/addons/reporting.php:419
|
3991 |
msgid "Enter addresses here to have a report sent to them when a backup job finishes."
|
3992 |
msgstr ""
|
3993 |
|
3994 |
+
#: src/addons/reporting.php:394
|
3995 |
msgid "Email reports"
|
3996 |
msgstr ""
|
3997 |
|
3998 |
+
#: src/class-updraftplus.php:1759, src/class-updraftplus.php:1764
|
3999 |
msgid "%s checksum: %s"
|
4000 |
msgstr ""
|
4001 |
|
4002 |
+
#: src/class-updraftplus.php:1732, src/class-updraftplus.php:1734
|
4003 |
msgid "files: %s"
|
4004 |
msgstr ""
|
4005 |
|
4006 |
+
#: src/addons/reporting.php:358
|
4007 |
msgid "Use the \"Reporting\" section to configure the email addresses to be used."
|
4008 |
msgstr ""
|
4009 |
|
4010 |
+
#: src/addons/reporting.php:267
|
4011 |
msgid "Debugging information"
|
4012 |
msgstr ""
|
4013 |
|
4014 |
+
#: src/addons/reporting.php:222, src/admin.php:3581
|
4015 |
msgid "Uploaded to:"
|
4016 |
msgstr ""
|
4017 |
|
4018 |
+
#: src/addons/reporting.php:221
|
4019 |
msgid "Time taken:"
|
4020 |
msgstr ""
|
4021 |
|
4022 |
+
#: src/addons/reporting.php:212
|
4023 |
msgid "Warnings"
|
4024 |
msgstr ""
|
4025 |
|
4026 |
+
#: src/addons/reporting.php:197
|
4027 |
msgid "Errors"
|
4028 |
msgstr ""
|
4029 |
|
4030 |
+
#: src/addons/reporting.php:194
|
4031 |
msgid "Errors / warnings:"
|
4032 |
msgstr ""
|
4033 |
|
4034 |
#: src/addons/morefiles.php:119, src/addons/morefiles.php:120,
|
4035 |
+
#: src/addons/reporting.php:183
|
4036 |
msgid "Contains:"
|
4037 |
msgstr ""
|
4038 |
|
4039 |
+
#: src/addons/reporting.php:182
|
4040 |
msgid "Backup began:"
|
4041 |
msgstr ""
|
4042 |
|
4043 |
+
#: src/addons/reporting.php:170
|
4044 |
msgid "Backup Report"
|
4045 |
msgstr ""
|
4046 |
|
4047 |
+
#: src/addons/reporting.php:165
|
4048 |
msgid "%d hours, %d minutes, %d seconds"
|
4049 |
msgstr ""
|
4050 |
|
4051 |
+
#: src/addons/reporting.php:151
|
4052 |
msgid "%d errors, %d warnings"
|
4053 |
msgstr ""
|
4054 |
|
4055 |
+
#: src/addons/onedrive.php:721, src/methods/dropbox.php:620
|
4056 |
msgid "%s authentication"
|
4057 |
msgstr ""
|
4058 |
|
4059 |
+
#: src/addons/onedrive.php:721, src/class-updraftplus.php:486,
|
4060 |
+
#: src/methods/dropbox.php:172, src/methods/dropbox.php:589,
|
4061 |
+
#: src/methods/dropbox.php:620, src/methods/dropbox.php:633,
|
4062 |
+
#: src/methods/dropbox.php:774
|
4063 |
msgid "%s error: %s"
|
4064 |
msgstr ""
|
4065 |
|
4066 |
+
#: src/addons/googlecloud.php:905, src/methods/dropbox.php:474
|
4067 |
msgid "%s logo"
|
4068 |
msgstr ""
|
4069 |
|
4070 |
+
#: src/methods/dropbox.php:218
|
4071 |
msgid "%s did not return the expected response - check your log file for more details"
|
4072 |
msgstr ""
|
4073 |
|
4083 |
msgid "Your site's admin email address (%s) will be used."
|
4084 |
msgstr ""
|
4085 |
|
4086 |
+
#: src/admin.php:709, src/methods/updraftvault.php:296,
|
4087 |
+
#: src/methods/updraftvault.php:339, src/udaddons/options.php:249
|
4088 |
msgid "Connect"
|
4089 |
msgstr ""
|
4090 |
|
4092 |
msgid "For more reporting features, use the Reporting add-on."
|
4093 |
msgstr ""
|
4094 |
|
4095 |
+
#: src/class-updraftplus.php:4383
|
4096 |
msgid "(version: %s)"
|
4097 |
msgstr ""
|
4098 |
|
4099 |
+
#: src/addons/reporting.php:466, src/addons/reporting.php:466,
|
4100 |
+
#: src/admin.php:651
|
4101 |
msgid "Be aware that mail servers tend to have size limits; typically around %s Mb; backups larger than any limits will likely not arrive."
|
4102 |
msgstr ""
|
4103 |
|
4104 |
+
#: src/addons/reporting.php:466, src/admin.php:650
|
4105 |
msgid "When the Email storage method is enabled, also send the entire backup"
|
4106 |
msgstr ""
|
4107 |
|
4108 |
+
#: src/addons/reporting.php:181, src/backup.php:1013
|
4109 |
msgid "Latest status:"
|
4110 |
msgstr ""
|
4111 |
|
4112 |
+
#: src/backup.php:1012
|
4113 |
msgid "Backup contains:"
|
4114 |
msgstr ""
|
4115 |
|
4116 |
+
#: src/backup.php:969
|
4117 |
msgid "Backed up: %s"
|
4118 |
msgstr ""
|
4119 |
|
4120 |
+
#: src/addons/reporting.php:264, src/backup.php:963
|
4121 |
msgid "The log file has been attached to this email."
|
4122 |
msgstr ""
|
4123 |
|
4124 |
+
#: src/backup.php:927
|
4125 |
msgid "Unknown/unexpected error - please raise a support request"
|
4126 |
msgstr ""
|
4127 |
|
4128 |
+
#: src/backup.php:924
|
4129 |
msgid "Database only (files were not part of this particular schedule)"
|
4130 |
msgstr ""
|
4131 |
|
4132 |
+
#: src/backup.php:924
|
4133 |
msgid "Database (files backup has not completed)"
|
4134 |
msgstr ""
|
4135 |
|
4136 |
+
#: src/backup.php:921
|
4137 |
msgid "Files only (database was not part of this particular schedule)"
|
4138 |
msgstr ""
|
4139 |
|
4140 |
+
#: src/backup.php:921
|
4141 |
msgid "Files (database backup has not completed)"
|
4142 |
msgstr ""
|
4143 |
|
4144 |
+
#: src/admin.php:305, src/backup.php:919
|
4145 |
msgid "Files and database"
|
4146 |
msgstr ""
|
4147 |
|
4165 |
msgid "UpdraftPlus warning:"
|
4166 |
msgstr ""
|
4167 |
|
4168 |
+
#: src/udaddons/options.php:509
|
4169 |
msgid "(or connect using the form on this page if you have already purchased it)"
|
4170 |
msgstr ""
|
4171 |
|
4172 |
+
#: src/udaddons/options.php:495
|
4173 |
msgid "please follow this link to update the plugin in order to activate it"
|
4174 |
msgstr ""
|
4175 |
|
4176 |
+
#: src/udaddons/options.php:492
|
4177 |
msgid "please follow this link to update the plugin in order to get it"
|
4178 |
msgstr ""
|
4179 |
|
4180 |
+
#: src/udaddons/options.php:482, src/udaddons/options.php:484
|
4181 |
msgid "latest"
|
4182 |
msgstr ""
|
4183 |
|
4184 |
+
#: src/udaddons/options.php:480
|
4185 |
msgid "Your version: %s"
|
4186 |
msgstr ""
|
4187 |
|
4188 |
+
#: src/udaddons/options.php:478, src/udaddons/options.php:478
|
4189 |
msgid "You've got it"
|
4190 |
msgstr ""
|
4191 |
|
4192 |
+
#: src/udaddons/options.php:439
|
4193 |
msgid "UpdraftPlus Support"
|
4194 |
msgstr ""
|
4195 |
|
4196 |
+
#: src/udaddons/options.php:397
|
4197 |
msgid "An update containing your addons is available for UpdraftPlus - please follow this link to get it."
|
4198 |
msgstr ""
|
4199 |
|
4200 |
+
#: src/udaddons/options.php:386, src/udaddons/updraftplus-addons.php:301
|
4201 |
msgid "UpdraftPlus Addons"
|
4202 |
msgstr ""
|
4203 |
|
4205 |
msgid "An update is available for UpdraftPlus - please follow this link to get it."
|
4206 |
msgstr ""
|
4207 |
|
4208 |
+
#: src/methods/updraftvault.php:672, src/methods/updraftvault.php:687,
|
4209 |
+
#: src/udaddons/updraftplus-addons.php:932
|
4210 |
msgid "UpdraftPlus.Com returned a response, but we could not understand it"
|
4211 |
msgstr ""
|
4212 |
|
4213 |
+
#: src/methods/updraftvault.php:684, src/udaddons/updraftplus-addons.php:928
|
4214 |
msgid "Your email address and password were not recognised by UpdraftPlus.Com"
|
4215 |
msgstr ""
|
4216 |
|
4217 |
+
#: src/methods/updraftvault.php:645, src/udaddons/updraftplus-addons.php:891
|
4218 |
msgid "UpdraftPlus.Com returned a response which we could not understand (data: %s)"
|
4219 |
msgstr ""
|
4220 |
|
4221 |
+
#: src/udaddons/updraftplus-addons.php:816
|
4222 |
msgid "UpdraftPlus.Com responded, but we did not understand the response"
|
4223 |
msgstr ""
|
4224 |
|
4225 |
+
#: src/udaddons/updraftplus-addons.php:814
|
4226 |
msgid "We failed to successfully connect to UpdraftPlus.Com"
|
4227 |
msgstr ""
|
4228 |
|
4233 |
msgid "Reporting"
|
4234 |
msgstr ""
|
4235 |
|
4236 |
+
#: src/admin.php:4685
|
4237 |
msgid "Options (raw)"
|
4238 |
msgstr ""
|
4239 |
|
4240 |
+
#: src/addons/reporting.php:464, src/admin.php:649
|
4241 |
msgid "Send a report only when there are warnings/errors"
|
4242 |
msgstr ""
|
4243 |
|
4244 |
+
#: src/restorer.php:1683
|
4245 |
msgid "Content URL:"
|
4246 |
msgstr ""
|
4247 |
|
4253 |
msgid "See also the \"More Files\" add-on from our shop."
|
4254 |
msgstr ""
|
4255 |
|
4256 |
+
#: src/backup.php:3271, src/class-updraftplus.php:814
|
4257 |
msgid "Your free space in your hosting account is very low - only %s Mb remain"
|
4258 |
msgstr ""
|
4259 |
|
4260 |
+
#: src/class-updraftplus.php:798
|
4261 |
msgid "The amount of memory (RAM) allowed for PHP is very low (%s Mb) - you should increase it to avoid failures due to insufficient memory (consult your web hosting company for more help)"
|
4262 |
msgstr ""
|
4263 |
|
4264 |
+
#: src/udaddons/options.php:574
|
4265 |
msgid "Manage Addons"
|
4266 |
msgstr ""
|
4267 |
|
4268 |
+
#: src/udaddons/options.php:510, src/udaddons/options.php:510
|
4269 |
msgid "Buy It"
|
4270 |
msgstr ""
|
4271 |
|
4272 |
+
#: src/udaddons/options.php:509
|
4273 |
msgid "Get it from the UpdraftPlus.Com Store"
|
4274 |
msgstr ""
|
4275 |
|
4276 |
+
#: src/udaddons/options.php:503, src/udaddons/options.php:505
|
4277 |
msgid "activate it on this site"
|
4278 |
msgstr ""
|
4279 |
|
4280 |
+
#: src/udaddons/options.php:505
|
4281 |
msgid "You have an inactive purchase"
|
4282 |
msgstr ""
|
4283 |
|
4284 |
+
#: src/udaddons/options.php:495
|
4285 |
msgid "Assigned to this site"
|
4286 |
msgstr ""
|
4287 |
|
4288 |
+
#: src/udaddons/options.php:492
|
4289 |
msgid "Available for this site (via your all-addons purchase)"
|
4290 |
msgstr ""
|
4291 |
|
4292 |
+
#: src/udaddons/options.php:486
|
4293 |
msgid "(apparently a pre-release or withdrawn release)"
|
4294 |
msgstr ""
|
4295 |
|
4296 |
+
#: src/udaddons/options.php:441
|
4297 |
msgid "Go here"
|
4298 |
msgstr ""
|
4299 |
|
4300 |
+
#: src/udaddons/options.php:441
|
4301 |
msgid "Need to get support?"
|
4302 |
msgstr ""
|
4303 |
|
4304 |
+
#: src/udaddons/options.php:423
|
4305 |
msgid "An error occurred when trying to retrieve your add-ons."
|
4306 |
msgstr ""
|
4307 |
|
4308 |
+
#: src/udaddons/options.php:337
|
4309 |
msgid "An unknown response was received. Response was:"
|
4310 |
msgstr ""
|
4311 |
|
4312 |
+
#: src/udaddons/options.php:336
|
4313 |
msgid "Claim not granted - your account login details were wrong"
|
4314 |
msgstr ""
|
4315 |
|
4316 |
+
#: src/udaddons/options.php:334
|
4317 |
msgid "Please wait whilst we make the claim..."
|
4318 |
msgstr ""
|
4319 |
|
4385 |
msgid "Your web-server does not have the %s module installed."
|
4386 |
msgstr ""
|
4387 |
|
4388 |
+
#: src/addons/googlecloud.php:992, src/methods/googledrive.php:1158
|
4389 |
msgid "<strong>(You appear to be already authenticated,</strong> though you can authenticate again to refresh your access if you've had a problem)."
|
4390 |
msgstr ""
|
4391 |
|
4393 |
msgid "Drop backup files here"
|
4394 |
msgstr ""
|
4395 |
|
4396 |
+
#: src/admin.php:660
|
|
|
|
|
|
|
|
|
4397 |
msgid "The web server returned an error code (try again, or check your web server logs)"
|
4398 |
msgstr ""
|
4399 |
|
4400 |
+
#: src/admin.php:658
|
4401 |
msgid "The restore operation has begun. Do not press stop or close your browser until it reports itself as having finished."
|
4402 |
msgstr ""
|
4403 |
|
4404 |
+
#: src/admin.php:655
|
4405 |
msgid "If you exclude both the database and the files, then you have excluded everything!"
|
4406 |
msgstr ""
|
4407 |
|
4408 |
+
#: src/restorer.php:1677
|
4409 |
msgid "Site home:"
|
4410 |
msgstr ""
|
4411 |
|
4430 |
msgid "You can send a backup to more than one destination with an add-on."
|
4431 |
msgstr ""
|
4432 |
|
4433 |
+
#: src/admin.php:2955
|
4434 |
msgid "Note: the progress bar below is based on stages, NOT time. Do not stop the backup simply because it seems to have remained in the same place for a while - that is normal."
|
4435 |
msgstr ""
|
4436 |
|
4437 |
+
#: src/admin.php:2854
|
4438 |
msgid "(%s%%, file %s of %s)"
|
4439 |
msgstr ""
|
4440 |
|
4443 |
msgid "Read more about how this works..."
|
4444 |
msgstr ""
|
4445 |
|
4446 |
+
#: src/addons/sftp.php:559
|
4447 |
msgid "Failed: We were able to log in, but failed to successfully create a file in that location."
|
4448 |
msgstr ""
|
4449 |
|
4450 |
+
#: src/addons/sftp.php:557
|
4451 |
msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully create a file in that location."
|
4452 |
msgstr ""
|
4453 |
|
4454 |
+
#: src/addons/sftp.php:459
|
4455 |
msgid "Use SCP instead of SFTP"
|
4456 |
msgstr ""
|
4457 |
|
4471 |
msgid "Backup is of: %s."
|
4472 |
msgstr ""
|
4473 |
|
4474 |
+
#: src/admin.php:748
|
4475 |
msgid "%s settings test result:"
|
4476 |
msgstr ""
|
4477 |
|
4478 |
+
#: src/admin.php:3756, src/admin.php:3758
|
4479 |
msgid "(Not finished)"
|
4480 |
msgstr ""
|
4481 |
|
4482 |
+
#: src/admin.php:3758
|
4483 |
msgid "If you are seeing more backups than you expect, then it is probably because the deletion of old backup sets does not happen until a fresh backup completes."
|
4484 |
msgstr ""
|
4485 |
|
4491 |
msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. It is relative to your content directory (which by default is called wp-content)."
|
4492 |
msgstr ""
|
4493 |
|
4494 |
+
#: src/admin.php:2950
|
4495 |
msgid "Job ID: %s"
|
4496 |
msgstr ""
|
4497 |
|
4498 |
+
#: src/admin.php:2935
|
4499 |
msgid "last activity: %ss ago"
|
4500 |
msgstr ""
|
4501 |
|
4502 |
+
#: src/admin.php:2934
|
4503 |
msgid "next resumption: %d (after %ss)"
|
4504 |
msgstr ""
|
4505 |
|
4506 |
+
#: src/admin.php:2917, src/central/bootstrap.php:429,
|
4507 |
+
#: src/central/bootstrap.php:436, src/methods/updraftvault.php:387,
|
4508 |
+
#: src/methods/updraftvault.php:407, src/methods/updraftvault.php:492
|
4509 |
msgid "Unknown"
|
4510 |
msgstr ""
|
4511 |
|
4512 |
+
#: src/admin.php:2868
|
4513 |
msgid "Backup finished"
|
4514 |
msgstr ""
|
4515 |
|
4516 |
+
#: src/admin.php:2863
|
4517 |
msgid "Waiting until scheduled time to retry because of errors"
|
4518 |
msgstr ""
|
4519 |
|
4520 |
+
#: src/admin.php:2859
|
4521 |
msgid "Pruning old backup sets"
|
4522 |
msgstr ""
|
4523 |
|
4524 |
+
#: src/admin.php:2847
|
4525 |
msgid "Uploading files to remote storage"
|
4526 |
msgstr ""
|
4527 |
|
4528 |
+
#: src/admin.php:2915
|
4529 |
msgid "Encrypted database"
|
4530 |
msgstr ""
|
4531 |
|
4532 |
+
#: src/admin.php:2907
|
4533 |
msgid "Encrypting database"
|
4534 |
msgstr ""
|
4535 |
|
4536 |
+
#: src/admin.php:2881
|
4537 |
msgid "Created database backup"
|
4538 |
msgstr ""
|
4539 |
|
4540 |
+
#: src/admin.php:2894
|
4541 |
msgid "table: %s"
|
4542 |
msgstr ""
|
4543 |
|
4544 |
+
#: src/admin.php:2892
|
4545 |
msgid "Creating database backup"
|
4546 |
msgstr ""
|
4547 |
|
4548 |
+
#: src/admin.php:2842
|
4549 |
msgid "Created file backup zips"
|
4550 |
msgstr ""
|
4551 |
|
4552 |
+
#: src/admin.php:2829
|
4553 |
msgid "Creating file backup zips"
|
4554 |
msgstr ""
|
4555 |
|
4556 |
+
#: src/admin.php:2824
|
4557 |
msgid "Backup begun"
|
4558 |
msgstr ""
|
4559 |
|
4560 |
+
#: src/admin.php:2657
|
4561 |
msgid "Backups in progress:"
|
4562 |
msgstr ""
|
4563 |
|
4564 |
+
#: src/admin.php:958
|
4565 |
msgid "The scheduler is disabled in your WordPress install, via the DISABLE_WP_CRON setting. No backups can run (even "Backup Now") unless either you have set up a facility to call the scheduler manually, or until it is enabled."
|
4566 |
msgstr ""
|
4567 |
|
4577 |
msgid "UpdraftPlus needed to create a %s in your content directory, but failed - please check your file permissions and enable the access (%s)"
|
4578 |
msgstr ""
|
4579 |
|
4580 |
+
#: src/class-updraftplus.php:2852
|
4581 |
msgid "The backup has not finished; a resumption is scheduled"
|
4582 |
msgstr ""
|
4583 |
|
4584 |
+
#: src/class-updraftplus.php:2036
|
4585 |
msgid "Your website is visited infrequently and UpdraftPlus is not getting the resources it hoped for; please read this page:"
|
4586 |
msgstr ""
|
4587 |
|
4588 |
#: src/addons/onedrive.php:865,
|
|
|
4589 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:118
|
4590 |
msgid "The %s authentication could not go ahead, because something else on your site is breaking it. Try disabling your other plugins and switching to a default theme. (Specifically, you are looking for the component that sends output (most likely PHP warnings/errors) before the page begins. Turning off any debugging settings may also help)."
|
4591 |
msgstr ""
|
4592 |
|
4593 |
+
#: src/admin.php:2458
|
4594 |
msgid "Your PHP memory limit (set by your web hosting company) is very low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will be successful with a 32Mb limit - your experience may vary)."
|
4595 |
msgstr ""
|
4596 |
|
4597 |
+
#: src/addons/autobackup.php:1085, src/admin.php:702
|
4598 |
msgid "Proceed with update"
|
4599 |
msgstr ""
|
4600 |
|
4669 |
msgid "Support"
|
4670 |
msgstr ""
|
4671 |
|
4672 |
+
#: src/class-updraftplus.php:4584
|
4673 |
msgid "UpdraftPlus was unable to find the table prefix when scanning the database backup."
|
4674 |
msgstr ""
|
4675 |
|
4676 |
+
#: src/class-updraftplus.php:4576
|
4677 |
msgid "This database backup is missing core WordPress tables: %s"
|
4678 |
msgstr ""
|
4679 |
|
4680 |
+
#: src/class-updraftplus.php:4432
|
4681 |
msgid "You are importing from a newer version of WordPress (%s) into an older one (%s). There are no guarantees that WordPress can handle this."
|
4682 |
msgstr ""
|
4683 |
|
4684 |
+
#: src/class-updraftplus.php:4431, src/class-updraftplus.php:4438
|
4685 |
msgid "%s version: %s"
|
4686 |
msgstr ""
|
4687 |
|
4688 |
+
#: src/class-updraftplus.php:4325
|
4689 |
msgid "The database is too small to be a valid WordPress database (size: %s Kb)."
|
4690 |
msgstr ""
|
4691 |
|
4692 |
+
#: src/addons/autobackup.php:1053, src/admin.php:793,
|
4693 |
#: src/includes/updraftplus-notices.php:171
|
4694 |
msgid "Be safe with an automatic backup"
|
4695 |
msgstr ""
|
4696 |
|
4697 |
+
#: src/admin.php:2411
|
4698 |
msgid "If you can still read these words after the page finishes loading, then there is a JavaScript or jQuery problem in the site."
|
4699 |
msgstr ""
|
4700 |
|
4701 |
+
#: src/admin.php:696
|
4702 |
msgid "The file was uploaded."
|
4703 |
msgstr ""
|
4704 |
|
4705 |
+
#: src/admin.php:695
|
4706 |
msgid "Unknown server response status:"
|
4707 |
msgstr ""
|
4708 |
|
4709 |
+
#: src/admin.php:694
|
4710 |
msgid "Unknown server response:"
|
4711 |
msgstr ""
|
4712 |
|
4713 |
+
#: src/admin.php:693
|
4714 |
msgid "This decryption key will be attempted:"
|
4715 |
msgstr ""
|
4716 |
|
4717 |
+
#: src/admin.php:692
|
4718 |
msgid "Follow this link to attempt decryption and download the database file to your computer."
|
4719 |
msgstr ""
|
4720 |
|
4721 |
+
#: src/admin.php:691
|
4722 |
msgid "Upload error"
|
4723 |
msgstr ""
|
4724 |
|
4725 |
+
#: src/admin.php:690
|
4726 |
msgid "This file does not appear to be an UpdraftPlus encrypted database archive (such files are .gz.crypt files which have a name like: backup_(time)_(site name)_(code)_db.crypt.gz)."
|
4727 |
msgstr ""
|
4728 |
|
4729 |
+
#: src/admin.php:689
|
4730 |
msgid "Upload error:"
|
4731 |
msgstr ""
|
4732 |
|
4733 |
+
#: src/admin.php:688
|
4734 |
msgid "(make sure that you were trying to upload a zip file previously created by UpdraftPlus)"
|
4735 |
msgstr ""
|
4736 |
|
4737 |
+
#: src/admin.php:679
|
4738 |
msgid "Download to your computer"
|
4739 |
msgstr ""
|
4740 |
|
4741 |
+
#: src/admin.php:678
|
4742 |
msgid "Delete from your web server"
|
4743 |
msgstr ""
|
4744 |
|
4745 |
+
#: src/admin.php:3728
|
4746 |
msgid "You appear to be missing one or more archives from this multi-archive set."
|
4747 |
msgstr ""
|
4748 |
|
4749 |
+
#: src/admin.php:3725
|
4750 |
msgid "(%d archive(s) in set)."
|
4751 |
msgstr ""
|
4752 |
|
4758 |
msgid "Error: the server sent us a response (JSON) which we did not understand."
|
4759 |
msgstr ""
|
4760 |
|
4761 |
+
#: src/admin.php:669
|
4762 |
msgid "Warnings:"
|
4763 |
msgstr ""
|
4764 |
|
4765 |
+
#: src/admin.php:668
|
4766 |
msgid "Error: the server sent an empty response."
|
4767 |
msgstr ""
|
4768 |
|
4769 |
+
#: src/admin.php:2169
|
4770 |
msgid "This looks like a file created by UpdraftPlus, but this install does not know about this type of object: %s. Perhaps you need to install an add-on?"
|
4771 |
msgstr ""
|
4772 |
|
4802 |
msgid "No such backup set exists"
|
4803 |
msgstr ""
|
4804 |
|
4805 |
+
#: src/admin.php:1343
|
4806 |
msgid "The backup archive for this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To perform any restoration using UpdraftPlus, you will need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
|
4807 |
msgstr ""
|
4808 |
|
4810 |
msgid "Moving unpacked backup into place..."
|
4811 |
msgstr ""
|
4812 |
|
4813 |
+
#: src/backup.php:2972, src/backup.php:3227
|
4814 |
msgid "Failed to open the zip file (%s) - %s"
|
4815 |
msgstr ""
|
4816 |
|
4818 |
msgid "WordPress root directory server path: %s"
|
4819 |
msgstr ""
|
4820 |
|
4821 |
+
#: src/methods/dreamobjects.php:77, src/methods/s3.php:852
|
4822 |
msgid "%s end-point"
|
4823 |
msgstr ""
|
4824 |
|
4825 |
+
#: src/methods/s3.php:814, src/methods/s3.php:928
|
4826 |
msgid "... and many more!"
|
4827 |
msgstr ""
|
4828 |
|
4830 |
msgid "S3 (Compatible)"
|
4831 |
msgstr ""
|
4832 |
|
4833 |
+
#: src/admin.php:1254
|
4834 |
msgid "File is not locally present - needs retrieving from remote storage"
|
4835 |
msgstr ""
|
4836 |
|
4837 |
+
#: src/admin.php:4032
|
4838 |
msgid "Looking for %s archive: file name: %s"
|
4839 |
msgstr ""
|
4840 |
|
4841 |
+
#: src/admin.php:3993
|
4842 |
msgid "Final checks"
|
4843 |
msgstr ""
|
4844 |
|
4850 |
msgid "Drop encrypted database files (db.gz.crypt files) here to upload them for decryption"
|
4851 |
msgstr ""
|
4852 |
|
4853 |
+
#: src/admin.php:3362
|
4854 |
msgid "Your wp-content directory server path: %s"
|
4855 |
msgstr ""
|
4856 |
|
4857 |
+
#: src/admin.php:685
|
4858 |
msgid "Raw backup history"
|
4859 |
msgstr ""
|
4860 |
|
4862 |
msgid "Show raw backup and file list"
|
4863 |
msgstr ""
|
4864 |
|
4865 |
+
#: src/admin.php:667
|
4866 |
msgid "Processing files - please wait..."
|
4867 |
msgstr ""
|
4868 |
|
4869 |
+
#: src/admin.php:4182,
|
4870 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:27
|
4871 |
msgid "Please consult this FAQ for help on what to do about it."
|
4872 |
msgstr ""
|
4875 |
msgid "Your WordPress installation has a problem with outputting extra whitespace. This can corrupt backups that you download from here."
|
4876 |
msgstr ""
|
4877 |
|
4878 |
+
#: src/class-updraftplus.php:4333
|
4879 |
msgid "Failed to open database file."
|
4880 |
msgstr ""
|
4881 |
|
4882 |
+
#: src/admin.php:4650
|
4883 |
msgid "Known backups (raw)"
|
4884 |
msgstr ""
|
4885 |
|
4886 |
+
#: src/restorer.php:969
|
4887 |
msgid "Files found:"
|
4888 |
msgstr ""
|
4889 |
|
4890 |
+
#: src/restorer.php:1865
|
4891 |
msgid "Requested table engine (%s) is not present - changing to MyISAM."
|
4892 |
msgstr ""
|
4893 |
|
4894 |
+
#: src/addons/migrator.php:344
|
4895 |
msgid "This looks like a migration (the backup is from a site with a different address/URL), but you did not check the option to search-and-replace the database. That is usually a mistake."
|
4896 |
msgstr ""
|
4897 |
|
4898 |
+
#: src/admin.php:4052
|
4899 |
msgid "file is size:"
|
4900 |
msgstr ""
|
4901 |
|
4902 |
+
#: src/addons/googlecloud.php:942, src/addons/migrator.php:382,
|
4903 |
+
#: src/addons/migrator.php:385, src/addons/migrator.php:388, src/admin.php:958,
|
4904 |
+
#: src/admin.php:2416, src/backup.php:3278, src/class-updraftplus.php:4521,
|
4905 |
#: src/updraftplus.php:156
|
4906 |
msgid "Go here for more information."
|
4907 |
msgstr ""
|
4908 |
|
4909 |
+
#: src/admin.php:666
|
4910 |
msgid "Some files are still downloading or being processed - please wait."
|
4911 |
msgstr ""
|
4912 |
|
4913 |
+
#: src/class-updraftplus.php:4404, src/class-updraftplus.php:4422
|
4914 |
msgid "This backup set is from a different site - this is not a restoration, but a migration. You need the Migrator add-on in order to make this work."
|
4915 |
msgstr ""
|
4916 |
|
4930 |
msgid "%s login failure"
|
4931 |
msgstr ""
|
4932 |
|
4933 |
+
#: src/methods/dropbox.php:413
|
4934 |
msgid "You do not appear to be authenticated with %s"
|
4935 |
msgstr ""
|
4936 |
|
4937 |
+
#: src/methods/dropbox.php:380
|
4938 |
msgid "Failed to access %s when deleting (see log file for more)"
|
4939 |
msgstr ""
|
4940 |
|
4941 |
+
#: src/methods/dropbox.php:372
|
4942 |
msgid "You do not appear to be authenticated with %s (whilst deleting)"
|
4943 |
msgstr ""
|
4944 |
|
4956 |
|
4957 |
#: src/addons/azure.php:218, src/methods/addon-base-v2.php:219,
|
4958 |
#: src/methods/cloudfiles.php:405, src/methods/cloudfiles.php:422,
|
4959 |
+
#: src/methods/googledrive.php:1012, src/methods/openstack-base.php:428,
|
4960 |
+
#: src/methods/stream-base.php:261, src/methods/stream-base.php:268,
|
4961 |
+
#: src/methods/stream-base.php:281
|
4962 |
msgid "%s Error"
|
4963 |
msgstr ""
|
4964 |
|
4966 |
msgid "%s error - failed to upload file"
|
4967 |
msgstr ""
|
4968 |
|
4969 |
+
#: src/class-updraftplus.php:1175, src/methods/cloudfiles.php:223
|
4970 |
msgid "%s error - failed to re-assemble chunks"
|
4971 |
msgstr ""
|
4972 |
|
4980 |
msgid "%s authentication failed"
|
4981 |
msgstr ""
|
4982 |
|
4983 |
+
#: src/addons/googlecloud.php:436, src/addons/migrator.php:473,
|
4984 |
+
#: src/admin.php:2112, src/admin.php:2161, src/admin.php:2169,
|
4985 |
+
#: src/class-updraftplus.php:943, src/class-updraftplus.php:949,
|
4986 |
+
#: src/class-updraftplus.php:4306, src/class-updraftplus.php:4308,
|
4987 |
+
#: src/class-updraftplus.php:4455, src/class-updraftplus.php:4462,
|
4988 |
+
#: src/class-updraftplus.php:4500, src/methods/googledrive.php:375,
|
4989 |
#: src/methods/s3.php:322
|
4990 |
msgid "Error: %s"
|
4991 |
msgstr ""
|
4992 |
|
4993 |
+
#: src/admin.php:3287
|
4994 |
msgid "Backup directory specified exists, but is <b>not</b> writable."
|
4995 |
msgstr ""
|
4996 |
|
4997 |
+
#: src/admin.php:3285
|
4998 |
msgid "Backup directory specified does <b>not</b> exist."
|
4999 |
msgstr ""
|
5000 |
|
5001 |
+
#: src/admin.php:2962, src/admin.php:3236
|
5002 |
msgid "Warning: %s"
|
5003 |
msgstr ""
|
5004 |
|
5006 |
msgid "Last backup job run:"
|
5007 |
msgstr ""
|
5008 |
|
5009 |
+
#: src/backup.php:2998
|
5010 |
msgid "A very large file was encountered: %s (size: %s Mb)"
|
5011 |
msgstr ""
|
5012 |
|
5013 |
+
#: src/backup.php:2298
|
5014 |
msgid "%s: unreadable file - could not be backed up"
|
5015 |
msgstr ""
|
5016 |
|
5017 |
+
#: src/backup.php:1615
|
5018 |
msgid "Table %s has very many rows (%s) - we hope your web hosting company gives you enough resources to dump out that table in the backup"
|
5019 |
msgstr ""
|
5020 |
|
5021 |
+
#: src/backup.php:1736
|
5022 |
msgid "An error occurred whilst closing the final database file"
|
5023 |
msgstr ""
|
5024 |
|
5025 |
+
#: src/backup.php:954
|
5026 |
msgid "Warnings encountered:"
|
5027 |
msgstr ""
|
5028 |
|
5029 |
+
#: src/class-updraftplus.php:2840
|
5030 |
msgid "The backup apparently succeeded (with warnings) and is now complete"
|
5031 |
msgstr ""
|
5032 |
|
5033 |
+
#: src/class-updraftplus.php:827
|
5034 |
msgid "Your free disk space is very low - only %s Mb remain"
|
5035 |
msgstr ""
|
5036 |
|
5037 |
+
#: src/addons/migrator.php:481
|
5038 |
msgid "New site:"
|
5039 |
msgstr ""
|
5040 |
|
5041 |
+
#: src/addons/migrator.php:456
|
5042 |
msgid "Migrated site (from UpdraftPlus)"
|
5043 |
msgstr ""
|
5044 |
|
5045 |
+
#: src/addons/migrator.php:403
|
5046 |
msgid "Enter details for where this new site is to live within your multisite install:"
|
5047 |
msgstr ""
|
5048 |
|
5049 |
+
#: src/addons/migrator.php:402
|
5050 |
msgid "Information needed to continue:"
|
5051 |
msgstr ""
|
5052 |
|
5053 |
+
#: src/addons/migrator.php:359
|
5054 |
msgid "Network activating theme:"
|
5055 |
msgstr ""
|
5056 |
|
5057 |
+
#: src/addons/migrator.php:349
|
5058 |
msgid "Processed plugin:"
|
5059 |
msgstr ""
|
5060 |
|
5066 |
msgid "Some servers advertise encrypted FTP as available, but then time-out (after a long time) when you attempt to use it. If you find this happenning, then go into the \"Expert Options\" (below) and turn off SSL there."
|
5067 |
msgstr ""
|
5068 |
|
5069 |
+
#: src/methods/s3.php:828, src/methods/s3.php:942
|
5070 |
msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
5071 |
msgstr ""
|
5072 |
|
5073 |
+
#: src/methods/s3.php:1189
|
5074 |
msgid "Please check your access credentials."
|
5075 |
msgstr ""
|
5076 |
|
5077 |
+
#: src/addons/s3-enhanced.php:179, src/methods/s3.php:1167
|
5078 |
msgid "The error reported by %s was:"
|
5079 |
msgstr ""
|
5080 |
|
5081 |
+
#: src/restorer.php:1409
|
5082 |
msgid "Please supply the requested information, and then continue."
|
5083 |
msgstr ""
|
5084 |
|
5085 |
+
#: src/class-updraftplus.php:4473, src/restorer.php:1713
|
5086 |
msgid "Site information:"
|
5087 |
msgstr ""
|
5088 |
|
5089 |
+
#: src/restorer.php:1580
|
5090 |
msgid "Your database user does not have permission to create tables. We will attempt to restore by simply emptying the tables; this should work as long as a) you are restoring from a WordPress version with the same database structure, and b) Your imported database does not contain any tables which are not already present on the importing site."
|
5091 |
msgstr ""
|
5092 |
|
5093 |
+
#: src/addons/migrator.php:344, src/admin.php:2411,
|
5094 |
+
#: src/class-updraftplus.php:4466, src/restorer.php:2052
|
5095 |
msgid "Warning:"
|
5096 |
msgstr ""
|
5097 |
|
5098 |
+
#: src/class-updraftplus.php:4455, src/class-updraftplus.php:4458,
|
5099 |
#: src/restorer.php:154
|
5100 |
msgid "You are running on WordPress multisite - but your backup is not of a multisite site."
|
5101 |
msgstr ""
|
5102 |
|
5103 |
+
#: src/admin.php:4020
|
5104 |
msgid "Skipping restoration of WordPress core when importing a single site into a multisite installation. If you had anything necessary in your WordPress directory then you will need to re-add it manually from the zip file."
|
5105 |
msgstr ""
|
5106 |
|
5107 |
+
#: src/admin.php:3434, src/methods/updraftvault.php:283
|
5108 |
msgid "Your web server's PHP installation does not included a <strong>required</strong> (for %s) module (%s). Please contact your web hosting provider's support and ask for them to enable it."
|
5109 |
msgstr ""
|
5110 |
|
5111 |
+
#: src/admin.php:703
|
5112 |
msgid "Close"
|
5113 |
msgstr ""
|
5114 |
|
5115 |
#: src/addons/autobackup.php:330, src/addons/autobackup.php:422,
|
5116 |
+
#: src/admin.php:659, src/methods/remotesend.php:66,
|
5117 |
#: src/methods/remotesend.php:74, src/methods/remotesend.php:225,
|
5118 |
#: src/methods/remotesend.php:242
|
5119 |
msgid "Unexpected response:"
|
5120 |
msgstr ""
|
5121 |
|
5122 |
+
#: src/addons/reporting.php:462, src/admin.php:654
|
5123 |
msgid "To send to more than one address, separate each address with a comma."
|
5124 |
msgstr ""
|
5125 |
|
5126 |
+
#: src/admin.php:683
|
5127 |
msgid "PHP information"
|
5128 |
msgstr ""
|
5129 |
|
5143 |
msgid "Do you want to migrate or clone/duplicate a site?"
|
5144 |
msgstr ""
|
5145 |
|
5146 |
+
#: src/addons/migrator.php:174
|
5147 |
msgid "<a href=\"%s\">Read this article to see step-by-step how it's done.</a>"
|
5148 |
msgstr ""
|
5149 |
|
5159 |
msgid "Also delete from remote storage"
|
5160 |
msgstr ""
|
5161 |
|
5162 |
+
#: src/admin.php:2684
|
5163 |
msgid "Latest UpdraftPlus.com news:"
|
5164 |
msgstr ""
|
5165 |
|
5176 |
msgid "News"
|
5177 |
msgstr ""
|
5178 |
|
5179 |
+
#: src/admin.php:1522, src/includes/class-wpadmin-commands.php:465
|
5180 |
msgid "Backup set not found"
|
5181 |
msgstr ""
|
5182 |
|
5183 |
+
#: src/backup.php:189
|
5184 |
msgid "%s - could not back this entity up; the corresponding directory does not exist (%s)"
|
5185 |
msgstr ""
|
5186 |
|
5198 |
msgid "Blog link"
|
5199 |
msgstr ""
|
5200 |
|
5201 |
+
#: src/admin.php:747
|
5202 |
msgid "Testing %s Settings..."
|
5203 |
msgstr ""
|
5204 |
|
5206 |
msgid "Or, you can place them manually into your UpdraftPlus directory (usually wp-content/updraft), e.g. via FTP, and then use the \"rescan\" link above."
|
5207 |
msgstr ""
|
5208 |
|
5209 |
+
#: src/admin.php:974
|
5210 |
msgid "UpdraftPlus's debug mode is on. You may see debugging notices on this page not just from UpdraftPlus, but from any other plugin installed. Please try to make sure that the notice you are seeing is from UpdraftPlus before you raise a support request."
|
5211 |
msgstr ""
|
5212 |
|
5213 |
+
#: src/admin.php:974
|
5214 |
msgid "Notice"
|
5215 |
msgstr ""
|
5216 |
|
5217 |
+
#: src/backup.php:936
|
5218 |
msgid "Errors encountered:"
|
5219 |
msgstr ""
|
5220 |
|
5221 |
+
#: src/admin.php:652
|
5222 |
msgid "Rescanning (looking for backups that you have uploaded manually into the internal backup store)..."
|
5223 |
msgstr ""
|
5224 |
|
5225 |
+
#: src/admin.php:665
|
5226 |
msgid "Begun looking for this entity"
|
5227 |
msgstr ""
|
5228 |
|
5229 |
+
#: src/addons/dropbox-folders.php:32
|
5230 |
msgid "Store at"
|
5231 |
msgstr ""
|
5232 |
|
5233 |
+
#: src/addons/migrator.php:1431
|
5234 |
msgid "\"%s\" has no primary key, manual change needed on row %s."
|
5235 |
msgstr ""
|
5236 |
|
5237 |
+
#: src/addons/migrator.php:1309
|
5238 |
msgid "rows: %d"
|
5239 |
msgstr ""
|
5240 |
|
5241 |
+
#: src/addons/migrator.php:1183
|
5242 |
msgid "Time taken (seconds):"
|
5243 |
msgstr ""
|
5244 |
|
5245 |
+
#: src/addons/migrator.php:1182, src/admin.php:670
|
5246 |
msgid "Errors:"
|
5247 |
msgstr ""
|
5248 |
|
5249 |
+
#: src/addons/migrator.php:1181
|
5250 |
msgid "SQL update commands run:"
|
5251 |
msgstr ""
|
5252 |
|
5253 |
+
#: src/addons/migrator.php:1180
|
5254 |
msgid "Changes made:"
|
5255 |
msgstr ""
|
5256 |
|
5257 |
+
#: src/addons/migrator.php:1179
|
5258 |
msgid "Rows examined:"
|
5259 |
msgstr ""
|
5260 |
|
5261 |
+
#: src/addons/migrator.php:1178
|
5262 |
msgid "Tables examined:"
|
5263 |
msgstr ""
|
5264 |
|
5265 |
+
#: src/addons/migrator.php:1067
|
5266 |
msgid "Could not get list of tables"
|
5267 |
msgstr ""
|
5268 |
|
5269 |
+
#: src/addons/migrator.php:1012
|
5270 |
msgid "Warning: the database's site URL (%s) is different to what we expected (%s)"
|
5271 |
msgstr ""
|
5272 |
|
5273 |
+
#: src/addons/migrator.php:1001
|
5274 |
msgid "Nothing to do: the site URL is already: %s"
|
5275 |
msgstr ""
|
5276 |
|
5277 |
+
#: src/addons/migrator.php:965, src/addons/migrator.php:969,
|
5278 |
+
#: src/addons/migrator.php:973, src/addons/migrator.php:978,
|
5279 |
+
#: src/addons/migrator.php:982, src/addons/migrator.php:987
|
5280 |
msgid "Error: unexpected empty parameter (%s, %s)"
|
5281 |
msgstr ""
|
5282 |
|
5283 |
+
#: src/addons/migrator.php:925
|
5284 |
msgid "Database: search and replace site URL"
|
5285 |
msgstr ""
|
5286 |
|
5287 |
+
#: src/addons/migrator.php:798, src/addons/migrator.php:1164
|
5288 |
msgid "Failed: we did not understand the result returned by the %s operation."
|
5289 |
msgstr ""
|
5290 |
|
5291 |
+
#: src/addons/migrator.php:796, src/addons/migrator.php:1162
|
5292 |
msgid "Failed: the %s operation was not able to start."
|
5293 |
msgstr ""
|
5294 |
|
5295 |
+
#: src/addons/migrator.php:561
|
5296 |
msgid "(learn more)"
|
5297 |
msgstr ""
|
5298 |
|
5299 |
+
#: src/addons/migrator.php:561
|
5300 |
msgid "Search and replace site location in the database (migrate)"
|
5301 |
msgstr ""
|
5302 |
|
5303 |
+
#: src/addons/migrator.php:561
|
5304 |
msgid "All references to the site location in the database will be replaced with your current site URL, which is: %s"
|
5305 |
msgstr ""
|
5306 |
|
5308 |
msgid "Blog uploads"
|
5309 |
msgstr ""
|
5310 |
|
5311 |
+
#: src/addons/migrator.php:388, src/addons/multisite.php:652
|
5312 |
msgid "Must-use plugins"
|
5313 |
msgstr ""
|
5314 |
|
5320 |
msgid "starting from next time it is"
|
5321 |
msgstr ""
|
5322 |
|
5323 |
+
#: src/addons/sftp.php:502
|
5324 |
msgid "Failure: Port must be an integer."
|
5325 |
msgstr ""
|
5326 |
|
5328 |
msgid "password"
|
5329 |
msgstr ""
|
5330 |
|
5331 |
+
#: src/addons/sftp.php:493, src/methods/openstack2.php:173
|
5332 |
msgid "username"
|
5333 |
msgstr ""
|
5334 |
|
5335 |
+
#: src/addons/sftp.php:489
|
5336 |
msgid "host name"
|
5337 |
msgstr ""
|
5338 |
|
5339 |
+
#: src/addons/sftp.php:452
|
5340 |
msgid "Where to change directory to after logging in - often this is relative to your home directory."
|
5341 |
msgstr ""
|
5342 |
|
5343 |
+
#: src/addons/sftp.php:450
|
5344 |
msgid "Directory path"
|
5345 |
msgstr ""
|
5346 |
|
5347 |
#: src/addons/lockadmin.php:156, src/addons/moredatabase.php:246,
|
5348 |
+
#: src/addons/sftp.php:425, src/addons/webdav.php:98,
|
5349 |
+
#: src/methods/openstack2.php:157, src/methods/updraftvault.php:338,
|
5350 |
#: src/udaddons/options.php:135
|
5351 |
msgid "Password"
|
5352 |
msgstr ""
|
5353 |
|
5354 |
+
#: src/addons/sftp.php:411, src/addons/webdav.php:112
|
5355 |
msgid "Port"
|
5356 |
msgstr ""
|
5357 |
|
5358 |
+
#: src/addons/moredatabase.php:244, src/addons/sftp.php:404,
|
5359 |
+
#: src/addons/webdav.php:104
|
5360 |
msgid "Host"
|
5361 |
msgstr ""
|
5362 |
|
5364 |
msgid "%s Error: Failed to download"
|
5365 |
msgstr ""
|
5366 |
|
5367 |
+
#: src/addons/sftp.php:534
|
5368 |
msgid "Check your file permissions: Could not successfully create and enter:"
|
5369 |
msgstr ""
|
5370 |
|
5408 |
msgid "WordPress Core"
|
5409 |
msgstr ""
|
5410 |
|
5411 |
+
#: src/methods/addon-base-v2.php:337, src/methods/stream-base.php:311
|
5412 |
msgid "Failed: We were not able to place a file in that directory - please check your credentials."
|
5413 |
msgstr ""
|
5414 |
|
5415 |
+
#: src/addons/googlecloud.php:707, src/addons/googlecloud.php:741,
|
5416 |
+
#: src/addons/googlecloud.php:747, src/addons/sftp.php:520, src/admin.php:3018,
|
5417 |
+
#: src/admin.php:3053, src/admin.php:3062, src/methods/addon-base-v2.php:325,
|
5418 |
+
#: src/methods/stream-base.php:297
|
5419 |
msgid "Failed"
|
5420 |
msgstr ""
|
5421 |
|
5422 |
+
#: src/addons/webdav.php:74
|
5423 |
msgid "WebDAV URL"
|
5424 |
msgstr ""
|
5425 |
|
5426 |
+
#: src/methods/stream-base.php:281
|
5427 |
msgid "Local write failed: Failed to download"
|
5428 |
msgstr ""
|
5429 |
|
5430 |
+
#: src/methods/stream-base.php:268
|
5431 |
msgid "Error opening remote file: Failed to download"
|
5432 |
msgstr ""
|
5433 |
|
5435 |
msgid "Chunk %s: A %s error occurred"
|
5436 |
msgstr ""
|
5437 |
|
5438 |
+
#: src/addons/googlecloud.php:322, src/addons/sftp.php:45,
|
5439 |
#: src/methods/addon-base-v2.php:76, src/methods/addon-base-v2.php:117,
|
5440 |
#: src/methods/addon-base-v2.php:149, src/methods/addon-base-v2.php:195,
|
5441 |
+
#: src/methods/addon-base-v2.php:304, src/methods/ftp.php:42,
|
5442 |
+
#: src/methods/googledrive.php:176, src/methods/googledrive.php:178,
|
5443 |
#: src/methods/stream-base.php:27, src/methods/stream-base.php:144,
|
5444 |
#: src/methods/stream-base.php:150, src/methods/stream-base.php:184,
|
5445 |
+
#: src/methods/stream-base.php:242
|
5446 |
msgid "No %s settings were found"
|
5447 |
msgstr ""
|
5448 |
|
5470 |
msgid "If you want encryption (e.g. you are storing sensitive business data), then an add-on is available."
|
5471 |
msgstr ""
|
5472 |
|
5473 |
+
#: src/addons/onedrive.php:759, src/methods/dropbox.php:651
|
5474 |
msgid "Your %s account name: %s"
|
5475 |
msgstr ""
|
5476 |
|
5477 |
+
#: src/methods/dropbox.php:641, src/methods/dropbox.php:663
|
5478 |
msgid "though part of the returned information was not as expected - your mileage may vary"
|
5479 |
msgstr ""
|
5480 |
|
5481 |
+
#: src/methods/dropbox.php:636, src/methods/dropbox.php:638
|
5482 |
msgid "you have authenticated your %s account"
|
5483 |
msgstr ""
|
5484 |
|
5485 |
+
#: src/methods/dropbox.php:489, src/methods/dropbox.php:491
|
5486 |
msgid "there's an add-on for that."
|
5487 |
msgstr ""
|
5488 |
|
5489 |
+
#: src/methods/dropbox.php:489, src/methods/dropbox.php:491
|
5490 |
msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
|
5491 |
msgstr ""
|
5492 |
|
5493 |
+
#: src/methods/dropbox.php:489, src/methods/dropbox.php:491
|
5494 |
msgid "Backups are saved in"
|
5495 |
msgstr ""
|
5496 |
|
5497 |
+
#: src/methods/dropbox.php:489, src/methods/dropbox.php:491
|
5498 |
msgid "Need to use sub-folders?"
|
5499 |
msgstr ""
|
5500 |
|
5501 |
+
#: src/methods/dropbox.php:216, src/methods/dropbox.php:237,
|
5502 |
+
#: src/methods/dropbox.php:253
|
5503 |
msgid "error: failed to upload file to %s (see log file for more)"
|
5504 |
msgstr ""
|
5505 |
|
5507 |
msgid "You do not appear to be authenticated with Dropbox"
|
5508 |
msgstr ""
|
5509 |
|
5510 |
+
#: src/methods/s3.php:1184
|
5511 |
msgid "The communication with %s was not encrypted."
|
5512 |
msgstr ""
|
5513 |
|
5514 |
+
#: src/methods/s3.php:1182
|
5515 |
msgid "The communication with %s was encrypted."
|
5516 |
msgstr ""
|
5517 |
|
5518 |
+
#: src/addons/googlecloud.php:770, src/methods/s3.php:1179
|
5519 |
msgid "We accessed the bucket, and were able to create files within it."
|
5520 |
msgstr ""
|
5521 |
|
5522 |
+
#: src/addons/googlecloud.php:764, src/addons/googlecloud.php:778,
|
5523 |
+
#: src/methods/s3.php:1177, src/methods/s3.php:1189
|
5524 |
msgid "We successfully accessed the bucket, but the attempt to create a file in it failed."
|
5525 |
msgstr ""
|
5526 |
|
5527 |
+
#: src/addons/googlecloud.php:764, src/addons/googlecloud.php:778,
|
5528 |
+
#: src/methods/s3.php:1177, src/methods/s3.php:1189
|
5529 |
msgid "Failure"
|
5530 |
msgstr ""
|
5531 |
|
5532 |
+
#: src/methods/s3.php:1165
|
5533 |
msgid "Failure: We could not successfully access or create such a bucket. Please check your access credentials, and if those are correct then try another bucket name (as another %s user may already have taken your name)."
|
5534 |
msgstr ""
|
5535 |
|
5536 |
+
#: src/addons/s3-enhanced.php:152, src/methods/openstack2.php:143,
|
5537 |
+
#: src/methods/s3.php:1159
|
5538 |
msgid "Region"
|
5539 |
msgstr ""
|
5540 |
|
5541 |
+
#: src/addons/googlecloud.php:122, src/addons/googlecloud.php:724,
|
5542 |
+
#: src/methods/s3.php:1141
|
5543 |
msgid "Failure: No bucket details were given."
|
5544 |
msgstr ""
|
5545 |
|
5546 |
+
#: src/methods/s3.php:1119
|
5547 |
msgid "API secret"
|
5548 |
msgstr ""
|
5549 |
|
5550 |
+
#: src/methods/s3.php:889, src/methods/s3.php:986
|
5551 |
msgid "Enter only a bucket name or a bucket and path. Examples: mybucket, mybucket/mypath"
|
5552 |
msgstr ""
|
5553 |
|
5554 |
+
#: src/methods/s3.php:888, src/methods/s3.php:985
|
5555 |
msgid "%s location"
|
5556 |
msgstr ""
|
5557 |
|
5558 |
+
#: src/methods/s3.php:884, src/methods/s3.php:981
|
5559 |
msgid "%s secret key"
|
5560 |
msgstr ""
|
5561 |
|
5562 |
+
#: src/methods/s3.php:880, src/methods/s3.php:977
|
5563 |
msgid "%s access key"
|
5564 |
msgstr ""
|
5565 |
|
5566 |
+
#: src/methods/s3.php:845, src/methods/s3.php:958
|
5567 |
msgid "If you see errors about SSL certificates, then please go here for help."
|
5568 |
msgstr ""
|
5569 |
|
5570 |
+
#: src/methods/s3.php:843, src/methods/s3.php:956
|
5571 |
msgid "Get your access key and secret key <a href=\"%s\">from your %s console</a>, then pick a (globally unique - all %s users) bucket name (letters and numbers) (and optionally a path) to use for storage. This bucket will be created for you if it does not already exist."
|
5572 |
msgstr ""
|
5573 |
|
5608 |
msgid "WordPress Backup"
|
5609 |
msgstr ""
|
5610 |
|
5611 |
+
#: src/methods/cloudfiles.php:586, src/methods/openstack-base.php:503
|
5612 |
msgid "We accessed the container, and were able to create files within it."
|
5613 |
msgstr ""
|
5614 |
|
5615 |
+
#: src/methods/cloudfiles.php:582
|
5616 |
msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
|
5617 |
msgstr ""
|
5618 |
|
5619 |
+
#: src/methods/cloudfiles.php:555, src/methods/openstack-base.php:445
|
5620 |
msgid "Failure: No container details were given."
|
5621 |
msgstr ""
|
5622 |
|
5623 |
+
#: src/addons/moredatabase.php:245, src/addons/sftp.php:418,
|
5624 |
+
#: src/addons/webdav.php:92, src/methods/cloudfiles-new.php:186,
|
5625 |
+
#: src/methods/cloudfiles.php:535, src/methods/openstack2.php:151
|
5626 |
msgid "Username"
|
5627 |
msgstr ""
|
5628 |
|
5629 |
+
#: src/methods/cloudfiles-new.php:181, src/methods/cloudfiles.php:530,
|
5630 |
+
#: src/methods/s3.php:1115
|
5631 |
msgid "API key"
|
5632 |
msgstr ""
|
5633 |
|
5634 |
+
#: src/addons/migrator.php:297, src/addons/migrator.php:1948,
|
5635 |
#: src/addons/moredatabase.php:82, src/addons/moredatabase.php:84,
|
5636 |
+
#: src/addons/moredatabase.php:86, src/addons/sftp.php:489,
|
5637 |
+
#: src/addons/sftp.php:493, src/addons/sftp.php:497, src/addons/webdav.php:158,
|
5638 |
+
#: src/admin.php:723, src/methods/addon-base-v2.php:317,
|
5639 |
+
#: src/methods/cloudfiles-new.php:181, src/methods/cloudfiles-new.php:186,
|
5640 |
+
#: src/methods/cloudfiles.php:530, src/methods/cloudfiles.php:535,
|
5641 |
#: src/methods/ftp.php:380, src/methods/ftp.php:384,
|
5642 |
#: src/methods/openstack2.php:173, src/methods/openstack2.php:178,
|
5643 |
#: src/methods/openstack2.php:183, src/methods/openstack2.php:188,
|
5644 |
+
#: src/methods/s3.php:1115, src/methods/s3.php:1119
|
5645 |
msgid "Failure: No %s was given."
|
5646 |
msgstr ""
|
5647 |
|
5648 |
+
#: src/methods/cloudfiles-new.php:101, src/methods/cloudfiles.php:462,
|
5649 |
+
#: src/methods/openstack-base.php:549, src/methods/openstack-base.php:590,
|
5650 |
+
#: src/methods/s3.php:832, src/methods/s3.php:946
|
5651 |
msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
|
5652 |
msgstr ""
|
5653 |
|
5654 |
+
#: src/methods/cloudfiles.php:495
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5655 |
msgid "Cloud Files username"
|
5656 |
msgstr ""
|
5657 |
|
5658 |
+
#: src/addons/cloudfiles-enhanced.php:38, src/methods/cloudfiles-new.php:111,
|
5659 |
+
#: src/methods/cloudfiles.php:478
|
5660 |
msgid "UK"
|
5661 |
msgstr ""
|
5662 |
|
5663 |
+
#: src/addons/cloudfiles-enhanced.php:37, src/methods/cloudfiles-new.php:110,
|
5664 |
+
#: src/methods/cloudfiles.php:477
|
5665 |
msgid "US (default)"
|
5666 |
msgstr ""
|
5667 |
|
5668 |
+
#: src/methods/cloudfiles.php:474
|
5669 |
msgid "US or UK Cloud"
|
5670 |
msgstr ""
|
5671 |
|
5672 |
+
#: src/methods/cloudfiles-new.php:103, src/methods/cloudfiles.php:470,
|
5673 |
+
#: src/methods/openstack2.php:124
|
5674 |
msgid "Also, you should read this important FAQ."
|
5675 |
msgstr ""
|
5676 |
|
5677 |
+
#: src/methods/cloudfiles-new.php:103, src/methods/cloudfiles.php:470
|
5678 |
msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
|
5679 |
msgstr ""
|
5680 |
|
5681 |
+
#: src/admin.php:746, src/methods/backup-module.php:262
|
5682 |
msgid "Test %s Settings"
|
5683 |
msgstr ""
|
5684 |
|
5685 |
+
#: src/class-updraftplus.php:1215, src/class-updraftplus.php:1259,
|
5686 |
+
#: src/methods/cloudfiles.php:405, src/methods/stream-base.php:261
|
5687 |
msgid "Error opening local file: Failed to download"
|
5688 |
msgstr ""
|
5689 |
|
5698 |
msgid "%s Error: Failed to upload"
|
5699 |
msgstr ""
|
5700 |
|
5701 |
+
#: src/addons/googlecloud.php:205, src/addons/googlecloud.php:210,
|
5702 |
+
#: src/class-updraftplus.php:1073, src/methods/cloudfiles.php:142,
|
5703 |
+
#: src/methods/googledrive.php:930, src/methods/googledrive.php:935
|
5704 |
msgid "%s Error: Failed to open local file"
|
5705 |
msgstr ""
|
5706 |
|
5711 |
|
5712 |
#: src/addons/cloudfiles-enhanced.php:99,
|
5713 |
#: src/addons/cloudfiles-enhanced.php:112,
|
5714 |
+
#: src/addons/cloudfiles-enhanced.php:116, src/methods/cloudfiles.php:565,
|
5715 |
+
#: src/methods/cloudfiles.php:568, src/methods/cloudfiles.php:571
|
5716 |
msgid "Cloud Files authentication failed"
|
5717 |
msgstr ""
|
5718 |
|
5719 |
+
#: src/addons/googlecloud.php:1001, src/methods/googledrive.php:1175
|
5720 |
msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
|
5721 |
msgstr ""
|
5722 |
|
5723 |
+
#: src/methods/googledrive.php:1153
|
5724 |
+
msgid "Authenticate with Google"
|
5725 |
+
msgstr ""
|
5726 |
+
|
5727 |
+
#: src/addons/googlecloud.php:935, src/addons/onedrive.php:987,
|
5728 |
+
#: src/methods/googledrive.php:1117
|
5729 |
msgid "Client Secret"
|
5730 |
msgstr ""
|
5731 |
|
5732 |
+
#: src/addons/googlecloud.php:930, src/methods/googledrive.php:1114
|
5733 |
msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
|
5734 |
msgstr ""
|
5735 |
|
5736 |
+
#: src/addons/googlecloud.php:927, src/addons/onedrive.php:983,
|
5737 |
+
#: src/methods/googledrive.php:1113
|
5738 |
msgid "Client ID"
|
5739 |
msgstr ""
|
5740 |
|
5741 |
+
#: src/addons/googlecloud.php:918, src/methods/googledrive.php:1103
|
5742 |
msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
|
5743 |
msgstr ""
|
5744 |
|
5745 |
+
#: src/addons/googlecloud.php:918, src/methods/googledrive.php:1103
|
5746 |
msgid "Select 'Web Application' as the application type."
|
5747 |
msgstr ""
|
5748 |
|
5749 |
+
#: src/addons/googlecloud.php:916, src/methods/googledrive.php:1101
|
5750 |
msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
|
5751 |
msgstr ""
|
5752 |
|
5753 |
+
#: src/methods/addon-base-v2.php:243, src/methods/addon-base-v2.php:265,
|
5754 |
+
#: src/methods/cloudfiles.php:454, src/methods/dropbox.php:475,
|
5755 |
+
#: src/methods/ftp.php:321, src/methods/googledrive.php:1084,
|
5756 |
+
#: src/methods/openstack-base.php:539, src/methods/openstack-base.php:581,
|
5757 |
+
#: src/methods/s3.php:803, src/methods/s3.php:917,
|
5758 |
+
#: src/methods/stream-base.php:216
|
5759 |
msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
|
5760 |
msgstr ""
|
5761 |
|
5762 |
+
#: src/addons/googlecloud.php:503, src/addons/googlecloud.php:504,
|
5763 |
+
#: src/addons/googlecloud.php:797, src/methods/googledrive.php:537,
|
5764 |
+
#: src/methods/googledrive.php:538, src/methods/googledrive.php:548,
|
5765 |
+
#: src/methods/googledrive.php:549
|
5766 |
msgid "Account is not authorized."
|
5767 |
msgstr ""
|
5768 |
|
5769 |
+
#: src/methods/googledrive.php:461, src/methods/googledrive.php:507,
|
5770 |
+
#: src/methods/googledrive.php:513, src/methods/googledrive.php:515,
|
5771 |
#: src/methods/stream-base.php:200
|
5772 |
msgid "Failed to upload to %s"
|
5773 |
msgstr ""
|
5774 |
|
5775 |
+
#: src/methods/googledrive.php:490
|
5776 |
msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded is %d bytes"
|
5777 |
msgstr ""
|
5778 |
|
5779 |
+
#: src/methods/googledrive.php:581, src/methods/googledrive.php:617
|
5780 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
|
5781 |
msgstr ""
|
5782 |
|
5783 |
+
#: src/addons/googlecloud.php:649, src/addons/onedrive.php:797,
|
5784 |
+
#: src/methods/googledrive.php:434
|
5785 |
msgid "you have authenticated your %s account."
|
5786 |
msgstr ""
|
5787 |
|
5788 |
+
#: src/addons/googlecloud.php:649, src/addons/googlecloud.php:770,
|
5789 |
+
#: src/addons/onedrive.php:797, src/addons/sftp.php:554,
|
5790 |
+
#: src/methods/addon-base-v2.php:334, src/methods/cloudfiles.php:586,
|
5791 |
+
#: src/methods/googledrive.php:434, src/methods/openstack-base.php:503,
|
5792 |
+
#: src/methods/s3.php:1179, src/methods/stream-base.php:308
|
5793 |
msgid "Success"
|
5794 |
msgstr ""
|
5795 |
|
5796 |
+
#: src/addons/onedrive.php:751, src/methods/dropbox.php:674,
|
5797 |
+
#: src/methods/dropbox.php:683, src/methods/googledrive.php:408
|
5798 |
msgid "Your %s quota usage: %s %% used, %s available"
|
5799 |
msgstr ""
|
5800 |
|
5801 |
+
#: src/addons/googlecloud.php:442, src/methods/googledrive.php:381
|
5802 |
msgid "Authorization failed"
|
5803 |
msgstr ""
|
5804 |
|
5805 |
+
#: src/addons/googlecloud.php:434, src/methods/googledrive.php:373
|
5806 |
msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
|
5807 |
msgstr ""
|
5808 |
|
5809 |
+
#: src/methods/addon-not-yet-present.php:84
|
5810 |
msgid "follow this link to get it"
|
5811 |
msgstr ""
|
5812 |
|
5813 |
+
#: src/methods/addon-not-yet-present.php:84
|
5814 |
msgid "%s support is available as an add-on"
|
5815 |
msgstr ""
|
5816 |
|
5817 |
#: src/methods/addon-not-yet-present.php:28,
|
5818 |
+
#: src/methods/addon-not-yet-present.php:68,
|
5819 |
+
#: src/methods/addon-not-yet-present.php:75
|
|
|
5820 |
msgid "You do not have the UpdraftPlus %s add-on installed - get it from %s"
|
5821 |
msgstr ""
|
5822 |
|
|
|
|
|
5823 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:126,
|
5824 |
#: src/includes/Dropbox2/OAuth/Consumer/ConsumerAbstract.php:127
|
5825 |
msgid "You need to re-authenticate with %s, as your existing credentials are not working."
|
5826 |
msgstr ""
|
5827 |
|
5828 |
+
#: src/addons/migrator.php:1843, src/admin.php:1282, src/admin.php:3021,
|
5829 |
+
#: src/admin.php:3055, src/admin.php:3059, src/admin.php:4050,
|
5830 |
+
#: src/restorer.php:2292, src/restorer.php:2397
|
5831 |
msgid "OK"
|
5832 |
msgstr ""
|
5833 |
|
5834 |
+
#: src/restorer.php:2286, src/restorer.php:2361
|
5835 |
msgid "Table prefix has changed: changing %s table field(s) accordingly:"
|
5836 |
msgstr ""
|
5837 |
|
5838 |
+
#: src/addons/migrator.php:1197, src/restorer.php:2189
|
5839 |
msgid "the database query being run was:"
|
5840 |
msgstr ""
|
5841 |
|
5842 |
+
#: src/restorer.php:1891
|
5843 |
msgid "will restore as:"
|
5844 |
msgstr ""
|
5845 |
|
5846 |
+
#: src/class-updraftplus.php:4444, src/restorer.php:1695,
|
5847 |
+
#: src/restorer.php:1784, src/restorer.php:1810
|
5848 |
msgid "Old table prefix:"
|
5849 |
msgstr ""
|
5850 |
|
5851 |
+
#: src/addons/reporting.php:70, src/addons/reporting.php:180,
|
5852 |
+
#: src/backup.php:1010, src/class-updraftplus.php:4383
|
5853 |
msgid "Backup of:"
|
5854 |
msgstr ""
|
5855 |
|
5856 |
+
#: src/restorer.php:1505
|
5857 |
msgid "Failed to open database file"
|
5858 |
msgstr ""
|
5859 |
|
5860 |
+
#: src/restorer.php:1484
|
5861 |
msgid "Failed to find database file"
|
5862 |
msgstr ""
|
5863 |
|
5864 |
+
#: src/restorer.php:1461
|
5865 |
msgid "Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method."
|
5866 |
msgstr ""
|
5867 |
|
5921 |
msgid "UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually."
|
5922 |
msgstr ""
|
5923 |
|
5924 |
+
#: src/admin.php:4058, src/admin.php:4059
|
5925 |
msgid "Could not find one of the files for restoration"
|
5926 |
msgstr ""
|
5927 |
|
5928 |
+
#: src/admin.php:4172
|
5929 |
msgid "Error message"
|
5930 |
msgstr ""
|
5931 |
|
5932 |
+
#: src/admin.php:4055
|
5933 |
msgid "The backup records do not contain information about the proper size of this file."
|
5934 |
msgstr ""
|
5935 |
|
5936 |
+
#: src/admin.php:4047
|
5937 |
msgid "Archive is expected to be size:"
|
5938 |
msgstr ""
|
5939 |
|
5940 |
+
#: src/admin.php:3944
|
5941 |
msgid "If making a request for support, please include this information:"
|
5942 |
msgstr ""
|
5943 |
|
5944 |
+
#: src/admin.php:3943
|
5945 |
msgid "ABORT: Could not find the information on which entities to restore."
|
5946 |
msgstr ""
|
5947 |
|
5948 |
+
#: src/admin.php:3898
|
5949 |
msgid "UpdraftPlus Restoration: Progress"
|
5950 |
msgstr ""
|
5951 |
|
5952 |
+
#: src/admin.php:3851
|
5953 |
msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
|
5954 |
msgstr ""
|
5955 |
|
5956 |
+
#: src/admin.php:3786
|
5957 |
msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
|
5958 |
msgstr ""
|
5959 |
|
5960 |
+
#: src/admin.php:3804
|
5961 |
msgid "Delete this backup set"
|
5962 |
msgstr ""
|
5963 |
|
5964 |
+
#: src/admin.php:3446
|
5965 |
msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
|
5966 |
msgstr ""
|
5967 |
|
5968 |
+
#: src/admin.php:3443
|
5969 |
msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
|
5970 |
msgstr ""
|
5971 |
|
5972 |
+
#: src/admin.php:3441
|
5973 |
msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. Ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
|
5974 |
msgstr ""
|
5975 |
|
5976 |
+
#: src/methods/cloudfiles-new.php:101, src/methods/cloudfiles.php:462,
|
5977 |
+
#: src/methods/openstack-base.php:549, src/methods/openstack-base.php:590,
|
5978 |
+
#: src/methods/s3.php:832, src/methods/s3.php:946
|
5979 |
msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
|
5980 |
msgstr ""
|
5981 |
|
6011 |
msgid "Use the server's SSL certificates"
|
6012 |
msgstr ""
|
6013 |
|
6014 |
+
#: src/admin.php:3289
|
6015 |
msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
|
6016 |
msgstr ""
|
6017 |
|
6018 |
+
#: src/admin.php:3289
|
6019 |
msgid "click here"
|
6020 |
msgstr ""
|
6021 |
|
6022 |
+
#: src/admin.php:3289
|
6023 |
msgid "or, to reset this option"
|
6024 |
msgstr ""
|
6025 |
|
6026 |
+
#: src/admin.php:3289
|
6027 |
msgid "Follow this link to attempt to create the directory and set the permissions"
|
6028 |
msgstr ""
|
6029 |
|
6030 |
+
#: src/admin.php:3281
|
6031 |
msgid "Backup directory specified is writable, which is good."
|
6032 |
msgstr ""
|
6033 |
|
6059 |
msgid "Advanced / Debugging Settings"
|
6060 |
msgstr ""
|
6061 |
|
6062 |
+
#: src/admin.php:682
|
6063 |
msgid "Requesting start of backup..."
|
6064 |
msgstr ""
|
6065 |
|
6066 |
+
#: src/addons/morefiles.php:297, src/admin.php:698
|
6067 |
msgid "Cancel"
|
6068 |
msgstr ""
|
6069 |
|
6070 |
+
#: src/addons/reporting.php:244, src/admin.php:3593
|
6071 |
msgid "None"
|
6072 |
msgstr ""
|
6073 |
|
6092 |
msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
|
6093 |
msgstr ""
|
6094 |
|
6095 |
+
#: src/addons/morefiles.php:443, src/admin.php:3371
|
6096 |
msgid "Exclude these:"
|
6097 |
msgstr ""
|
6098 |
|
6099 |
+
#: src/admin.php:3362
|
6100 |
msgid "Any other directories found inside wp-content"
|
6101 |
msgstr ""
|
6102 |
|
6112 |
msgid "To fix the time at which a backup should take place,"
|
6113 |
msgstr ""
|
6114 |
|
6115 |
+
#: src/admin.php:3275
|
6116 |
msgid "Monthly"
|
6117 |
msgstr ""
|
6118 |
|
6119 |
+
#: src/admin.php:3274
|
6120 |
msgid "Fortnightly"
|
6121 |
msgstr ""
|
6122 |
|
6123 |
+
#: src/admin.php:3273
|
6124 |
msgid "Weekly"
|
6125 |
msgstr ""
|
6126 |
|
6127 |
+
#: src/admin.php:3272
|
6128 |
msgid "Daily"
|
6129 |
msgstr ""
|
6130 |
|
6131 |
+
#: src/admin.php:705, src/admin.php:3250
|
6132 |
msgid "Download log file"
|
6133 |
msgstr ""
|
6134 |
|
6135 |
+
#: src/admin.php:3122
|
6136 |
msgid "The folder exists, but your webserver does not have permission to write to it."
|
6137 |
msgstr ""
|
6138 |
|
6139 |
+
#: src/admin.php:3117
|
6140 |
msgid "The folder was created, but we had to change its file permissions to 777 (world-writable) to be able to write to it. You should check with your hosting provider that this will not cause any problems"
|
6141 |
msgstr ""
|
6142 |
|
6143 |
+
#: src/admin.php:3103
|
6144 |
msgid "The request to the filesystem to create the directory failed."
|
6145 |
msgstr ""
|
6146 |
|
6147 |
+
#: src/addons/migrator.php:2321, src/admin.php:699, src/admin.php:3015,
|
6148 |
+
#: src/admin.php:3048, src/admin.php:3804,
|
6149 |
#: src/templates/wp-admin/settings/delete-and-restore-modals.php:5
|
6150 |
msgid "Delete"
|
6151 |
msgstr ""
|
6152 |
|
6153 |
+
#: src/admin.php:2953
|
|
|
|
|
|
|
|
|
6154 |
msgid "show log"
|
6155 |
msgstr ""
|
6156 |
|
6255 |
msgid "Multisite"
|
6256 |
msgstr ""
|
6257 |
|
|
|
|
|
|
|
|
|
6258 |
#: src/templates/wp-admin/settings/tab-status.php:86
|
6259 |
msgid "Perform a one-time backup"
|
6260 |
msgstr ""
|
6304 |
msgid "Delete backup set"
|
6305 |
msgstr ""
|
6306 |
|
6307 |
+
#: src/admin.php:681
|
6308 |
msgid "Download error: the server sent us a response which we did not understand."
|
6309 |
msgstr ""
|
6310 |
|
6311 |
#: src/addons/backblaze.php:209, src/addons/cloudfiles-enhanced.php:102,
|
6312 |
+
#: src/addons/migrator.php:783, src/addons/migrator.php:1067,
|
6313 |
+
#: src/addons/migrator.php:1148, src/addons/migrator.php:1197,
|
6314 |
+
#: src/addons/migrator.php:1431, src/addons/migrator.php:1782,
|
6315 |
+
#: src/addons/migrator.php:1809, src/addons/migrator.php:1815,
|
6316 |
+
#: src/addons/migrator.php:1877, src/addons/migrator.php:1917,
|
6317 |
+
#: src/addons/migrator.php:1956, src/addons/migrator.php:1966,
|
6318 |
+
#: src/addons/migrator.php:1971, src/addons/s3-enhanced.php:127,
|
6319 |
#: src/addons/s3-enhanced.php:132, src/addons/s3-enhanced.php:134,
|
6320 |
+
#: src/addons/sftp.php:818, src/addons/webdav.php:108, src/admin.php:87,
|
6321 |
+
#: src/admin.php:673, src/admin.php:4052, src/admin.php:4082,
|
6322 |
#: src/methods/remotesend.php:71, src/methods/remotesend.php:239,
|
6323 |
+
#: src/methods/updraftvault.php:490, src/restorer.php:1414
|
6324 |
msgid "Error:"
|
6325 |
msgstr ""
|
6326 |
|
6327 |
+
#: src/admin.php:664,
|
6328 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:32
|
6329 |
msgid "calculating..."
|
6330 |
msgstr ""
|
6345 |
msgid "This is a count of the contents of your Updraft directory"
|
6346 |
msgstr ""
|
6347 |
|
6348 |
+
#: src/addons/google-enhanced.php:64, src/methods/googledrive.php:176,
|
6349 |
+
#: src/methods/googledrive.php:178, src/methods/googledrive.php:434,
|
6350 |
+
#: src/methods/googledrive.php:461, src/methods/googledrive.php:490,
|
6351 |
+
#: src/methods/googledrive.php:497, src/methods/googledrive.php:507,
|
6352 |
+
#: src/methods/googledrive.php:513, src/methods/googledrive.php:515,
|
6353 |
+
#: src/methods/googledrive.php:1083, src/methods/googledrive.php:1096,
|
6354 |
+
#: src/methods/googledrive.php:1096, src/methods/googledrive.php:1113,
|
6355 |
+
#: src/methods/googledrive.php:1117, src/methods/googledrive.php:1128,
|
6356 |
+
#: src/methods/googledrive.php:1139, src/methods/googledrive.php:1159
|
6357 |
msgid "Google Drive"
|
6358 |
msgstr ""
|
6359 |
|
6369 |
msgid "More tasks:"
|
6370 |
msgstr ""
|
6371 |
|
6372 |
+
#: src/admin.php:2711
|
6373 |
msgid "Download most recently modified log file"
|
6374 |
msgstr ""
|
6375 |
|
6376 |
+
#: src/admin.php:2667, src/admin.php:2673, src/central/bootstrap.php:174
|
6377 |
msgid "(Nothing yet logged)"
|
6378 |
msgstr ""
|
6379 |
|
6380 |
#: src/addons/autobackup.php:325, src/addons/autobackup.php:420,
|
6381 |
+
#: src/admin.php:2666, src/admin.php:2671
|
6382 |
msgid "Last log message"
|
6383 |
msgstr ""
|
6384 |
|
6385 |
+
#: src/addons/migrator.php:235, src/admin.php:704, src/admin.php:3786,
|
6386 |
#: src/templates/wp-admin/settings/tab-status.php:30
|
6387 |
msgid "Restore"
|
6388 |
msgstr ""
|
6389 |
|
6390 |
+
#: src/admin.php:526, src/admin.php:697,
|
6391 |
#: src/templates/wp-admin/settings/tab-status.php:27
|
6392 |
msgid "Backup Now"
|
6393 |
msgstr ""
|
6394 |
|
6395 |
+
#: src/addons/migrator.php:1847, src/addons/moredatabase.php:247,
|
6396 |
+
#: src/addons/reporting.php:259, src/admin.php:309, src/admin.php:3568,
|
6397 |
+
#: src/admin.php:3648, src/admin.php:4136,
|
6398 |
#: src/includes/class-wpadmin-commands.php:147,
|
6399 |
#: src/includes/class-wpadmin-commands.php:480,
|
6400 |
#: src/templates/wp-admin/settings/delete-and-restore-modals.php:81,
|
6402 |
msgid "Database"
|
6403 |
msgstr ""
|
6404 |
|
6405 |
+
#: src/admin.php:305, src/admin.php:4657
|
6406 |
msgid "Files"
|
6407 |
msgstr ""
|
6408 |
|
6414 |
msgid "All the times shown in this section are using WordPress's configured time zone, which you can set in Settings -> General"
|
6415 |
msgstr ""
|
6416 |
|
6417 |
+
#: src/admin.php:285
|
6418 |
msgid "At the same time as the files backup"
|
6419 |
msgstr ""
|
6420 |
|
6421 |
+
#: src/admin.php:275, src/admin.php:296, src/admin.php:303
|
6422 |
msgid "Nothing currently scheduled"
|
6423 |
msgstr ""
|
6424 |
|
6430 |
msgid "JavaScript warning"
|
6431 |
msgstr ""
|
6432 |
|
6433 |
+
#: src/admin.php:684, src/admin.php:2738
|
6434 |
msgid "Delete Old Directories"
|
6435 |
msgstr ""
|
6436 |
|
6437 |
+
#: src/admin.php:2458
|
6438 |
msgid "Current limit is:"
|
6439 |
msgstr ""
|
6440 |
|
6441 |
+
#: src/admin.php:2433
|
6442 |
msgid "Your backup has been restored."
|
6443 |
msgstr ""
|
6444 |
|
6450 |
msgid "Lead developer's homepage"
|
6451 |
msgstr ""
|
6452 |
|
6453 |
+
#: src/central/bootstrap.php:491
|
6454 |
+
msgid "UpdraftPlus.Com"
|
6455 |
+
msgstr ""
|
6456 |
+
|
6457 |
+
#: src/admin.php:4549
|
6458 |
msgid "Your settings have been wiped."
|
6459 |
msgstr ""
|
6460 |
|
6461 |
+
#: src/admin.php:2393
|
6462 |
msgid "Backup directory successfully created."
|
6463 |
msgstr ""
|
6464 |
|
6465 |
+
#: src/admin.php:2386
|
6466 |
msgid "Backup directory could not be created"
|
6467 |
msgstr ""
|
6468 |
|
6469 |
+
#: src/admin.php:2985
|
6470 |
msgid "Old directory removal failed for some reason. You may want to do this manually."
|
6471 |
msgstr ""
|
6472 |
|
6473 |
+
#: src/admin.php:2983
|
6474 |
msgid "Old directories successfully removed."
|
6475 |
msgstr ""
|
6476 |
|
6477 |
+
#: src/admin.php:2980, src/admin.php:2980
|
6478 |
msgid "Remove old directories"
|
6479 |
msgstr ""
|
6480 |
|
6481 |
+
#: src/addons/migrator.php:300, src/addons/migrator.php:315,
|
6482 |
+
#: src/admin.php:2335, src/admin.php:2344, src/admin.php:2353,
|
6483 |
+
#: src/admin.php:2395, src/admin.php:2987
|
6484 |
msgid "Return to UpdraftPlus Configuration"
|
6485 |
msgstr ""
|
6486 |
|
6487 |
+
#: src/admin.php:677, src/admin.php:2335, src/admin.php:2344,
|
6488 |
+
#: src/admin.php:2353, src/admin.php:2395, src/admin.php:2987,
|
6489 |
#: src/templates/wp-admin/settings/existing-backups-table.php:16
|
6490 |
msgid "Actions"
|
6491 |
msgstr ""
|
6492 |
|
6493 |
+
#: src/admin.php:2255
|
6494 |
msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
|
6495 |
msgstr ""
|
6496 |
|
6497 |
+
#: src/admin.php:2161
|
6498 |
msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
|
6499 |
msgstr ""
|
6500 |
|
6501 |
+
#: src/admin.php:2033
|
6502 |
msgid "No local copy present."
|
6503 |
msgstr ""
|
6504 |
|
6505 |
+
#: src/admin.php:2030
|
6506 |
msgid "Download in progress"
|
6507 |
msgstr ""
|
6508 |
|
6509 |
+
#: src/admin.php:676, src/admin.php:2019
|
6510 |
msgid "File ready."
|
6511 |
msgstr ""
|
6512 |
|
6513 |
+
#: src/admin.php:2000
|
6514 |
msgid "Download failed"
|
6515 |
msgstr ""
|
6516 |
|
6517 |
+
#: src/admin.php:674, src/admin.php:1290, src/admin.php:1764,
|
6518 |
+
#: src/class-updraftplus.php:1215, src/class-updraftplus.php:1259,
|
6519 |
#: src/methods/addon-base-v2.php:95, src/methods/addon-base-v2.php:100,
|
6520 |
#: src/methods/addon-base-v2.php:205, src/methods/addon-base-v2.php:225,
|
6521 |
+
#: src/methods/stream-base.php:200, src/restorer.php:2288,
|
6522 |
+
#: src/restorer.php:2313, src/restorer.php:2394, src/updraftplus.php:156
|
6523 |
msgid "Error"
|
6524 |
msgstr ""
|
6525 |
|
6526 |
+
#: src/admin.php:1799
|
6527 |
msgid "Could not find that job - perhaps it has already finished?"
|
6528 |
msgstr ""
|
6529 |
|
6530 |
+
#: src/admin.php:1791
|
6531 |
msgid "Job deleted"
|
6532 |
msgstr ""
|
6533 |
|
6534 |
+
#: src/admin.php:1880
|
6535 |
msgid "OK. You should soon see activity in the \"Last log message\" field below."
|
6536 |
msgstr ""
|
6537 |
|
6538 |
+
#: src/admin.php:749
|
6539 |
msgid "Nothing yet logged"
|
6540 |
msgstr ""
|
6541 |
|
6542 |
+
#: src/admin.php:970
|
6543 |
msgid "Please consult this FAQ if you have problems backing up."
|
6544 |
msgstr ""
|
6545 |
|
6546 |
+
#: src/admin.php:970
|
6547 |
msgid "Your website is hosted using the %s web server."
|
6548 |
msgstr ""
|
6549 |
|
6550 |
+
#: src/admin.php:966
|
6551 |
msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
|
6552 |
msgstr ""
|
6553 |
|
6554 |
+
#: src/admin.php:962
|
6555 |
msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
|
6556 |
msgstr ""
|
6557 |
|
6558 |
+
#: src/addons/migrator.php:838, src/admin.php:954, src/admin.php:958,
|
6559 |
+
#: src/admin.php:962, src/admin.php:966, src/admin.php:970, src/admin.php:979,
|
6560 |
+
#: src/admin.php:3434, src/admin.php:3441, src/admin.php:3443,
|
6561 |
+
#: src/methods/cloudfiles-new.php:101, src/methods/cloudfiles.php:462,
|
6562 |
+
#: src/methods/ftp.php:309, src/methods/openstack-base.php:549,
|
6563 |
+
#: src/methods/openstack-base.php:590, src/methods/s3.php:828,
|
6564 |
+
#: src/methods/s3.php:832, src/methods/s3.php:942, src/methods/s3.php:946,
|
6565 |
+
#: src/methods/updraftvault.php:283,
|
6566 |
#: src/templates/wp-admin/settings/downloading-and-restoring.php:27,
|
6567 |
+
#: src/udaddons/updraftplus-addons.php:253
|
6568 |
msgid "Warning"
|
6569 |
msgstr ""
|
6570 |
|
6571 |
+
#: src/admin.php:900
|
6572 |
msgid "Add-Ons / Pro Support"
|
6573 |
msgstr ""
|
6574 |
|
6575 |
+
#: src/admin.php:542, src/admin.php:898,
|
6576 |
#: src/templates/wp-admin/settings/tab-bar.php:7
|
6577 |
msgid "Settings"
|
6578 |
msgstr ""
|
6579 |
|
6580 |
+
#: src/backup.php:261
|
6581 |
msgid "Could not create %s zip. Consult the log file for more information."
|
6582 |
msgstr ""
|
6583 |
|
6584 |
+
#: src/backup.php:2178
|
6585 |
msgid "Infinite recursion: consult your log for more information"
|
6586 |
msgstr ""
|
6587 |
|
6593 |
msgid "Like UpdraftPlus and can spare one minute?"
|
6594 |
msgstr ""
|
6595 |
|
6596 |
+
#: src/addons/azure.php:218, src/class-updraftplus.php:4102,
|
6597 |
+
#: src/methods/googledrive.php:1012, src/methods/s3.php:322
|
6598 |
msgid "File not found"
|
6599 |
msgstr ""
|
6600 |
|
6601 |
+
#: src/class-updraftplus.php:4009
|
6602 |
msgid "The decryption key used:"
|
6603 |
msgstr ""
|
6604 |
|
6605 |
+
#: src/class-updraftplus.php:4009, src/class-updraftplus.php:4318,
|
6606 |
#: src/restorer.php:389
|
6607 |
msgid "Decryption failed. The most likely cause is that you used the wrong key."
|
6608 |
msgstr ""
|
6609 |
|
6610 |
+
#: src/class-updraftplus.php:3990, src/class-updraftplus.php:4306,
|
6611 |
#: src/restorer.php:376
|
6612 |
msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
|
6613 |
msgstr ""
|
6614 |
|
6615 |
+
#: src/backup.php:2053
|
6616 |
msgid "Could not open the backup file for writing"
|
6617 |
msgstr ""
|
6618 |
|
6619 |
+
#: src/class-updraftplus.php:3376
|
6620 |
msgid "Could not save backup history because we have no backup array. Backup probably failed."
|
6621 |
msgstr ""
|
6622 |
|
6623 |
+
#: src/class-updraftplus.php:3337
|
6624 |
msgid "Could not read the directory"
|
6625 |
msgstr ""
|
6626 |
|
6627 |
+
#: src/admin.php:2077, src/backup.php:1234
|
6628 |
msgid "Backup directory (%s) is not writable, or does not exist."
|
6629 |
msgstr ""
|
6630 |
|
6631 |
+
#: src/backup.php:1011
|
6632 |
msgid "WordPress backup is complete"
|
6633 |
msgstr ""
|
6634 |
|
6635 |
+
#: src/class-updraftplus.php:2849
|
6636 |
msgid "The backup attempt has finished, apparently unsuccessfully"
|
6637 |
msgstr ""
|
6638 |
|
6639 |
+
#: src/class-updraftplus.php:2834
|
6640 |
msgid "The backup apparently succeeded and is now complete"
|
6641 |
msgstr ""
|
6642 |
|
6644 |
msgid "Encryption error occurred when encrypting database. Encryption aborted."
|
6645 |
msgstr ""
|
6646 |
|
6647 |
+
#: src/class-updraftplus.php:2537
|
6648 |
msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
|
6649 |
msgstr ""
|
6650 |
|
6651 |
+
#: src/class-updraftplus.php:1816
|
6652 |
msgid "Others"
|
6653 |
msgstr ""
|
6654 |
|
6655 |
+
#: src/addons/multisite.php:467, src/class-updraftplus.php:1801
|
6656 |
msgid "Uploads"
|
6657 |
msgstr ""
|
6658 |
|
6659 |
+
#: src/class-updraftplus.php:1800
|
6660 |
msgid "Themes"
|
6661 |
msgstr ""
|
6662 |
|
6663 |
+
#: src/class-updraftplus.php:1799
|
6664 |
msgid "Plugins"
|
6665 |
msgstr ""
|
6666 |
|
6667 |
+
#: src/class-updraftplus.php:578
|
6668 |
msgid "No log files were found."
|
6669 |
msgstr ""
|
6670 |
|
6671 |
+
#: src/admin.php:1949, src/admin.php:1953, src/class-updraftplus.php:573
|
6672 |
msgid "The log file could not be read."
|
6673 |
msgstr ""
|
6674 |
|
6675 |
+
#: src/admin.php:989, src/admin.php:998, src/admin.php:1003,
|
6676 |
+
#: src/admin.php:1011, src/admin.php:1020, src/class-updraftplus.php:538,
|
6677 |
+
#: src/class-updraftplus.php:573, src/class-updraftplus.php:578,
|
6678 |
+
#: src/class-updraftplus.php:583
|
6679 |
msgid "UpdraftPlus notice:"
|
6680 |
msgstr ""
|
6681 |
|
Binary file
|
@@ -11,19 +11,122 @@ msgstr ""
|
|
11 |
"Language: ar\n"
|
12 |
"Project-Id-Version: UpdraftPlus\n"
|
13 |
|
14 |
-
#: src/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
16 |
msgstr ""
|
17 |
|
18 |
-
#: src/class-updraftplus.php:
|
19 |
msgid "Your chosen character set to use instead:"
|
20 |
msgstr ""
|
21 |
|
22 |
-
#: src/class-updraftplus.php:
|
23 |
msgid "You can choose another suitable character set instead and continue with the restoration at your own risk."
|
24 |
msgstr ""
|
25 |
|
26 |
-
#: src/class-updraftplus.php:
|
27 |
msgid "The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import."
|
28 |
msgid_plural "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import."
|
29 |
msgstr[0] ""
|
@@ -33,59 +136,51 @@ msgstr[3] ""
|
|
33 |
msgstr[4] ""
|
34 |
msgstr[5] ""
|
35 |
|
36 |
-
#: src/central/bootstrap.php:
|
37 |
msgid "Create another key"
|
38 |
msgstr ""
|
39 |
|
40 |
-
#: src/central/bootstrap.php:
|
41 |
msgid "UpdraftCentral dashboard connection details"
|
42 |
msgstr ""
|
43 |
|
44 |
-
#: src/central/bootstrap.php:
|
45 |
msgid "Next"
|
46 |
msgstr ""
|
47 |
|
48 |
-
#: src/central/bootstrap.php:
|
49 |
-
msgid "the UpdraftCentral dashboard plugin"
|
50 |
-
msgstr ""
|
51 |
-
|
52 |
-
#: src/central/bootstrap.php:490
|
53 |
-
msgid "On my own website on which I have installed"
|
54 |
-
msgstr ""
|
55 |
-
|
56 |
-
#: src/central/bootstrap.php:485
|
57 |
msgid "an account"
|
58 |
msgstr ""
|
59 |
|
60 |
-
#: src/central/bootstrap.php:
|
61 |
msgid "i.e. if you have %s there"
|
62 |
msgstr ""
|
63 |
|
64 |
-
#: src/central/bootstrap.php:
|
65 |
msgid "Connect this site to an UpdraftCentral dashboard found at..."
|
66 |
msgstr ""
|
67 |
|
68 |
-
#: src/central/bootstrap.php:
|
69 |
msgid "Manage existing keys (%d)..."
|
70 |
msgstr ""
|
71 |
|
72 |
-
#: src/central/bootstrap.php:
|
73 |
msgid "There are no UpdraftCentral dashboards that can currently control this site."
|
74 |
msgstr ""
|
75 |
|
76 |
-
#: src/central/bootstrap.php:
|
77 |
msgid "You can now control this site via your UpdraftCentral dashboard at %s."
|
78 |
msgstr ""
|
79 |
|
80 |
-
#: src/central/bootstrap.php:
|
81 |
msgid "Detailed instructions for this can be found at %s"
|
82 |
msgstr ""
|
83 |
|
84 |
-
#: src/central/bootstrap.php:
|
85 |
msgid "You now need to copy the key below and enter it at your %s."
|
86 |
msgstr ""
|
87 |
|
88 |
-
#: src/admin.php:
|
89 |
msgid "Please enter a valid URL e.g http://example.com"
|
90 |
msgstr ""
|
91 |
|
@@ -137,31 +232,31 @@ msgstr ""
|
|
137 |
msgid "Account ID"
|
138 |
msgstr ""
|
139 |
|
140 |
-
#: src/class-updraftplus.php:
|
141 |
msgid "As long as your web hosting allows http (i.e. non-SSL access) or will forward requests to https (which is almost always the case), this is no problem. If that is not yet set up, then you should set it up, or use %s so that the non-https links are automatically replaced."
|
142 |
msgstr ""
|
143 |
|
144 |
-
#: src/class-updraftplus.php:
|
145 |
msgid "the migrator add-on"
|
146 |
msgstr ""
|
147 |
|
148 |
-
#: src/class-updraftplus.php:
|
149 |
msgid "This restoration will work if you still have an SSL certificate (i.e. can use https) to access the site. Otherwise, you will want to use %s to search/replace the site address so that the site can be visited without https."
|
150 |
msgstr ""
|
151 |
|
152 |
-
#: src/class-updraftplus.php:
|
153 |
msgid "This backup set is of this site, but at the time of the backup you were using %s, whereas the site now uses %s."
|
154 |
msgstr ""
|
155 |
|
156 |
-
#: src/class-updraftplus.php:
|
157 |
msgid "The website address in the backup set (%s) is slightly different from that of the site now (%s). This is not expected to be a problem for restoring the site, as long as visits to the former address still reach the site."
|
158 |
msgstr ""
|
159 |
|
160 |
-
#: src/methods/googledrive.php:
|
161 |
msgid "To de-authorize UpdraftPlus (all sites) from accessing your Google Drive, follow this link to your Google account settings."
|
162 |
msgstr ""
|
163 |
|
164 |
-
#: src/methods/googledrive.php:
|
165 |
msgid "Follow this link to remove this site's settings for %s."
|
166 |
msgstr ""
|
167 |
|
@@ -169,29 +264,31 @@ msgstr ""
|
|
169 |
msgid "UpdraftPlus debug mode is on: detailed debugging data follows."
|
170 |
msgstr ""
|
171 |
|
172 |
-
#: src/admin.php:
|
173 |
msgid "Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file."
|
174 |
msgstr ""
|
175 |
|
176 |
-
#: src/admin.php:
|
177 |
-
#: src/class-updraftplus.php:
|
|
|
178 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
179 |
msgstr ""
|
180 |
|
181 |
-
#: src/admin.php:
|
182 |
-
#: src/class-updraftplus.php:
|
|
|
183 |
msgid "A PHP exception (%s) has occurred: %s"
|
184 |
msgstr ""
|
185 |
|
186 |
-
#: src/addons/googlecloud.php:
|
187 |
msgid "South-east Australia"
|
188 |
msgstr ""
|
189 |
|
190 |
-
#: src/addons/googlecloud.php:
|
191 |
msgid "South-east Asia"
|
192 |
msgstr ""
|
193 |
|
194 |
-
#: src/addons/googlecloud.php:
|
195 |
msgid "North-east Asia"
|
196 |
msgstr ""
|
197 |
|
@@ -223,7 +320,7 @@ msgstr ""
|
|
223 |
msgid "Select Files"
|
224 |
msgstr ""
|
225 |
|
226 |
-
#: src/methods/cloudfiles.php:
|
227 |
msgid "Rackspace Storage Region"
|
228 |
msgstr ""
|
229 |
|
@@ -235,19 +332,19 @@ msgstr ""
|
|
235 |
msgid "Instant and secure logon with a wave of your phone."
|
236 |
msgstr ""
|
237 |
|
238 |
-
#: src/backup.php:
|
239 |
msgid "As previously warned (see: %s), encryption is no longer a feature of the free edition of UpdraftPlus"
|
240 |
msgstr ""
|
241 |
|
242 |
-
#: src/admin.php:
|
243 |
msgid "Value"
|
244 |
msgstr ""
|
245 |
|
246 |
-
#: src/admin.php:
|
247 |
msgid "Did not know how to delete from this cloud service."
|
248 |
msgstr ""
|
249 |
|
250 |
-
#: src/addons/sftp.php:
|
251 |
msgid "Encrypted login failed; trying non-encrypted"
|
252 |
msgstr ""
|
253 |
|
@@ -255,7 +352,7 @@ msgstr ""
|
|
255 |
msgid "__Check this box to use Amazon's server-side encryption"
|
256 |
msgstr ""
|
257 |
|
258 |
-
#: src/addons/azure.php:
|
259 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
260 |
msgstr ""
|
261 |
|
@@ -263,15 +360,15 @@ msgstr ""
|
|
263 |
msgid "Stored at: %s"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#: src/methods/cloudfiles.php:
|
267 |
msgid "Cloud Files"
|
268 |
msgstr ""
|
269 |
|
270 |
-
#: src/admin.php:
|
271 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
272 |
msgstr ""
|
273 |
|
274 |
-
#: src/admin.php:
|
275 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
276 |
msgstr ""
|
277 |
|
@@ -288,87 +385,87 @@ msgstr ""
|
|
288 |
msgid "Extra database"
|
289 |
msgstr ""
|
290 |
|
291 |
-
#: src/admin.php:
|
292 |
msgid "Press here to download or browse"
|
293 |
msgstr ""
|
294 |
|
295 |
-
#: src/admin.php:
|
296 |
msgid "Error: invalid path"
|
297 |
msgstr ""
|
298 |
|
299 |
-
#: src/admin.php:
|
300 |
msgid "An error occurred when fetching storage module options: "
|
301 |
msgstr ""
|
302 |
|
303 |
-
#: src/admin.php:
|
304 |
msgid "Loading log file"
|
305 |
msgstr ""
|
306 |
|
307 |
-
#: src/admin.php:
|
308 |
msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
|
309 |
msgstr ""
|
310 |
|
311 |
-
#: src/admin.php:
|
312 |
msgid "Search"
|
313 |
msgstr ""
|
314 |
|
315 |
-
#: src/admin.php:
|
316 |
msgid "Select a file to view information about it"
|
317 |
msgstr ""
|
318 |
|
319 |
-
#: src/admin.php:
|
320 |
msgid "Browsing zip file"
|
321 |
msgstr ""
|
322 |
|
323 |
-
#: src/admin.php:
|
324 |
msgid "With UpdraftPlus Premium, you can directly download individual files from here."
|
325 |
msgstr ""
|
326 |
|
327 |
-
#: src/admin.php:
|
328 |
msgid "Browse contents"
|
329 |
msgstr ""
|
330 |
|
331 |
-
#: src/restorer.php:
|
332 |
msgid "Skipped tables:"
|
333 |
msgstr ""
|
334 |
|
335 |
-
#: src/class-updraftplus.php:
|
336 |
msgid "This database backup has the following WordPress tables excluded: %s"
|
337 |
msgstr ""
|
338 |
|
339 |
-
#: src/admin.php:
|
340 |
msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
|
341 |
msgstr ""
|
342 |
|
343 |
-
#: src/admin.php:
|
344 |
msgid "All WordPress tables will be backed up."
|
345 |
msgstr ""
|
346 |
|
347 |
-
#: src/admin.php:
|
348 |
msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
|
349 |
msgstr ""
|
350 |
|
351 |
-
#: src/admin.php:
|
352 |
msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
|
353 |
msgstr ""
|
354 |
|
355 |
-
#: src/admin.php:
|
356 |
msgid "The available memory on the server."
|
357 |
msgstr ""
|
358 |
|
359 |
-
#: src/admin.php:
|
360 |
msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
|
361 |
msgstr ""
|
362 |
|
363 |
-
#: src/admin.php:
|
364 |
msgid "The file failed to upload. Please check the following:"
|
365 |
msgstr ""
|
366 |
|
367 |
-
#: src/admin.php:
|
368 |
msgid "HTTP code:"
|
369 |
msgstr ""
|
370 |
|
371 |
-
#: src/admin.php:
|
372 |
msgid "You have chosen to backup a database, but no tables have been selected"
|
373 |
msgstr ""
|
374 |
|
@@ -664,31 +761,31 @@ msgstr ""
|
|
664 |
msgid "Apache modules"
|
665 |
msgstr ""
|
666 |
|
667 |
-
#: src/includes/updraftplus-notices.php:
|
668 |
msgid "Summer sale - 20% off UpdraftPlus Premium until July 31st"
|
669 |
msgstr ""
|
670 |
|
671 |
-
#: src/includes/updraftplus-notices.php:
|
672 |
msgid "Spring sale - 20% off UpdraftPlus Premium until April 31st"
|
673 |
msgstr ""
|
674 |
|
675 |
-
#: src/includes/updraftplus-notices.php:
|
676 |
msgid "Happy New Year - 20% off UpdraftPlus Premium until January 1st"
|
677 |
msgstr ""
|
678 |
|
679 |
-
#: src/includes/updraftplus-notices.php:
|
680 |
msgid "Christmas sale - 20% off UpdraftPlus Premium until December 25th"
|
681 |
msgstr ""
|
682 |
|
683 |
-
#: src/includes/updraftplus-notices.php:
|
684 |
-
#: src/includes/updraftplus-notices.php:
|
685 |
-
#: src/includes/updraftplus-notices.php:
|
686 |
-
#: src/includes/updraftplus-notices.php:
|
687 |
-
#: src/includes/updraftplus-notices.php:
|
688 |
msgid "To benefit, use this discount code:"
|
689 |
msgstr ""
|
690 |
|
691 |
-
#: src/includes/updraftplus-notices.php:
|
692 |
msgid "Black Friday - 20% off UpdraftPlus Premium until November 30th"
|
693 |
msgstr ""
|
694 |
|
@@ -832,35 +929,35 @@ msgstr ""
|
|
832 |
msgid "Export / import settings"
|
833 |
msgstr ""
|
834 |
|
835 |
-
#: src/restorer.php:
|
836 |
msgid "Processing table (%s)"
|
837 |
msgstr ""
|
838 |
|
839 |
-
#: src/restorer.php:
|
840 |
msgid "Backup of: %s"
|
841 |
msgstr ""
|
842 |
|
843 |
-
#: src/methods/googledrive.php:
|
844 |
msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
|
845 |
msgstr ""
|
846 |
|
847 |
-
#: src/methods/dropbox.php:
|
848 |
msgid "%s de-authentication"
|
849 |
msgstr ""
|
850 |
|
851 |
-
#: src/methods/dropbox.php:
|
852 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
853 |
msgstr ""
|
854 |
|
855 |
-
#: src/methods/dropbox.php:
|
856 |
msgid "Follow this link to deauthenticate with %s."
|
857 |
msgstr ""
|
858 |
|
859 |
-
#: src/central/bootstrap.php:
|
860 |
msgid "UpdraftCentral enables control of your WordPress sites (including management of backups and updates) from a central dashboard."
|
861 |
msgstr ""
|
862 |
|
863 |
-
#: src/backup.php:
|
864 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
865 |
msgstr ""
|
866 |
|
@@ -868,51 +965,51 @@ msgstr ""
|
|
868 |
msgid "You have selected a remote storage option which has an authorization step to complete:"
|
869 |
msgstr ""
|
870 |
|
871 |
-
#: src/admin.php:
|
872 |
msgid "Remote files deleted:"
|
873 |
msgstr ""
|
874 |
|
875 |
-
#: src/admin.php:
|
876 |
msgid "Local files deleted:"
|
877 |
msgstr ""
|
878 |
|
879 |
-
#: src/admin.php:
|
880 |
msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
|
881 |
msgstr ""
|
882 |
|
883 |
-
#: src/admin.php:
|
884 |
msgid "remote files deleted"
|
885 |
msgstr ""
|
886 |
|
887 |
-
#: src/admin.php:
|
888 |
msgid "Complete"
|
889 |
msgstr ""
|
890 |
|
891 |
-
#: src/admin.php:
|
892 |
msgid "Do you want to carry out the import?"
|
893 |
msgstr ""
|
894 |
|
895 |
-
#: src/admin.php:
|
896 |
msgid "Which was exported on:"
|
897 |
msgstr ""
|
898 |
|
899 |
-
#: src/admin.php:
|
900 |
msgid "This will import data from:"
|
901 |
msgstr ""
|
902 |
|
903 |
-
#: src/admin.php:
|
904 |
msgid "Importing..."
|
905 |
msgstr ""
|
906 |
|
907 |
-
#: src/admin.php:
|
908 |
msgid "You have not yet selected a file to import."
|
909 |
msgstr ""
|
910 |
|
911 |
-
#: src/admin.php:
|
912 |
msgid "Your export file will be of your displayed settings, not your saved ones."
|
913 |
msgstr ""
|
914 |
|
915 |
-
#: src/admin.php:
|
916 |
msgid "template not found"
|
917 |
msgstr ""
|
918 |
|
@@ -920,28 +1017,28 @@ msgstr ""
|
|
920 |
msgid "US East (Ohio)"
|
921 |
msgstr ""
|
922 |
|
923 |
-
#: src/addons/onedrive.php:
|
924 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
925 |
msgstr ""
|
926 |
|
927 |
-
#: src/addons/onedrive.php:
|
928 |
msgid "Account is not authorized (%s)."
|
929 |
msgstr ""
|
930 |
|
931 |
-
#: src/addons/onedrive.php:
|
932 |
msgid "Your IP address:"
|
933 |
msgstr ""
|
934 |
|
935 |
-
#: src/addons/onedrive.php:
|
936 |
-
#: src/udaddons/updraftplus-addons.php:
|
937 |
msgid "To remove any block, please go here."
|
938 |
msgstr ""
|
939 |
|
940 |
-
#: src/addons/onedrive.php:
|
941 |
msgid "An error response was received; HTTP code:"
|
942 |
msgstr ""
|
943 |
|
944 |
-
#: src/includes/class-commands.php:
|
945 |
msgid "%s add-on not found"
|
946 |
msgstr ""
|
947 |
|
@@ -953,47 +1050,47 @@ msgstr ""
|
|
953 |
msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
|
954 |
msgstr ""
|
955 |
|
956 |
-
#: src/admin.php:
|
957 |
msgid "To fix this problem go here."
|
958 |
msgstr ""
|
959 |
|
960 |
-
#: src/admin.php:
|
961 |
msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
|
962 |
msgstr ""
|
963 |
|
964 |
-
#: src/admin.php:
|
965 |
msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
|
966 |
msgstr ""
|
967 |
|
968 |
-
#: src/addons/webdav.php:
|
969 |
msgid "Path"
|
970 |
msgstr ""
|
971 |
|
972 |
-
#: src/addons/webdav.php:
|
973 |
msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
|
974 |
msgstr ""
|
975 |
|
976 |
-
#: src/addons/webdav.php:
|
977 |
msgid "Enter any path in the field below."
|
978 |
msgstr ""
|
979 |
|
980 |
-
#: src/addons/webdav.php:
|
981 |
msgid "A host name cannot contain a slash."
|
982 |
msgstr ""
|
983 |
|
984 |
-
#: src/addons/webdav.php:
|
985 |
msgid "Protocol (SSL or not)"
|
986 |
msgstr ""
|
987 |
|
988 |
-
#: src/addons/webdav.php:
|
989 |
msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
|
990 |
msgstr ""
|
991 |
|
992 |
-
#: src/udaddons/updraftplus-addons.php:
|
993 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
994 |
msgstr ""
|
995 |
|
996 |
-
#: src/methods/s3.php:
|
997 |
msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
|
998 |
msgstr ""
|
999 |
|
@@ -1017,73 +1114,73 @@ msgstr ""
|
|
1017 |
msgid "FAQs"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
-
#: src/central/bootstrap.php:
|
1021 |
msgid "More information..."
|
1022 |
msgstr ""
|
1023 |
|
1024 |
-
#: src/central/bootstrap.php:
|
1025 |
msgid "Use the alternative method for making a connection with the dashboard."
|
1026 |
msgstr ""
|
1027 |
|
1028 |
-
#: src/central/bootstrap.php:
|
1029 |
msgid "Key size: %d bits"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
-
#: src/central/bootstrap.php:
|
1033 |
msgid "Public key was sent to:"
|
1034 |
msgstr ""
|
1035 |
|
1036 |
-
#: src/backup.php:
|
1037 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
1038 |
msgstr ""
|
1039 |
|
1040 |
-
#: src/backup.php:
|
1041 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
1042 |
msgstr ""
|
1043 |
|
1044 |
-
#: src/addons/migrator.php:
|
1045 |
msgid "Create key"
|
1046 |
msgstr ""
|
1047 |
|
1048 |
-
#: src/addons/migrator.php:
|
1049 |
msgid "slower, strongest"
|
1050 |
msgstr ""
|
1051 |
|
1052 |
-
#: src/addons/migrator.php:
|
1053 |
msgid "recommended"
|
1054 |
msgstr "موصى به"
|
1055 |
|
1056 |
-
#: src/addons/migrator.php:
|
1057 |
msgid "%s bytes"
|
1058 |
msgstr ""
|
1059 |
|
1060 |
-
#: src/addons/migrator.php:
|
1061 |
msgid "faster (possibility for slow PHP installs)"
|
1062 |
msgstr ""
|
1063 |
|
1064 |
-
#: src/addons/migrator.php:
|
1065 |
msgid "easy to break, fastest"
|
1066 |
msgstr ""
|
1067 |
|
1068 |
-
#: src/addons/migrator.php:
|
1069 |
-
#: src/addons/migrator.php:
|
1070 |
-
#: src/central/bootstrap.php:
|
1071 |
msgid "%s bits"
|
1072 |
msgstr ""
|
1073 |
|
1074 |
-
#: src/addons/migrator.php:
|
1075 |
msgid "Encryption key size:"
|
1076 |
msgstr ""
|
1077 |
|
1078 |
-
#: src/addons/migrator.php:
|
1079 |
msgid "Enter your chosen name"
|
1080 |
msgstr ""
|
1081 |
|
1082 |
-
#: src/addons/migrator.php:
|
1083 |
msgid "Create a key: give this key a unique name (e.g. indicate the site it is for), then press \"Create Key\":"
|
1084 |
msgstr ""
|
1085 |
|
1086 |
-
#: src/methods/googledrive.php:
|
1087 |
msgid "Upload expected to fail: the %s limit for any single file is %s, whereas this file is %s GB (%d bytes)"
|
1088 |
msgstr ""
|
1089 |
|
@@ -1103,7 +1200,7 @@ msgstr ""
|
|
1103 |
msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
|
1104 |
msgstr ""
|
1105 |
|
1106 |
-
#: src/class-updraftplus.php:
|
1107 |
msgid "Size: %s MB"
|
1108 |
msgstr ""
|
1109 |
|
@@ -1115,7 +1212,7 @@ msgstr ""
|
|
1115 |
msgid "Now"
|
1116 |
msgstr "الآن"
|
1117 |
|
1118 |
-
#: src/class-updraftplus.php:
|
1119 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
1120 |
msgstr ""
|
1121 |
|
@@ -1123,13 +1220,13 @@ msgstr ""
|
|
1123 |
msgid "(tap on an icon to select or unselect)"
|
1124 |
msgstr ""
|
1125 |
|
1126 |
-
#: src/methods/updraftvault.php:
|
1127 |
-
#: src/methods/updraftvault.php:
|
1128 |
msgid "%s per year"
|
1129 |
msgstr ""
|
1130 |
|
1131 |
-
#: src/methods/updraftvault.php:
|
1132 |
-
#: src/methods/updraftvault.php:
|
1133 |
msgid "or (annual discount)"
|
1134 |
msgstr ""
|
1135 |
|
@@ -1137,111 +1234,107 @@ msgstr ""
|
|
1137 |
msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
|
1138 |
msgstr ""
|
1139 |
|
1140 |
-
#: src/class-updraftplus.php:
|
1141 |
msgid "The given file was not found, or could not be read."
|
1142 |
msgstr ""
|
1143 |
|
1144 |
-
#: src/central/bootstrap.php:
|
1145 |
msgid "UpdraftCentral (Remote Control)"
|
1146 |
msgstr ""
|
1147 |
|
1148 |
-
#: src/central/bootstrap.php:
|
1149 |
msgid "View recent UpdraftCentral log events"
|
1150 |
msgstr ""
|
1151 |
|
1152 |
-
#: src/central/bootstrap.php:
|
1153 |
-
msgid "URL of mothership"
|
1154 |
-
msgstr ""
|
1155 |
-
|
1156 |
-
#: src/central/bootstrap.php:504
|
1157 |
msgid "Enter any description"
|
1158 |
msgstr ""
|
1159 |
|
1160 |
-
#: src/central/bootstrap.php:
|
1161 |
msgid "Description"
|
1162 |
msgstr " الوصف"
|
1163 |
|
1164 |
-
#: src/central/bootstrap.php:
|
1165 |
msgid "Delete..."
|
1166 |
msgstr ""
|
1167 |
|
1168 |
-
#: src/central/bootstrap.php:
|
1169 |
msgid "Created:"
|
1170 |
msgstr ""
|
1171 |
|
1172 |
-
#: src/central/bootstrap.php:
|
1173 |
msgid "Access this site as user:"
|
1174 |
msgstr ""
|
1175 |
|
1176 |
-
#: src/central/bootstrap.php:
|
1177 |
msgid "Details"
|
1178 |
msgstr "تفاصيل عن المناسبة"
|
1179 |
|
1180 |
-
#: src/central/bootstrap.php:
|
1181 |
msgid "Key description"
|
1182 |
msgstr ""
|
1183 |
|
1184 |
-
#: src/central/bootstrap.php:
|
1185 |
msgid "A key was created, but the attempt to register it with %s was unsuccessful - please try again later."
|
1186 |
msgstr ""
|
1187 |
|
1188 |
-
#: src/central/bootstrap.php:
|
1189 |
msgid "An invalid URL was entered"
|
1190 |
msgstr ""
|
1191 |
|
1192 |
-
#: src/central/bootstrap.php:
|
1193 |
msgid "Close..."
|
1194 |
msgstr ""
|
1195 |
|
1196 |
-
#: src/central/bootstrap.php:
|
1197 |
msgid "This connection appears to already have been made."
|
1198 |
msgstr ""
|
1199 |
|
1200 |
-
#: src/central/bootstrap.php:
|
1201 |
msgid "You must visit this link in the same browser and login session as you created the key in."
|
1202 |
msgstr ""
|
1203 |
|
1204 |
-
#: src/central/bootstrap.php:
|
1205 |
msgid "You must visit this URL in the same browser and login session as you created the key in."
|
1206 |
msgstr ""
|
1207 |
|
1208 |
-
#: src/central/bootstrap.php:
|
1209 |
msgid "You are not logged into this WordPress site in your web browser."
|
1210 |
msgstr ""
|
1211 |
|
1212 |
-
#: src/central/bootstrap.php:
|
1213 |
msgid "The key referred to was unknown."
|
1214 |
msgstr ""
|
1215 |
|
1216 |
-
#: src/central/bootstrap.php:
|
1217 |
msgid "A new UpdraftCentral connection has not been made."
|
1218 |
msgstr ""
|
1219 |
|
1220 |
-
#: src/central/bootstrap.php:
|
1221 |
msgid "An UpdraftCentral connection has been made successfully."
|
1222 |
msgstr ""
|
1223 |
|
1224 |
-
#: src/central/bootstrap.php:
|
1225 |
msgid "UpdraftCentral Connection"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
-
#: src/backup.php:
|
1229 |
msgid "The backup was aborted by the user"
|
1230 |
msgstr ""
|
1231 |
|
1232 |
-
#: src/admin.php:
|
1233 |
msgid "Your settings have been saved."
|
1234 |
msgstr "تم حفظ إعداداتك."
|
1235 |
|
1236 |
-
#: src/admin.php:
|
1237 |
msgid "Total backup size:"
|
1238 |
msgstr ""
|
1239 |
|
1240 |
-
#: src/admin.php:
|
1241 |
msgid "stop"
|
1242 |
msgstr "توقف"
|
1243 |
|
1244 |
-
#: src/admin.php:
|
1245 |
msgid "The backup has finished running"
|
1246 |
msgstr ""
|
1247 |
|
@@ -1267,27 +1360,27 @@ msgstr ""
|
|
1267 |
msgid "calculate"
|
1268 |
msgstr ""
|
1269 |
|
1270 |
-
#: src/admin.php:
|
1271 |
msgid "You should save your changes to ensure that they are used for making your backup."
|
1272 |
msgstr ""
|
1273 |
|
1274 |
-
#: src/admin.php:
|
1275 |
msgid "We requested to delete the file, but could not understand the server's response"
|
1276 |
msgstr ""
|
1277 |
|
1278 |
-
#: src/admin.php:
|
1279 |
msgid "Please enter a valid URL"
|
1280 |
msgstr ""
|
1281 |
|
1282 |
-
#: src/admin.php:
|
1283 |
msgid "Saving..."
|
1284 |
msgstr "جاري الحفظ..."
|
1285 |
|
1286 |
-
#: src/admin.php:
|
1287 |
msgid "Error: the server sent us a response which we did not understand."
|
1288 |
msgstr ""
|
1289 |
|
1290 |
-
#: src/admin.php:
|
1291 |
msgid "Fetching..."
|
1292 |
msgstr ""
|
1293 |
|
@@ -1295,11 +1388,11 @@ msgstr ""
|
|
1295 |
msgid "Asia Pacific (Seoul)"
|
1296 |
msgstr ""
|
1297 |
|
1298 |
-
#: src/restorer.php:
|
1299 |
msgid "Uploads URL:"
|
1300 |
msgstr ""
|
1301 |
|
1302 |
-
#: src/backup.php:
|
1303 |
msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
|
1304 |
msgstr ""
|
1305 |
|
@@ -1307,24 +1400,24 @@ msgstr ""
|
|
1307 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1308 |
msgstr ""
|
1309 |
|
1310 |
-
#: src/class-updraftplus.php:
|
1311 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
1312 |
msgstr ""
|
1313 |
|
1314 |
-
#: src/class-updraftplus.php:
|
1315 |
msgid "Please read this link for important information on this process."
|
1316 |
msgstr ""
|
1317 |
|
1318 |
-
#: src/class-updraftplus.php:
|
1319 |
msgid "It will be imported as a new site."
|
1320 |
msgstr ""
|
1321 |
|
1322 |
-
#: src/admin.php:
|
1323 |
#: src/templates/wp-admin/notices/horizontal-notice.php:18
|
1324 |
msgid "Dismiss"
|
1325 |
msgstr "رفض"
|
1326 |
|
1327 |
-
#: src/admin.php:
|
1328 |
msgid "Please fill in the required information."
|
1329 |
msgstr ""
|
1330 |
|
@@ -1344,40 +1437,40 @@ msgstr ""
|
|
1344 |
msgid "Which site to restore"
|
1345 |
msgstr ""
|
1346 |
|
1347 |
-
#: src/addons/migrator.php:
|
1348 |
msgid "Error when creating new site at your chosen address:"
|
1349 |
msgstr ""
|
1350 |
|
1351 |
-
#: src/addons/migrator.php:
|
1352 |
msgid "Required information for restoring this backup was not given (%s)"
|
1353 |
msgstr ""
|
1354 |
|
1355 |
-
#: src/addons/migrator.php:
|
1356 |
msgid "Attribute imported content to user"
|
1357 |
msgstr ""
|
1358 |
|
1359 |
-
#: src/addons/migrator.php:
|
1360 |
msgid "You must use lower-case letters or numbers for the site path, only."
|
1361 |
msgstr ""
|
1362 |
|
1363 |
-
#: src/addons/migrator.php:
|
1364 |
msgid "This feature is not compatible with %s"
|
1365 |
msgstr ""
|
1366 |
|
1367 |
-
#: src/addons/migrator.php:
|
1368 |
msgid "Importing a single site into a multisite install"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
-
#: src/addons/migrator.php:
|
1372 |
msgid "other content from wp-content"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
-
#: src/addons/migrator.php:
|
1376 |
msgid "WordPress core"
|
1377 |
msgstr ""
|
1378 |
|
1379 |
-
#: src/addons/migrator.php:
|
1380 |
-
#: src/addons/migrator.php:
|
1381 |
msgid "You selected %s to be included in the restoration - this cannot / should not be done when importing a single site into a network."
|
1382 |
msgstr ""
|
1383 |
|
@@ -1385,11 +1478,11 @@ msgstr ""
|
|
1385 |
msgid "Call WordPress action:"
|
1386 |
msgstr ""
|
1387 |
|
1388 |
-
#: src/admin.php:
|
1389 |
msgid "Your saved settings also affect what is backed up - e.g. files excluded."
|
1390 |
msgstr ""
|
1391 |
|
1392 |
-
#: src/admin.php:
|
1393 |
msgid "Skipping: this archive was already restored."
|
1394 |
msgstr ""
|
1395 |
|
@@ -1421,51 +1514,51 @@ msgstr ""
|
|
1421 |
msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
|
1422 |
msgstr ""
|
1423 |
|
1424 |
-
#: src/admin.php:
|
1425 |
msgid "Send this backup to remote storage"
|
1426 |
msgstr ""
|
1427 |
|
1428 |
-
#: src/admin.php:
|
1429 |
msgid "Check out UpdraftPlus Vault."
|
1430 |
msgstr ""
|
1431 |
|
1432 |
-
#: src/admin.php:
|
1433 |
msgid "Not got any remote storage?"
|
1434 |
msgstr ""
|
1435 |
|
1436 |
-
#: src/admin.php:
|
1437 |
msgid "settings"
|
1438 |
msgstr "إعدادات"
|
1439 |
|
1440 |
-
#: src/admin.php:
|
1441 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
-
#: src/admin.php:
|
1445 |
msgid "Include any files in the backup"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
-
#: src/admin.php:
|
1449 |
msgid "Include the database in the backup"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
-
#: src/admin.php:
|
1453 |
msgid "Continue restoration"
|
1454 |
msgstr ""
|
1455 |
|
1456 |
-
#: src/admin.php:
|
1457 |
msgid "You have an unfinished restoration operation, begun %s ago."
|
1458 |
msgstr ""
|
1459 |
|
1460 |
-
#: src/admin.php:
|
1461 |
msgid "Unfinished restoration"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
-
#: src/admin.php:
|
1465 |
msgid "%s minutes, %s seconds"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
-
#: src/admin.php:
|
1469 |
msgid "Backup Contents And Schedule"
|
1470 |
msgstr ""
|
1471 |
|
@@ -1473,142 +1566,136 @@ msgstr ""
|
|
1473 |
msgid "Premium / Extensions"
|
1474 |
msgstr ""
|
1475 |
|
1476 |
-
#: src/admin.php:
|
1477 |
msgid "Sufficient information about the in-progress restoration operation could not be found."
|
1478 |
msgstr ""
|
1479 |
|
1480 |
-
#: src/addons/morefiles.php:55, src/admin.php:
|
1481 |
msgctxt "(verb)"
|
1482 |
msgid "Download"
|
1483 |
msgstr ""
|
1484 |
|
1485 |
-
#: src/admin.php:
|
1486 |
msgid "You have chosen to backup files, but no file entities have been selected"
|
1487 |
msgstr ""
|
1488 |
|
1489 |
-
#: src/admin.php:
|
1490 |
msgid "Extensions"
|
1491 |
msgstr "Extensions"
|
1492 |
|
1493 |
-
#: src/admin.php:
|
1494 |
msgid "Advanced Tools"
|
1495 |
msgstr ""
|
1496 |
|
1497 |
-
#: src/addons/googlecloud.php:
|
1498 |
msgid "Bucket location"
|
1499 |
msgstr ""
|
1500 |
|
1501 |
-
#: src/addons/googlecloud.php:
|
1502 |
msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
|
1503 |
msgstr ""
|
1504 |
|
1505 |
-
#: src/addons/googlecloud.php:
|
1506 |
msgid "This setting applies only when a new bucket is being created."
|
1507 |
msgstr ""
|
1508 |
|
1509 |
-
#: src/addons/googlecloud.php:
|
1510 |
msgid "You must use a bucket name that is unique, for all %s users."
|
1511 |
msgstr ""
|
1512 |
|
1513 |
-
#: src/addons/googlecloud.php:
|
1514 |
msgid "Do not confuse %s with %s - they are separate things."
|
1515 |
msgstr ""
|
1516 |
|
1517 |
-
#: src/addons/googlecloud.php:
|
1518 |
msgid "You do not have access to this bucket"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
-
#: src/addons/googlecloud.php:
|
1522 |
-
#: src/addons/googlecloud.php:
|
1523 |
msgid "Western Europe"
|
1524 |
msgstr ""
|
1525 |
|
1526 |
-
#: src/addons/googlecloud.php:
|
1527 |
msgid "Eastern Asia-Pacific"
|
1528 |
msgstr ""
|
1529 |
|
1530 |
-
#: src/addons/googlecloud.php:
|
1531 |
msgid "Western United States"
|
1532 |
msgstr ""
|
1533 |
|
1534 |
-
#: src/addons/googlecloud.php:
|
1535 |
msgid "Eastern United States"
|
1536 |
msgstr ""
|
1537 |
|
1538 |
-
#: src/addons/googlecloud.php:
|
1539 |
msgid " Eastern United States"
|
1540 |
msgstr ""
|
1541 |
|
1542 |
-
#: src/addons/googlecloud.php:
|
1543 |
msgid "Central United States"
|
1544 |
msgstr ""
|
1545 |
|
1546 |
-
#: src/addons/googlecloud.php:
|
1547 |
msgid "European Union"
|
1548 |
msgstr ""
|
1549 |
|
1550 |
-
#: src/addons/googlecloud.php:
|
1551 |
msgid "Asia Pacific"
|
1552 |
msgstr ""
|
1553 |
|
1554 |
-
#: src/addons/googlecloud.php:
|
1555 |
-
#: src/addons/googlecloud.php:
|
1556 |
msgid "multi-region location"
|
1557 |
msgstr ""
|
1558 |
|
1559 |
-
#: src/addons/googlecloud.php:
|
1560 |
msgid "United States"
|
1561 |
msgstr ""
|
1562 |
|
1563 |
-
#: src/addons/googlecloud.php:
|
1564 |
msgid "Nearline"
|
1565 |
msgstr ""
|
1566 |
|
1567 |
-
#: src/addons/googlecloud.php:
|
1568 |
msgid "Durable reduced availability"
|
1569 |
msgstr ""
|
1570 |
|
1571 |
-
#: src/addons/googlecloud.php:
|
|
|
1572 |
msgid "Standard"
|
1573 |
msgstr ""
|
1574 |
|
1575 |
-
#: src/addons/azure.php:
|
1576 |
msgid "container"
|
1577 |
msgstr ""
|
1578 |
|
1579 |
-
#: src/addons/azure.php:
|
1580 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
1581 |
msgstr ""
|
1582 |
|
1583 |
-
#: src/addons/azure.php:
|
1584 |
msgid "optional"
|
1585 |
msgstr ""
|
1586 |
|
1587 |
-
#: src/addons/azure.php:
|
1588 |
-
msgid "Prefix"
|
1589 |
-
msgstr ""
|
1590 |
-
|
1591 |
-
#: src/addons/azure.php:571
|
1592 |
msgid "See Microsoft's guidelines on container naming by following this link."
|
1593 |
msgstr ""
|
1594 |
|
1595 |
-
#: src/addons/azure.php:
|
1596 |
msgid "Enter the path of the %s you wish to use here."
|
1597 |
msgstr ""
|
1598 |
|
1599 |
-
#: src/addons/azure.php:
|
1600 |
msgid "This is not your Azure login - see the instructions if needing more guidance."
|
1601 |
msgstr ""
|
1602 |
|
1603 |
-
#: src/addons/azure.php:
|
1604 |
-
|
1605 |
-
msgstr ""
|
1606 |
-
|
1607 |
-
#: src/addons/azure.php:559, src/addons/azure.php:563
|
1608 |
msgid "Azure"
|
1609 |
msgstr ""
|
1610 |
|
1611 |
-
#: src/addons/azure.php:
|
1612 |
msgid "Create Azure credentials in your Azure developer console."
|
1613 |
msgstr ""
|
1614 |
|
@@ -1620,23 +1707,23 @@ msgstr ""
|
|
1620 |
msgid "Could not access container"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
-
#: src/class-updraftplus.php:
|
1624 |
msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
|
1625 |
msgstr ""
|
1626 |
|
1627 |
-
#: src/backup.php:
|
1628 |
msgid "the options table was not found"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
-
#: src/backup.php:
|
1632 |
msgid "no options or sitemeta table was found"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
-
#: src/backup.php:
|
1636 |
msgid "The database backup appears to have failed"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
-
#: src/backup.php:
|
1640 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
1641 |
msgstr ""
|
1642 |
|
@@ -1648,39 +1735,39 @@ msgstr ""
|
|
1648 |
msgid "Not installed"
|
1649 |
msgstr "لم يتم التثبيت"
|
1650 |
|
1651 |
-
#: src/addons/googlecloud.php:
|
1652 |
msgid "Storage class"
|
1653 |
msgstr ""
|
1654 |
|
1655 |
-
#: src/addons/googlecloud.php:
|
1656 |
msgid "See Google's guidelines on bucket naming by following this link."
|
1657 |
msgstr ""
|
1658 |
|
1659 |
-
#: src/addons/googlecloud.php:
|
1660 |
msgid "Enter the name of the %s bucket you wish to use here."
|
1661 |
msgstr ""
|
1662 |
|
1663 |
-
#: src/addons/googlecloud.php:
|
1664 |
msgid "Bucket"
|
1665 |
msgstr ""
|
1666 |
|
1667 |
-
#: src/addons/googlecloud.php:
|
1668 |
msgid "Otherwise, you can leave it blank."
|
1669 |
msgstr ""
|
1670 |
|
1671 |
-
#: src/addons/googlecloud.php:
|
1672 |
msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
|
1673 |
msgstr ""
|
1674 |
|
1675 |
-
#: src/addons/googlecloud.php:
|
1676 |
msgid "Enter the ID of the %s project you wish to use here."
|
1677 |
msgstr ""
|
1678 |
|
1679 |
-
#: src/addons/googlecloud.php:
|
1680 |
msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
|
1681 |
msgstr ""
|
1682 |
|
1683 |
-
#: src/addons/googlecloud.php:
|
1684 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
1685 |
msgstr ""
|
1686 |
|
@@ -1688,31 +1775,31 @@ msgstr ""
|
|
1688 |
msgid "Project ID"
|
1689 |
msgstr ""
|
1690 |
|
1691 |
-
#: src/addons/googlecloud.php:
|
1692 |
msgid "You must save and authenticate before you can test your settings."
|
1693 |
msgstr ""
|
1694 |
|
1695 |
-
#: src/addons/googlecloud.php:
|
1696 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
|
1697 |
msgstr ""
|
1698 |
|
1699 |
-
#: src/addons/googlecloud.php:
|
1700 |
-
#: src/addons/googlecloud.php:
|
1701 |
msgid "You do not have access to this bucket."
|
1702 |
msgstr ""
|
1703 |
|
1704 |
-
#: src/addons/googlecloud.php:
|
1705 |
-
#: src/addons/googlecloud.php:
|
1706 |
-
#: src/addons/googlecloud.php:
|
1707 |
-
#: src/addons/googlecloud.php:
|
1708 |
-
#: src/addons/googlecloud.php:
|
1709 |
-
#: src/addons/googlecloud.php:
|
1710 |
msgid "Google Cloud"
|
1711 |
msgstr ""
|
1712 |
|
1713 |
-
#: src/addons/googlecloud.php:
|
1714 |
-
#: src/addons/googlecloud.php:
|
1715 |
-
#: src/addons/googlecloud.php:
|
1716 |
msgid "%s Service Exception."
|
1717 |
msgstr ""
|
1718 |
|
@@ -1749,35 +1836,35 @@ msgstr ""
|
|
1749 |
msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
|
1750 |
msgstr ""
|
1751 |
|
1752 |
-
#: src/admin.php:
|
1753 |
msgid "Backup sets removed:"
|
1754 |
msgstr ""
|
1755 |
|
1756 |
-
#: src/admin.php:
|
1757 |
msgid "Processing..."
|
1758 |
msgstr ""
|
1759 |
|
1760 |
-
#: src/admin.php:
|
1761 |
msgid "For backups older than"
|
1762 |
msgstr ""
|
1763 |
|
1764 |
-
#: src/admin.php:
|
1765 |
msgid "week(s)"
|
1766 |
msgstr ""
|
1767 |
|
1768 |
-
#: src/admin.php:
|
1769 |
msgid "hour(s)"
|
1770 |
msgstr ""
|
1771 |
|
1772 |
-
#: src/admin.php:
|
1773 |
msgid "day(s)"
|
1774 |
msgstr ""
|
1775 |
|
1776 |
-
#: src/admin.php:
|
1777 |
msgid "in the month"
|
1778 |
msgstr ""
|
1779 |
|
1780 |
-
#: src/admin.php:
|
1781 |
msgid "day"
|
1782 |
msgstr ""
|
1783 |
|
@@ -1789,39 +1876,39 @@ msgstr ""
|
|
1789 |
msgid "Add an additional retention rule..."
|
1790 |
msgstr ""
|
1791 |
|
1792 |
-
#: src/restorer.php:
|
1793 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
1794 |
msgstr ""
|
1795 |
|
1796 |
-
#: src/restorer.php:
|
1797 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
1798 |
msgstr ""
|
1799 |
|
1800 |
-
#: src/methods/updraftvault.php:
|
1801 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
1802 |
msgstr ""
|
1803 |
|
1804 |
-
#: src/class-updraftplus.php:
|
1805 |
msgid "You must upgrade MySQL to be able to use this database."
|
1806 |
msgstr ""
|
1807 |
|
1808 |
-
#: src/class-updraftplus.php:
|
1809 |
msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
|
1810 |
msgstr ""
|
1811 |
|
1812 |
-
#: src/admin.php:
|
1813 |
msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
|
1814 |
msgstr ""
|
1815 |
|
1816 |
-
#: src/methods/updraftvault.php:
|
1817 |
msgid "Don't know your email address, or forgotten your password?"
|
1818 |
msgstr ""
|
1819 |
|
1820 |
-
#: src/methods/updraftvault.php:
|
1821 |
msgid "Enter your UpdraftPlus.Com email / password here to connect:"
|
1822 |
msgstr ""
|
1823 |
|
1824 |
-
#: src/methods/updraftvault.php:
|
1825 |
msgid "Read the FAQs here."
|
1826 |
msgstr ""
|
1827 |
|
@@ -1833,132 +1920,133 @@ msgstr ""
|
|
1833 |
msgid "Server-side encryption"
|
1834 |
msgstr ""
|
1835 |
|
1836 |
-
#: src/methods/updraftvault.php:
|
1837 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
1838 |
msgstr ""
|
1839 |
|
1840 |
-
#: src/admin.php:
|
1841 |
msgid "Go to the remote storage settings in order to connect."
|
1842 |
msgstr ""
|
1843 |
|
1844 |
-
#: src/admin.php:
|
1845 |
msgid "%s has been chosen for remote storage, but you are not currently connected."
|
1846 |
msgstr ""
|
1847 |
|
1848 |
-
#: src/methods/updraftvault.php:
|
1849 |
msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
|
1850 |
msgstr ""
|
1851 |
|
1852 |
-
#: src/admin.php:
|
1853 |
msgid "Update quota count"
|
1854 |
msgstr ""
|
1855 |
|
1856 |
-
#: src/admin.php:
|
1857 |
msgid "Counting..."
|
1858 |
msgstr ""
|
1859 |
|
1860 |
-
#: src/admin.php:
|
1861 |
msgid "Disconnecting..."
|
1862 |
msgstr ""
|
1863 |
|
1864 |
-
#: src/admin.php:
|
1865 |
msgid "Connecting..."
|
1866 |
msgstr ""
|
1867 |
|
1868 |
-
#: src/methods/updraftvault.php:
|
1869 |
msgid "Refresh current status"
|
1870 |
msgstr ""
|
1871 |
|
1872 |
-
#: src/methods/updraftvault.php:
|
1873 |
-
#: src/methods/updraftvault.php:
|
1874 |
msgid "Get more quota"
|
1875 |
msgstr ""
|
1876 |
|
1877 |
-
#: src/methods/updraftvault.php:
|
1878 |
-
#: src/methods/updraftvault.php:
|
1879 |
msgid "Current use:"
|
1880 |
msgstr ""
|
1881 |
|
1882 |
-
#: src/methods/updraftvault.php:
|
1883 |
msgid "You can get more quota here"
|
1884 |
msgstr ""
|
1885 |
|
1886 |
-
#: src/methods/updraftvault.php:
|
1887 |
msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
|
1888 |
msgstr ""
|
1889 |
|
1890 |
-
#: src/admin.php:
|
|
|
1891 |
msgid "Disconnect"
|
1892 |
msgstr ""
|
1893 |
|
1894 |
-
#: src/methods/updraftvault.php:
|
1895 |
msgid "Quota:"
|
1896 |
msgstr ""
|
1897 |
|
1898 |
-
#: src/methods/updraftvault.php:
|
1899 |
msgid "Vault owner"
|
1900 |
msgstr ""
|
1901 |
|
1902 |
-
#: src/methods/updraftvault.php:
|
1903 |
msgid "Well done - there's nothing more needed to set up."
|
1904 |
msgstr ""
|
1905 |
|
1906 |
-
#: src/methods/updraftvault.php:
|
1907 |
msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
|
1908 |
msgstr ""
|
1909 |
|
1910 |
-
#: src/methods/updraftvault.php:
|
1911 |
msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
|
1912 |
msgstr ""
|
1913 |
|
1914 |
-
#: src/methods/updraftvault.php:
|
1915 |
msgid "Go here for help"
|
1916 |
msgstr ""
|
1917 |
|
1918 |
-
#: src/methods/updraftvault.php:
|
1919 |
msgid "E-mail"
|
1920 |
msgstr ""
|
1921 |
|
1922 |
-
#: src/central/bootstrap.php:
|
1923 |
-
#: src/methods/updraftvault.php:
|
1924 |
msgid "Back..."
|
1925 |
msgstr ""
|
1926 |
|
1927 |
-
#: src/methods/updraftvault.php:
|
1928 |
msgid "Subscriptions can be cancelled at any time."
|
1929 |
msgstr ""
|
1930 |
|
1931 |
-
#: src/methods/updraftvault.php:
|
1932 |
-
#: src/methods/updraftvault.php:
|
1933 |
msgid "%s per quarter"
|
1934 |
msgstr ""
|
1935 |
|
1936 |
-
#: src/central/bootstrap.php:
|
1937 |
-
#: src/methods/updraftvault.php:
|
1938 |
msgid "Read more about it here."
|
1939 |
msgstr ""
|
1940 |
|
1941 |
-
#: src/methods/updraftvault.php:
|
1942 |
msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
|
1943 |
msgstr ""
|
1944 |
|
1945 |
-
#: src/methods/updraftvault.php:
|
1946 |
msgid "Already purchased space?"
|
1947 |
msgstr ""
|
1948 |
|
1949 |
-
#: src/methods/updraftvault.php:
|
1950 |
msgid "Show the options"
|
1951 |
msgstr ""
|
1952 |
|
1953 |
-
#: src/methods/updraftvault.php:
|
1954 |
msgid "First time user?"
|
1955 |
msgstr ""
|
1956 |
|
1957 |
-
#: src/methods/updraftvault.php:
|
1958 |
msgid "Press a button to get started."
|
1959 |
msgstr ""
|
1960 |
|
1961 |
-
#: src/methods/updraftvault.php:
|
1962 |
msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
|
1963 |
msgstr ""
|
1964 |
|
@@ -1979,11 +2067,11 @@ msgid "Updraft Vault"
|
|
1979 |
msgstr ""
|
1980 |
|
1981 |
#: src/addons/azure.php:388, src/addons/backblaze.php:464,
|
1982 |
-
#: src/addons/googlecloud.php:
|
1983 |
msgid "Delete failed:"
|
1984 |
msgstr ""
|
1985 |
|
1986 |
-
#: src/backup.php:
|
1987 |
msgid "The zip engine returned the message: %s."
|
1988 |
msgstr ""
|
1989 |
|
@@ -2003,75 +2091,75 @@ msgstr ""
|
|
2003 |
msgid "Allow download"
|
2004 |
msgstr ""
|
2005 |
|
2006 |
-
#: src/addons/migrator.php:
|
2007 |
msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
|
2008 |
msgstr ""
|
2009 |
|
2010 |
-
#: src/addons/migrator.php:
|
2011 |
msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
|
2012 |
msgstr ""
|
2013 |
|
2014 |
-
#: src/addons/migrator.php:
|
2015 |
msgid "Existing keys"
|
2016 |
msgstr ""
|
2017 |
|
2018 |
-
#: src/addons/migrator.php:
|
2019 |
msgid "No keys to allow remote sites to connect have yet been created."
|
2020 |
msgstr ""
|
2021 |
|
2022 |
-
#: src/addons/migrator.php:
|
2023 |
msgid "Your new key:"
|
2024 |
msgstr ""
|
2025 |
|
2026 |
-
#: src/addons/migrator.php:
|
2027 |
msgid "To allow another site to send a backup to this site, create a key, and then press the 'Migrate' button on the sending site, and copy-and-paste the key there."
|
2028 |
msgstr ""
|
2029 |
|
2030 |
-
#: src/addons/migrator.php:
|
2031 |
msgid "So, to get the key for the remote site, open the 'Migrate' window on that site, scroll down, and you can create one there."
|
2032 |
msgstr ""
|
2033 |
|
2034 |
-
#: src/addons/migrator.php:
|
2035 |
msgid "Keys for this site are created in the section below the one you just pressed in."
|
2036 |
msgstr ""
|
2037 |
|
2038 |
-
#: src/addons/migrator.php:
|
2039 |
msgid "You must copy and paste this key now - it cannot be shown again."
|
2040 |
msgstr ""
|
2041 |
|
2042 |
-
#: src/
|
11 |
"Language: ar\n"
|
12 |
"Project-Id-Version: UpdraftPlus\n"
|
13 |
|
14 |
+
#: src/addons/googlecloud.php:979, src/addons/googlecloud.php:980,
|
15 |
+
#: src/addons/googlecloud.php:981
|
16 |
+
msgid "Western Europe %s"
|
17 |
+
msgstr ""
|
18 |
+
|
19 |
+
#: src/addons/googlecloud.php:978
|
20 |
+
msgid "South-east Australia %s"
|
21 |
+
msgstr ""
|
22 |
+
|
23 |
+
#: src/addons/googlecloud.php:977
|
24 |
+
msgid "South-east Asia %s"
|
25 |
+
msgstr ""
|
26 |
+
|
27 |
+
#: src/addons/googlecloud.php:976
|
28 |
+
msgid "North-east Asia %s"
|
29 |
+
msgstr ""
|
30 |
+
|
31 |
+
#: src/addons/googlecloud.php:975
|
32 |
+
msgid "Eastern Asia-Pacific %s"
|
33 |
+
msgstr ""
|
34 |
+
|
35 |
+
#: src/addons/googlecloud.php:974
|
36 |
+
msgid "Western United States %s"
|
37 |
+
msgstr ""
|
38 |
+
|
39 |
+
#: src/addons/googlecloud.php:972, src/addons/googlecloud.php:973
|
40 |
+
msgid "Eastern United States %s"
|
41 |
+
msgstr ""
|
42 |
+
|
43 |
+
#: src/addons/googlecloud.php:970
|
44 |
+
msgid "European Union (multi-region location)"
|
45 |
+
msgstr ""
|
46 |
+
|
47 |
+
#: src/addons/googlecloud.php:969
|
48 |
+
msgid "Asia Pacific (multi-region location)"
|
49 |
+
msgstr ""
|
50 |
+
|
51 |
+
#: src/addons/googlecloud.php:968
|
52 |
+
msgid "United States (multi-region location)"
|
53 |
+
msgstr ""
|
54 |
+
|
55 |
+
#: src/addons/azure.php:552
|
56 |
+
msgid "%s Prefix"
|
57 |
+
msgstr ""
|
58 |
+
|
59 |
+
#: src/addons/azure.php:547
|
60 |
+
msgid "%s Container"
|
61 |
+
msgstr ""
|
62 |
+
|
63 |
+
#: src/addons/azure.php:542
|
64 |
+
msgid "%s Key"
|
65 |
+
msgstr ""
|
66 |
+
|
67 |
+
#: src/addons/azure.php:538
|
68 |
+
msgid "%s Account Name"
|
69 |
+
msgstr ""
|
70 |
+
|
71 |
+
#: src/addons/googlecloud.php:623
|
72 |
+
msgid "But no %s settings were found. Please complete all fields in %s settings and save the settings."
|
73 |
+
msgstr ""
|
74 |
+
|
75 |
+
#: src/addons/googlecloud.php:621
|
76 |
+
msgid "But no bucket was defined, so backups may not complete. Please enter a bucket name in the %s settings and save settings."
|
77 |
+
msgstr ""
|
78 |
+
|
79 |
+
#: src/includes/updraftplus-notices.php:202
|
80 |
+
msgid "Find out more."
|
81 |
+
msgstr ""
|
82 |
+
|
83 |
+
#: src/includes/updraftplus-notices.php:202
|
84 |
+
msgid "From the team behind UpdraftPlus."
|
85 |
+
msgstr ""
|
86 |
+
|
87 |
+
#: src/central/bootstrap.php:506
|
88 |
+
msgid "URL for the site of your UpdraftCentral dashboard"
|
89 |
+
msgstr ""
|
90 |
+
|
91 |
+
#: src/central/bootstrap.php:504
|
92 |
+
msgid "Enter the URL where your self-hosted install of UpdraftCentral is located:"
|
93 |
+
msgstr ""
|
94 |
+
|
95 |
+
#: src/central/bootstrap.php:501
|
96 |
+
msgid "A website where you have installed %s"
|
97 |
+
msgstr ""
|
98 |
+
|
99 |
+
#: src/central/bootstrap.php:499
|
100 |
+
msgid "Self-hosted dashboard"
|
101 |
+
msgstr ""
|
102 |
+
|
103 |
+
#: src/central/bootstrap.php:241
|
104 |
+
msgid "At your UpdraftCentral dashboard you should press the \"Add Site\" button then paste the key in the input box."
|
105 |
+
msgstr ""
|
106 |
+
|
107 |
+
#: src/addons/migrator.php:838
|
108 |
+
msgid "Your .htaccess has an old site reference on line number %s. You should remove it manually."
|
109 |
+
msgid_plural "Your .htaccess has an old site references on line numbers %s. You should remove them manually."
|
110 |
+
msgstr[0] ""
|
111 |
+
msgstr[1] ""
|
112 |
+
msgstr[2] ""
|
113 |
+
msgstr[3] ""
|
114 |
+
msgstr[4] ""
|
115 |
+
msgstr[5] ""
|
116 |
+
|
117 |
+
#: src/restorer.php:1878
|
118 |
msgid "Requested table character set (%s) is not present - changing to %s."
|
119 |
msgstr ""
|
120 |
|
121 |
+
#: src/class-updraftplus.php:4528
|
122 |
msgid "Your chosen character set to use instead:"
|
123 |
msgstr ""
|
124 |
|
125 |
+
#: src/class-updraftplus.php:4521
|
126 |
msgid "You can choose another suitable character set instead and continue with the restoration at your own risk."
|
127 |
msgstr ""
|
128 |
|
129 |
+
#: src/class-updraftplus.php:4521
|
130 |
msgid "The database server that this WordPress site is running on doesn't support the character set (%s) which you are trying to import."
|
131 |
msgid_plural "The database server that this WordPress site is running on doesn't support the character sets (%s) which you are trying to import."
|
132 |
msgstr[0] ""
|
136 |
msgstr[4] ""
|
137 |
msgstr[5] ""
|
138 |
|
139 |
+
#: src/central/bootstrap.php:584
|
140 |
msgid "Create another key"
|
141 |
msgstr ""
|
142 |
|
143 |
+
#: src/central/bootstrap.php:513
|
144 |
msgid "UpdraftCentral dashboard connection details"
|
145 |
msgstr ""
|
146 |
|
147 |
+
#: src/central/bootstrap.php:507
|
148 |
msgid "Next"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: src/central/bootstrap.php:493
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
msgid "an account"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: src/central/bootstrap.php:493
|
156 |
msgid "i.e. if you have %s there"
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: src/central/bootstrap.php:482
|
160 |
msgid "Connect this site to an UpdraftCentral dashboard found at..."
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: src/central/bootstrap.php:456
|
164 |
msgid "Manage existing keys (%d)..."
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: src/central/bootstrap.php:406
|
168 |
msgid "There are no UpdraftCentral dashboards that can currently control this site."
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: src/central/bootstrap.php:243
|
172 |
msgid "You can now control this site via your UpdraftCentral dashboard at %s."
|
173 |
msgstr ""
|
174 |
|
175 |
+
#: src/central/bootstrap.php:241
|
176 |
msgid "Detailed instructions for this can be found at %s"
|
177 |
msgstr ""
|
178 |
|
179 |
+
#: src/central/bootstrap.php:241
|
180 |
msgid "You now need to copy the key below and enter it at your %s."
|
181 |
msgstr ""
|
182 |
|
183 |
+
#: src/admin.php:770
|
184 |
msgid "Please enter a valid URL e.g http://example.com"
|
185 |
msgstr ""
|
186 |
|
232 |
msgid "Account ID"
|
233 |
msgstr ""
|
234 |
|
235 |
+
#: src/class-updraftplus.php:4399
|
236 |
msgid "As long as your web hosting allows http (i.e. non-SSL access) or will forward requests to https (which is almost always the case), this is no problem. If that is not yet set up, then you should set it up, or use %s so that the non-https links are automatically replaced."
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: src/class-updraftplus.php:4397, src/class-updraftplus.php:4399
|
240 |
msgid "the migrator add-on"
|
241 |
msgstr ""
|
242 |
|
243 |
+
#: src/class-updraftplus.php:4397
|
244 |
msgid "This restoration will work if you still have an SSL certificate (i.e. can use https) to access the site. Otherwise, you will want to use %s to search/replace the site address so that the site can be visited without https."
|
245 |
msgstr ""
|
246 |
|
247 |
+
#: src/class-updraftplus.php:4395
|
248 |
msgid "This backup set is of this site, but at the time of the backup you were using %s, whereas the site now uses %s."
|
249 |
msgstr ""
|
250 |
|
251 |
+
#: src/class-updraftplus.php:4392
|
252 |
msgid "The website address in the backup set (%s) is slightly different from that of the site now (%s). This is not expected to be a problem for restoring the site, as long as visits to the former address still reach the site."
|
253 |
msgstr ""
|
254 |
|
255 |
+
#: src/methods/googledrive.php:1162
|
256 |
msgid "To de-authorize UpdraftPlus (all sites) from accessing your Google Drive, follow this link to your Google account settings."
|
257 |
msgstr ""
|
258 |
|
259 |
+
#: src/methods/googledrive.php:1159
|
260 |
msgid "Follow this link to remove this site's settings for %s."
|
261 |
msgstr ""
|
262 |
|
264 |
msgid "UpdraftPlus debug mode is on: detailed debugging data follows."
|
265 |
msgstr ""
|
266 |
|
267 |
+
#: src/admin.php:751
|
268 |
msgid "Error: The chosen file is corrupt. Please choose a valid UpdraftPlus export file."
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: src/admin.php:1338, src/admin.php:4160, src/backup.php:2017,
|
272 |
+
#: src/class-updraftplus.php:2147, src/class-updraftplus.php:2212,
|
273 |
+
#: src/class-updraftplus.php:2346
|
274 |
msgid "A PHP fatal error (%s) has occurred: %s"
|
275 |
msgstr ""
|
276 |
|
277 |
+
#: src/admin.php:1329, src/admin.php:4146, src/backup.php:2008,
|
278 |
+
#: src/class-updraftplus.php:2138, src/class-updraftplus.php:2205,
|
279 |
+
#: src/class-updraftplus.php:2339
|
280 |
msgid "A PHP exception (%s) has occurred: %s"
|
281 |
msgstr ""
|
282 |
|
283 |
+
#: src/addons/googlecloud.php:58
|
284 |
msgid "South-east Australia"
|
285 |
msgstr ""
|
286 |
|
287 |
+
#: src/addons/googlecloud.php:57
|
288 |
msgid "South-east Asia"
|
289 |
msgstr ""
|
290 |
|
291 |
+
#: src/addons/googlecloud.php:56
|
292 |
msgid "North-east Asia"
|
293 |
msgstr ""
|
294 |
|
320 |
msgid "Select Files"
|
321 |
msgstr ""
|
322 |
|
323 |
+
#: src/methods/cloudfiles.php:487
|
324 |
msgid "Rackspace Storage Region"
|
325 |
msgstr ""
|
326 |
|
332 |
msgid "Instant and secure logon with a wave of your phone."
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: src/backup.php:2021
|
336 |
msgid "As previously warned (see: %s), encryption is no longer a feature of the free edition of UpdraftPlus"
|
337 |
msgstr ""
|
338 |
|
339 |
+
#: src/admin.php:4688
|
340 |
msgid "Value"
|
341 |
msgstr ""
|
342 |
|
343 |
+
#: src/admin.php:1604
|
344 |
msgid "Did not know how to delete from this cloud service."
|
345 |
msgstr ""
|
346 |
|
347 |
+
#: src/addons/sftp.php:700
|
348 |
msgid "Encrypted login failed; trying non-encrypted"
|
349 |
msgstr ""
|
350 |
|
352 |
msgid "__Check this box to use Amazon's server-side encryption"
|
353 |
msgstr ""
|
354 |
|
355 |
+
#: src/addons/azure.php:529
|
356 |
msgid "You must add the following as the authorised redirect URI in your Azure console (under \"API Settings\") when asked"
|
357 |
msgstr ""
|
358 |
|
360 |
msgid "Stored at: %s"
|
361 |
msgstr ""
|
362 |
|
363 |
+
#: src/methods/cloudfiles.php:507
|
364 |
msgid "Cloud Files"
|
365 |
msgstr ""
|
366 |
|
367 |
+
#: src/admin.php:4501
|
368 |
msgid "Your settings failed to save. Please refresh the settings page and try again"
|
369 |
msgstr ""
|
370 |
|
371 |
+
#: src/admin.php:4460
|
372 |
msgid "UpdraftPlus seems to have been updated to version (%s), which is different to the version running when this settings page was loaded. Please reload the settings page before trying to save settings."
|
373 |
msgstr ""
|
374 |
|
385 |
msgid "Extra database"
|
386 |
msgstr ""
|
387 |
|
388 |
+
#: src/admin.php:3720
|
389 |
msgid "Press here to download or browse"
|
390 |
msgstr ""
|
391 |
|
392 |
+
#: src/admin.php:1117, src/admin.php:1127
|
393 |
msgid "Error: invalid path"
|
394 |
msgstr ""
|
395 |
|
396 |
+
#: src/admin.php:941
|
397 |
msgid "An error occurred when fetching storage module options: "
|
398 |
msgstr ""
|
399 |
|
400 |
+
#: src/admin.php:767
|
401 |
msgid "Loading log file"
|
402 |
msgstr ""
|
403 |
|
404 |
+
#: src/admin.php:766
|
405 |
msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: src/admin.php:765
|
409 |
msgid "Search"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: src/admin.php:764
|
413 |
msgid "Select a file to view information about it"
|
414 |
msgstr ""
|
415 |
|
416 |
+
#: src/admin.php:763
|
417 |
msgid "Browsing zip file"
|
418 |
msgstr ""
|
419 |
|
420 |
+
#: src/admin.php:732
|
421 |
msgid "With UpdraftPlus Premium, you can directly download individual files from here."
|
422 |
msgstr ""
|
423 |
|
424 |
+
#: src/admin.php:680
|
425 |
msgid "Browse contents"
|
426 |
msgstr ""
|
427 |
|
428 |
+
#: src/restorer.php:1699
|
429 |
msgid "Skipped tables:"
|
430 |
msgstr ""
|
431 |
|
432 |
+
#: src/class-updraftplus.php:4579
|
433 |
msgid "This database backup has the following WordPress tables excluded: %s"
|
434 |
msgstr ""
|
435 |
|
436 |
+
#: src/admin.php:2615
|
437 |
msgid "With UpdraftPlus Premium, you can choose to backup non-WordPress tables, backup only specified tables, and backup other databases too."
|
438 |
msgstr ""
|
439 |
|
440 |
+
#: src/admin.php:2615
|
441 |
msgid "All WordPress tables will be backed up."
|
442 |
msgstr ""
|
443 |
|
444 |
+
#: src/admin.php:762
|
445 |
msgid "Further information may be found in the browser JavaScript console, and the server PHP error logs."
|
446 |
msgstr ""
|
447 |
|
448 |
+
#: src/admin.php:762
|
449 |
msgid "That you are attempting to upload a zip file previously created by UpdraftPlus."
|
450 |
msgstr ""
|
451 |
|
452 |
+
#: src/admin.php:762
|
453 |
msgid "The available memory on the server."
|
454 |
msgstr ""
|
455 |
|
456 |
+
#: src/admin.php:762
|
457 |
msgid "Any settings in your .htaccess or web.config file that affects the maximum upload or post size."
|
458 |
msgstr ""
|
459 |
|
460 |
+
#: src/admin.php:762
|
461 |
msgid "The file failed to upload. Please check the following:"
|
462 |
msgstr ""
|
463 |
|
464 |
+
#: src/admin.php:761
|
465 |
msgid "HTTP code:"
|
466 |
msgstr ""
|
467 |
|
468 |
+
#: src/admin.php:657
|
469 |
msgid "You have chosen to backup a database, but no tables have been selected"
|
470 |
msgstr ""
|
471 |
|
761 |
msgid "Apache modules"
|
762 |
msgstr ""
|
763 |
|
764 |
+
#: src/includes/updraftplus-notices.php:264
|
765 |
msgid "Summer sale - 20% off UpdraftPlus Premium until July 31st"
|
766 |
msgstr ""
|
767 |
|
768 |
+
#: src/includes/updraftplus-notices.php:251
|
769 |
msgid "Spring sale - 20% off UpdraftPlus Premium until April 31st"
|
770 |
msgstr ""
|
771 |
|
772 |
+
#: src/includes/updraftplus-notices.php:238
|
773 |
msgid "Happy New Year - 20% off UpdraftPlus Premium until January 1st"
|
774 |
msgstr ""
|
775 |
|
776 |
+
#: src/includes/updraftplus-notices.php:225
|
777 |
msgid "Christmas sale - 20% off UpdraftPlus Premium until December 25th"
|
778 |
msgstr ""
|
779 |
|
780 |
+
#: src/includes/updraftplus-notices.php:213,
|
781 |
+
#: src/includes/updraftplus-notices.php:226,
|
782 |
+
#: src/includes/updraftplus-notices.php:239,
|
783 |
+
#: src/includes/updraftplus-notices.php:252,
|
784 |
+
#: src/includes/updraftplus-notices.php:265
|
785 |
msgid "To benefit, use this discount code:"
|
786 |
msgstr ""
|
787 |
|
788 |
+
#: src/includes/updraftplus-notices.php:212
|
789 |
msgid "Black Friday - 20% off UpdraftPlus Premium until November 30th"
|
790 |
msgstr ""
|
791 |
|
929 |
msgid "Export / import settings"
|
930 |
msgstr ""
|
931 |
|
932 |
+
#: src/restorer.php:1887
|
933 |
msgid "Processing table (%s)"
|
934 |
msgstr ""
|
935 |
|
936 |
+
#: src/restorer.php:1665
|
937 |
msgid "Backup of: %s"
|
938 |
msgstr ""
|
939 |
|
940 |
+
#: src/methods/googledrive.php:252
|
941 |
msgid "The client has been deleted from the Google Drive API console. Please create a new Google Drive project and reconnect with UpdraftPlus."
|
942 |
msgstr ""
|
943 |
|
944 |
+
#: src/methods/dropbox.php:589
|
945 |
msgid "%s de-authentication"
|
946 |
msgstr ""
|
947 |
|
948 |
+
#: src/methods/dropbox.php:530
|
949 |
msgid "You must add the following as the authorised redirect URI in your Dropbox console (under \"API Settings\") when asked"
|
950 |
msgstr ""
|
951 |
|
952 |
+
#: src/methods/dropbox.php:505
|
953 |
msgid "Follow this link to deauthenticate with %s."
|
954 |
msgstr ""
|
955 |
|
956 |
+
#: src/central/bootstrap.php:579
|
957 |
msgid "UpdraftCentral enables control of your WordPress sites (including management of backups and updates) from a central dashboard."
|
958 |
msgstr ""
|
959 |
|
960 |
+
#: src/backup.php:1615
|
961 |
msgid "If not, you will need to either remove data from this table, or contact your hosting company to request more resources."
|
962 |
msgstr ""
|
963 |
|
965 |
msgid "You have selected a remote storage option which has an authorization step to complete:"
|
966 |
msgstr ""
|
967 |
|
968 |
+
#: src/admin.php:1680
|
969 |
msgid "Remote files deleted:"
|
970 |
msgstr ""
|
971 |
|
972 |
+
#: src/admin.php:1679
|
973 |
msgid "Local files deleted:"
|
974 |
msgstr ""
|
975 |
|
976 |
+
#: src/admin.php:989, src/admin.php:998, src/admin.php:1011, src/admin.php:1020
|
977 |
msgid "Follow this link to authorize access to your %s account (you will not be able to back up to %s without it)."
|
978 |
msgstr ""
|
979 |
|
980 |
+
#: src/admin.php:760
|
981 |
msgid "remote files deleted"
|
982 |
msgstr ""
|
983 |
|
984 |
+
#: src/admin.php:758
|
985 |
msgid "Complete"
|
986 |
msgstr ""
|
987 |
|
988 |
+
#: src/admin.php:757
|
989 |
msgid "Do you want to carry out the import?"
|
990 |
msgstr ""
|
991 |
|
992 |
+
#: src/admin.php:756
|
993 |
msgid "Which was exported on:"
|
994 |
msgstr ""
|
995 |
|
996 |
+
#: src/admin.php:755
|
997 |
msgid "This will import data from:"
|
998 |
msgstr ""
|
999 |
|
1000 |
+
#: src/admin.php:754
|
1001 |
msgid "Importing..."
|
1002 |
msgstr ""
|
1003 |
|
1004 |
+
#: src/admin.php:750
|
1005 |
msgid "You have not yet selected a file to import."
|
1006 |
msgstr ""
|
1007 |
|
1008 |
+
#: src/admin.php:734
|
1009 |
msgid "Your export file will be of your displayed settings, not your saved ones."
|
1010 |
msgstr ""
|
1011 |
|
1012 |
+
#: src/admin.php:87
|
1013 |
msgid "template not found"
|
1014 |
msgstr ""
|
1015 |
|
1017 |
msgid "US East (Ohio)"
|
1018 |
msgstr ""
|
1019 |
|
1020 |
+
#: src/addons/onedrive.php:949
|
1021 |
msgid "This site uses a URL which is either non-HTTPS, or is localhost or 127.0.0.1 URL. As such, you must use the main %s %s App to authenticate with your account."
|
1022 |
msgstr ""
|
1023 |
|
1024 |
+
#: src/addons/onedrive.php:635
|
1025 |
msgid "Account is not authorized (%s)."
|
1026 |
msgstr ""
|
1027 |
|
1028 |
+
#: src/addons/onedrive.php:596, src/udaddons/updraftplus-addons.php:872
|
1029 |
msgid "Your IP address:"
|
1030 |
msgstr ""
|
1031 |
|
1032 |
+
#: src/addons/onedrive.php:596, src/udaddons/updraftplus-addons.php:872,
|
1033 |
+
#: src/udaddons/updraftplus-addons.php:886
|
1034 |
msgid "To remove any block, please go here."
|
1035 |
msgstr ""
|
1036 |
|
1037 |
+
#: src/addons/onedrive.php:581, src/udaddons/updraftplus-addons.php:857
|
1038 |
msgid "An error response was received; HTTP code:"
|
1039 |
msgstr ""
|
1040 |
|
1041 |
+
#: src/includes/class-commands.php:336
|
1042 |
msgid "%s add-on not found"
|
1043 |
msgstr ""
|
1044 |
|
1050 |
msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time"
|
1051 |
msgstr ""
|
1052 |
|
1053 |
+
#: src/admin.php:2429
|
1054 |
msgid "To fix this problem go here."
|
1055 |
msgstr ""
|
1056 |
|
1057 |
+
#: src/admin.php:2429
|
1058 |
msgid "OptimizePress 2.0 encodes its contents, so search/replace does not work."
|
1059 |
msgstr ""
|
1060 |
|
1061 |
+
#: src/admin.php:718
|
1062 |
msgid "your PHP install lacks the openssl module; as a result, this can take minutes; if nothing has happened by then, then you should either try a smaller key size, or ask your web hosting company how to enable this PHP module on your setup."
|
1063 |
msgstr ""
|
1064 |
|
1065 |
+
#: src/addons/webdav.php:121
|
1066 |
msgid "Path"
|
1067 |
msgstr ""
|
1068 |
|
1069 |
+
#: src/addons/webdav.php:116
|
1070 |
msgid "Leave this blank to use the default (80 for webdav, 443 for webdavs)"
|
1071 |
msgstr ""
|
1072 |
|
1073 |
+
#: src/addons/webdav.php:108
|
1074 |
msgid "Enter any path in the field below."
|
1075 |
msgstr ""
|
1076 |
|
1077 |
+
#: src/addons/webdav.php:108
|
1078 |
msgid "A host name cannot contain a slash."
|
1079 |
msgstr ""
|
1080 |
|
1081 |
+
#: src/addons/webdav.php:83
|
1082 |
msgid "Protocol (SSL or not)"
|
1083 |
msgstr ""
|
1084 |
|
1085 |
+
#: src/addons/webdav.php:78
|
1086 |
msgid "This WebDAV URL is generated by filling in the options below. If you do not know the details, then you will need to ask your WebDAV provider."
|
1087 |
msgstr ""
|
1088 |
|
1089 |
+
#: src/udaddons/updraftplus-addons.php:889
|
1090 |
msgid "No response data was received. This usually indicates a network connectivity issue (e.g. an outgoing firewall or overloaded network) between this site and UpdraftPlus.com."
|
1091 |
msgstr ""
|
1092 |
|
1093 |
+
#: src/methods/s3.php:1168
|
1094 |
msgid "The AWS access key looks to be wrong (valid %s access keys begin with \"AK\")"
|
1095 |
msgstr ""
|
1096 |
|
1114 |
msgid "FAQs"
|
1115 |
msgstr ""
|
1116 |
|
1117 |
+
#: src/central/bootstrap.php:535
|
1118 |
msgid "More information..."
|
1119 |
msgstr ""
|
1120 |
|
1121 |
+
#: src/central/bootstrap.php:533
|
1122 |
msgid "Use the alternative method for making a connection with the dashboard."
|
1123 |
msgstr ""
|
1124 |
|
1125 |
+
#: src/central/bootstrap.php:443
|
1126 |
msgid "Key size: %d bits"
|
1127 |
msgstr ""
|
1128 |
|
1129 |
+
#: src/central/bootstrap.php:438
|
1130 |
msgid "Public key was sent to:"
|
1131 |
msgstr ""
|
1132 |
|
1133 |
+
#: src/backup.php:2233
|
1134 |
msgid "Failed to open directory (check the file permissions and ownership): %s"
|
1135 |
msgstr ""
|
1136 |
|
1137 |
+
#: src/backup.php:2211
|
1138 |
msgid "%s: unreadable file - could not be backed up (check the file permissions and ownership)"
|
1139 |
msgstr ""
|
1140 |
|
1141 |
+
#: src/addons/migrator.php:2286
|
1142 |
msgid "Create key"
|
1143 |
msgstr ""
|
1144 |
|
1145 |
+
#: src/addons/migrator.php:2283, src/central/bootstrap.php:527
|
1146 |
msgid "slower, strongest"
|
1147 |
msgstr ""
|
1148 |
|
1149 |
+
#: src/addons/migrator.php:2282, src/central/bootstrap.php:526
|
1150 |
msgid "recommended"
|
1151 |
msgstr "موصى به"
|
1152 |
|
1153 |
+
#: src/addons/migrator.php:2282, src/central/bootstrap.php:526
|
1154 |
msgid "%s bytes"
|
1155 |
msgstr ""
|
1156 |
|
1157 |
+
#: src/addons/migrator.php:2281, src/central/bootstrap.php:525
|
1158 |
msgid "faster (possibility for slow PHP installs)"
|
1159 |
msgstr ""
|
1160 |
|
1161 |
+
#: src/addons/migrator.php:2280, src/central/bootstrap.php:524
|
1162 |
msgid "easy to break, fastest"
|
1163 |
msgstr ""
|
1164 |
|
1165 |
+
#: src/addons/migrator.php:2280, src/addons/migrator.php:2281,
|
1166 |
+
#: src/addons/migrator.php:2283, src/central/bootstrap.php:524,
|
1167 |
+
#: src/central/bootstrap.php:525, src/central/bootstrap.php:527
|
1168 |
msgid "%s bits"
|
1169 |
msgstr ""
|
1170 |
|
1171 |
+
#: src/addons/migrator.php:2278, src/central/bootstrap.php:522
|
1172 |
msgid "Encryption key size:"
|
1173 |
msgstr ""
|
1174 |
|
1175 |
+
#: src/addons/migrator.php:2276
|
1176 |
msgid "Enter your chosen name"
|
1177 |
msgstr ""
|
1178 |
|
1179 |
+
#: src/addons/migrator.php:2275
|
1180 |
msgid "Create a key: give this key a unique name (e.g. indicate the site it is for), then press \"Create Key\":"
|
1181 |
msgstr ""
|
1182 |
|
1183 |
+
#: src/methods/googledrive.php:497
|
1184 |
msgid "Upload expected to fail: the %s limit for any single file is %s, whereas this file is %s GB (%d bytes)"
|
1185 |
msgstr ""
|
1186 |
|
1200 |
msgid "This backup archive is %s MB in size - the attempt to send this via email is likely to fail (few email servers allow attachments of this size). If so, you should switch to using a different remote storage method."
|
1201 |
msgstr ""
|
1202 |
|
1203 |
+
#: src/class-updraftplus.php:1754
|
1204 |
msgid "Size: %s MB"
|
1205 |
msgstr ""
|
1206 |
|
1212 |
msgid "Now"
|
1213 |
msgstr "الآن"
|
1214 |
|
1215 |
+
#: src/class-updraftplus.php:4411, src/restorer.php:1015
|
1216 |
msgid "You should enable %s to make any pretty permalinks (e.g. %s) work"
|
1217 |
msgstr ""
|
1218 |
|
1220 |
msgid "(tap on an icon to select or unselect)"
|
1221 |
msgstr ""
|
1222 |
|
1223 |
+
#: src/methods/updraftvault.php:310, src/methods/updraftvault.php:316,
|
1224 |
+
#: src/methods/updraftvault.php:322
|
1225 |
msgid "%s per year"
|
1226 |
msgstr ""
|
1227 |
|
1228 |
+
#: src/methods/updraftvault.php:309, src/methods/updraftvault.php:315,
|
1229 |
+
#: src/methods/updraftvault.php:321
|
1230 |
msgid "or (annual discount)"
|
1231 |
msgstr ""
|
1232 |
|
1234 |
msgid "No Vault connection was found for this site (has it moved?); please disconnect and re-connect."
|
1235 |
msgstr ""
|
1236 |
|
1237 |
+
#: src/class-updraftplus.php:538, src/class-updraftplus.php:583
|
1238 |
msgid "The given file was not found, or could not be read."
|
1239 |
msgstr ""
|
1240 |
|
1241 |
+
#: src/central/bootstrap.php:577
|
1242 |
msgid "UpdraftCentral (Remote Control)"
|
1243 |
msgstr ""
|
1244 |
|
1245 |
+
#: src/central/bootstrap.php:566
|
1246 |
msgid "View recent UpdraftCentral log events"
|
1247 |
msgstr ""
|
1248 |
|
1249 |
+
#: src/central/bootstrap.php:516
|
|
|
|
|
|
|
|
|
1250 |
msgid "Enter any description"
|
1251 |
msgstr ""
|
1252 |
|
1253 |
+
#: src/central/bootstrap.php:515
|
1254 |
msgid "Description"
|
1255 |
msgstr " الوصف"
|
1256 |
|
1257 |
+
#: src/central/bootstrap.php:448
|
1258 |
msgid "Delete..."
|
1259 |
msgstr ""
|
1260 |
|
1261 |
+
#: src/central/bootstrap.php:441
|
1262 |
msgid "Created:"
|
1263 |
msgstr ""
|
1264 |
|
1265 |
+
#: src/central/bootstrap.php:438
|
1266 |
msgid "Access this site as user:"
|
1267 |
msgstr ""
|
1268 |
|
1269 |
+
#: src/central/bootstrap.php:462
|
1270 |
msgid "Details"
|
1271 |
msgstr "تفاصيل عن المناسبة"
|
1272 |
|
1273 |
+
#: src/central/bootstrap.php:461
|
1274 |
msgid "Key description"
|
1275 |
msgstr ""
|
1276 |
|
1277 |
+
#: src/central/bootstrap.php:334, src/central/bootstrap.php:345
|
1278 |
msgid "A key was created, but the attempt to register it with %s was unsuccessful - please try again later."
|
1279 |
msgstr ""
|
1280 |
|
1281 |
+
#: src/central/bootstrap.php:206
|
1282 |
msgid "An invalid URL was entered"
|
1283 |
msgstr ""
|
1284 |
|
1285 |
+
#: src/central/bootstrap.php:82
|
1286 |
msgid "Close..."
|
1287 |
msgstr ""
|
1288 |
|
1289 |
+
#: src/central/bootstrap.php:74
|
1290 |
msgid "This connection appears to already have been made."
|
1291 |
msgstr ""
|
1292 |
|
1293 |
+
#: src/central/bootstrap.php:71
|
1294 |
msgid "You must visit this link in the same browser and login session as you created the key in."
|
1295 |
msgstr ""
|
1296 |
|
1297 |
+
#: src/central/bootstrap.php:67
|
1298 |
msgid "You must visit this URL in the same browser and login session as you created the key in."
|
1299 |
msgstr ""
|
1300 |
|
1301 |
+
#: src/central/bootstrap.php:67
|
1302 |
msgid "You are not logged into this WordPress site in your web browser."
|
1303 |
msgstr ""
|
1304 |
|
1305 |
+
#: src/central/bootstrap.php:64
|
1306 |
msgid "The key referred to was unknown."
|
1307 |
msgstr ""
|
1308 |
|
1309 |
+
#: src/central/bootstrap.php:61
|
1310 |
msgid "A new UpdraftCentral connection has not been made."
|
1311 |
msgstr ""
|
1312 |
|
1313 |
+
#: src/central/bootstrap.php:59
|
1314 |
msgid "An UpdraftCentral connection has been made successfully."
|
1315 |
msgstr ""
|
1316 |
|
1317 |
+
#: src/central/bootstrap.php:56
|
1318 |
msgid "UpdraftCentral Connection"
|
1319 |
msgstr ""
|
1320 |
|
1321 |
+
#: src/backup.php:917, src/class-updraftplus.php:2828
|
1322 |
msgid "The backup was aborted by the user"
|
1323 |
msgstr ""
|
1324 |
|
1325 |
+
#: src/admin.php:4496
|
1326 |
msgid "Your settings have been saved."
|
1327 |
msgstr "تم حفظ إعداداتك."
|
1328 |
|
1329 |
+
#: src/admin.php:3598
|
1330 |
msgid "Total backup size:"
|
1331 |
msgstr ""
|
1332 |
|
1333 |
+
#: src/admin.php:2955
|
1334 |
msgid "stop"
|
1335 |
msgstr "توقف"
|
1336 |
|
1337 |
+
#: src/admin.php:2797
|
1338 |
msgid "The backup has finished running"
|
1339 |
msgstr ""
|
1340 |
|
1360 |
msgid "calculate"
|
1361 |
msgstr ""
|
1362 |
|
1363 |
+
#: src/admin.php:733
|
1364 |
msgid "You should save your changes to ensure that they are used for making your backup."
|
1365 |
msgstr ""
|
1366 |
|
1367 |
+
#: src/admin.php:726
|
1368 |
msgid "We requested to delete the file, but could not understand the server's response"
|
1369 |
msgstr ""
|
1370 |
|
1371 |
+
#: src/admin.php:725
|
1372 |
msgid "Please enter a valid URL"
|
1373 |
msgstr ""
|
1374 |
|
1375 |
+
#: src/admin.php:708
|
1376 |
msgid "Saving..."
|
1377 |
msgstr "جاري الحفظ..."
|
1378 |
|
1379 |
+
#: src/admin.php:671
|
1380 |
msgid "Error: the server sent us a response which we did not understand."
|
1381 |
msgstr ""
|
1382 |
|
1383 |
+
#: src/admin.php:663
|
1384 |
msgid "Fetching..."
|
1385 |
msgstr ""
|
1386 |
|
1388 |
msgid "Asia Pacific (Seoul)"
|
1389 |
msgstr ""
|
1390 |
|
1391 |
+
#: src/restorer.php:1688
|
1392 |
msgid "Uploads URL:"
|
1393 |
msgstr ""
|
1394 |
|
1395 |
+
#: src/backup.php:435
|
1396 |
msgid "Unexpected error: no class '%s' was found (your UpdraftPlus installation seems broken - try re-installing)"
|
1397 |
msgstr ""
|
1398 |
|
1400 |
msgid "The required %s PHP module is not installed - ask your web hosting company to enable it."
|
1401 |
msgstr ""
|
1402 |
|
1403 |
+
#: src/class-updraftplus.php:4462, src/restorer.php:1707
|
1404 |
msgid "To import an ordinary WordPress site into a multisite installation requires %s."
|
1405 |
msgstr ""
|
1406 |
|
1407 |
+
#: src/class-updraftplus.php:4458
|
1408 |
msgid "Please read this link for important information on this process."
|
1409 |
msgstr ""
|
1410 |
|
1411 |
+
#: src/class-updraftplus.php:4458
|
1412 |
msgid "It will be imported as a new site."
|
1413 |
msgstr ""
|
1414 |
|
1415 |
+
#: src/admin.php:2588, src/templates/wp-admin/notices/horizontal-notice.php:16,
|
1416 |
#: src/templates/wp-admin/notices/horizontal-notice.php:18
|
1417 |
msgid "Dismiss"
|
1418 |
msgstr "رفض"
|
1419 |
|
1420 |
+
#: src/admin.php:745
|
1421 |
msgid "Please fill in the required information."
|
1422 |
msgstr ""
|
1423 |
|
1437 |
msgid "Which site to restore"
|
1438 |
msgstr ""
|
1439 |
|
1440 |
+
#: src/addons/migrator.php:517, src/addons/migrator.php:518
|
1441 |
msgid "Error when creating new site at your chosen address:"
|
1442 |
msgstr ""
|
1443 |
|
1444 |
+
#: src/addons/migrator.php:459
|
1445 |
msgid "Required information for restoring this backup was not given (%s)"
|
1446 |
msgstr ""
|
1447 |
|
1448 |
+
#: src/addons/migrator.php:418
|
1449 |
msgid "Attribute imported content to user"
|
1450 |
msgstr ""
|
1451 |
|
1452 |
+
#: src/addons/migrator.php:408, src/addons/migrator.php:410
|
1453 |
msgid "You must use lower-case letters or numbers for the site path, only."
|
1454 |
msgstr ""
|
1455 |
|
1456 |
+
#: src/addons/migrator.php:396
|
1457 |
msgid "This feature is not compatible with %s"
|
1458 |
msgstr ""
|
1459 |
|
1460 |
+
#: src/addons/migrator.php:394, src/addons/migrator.php:396
|
1461 |
msgid "Importing a single site into a multisite install"
|
1462 |
msgstr ""
|
1463 |
|
1464 |
+
#: src/addons/migrator.php:385
|
1465 |
msgid "other content from wp-content"
|
1466 |
msgstr ""
|
1467 |
|
1468 |
+
#: src/addons/migrator.php:382
|
1469 |
msgid "WordPress core"
|
1470 |
msgstr ""
|
1471 |
|
1472 |
+
#: src/addons/migrator.php:382, src/addons/migrator.php:385,
|
1473 |
+
#: src/addons/migrator.php:388
|
1474 |
msgid "You selected %s to be included in the restoration - this cannot / should not be done when importing a single site into a network."
|
1475 |
msgstr ""
|
1476 |
|
1478 |
msgid "Call WordPress action:"
|
1479 |
msgstr ""
|
1480 |
|
1481 |
+
#: src/admin.php:2623
|
1482 |
msgid "Your saved settings also affect what is backed up - e.g. files excluded."
|
1483 |
msgstr ""
|
1484 |
|
1485 |
+
#: src/admin.php:4035
|
1486 |
msgid "Skipping: this archive was already restored."
|
1487 |
msgstr ""
|
1488 |
|
1514 |
msgid "This button will delete all UpdraftPlus settings and progress information for in-progress backups (but not any of your existing backups from your cloud storage)."
|
1515 |
msgstr ""
|
1516 |
|
1517 |
+
#: src/admin.php:4370
|
1518 |
msgid "Send this backup to remote storage"
|
1519 |
msgstr ""
|
1520 |
|
1521 |
+
#: src/admin.php:4368
|
1522 |
msgid "Check out UpdraftPlus Vault."
|
1523 |
msgstr ""
|
1524 |
|
1525 |
+
#: src/admin.php:4368
|
1526 |
msgid "Not got any remote storage?"
|
1527 |
msgstr ""
|
1528 |
|
1529 |
+
#: src/admin.php:4368
|
1530 |
msgid "settings"
|
1531 |
msgstr "إعدادات"
|
1532 |
|
1533 |
+
#: src/admin.php:4368
|
1534 |
msgid "Backup won't be sent to any remote storage - none has been saved in the %s"
|
1535 |
msgstr ""
|
1536 |
|
1537 |
+
#: src/admin.php:2621
|
1538 |
msgid "Include any files in the backup"
|
1539 |
msgstr ""
|
1540 |
|
1541 |
+
#: src/admin.php:2607
|
1542 |
msgid "Include the database in the backup"
|
1543 |
msgstr ""
|
1544 |
|
1545 |
+
#: src/admin.php:2587
|
1546 |
msgid "Continue restoration"
|
1547 |
msgstr ""
|
1548 |
|
1549 |
+
#: src/admin.php:2582
|
1550 |
msgid "You have an unfinished restoration operation, begun %s ago."
|
1551 |
msgstr ""
|
1552 |
|
1553 |
+
#: src/admin.php:2581
|
1554 |
msgid "Unfinished restoration"
|
1555 |
msgstr ""
|
1556 |
|
1557 |
+
#: src/admin.php:2579
|
1558 |
msgid "%s minutes, %s seconds"
|
1559 |
msgstr ""
|
1560 |
|
1561 |
+
#: src/admin.php:2526
|
1562 |
msgid "Backup Contents And Schedule"
|
1563 |
msgstr ""
|
1564 |
|
1566 |
msgid "Premium / Extensions"
|
1567 |
msgstr ""
|
1568 |
|
1569 |
+
#: src/admin.php:2295, src/admin.php:2304
|
1570 |
msgid "Sufficient information about the in-progress restoration operation could not be found."
|
1571 |
msgstr ""
|
1572 |
|
1573 |
+
#: src/addons/morefiles.php:55, src/admin.php:731
|
1574 |
msgctxt "(verb)"
|
1575 |
msgid "Download"
|
1576 |
msgstr ""
|
1577 |
|
1578 |
+
#: src/admin.php:656
|
1579 |
msgid "You have chosen to backup files, but no file entities have been selected"
|
1580 |
msgstr ""
|
1581 |
|
1582 |
+
#: src/admin.php:558
|
1583 |
msgid "Extensions"
|
1584 |
msgstr "Extensions"
|
1585 |
|
1586 |
+
#: src/admin.php:550, src/templates/wp-admin/settings/tab-bar.php:8
|
1587 |
msgid "Advanced Tools"
|
1588 |
msgstr ""
|
1589 |
|
1590 |
+
#: src/addons/googlecloud.php:964
|
1591 |
msgid "Bucket location"
|
1592 |
msgstr ""
|
1593 |
|
1594 |
+
#: src/addons/googlecloud.php:959
|
1595 |
msgid "Note that Google do not support every storage class in every location - you should read their documentation to learn about current availability."
|
1596 |
msgstr ""
|
1597 |
|
1598 |
+
#: src/addons/googlecloud.php:959, src/addons/googlecloud.php:984
|
1599 |
msgid "This setting applies only when a new bucket is being created."
|
1600 |
msgstr ""
|
1601 |
|
1602 |
+
#: src/addons/googlecloud.php:947
|
1603 |
msgid "You must use a bucket name that is unique, for all %s users."
|
1604 |
msgstr ""
|
1605 |
|
1606 |
+
#: src/addons/googlecloud.php:906
|
1607 |
msgid "Do not confuse %s with %s - they are separate things."
|
1608 |
msgstr ""
|
1609 |
|
1610 |
+
#: src/addons/googlecloud.php:312
|
1611 |
msgid "You do not have access to this bucket"
|
1612 |
msgstr ""
|
1613 |
|
1614 |
+
#: src/addons/googlecloud.php:59, src/addons/googlecloud.php:60,
|
1615 |
+
#: src/addons/googlecloud.php:61
|
1616 |
msgid "Western Europe"
|
1617 |
msgstr ""
|
1618 |
|
1619 |
+
#: src/addons/googlecloud.php:55
|
1620 |
msgid "Eastern Asia-Pacific"
|
1621 |
msgstr ""
|
1622 |
|
1623 |
+
#: src/addons/googlecloud.php:54
|
1624 |
msgid "Western United States"
|
1625 |
msgstr ""
|
1626 |
|
1627 |
+
#: src/addons/googlecloud.php:53
|
1628 |
msgid "Eastern United States"
|
1629 |
msgstr ""
|
1630 |
|
1631 |
+
#: src/addons/googlecloud.php:52
|
1632 |
msgid " Eastern United States"
|
1633 |
msgstr ""
|
1634 |
|
1635 |
+
#: src/addons/googlecloud.php:51, src/addons/googlecloud.php:971
|
1636 |
msgid "Central United States"
|
1637 |
msgstr ""
|
1638 |
|
1639 |
+
#: src/addons/googlecloud.php:50
|
1640 |
msgid "European Union"
|
1641 |
msgstr ""
|
1642 |
|
1643 |
+
#: src/addons/googlecloud.php:49
|
1644 |
msgid "Asia Pacific"
|
1645 |
msgstr ""
|
1646 |
|
1647 |
+
#: src/addons/googlecloud.php:48, src/addons/googlecloud.php:49,
|
1648 |
+
#: src/addons/googlecloud.php:50
|
1649 |
msgid "multi-region location"
|
1650 |
msgstr ""
|
1651 |
|
1652 |
+
#: src/addons/googlecloud.php:48
|
1653 |
msgid "United States"
|
1654 |
msgstr ""
|
1655 |
|
1656 |
+
#: src/addons/googlecloud.php:43, src/addons/googlecloud.php:956
|
1657 |
msgid "Nearline"
|
1658 |
msgstr ""
|
1659 |
|
1660 |
+
#: src/addons/googlecloud.php:42, src/addons/googlecloud.php:955
|
1661 |
msgid "Durable reduced availability"
|
1662 |
msgstr ""
|
1663 |
|
1664 |
+
#: src/addons/googlecloud.php:41, src/addons/googlecloud.php:954,
|
1665 |
+
#: src/addons/s3-enhanced.php:61
|
1666 |
msgid "Standard"
|
1667 |
msgstr ""
|
1668 |
|
1669 |
+
#: src/addons/azure.php:553
|
1670 |
msgid "container"
|
1671 |
msgstr ""
|
1672 |
|
1673 |
+
#: src/addons/azure.php:553
|
1674 |
msgid "You can enter the path of any %s virtual folder you wish to use here."
|
1675 |
msgstr ""
|
1676 |
|
1677 |
+
#: src/addons/azure.php:552
|
1678 |
msgid "optional"
|
1679 |
msgstr ""
|
1680 |
|
1681 |
+
#: src/addons/azure.php:548
|
|
|
|
|
|
|
|
|
1682 |
msgid "See Microsoft's guidelines on container naming by following this link."
|
1683 |
msgstr ""
|
1684 |
|
1685 |
+
#: src/addons/azure.php:548
|
1686 |
msgid "Enter the path of the %s you wish to use here."
|
1687 |
msgstr ""
|
1688 |
|
1689 |
+
#: src/addons/azure.php:539
|
1690 |
msgid "This is not your Azure login - see the instructions if needing more guidance."
|
1691 |
msgstr ""
|
1692 |
|
1693 |
+
#: src/addons/azure.php:538, src/addons/azure.php:542,
|
1694 |
+
#: src/addons/azure.php:547, src/addons/azure.php:552
|
|
|
|
|
|
|
1695 |
msgid "Azure"
|
1696 |
msgstr ""
|
1697 |
|
1698 |
+
#: src/addons/azure.php:534
|
1699 |
msgid "Create Azure credentials in your Azure developer console."
|
1700 |
msgstr ""
|
1701 |
|
1707 |
msgid "Could not access container"
|
1708 |
msgstr ""
|
1709 |
|
1710 |
+
#: src/class-updraftplus.php:2845
|
1711 |
msgid "To complete your migration/clone, you should now log in to the remote site and restore the backup set."
|
1712 |
msgstr ""
|
1713 |
|
1714 |
+
#: src/backup.php:1667
|
1715 |
msgid "the options table was not found"
|
1716 |
msgstr ""
|
1717 |
|
1718 |
+
#: src/backup.php:1665
|
1719 |
msgid "no options or sitemeta table was found"
|
1720 |
msgstr ""
|
1721 |
|
1722 |
+
#: src/backup.php:1665, src/backup.php:1667
|
1723 |
msgid "The database backup appears to have failed"
|
1724 |
msgstr ""
|
1725 |
|
1726 |
+
#: src/backup.php:1537
|
1727 |
msgid "The backup directory is not writable (or disk space is full) - the database backup is expected to shortly fail."
|
1728 |
msgstr ""
|
1729 |
|
1735 |
msgid "Not installed"
|
1736 |
msgstr "لم يتم التثبيت"
|
1737 |
|
1738 |
+
#: src/addons/googlecloud.php:950, src/addons/s3-enhanced.php:54
|
1739 |
msgid "Storage class"
|
1740 |
msgstr ""
|
1741 |
|
1742 |
+
#: src/addons/googlecloud.php:947
|
1743 |
msgid "See Google's guidelines on bucket naming by following this link."
|
1744 |
msgstr ""
|
1745 |
|
1746 |
+
#: src/addons/googlecloud.php:947
|
1747 |
msgid "Enter the name of the %s bucket you wish to use here."
|
1748 |
msgstr ""
|
1749 |
|
1750 |
+
#: src/addons/googlecloud.php:946
|
1751 |
msgid "Bucket"
|
1752 |
msgstr ""
|
1753 |
|
1754 |
+
#: src/addons/googlecloud.php:942
|
1755 |
msgid "Otherwise, you can leave it blank."
|
1756 |
msgstr ""
|
1757 |
|
1758 |
+
#: src/addons/googlecloud.php:942
|
1759 |
msgid "N.B. This is only needed if you have not already created the bucket, and you wish UpdraftPlus to create it for you."
|
1760 |
msgstr ""
|
1761 |
|
1762 |
+
#: src/addons/googlecloud.php:942
|
1763 |
msgid "Enter the ID of the %s project you wish to use here."
|
1764 |
msgstr ""
|
1765 |
|
1766 |
+
#: src/addons/googlecloud.php:918
|
1767 |
msgid "Follow this link to your Google API Console, and there activate the Storage API and create a Client ID in the API Access section."
|
1768 |
msgstr ""
|
1769 |
|
1770 |
+
#: src/addons/googlecloud.php:831
|
1771 |
msgid "You must enter a project ID in order to be able to create a new bucket."
|
1772 |
msgstr ""
|
1773 |
|
1775 |
msgid "Project ID"
|
1776 |
msgstr ""
|
1777 |
|
1778 |
+
#: src/addons/googlecloud.php:690
|
1779 |
msgid "You must save and authenticate before you can test your settings."
|
1780 |
msgstr ""
|
1781 |
|
1782 |
+
#: src/addons/googlecloud.php:537
|
1783 |
msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Cloud."
|
1784 |
msgstr ""
|
1785 |
|
1786 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:332,
|
1787 |
+
#: src/addons/googlecloud.php:823, src/addons/googlecloud.php:870
|
1788 |
msgid "You do not have access to this bucket."
|
1789 |
msgstr ""
|
1790 |
|
1791 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:312,
|
1792 |
+
#: src/addons/googlecloud.php:322, src/addons/googlecloud.php:332,
|
1793 |
+
#: src/addons/googlecloud.php:649, src/addons/googlecloud.php:823,
|
1794 |
+
#: src/addons/googlecloud.php:870, src/addons/googlecloud.php:912,
|
1795 |
+
#: src/addons/googlecloud.php:912, src/addons/googlecloud.php:927,
|
1796 |
+
#: src/addons/googlecloud.php:935, src/addons/googlecloud.php:947
|
1797 |
msgid "Google Cloud"
|
1798 |
msgstr ""
|
1799 |
|
1800 |
+
#: src/addons/googlecloud.php:259, src/addons/googlecloud.php:312,
|
1801 |
+
#: src/addons/googlecloud.php:332, src/addons/googlecloud.php:823,
|
1802 |
+
#: src/addons/googlecloud.php:870
|
1803 |
msgid "%s Service Exception."
|
1804 |
msgstr ""
|
1805 |
|
1836 |
msgid "Press here to look inside your remote storage methods for any existing backup sets (from any site, if they are stored in the same folder)."
|
1837 |
msgstr ""
|
1838 |
|
1839 |
+
#: src/admin.php:1678
|
1840 |
msgid "Backup sets removed:"
|
1841 |
msgstr ""
|
1842 |
|
1843 |
+
#: src/admin.php:744
|
1844 |
msgid "Processing..."
|
1845 |
msgstr ""
|
1846 |
|
1847 |
+
#: src/admin.php:742
|
1848 |
msgid "For backups older than"
|
1849 |
msgstr ""
|
1850 |
|
1851 |
+
#: src/admin.php:741
|
1852 |
msgid "week(s)"
|
1853 |
msgstr ""
|
1854 |
|
1855 |
+
#: src/admin.php:740
|
1856 |
msgid "hour(s)"
|
1857 |
msgstr ""
|
1858 |
|
1859 |
+
#: src/admin.php:739
|
1860 |
msgid "day(s)"
|
1861 |
msgstr ""
|
1862 |
|
1863 |
+
#: src/admin.php:738
|
1864 |
msgid "in the month"
|
1865 |
msgstr ""
|
1866 |
|
1867 |
+
#: src/admin.php:737
|
1868 |
msgid "day"
|
1869 |
msgstr ""
|
1870 |
|
1876 |
msgid "Add an additional retention rule..."
|
1877 |
msgstr ""
|
1878 |
|
1879 |
+
#: src/restorer.php:2210
|
1880 |
msgid "This database needs to be deployed on MySQL version %s or later."
|
1881 |
msgstr ""
|
1882 |
|
1883 |
+
#: src/restorer.php:2210
|
1884 |
msgid "This problem is caused by trying to restore a database on a very old MySQL version that is incompatible with the source database."
|
1885 |
msgstr ""
|
1886 |
|
1887 |
+
#: src/methods/updraftvault.php:670
|
1888 |
msgid "You do not currently have any UpdraftPlus Vault quota"
|
1889 |
msgstr ""
|
1890 |
|
1891 |
+
#: src/class-updraftplus.php:4500
|
1892 |
msgid "You must upgrade MySQL to be able to use this database."
|
1893 |
msgstr ""
|
1894 |
|
1895 |
+
#: src/class-updraftplus.php:4500
|
1896 |
msgid "The database backup uses MySQL features not available in the old MySQL version (%s) that this site is running on."
|
1897 |
msgstr ""
|
1898 |
|
1899 |
+
#: src/admin.php:2414
|
1900 |
msgid "The UpdraftPlus directory in wp-content/plugins has white-space in it; WordPress does not like this. You should rename the directory to wp-content/plugins/updraftplus to fix this problem."
|
1901 |
msgstr ""
|
1902 |
|
1903 |
+
#: src/methods/updraftvault.php:342
|
1904 |
msgid "Don't know your email address, or forgotten your password?"
|
1905 |
msgstr ""
|
1906 |
|
1907 |
+
#: src/methods/updraftvault.php:335
|
1908 |
msgid "Enter your UpdraftPlus.Com email / password here to connect:"
|
1909 |
msgstr ""
|
1910 |
|
1911 |
+
#: src/methods/updraftvault.php:299, src/methods/updraftvault.php:328
|
1912 |
msgid "Read the FAQs here."
|
1913 |
msgstr ""
|
1914 |
|
1920 |
msgid "Server-side encryption"
|
1921 |
msgstr ""
|
1922 |
|
1923 |
+
#: src/methods/updraftvault.php:678
|
1924 |
msgid "If you have forgotten your password, then go here to change your password on updraftplus.com."
|
1925 |
msgstr ""
|
1926 |
|
1927 |
+
#: src/admin.php:1003
|
1928 |
msgid "Go to the remote storage settings in order to connect."
|
1929 |
msgstr ""
|
1930 |
|
1931 |
+
#: src/admin.php:1003
|
1932 |
msgid "%s has been chosen for remote storage, but you are not currently connected."
|
1933 |
msgstr ""
|
1934 |
|
1935 |
+
#: src/methods/updraftvault.php:325
|
1936 |
msgid "Payments can be made in US dollars, euros or GB pounds sterling, via card or PayPal."
|
1937 |
msgstr ""
|
1938 |
|
1939 |
+
#: src/admin.php:714
|
1940 |
msgid "Update quota count"
|
1941 |
msgstr ""
|
1942 |
|
1943 |
+
#: src/admin.php:713
|
1944 |
msgid "Counting..."
|
1945 |
msgstr ""
|
1946 |
|
1947 |
+
#: src/admin.php:712
|
1948 |
msgid "Disconnecting..."
|
1949 |
msgstr ""
|
1950 |
|
1951 |
+
#: src/admin.php:710
|
1952 |
msgid "Connecting..."
|
1953 |
msgstr ""
|
1954 |
|
1955 |
+
#: src/methods/updraftvault.php:431, src/methods/updraftvault.php:505
|
1956 |
msgid "Refresh current status"
|
1957 |
msgstr ""
|
1958 |
|
1959 |
+
#: src/methods/updraftvault.php:429, src/methods/updraftvault.php:445,
|
1960 |
+
#: src/methods/updraftvault.php:447, src/methods/updraftvault.php:505
|
1961 |
msgid "Get more quota"
|
1962 |
msgstr ""
|
1963 |
|
1964 |
+
#: src/methods/updraftvault.php:426, src/methods/updraftvault.php:442,
|
1965 |
+
#: src/methods/updraftvault.php:486
|
1966 |
msgid "Current use:"
|
1967 |
msgstr ""
|
1968 |
|
1969 |
+
#: src/methods/updraftvault.php:421
|
1970 |
msgid "You can get more quota here"
|
1971 |
msgstr ""
|
1972 |
|
1973 |
+
#: src/methods/updraftvault.php:421
|
1974 |
msgid "%s Error: you have insufficient storage quota available (%s) to upload this archive (%s)."
|
1975 |
msgstr ""
|
1976 |
|
1977 |
+
#: src/admin.php:711, src/methods/updraftvault.php:369,
|
1978 |
+
#: src/methods/updraftvault.php:413
|
1979 |
msgid "Disconnect"
|
1980 |
msgstr ""
|
1981 |
|
1982 |
+
#: src/methods/updraftvault.php:366, src/methods/updraftvault.php:405
|
1983 |
msgid "Quota:"
|
1984 |
msgstr ""
|
1985 |
|
1986 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1987 |
msgid "Vault owner"
|
1988 |
msgstr ""
|
1989 |
|
1990 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1991 |
msgid "Well done - there's nothing more needed to set up."
|
1992 |
msgstr ""
|
1993 |
|
1994 |
+
#: src/methods/updraftvault.php:365, src/methods/updraftvault.php:403
|
1995 |
msgid "This site is <strong>connected</strong> to UpdraftPlus Vault."
|
1996 |
msgstr ""
|
1997 |
|
1998 |
+
#: src/methods/updraftvault.php:371, src/methods/updraftvault.php:399
|
1999 |
msgid "You are <strong>not connected</strong> to UpdraftPlus Vault."
|
2000 |
msgstr ""
|
2001 |
|
2002 |
+
#: src/methods/updraftvault.php:342
|
2003 |
msgid "Go here for help"
|
2004 |
msgstr ""
|
2005 |
|
2006 |
+
#: src/methods/updraftvault.php:337
|
2007 |
msgid "E-mail"
|
2008 |
msgstr ""
|
2009 |
|
2010 |
+
#: src/central/bootstrap.php:552, src/methods/updraftvault.php:331,
|
2011 |
+
#: src/methods/updraftvault.php:345
|
2012 |
msgid "Back..."
|
2013 |
msgstr ""
|
2014 |
|
2015 |
+
#: src/methods/updraftvault.php:325
|
2016 |
msgid "Subscriptions can be cancelled at any time."
|
2017 |
msgstr ""
|
2018 |
|
2019 |
+
#: src/methods/updraftvault.php:308, src/methods/updraftvault.php:314,
|
2020 |
+
#: src/methods/updraftvault.php:320
|
2021 |
msgid "%s per quarter"
|
2022 |
msgstr ""
|
2023 |
|
2024 |
+
#: src/central/bootstrap.php:579, src/methods/updraftvault.php:299,
|
2025 |
+
#: src/methods/updraftvault.php:328
|
2026 |
msgid "Read more about it here."
|
2027 |
msgstr ""
|
2028 |
|
2029 |
+
#: src/methods/updraftvault.php:299, src/methods/updraftvault.php:328
|
2030 |
msgid "UpdraftPlus Vault is built on top of Amazon's world-leading data-centres, with redundant data storage to achieve 99.999999999% reliability."
|
2031 |
msgstr ""
|
2032 |
|
2033 |
+
#: src/methods/updraftvault.php:295
|
2034 |
msgid "Already purchased space?"
|
2035 |
msgstr ""
|
2036 |
|
2037 |
+
#: src/methods/updraftvault.php:292
|
2038 |
msgid "Show the options"
|
2039 |
msgstr ""
|
2040 |
|
2041 |
+
#: src/methods/updraftvault.php:291
|
2042 |
msgid "First time user?"
|
2043 |
msgstr ""
|
2044 |
|
2045 |
+
#: src/methods/updraftvault.php:288, src/methods/updraftvault.php:305
|
2046 |
msgid "Press a button to get started."
|
2047 |
msgstr ""
|
2048 |
|
2049 |
+
#: src/methods/updraftvault.php:288, src/methods/updraftvault.php:305
|
2050 |
msgid "UpdraftPlus Vault brings you storage that is <strong>reliable, easy to use and a great price</strong>."
|
2051 |
msgstr ""
|
2052 |
|
2067 |
msgstr ""
|
2068 |
|
2069 |
#: src/addons/azure.php:388, src/addons/backblaze.php:464,
|
2070 |
+
#: src/addons/googlecloud.php:774, src/methods/s3.php:1196
|
2071 |
msgid "Delete failed:"
|
2072 |
msgstr ""
|
2073 |
|
2074 |
+
#: src/backup.php:3278
|
2075 |
msgid "The zip engine returned the message: %s."
|
2076 |
msgstr ""
|
2077 |
|
2091 |
msgid "Allow download"
|
2092 |
msgstr ""
|
2093 |
|
2094 |
+
#: src/addons/migrator.php:1830
|
2095 |
msgid "If sending directly from site to site does not work for you, then there are three other methods - please try one of these instead."
|
2096 |
msgstr ""
|
2097 |
|
2098 |
+
#: src/addons/migrator.php:1815, src/admin.php:720
|
2099 |
msgid "You should check that the remote site is online, not firewalled, does not have security modules that may be blocking access, has UpdraftPlus version %s or later active and that the keys have been entered correctly."
|
2100 |
msgstr ""
|
2101 |
|
2102 |
+
#: src/addons/migrator.php:2318
|
2103 |
msgid "Existing keys"
|
2104 |
msgstr ""
|
2105 |
|
2106 |
+
#: src/addons/migrator.php:2309
|
2107 |
msgid "No keys to allow remote sites to connect have yet been created."
|
2108 |
msgstr ""
|
2109 |
|
2110 |
+
#: src/addons/migrator.php:2291
|
2111 |
msgid "Your new key:"
|
2112 |
msgstr ""
|
2113 |
|
2114 |
+
#: src/addons/migrator.php:2270
|
2115 |
msgid "To allow another site to send a backup to this site, create a key, and then press the 'Migrate' button on the sending site, and copy-and-paste the key there."
|
2116 |
msgstr ""
|
2117 |
|
2118 |
+
#: src/addons/migrator.php:2252
|
2119 |
msgid "So, to get the key for the remote site, open the 'Migrate' window on that site, scroll down, and you can create one there."
|
2120 |
msgstr ""
|
2121 |
|
2122 |
+
#: src/addons/migrator.php:2252
|
2123 |
msgid "Keys for this site are created in the section below the one you just pressed in."
|
2124 |
msgstr ""
|
2125 |
|
2126 |
+
#: src/addons/migrator.php:1932, src/central/bootstrap.php:388
|
2127 |
msgid "You must copy and paste this key now - it cannot be shown again."
|
2128 |
msgstr ""
|
2129 |
|
2130 |
+
#: src/
|