Version Description
2014/09/22 =
TWEAK: There are still some Amazon S3 servers validated via a Verisign 1024-bit certificate, causing backup to fail due to SSL validation failure. Revert to previous collection of root SSL certificates in order to still allow access to these servers (see: https://blog.mozilla.org/security/2014/09/08/phasing-out-certificates-with-1024-bit-rsa-keys/#comments)
TWEAK: If Google Drive reports that the quota will be exceeded, then make this feedback more obvious to the user without reading the log
TWEAK: If the user enters an S3 path with an erroneous preceding slash, then remove it
FIX: Amazon S3 RRS settings (Premium) were not being applied on archives smaller than 5Mb
TRANSLATION: New Romn (Romanian, ro_RO) translation, courtesy of Augustin-Mihai Mufturel and Teodor Muraru
Release Info
Developer | DavidAnderson |
Plugin | UpdraftPlus WordPress Backup Plugin |
Version | 1.9.26 |
Comparing to | |
See all releases |
Code changes from version 1.9.32 to 1.9.26
- admin.php +40 -90
- backup.php +38 -59
- class-updraftplus.php +37 -71
- class-zip.php +1 -1
- includes/Dropbox/API.php +1 -1
- includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php +2 -2
- includes/cacert.pem +0 -257
- includes/ftp.class.php +1 -3
- includes/updraft-admin-ui.js +6 -55
- languages/updraftplus-cs_CZ.mo +0 -0
- languages/updraftplus-cs_CZ.po +696 -754
- languages/updraftplus-el.mo +0 -0
- languages/updraftplus-el.po +696 -754
- languages/updraftplus-es_ES.mo +0 -0
- languages/updraftplus-es_ES.po +877 -988
- languages/updraftplus-fa_IR.mo +0 -0
- languages/updraftplus-fa_IR.po +0 -4311
- languages/updraftplus-it_IT.mo +0 -0
- languages/updraftplus-it_IT.po +696 -754
- languages/updraftplus-ja.mo +0 -0
- languages/updraftplus-ja.po +3 -1642
@@ -36,29 +36,30 @@ class UpdraftPlus_Admin {
|
|
36 |
|
37 |
$service = UpdraftPlus_Options::get_updraft_option('updraft_service');
|
38 |
|
39 |
-
if (UpdraftPlus_Options::user_can_manage()) {
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
$token = (empty($opts['token'])) ? '' : $opts['token'];
|
48 |
-
}
|
49 |
-
if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googledrive'));
|
50 |
}
|
51 |
-
if (
|
|
|
|
|
|
|
|
|
52 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_dropbox');
|
53 |
if (empty($opts['tk_request_token'])) {
|
54 |
add_action('all_admin_notices', array($this,'show_admin_warning_dropbox') );
|
55 |
}
|
56 |
}
|
57 |
-
if ('bitcasa' === $service ||
|
58 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_bitcasa');
|
59 |
if (!empty($opts['clientid']) && !empty($opts['secret']) && empty($opts['token'])) add_action('all_admin_notices', array($this,'show_admin_warning_bitcasa') );
|
60 |
}
|
61 |
-
if ('copycom' === $service ||
|
62 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_copycom');
|
63 |
if (!empty($opts['clientid']) && !empty($opts['secret']) && empty($opts['token'])) add_action('all_admin_notices', array($this,'show_admin_warning_copycom') );
|
64 |
}
|
@@ -168,7 +169,6 @@ class UpdraftPlus_Admin {
|
|
168 |
'createbutton' => __('Create', 'updraftplus'),
|
169 |
'close' => __('Close', 'updraftplus'),
|
170 |
'restore' => __('Restore', 'updraftplus'),
|
171 |
-
'download' => __('Download log file', 'updraftplus')
|
172 |
) );
|
173 |
}
|
174 |
|
@@ -352,7 +352,6 @@ class UpdraftPlus_Admin {
|
|
352 |
#ud_downloadstatus .file, #ud_downloadstatus2 .file {
|
353 |
margin-top: 8px;
|
354 |
}
|
355 |
-
|
356 |
</style>
|
357 |
<?php
|
358 |
|
@@ -368,7 +367,7 @@ class UpdraftPlus_Admin {
|
|
368 |
|
369 |
# Adds the settings link under the plugin on the plugin screen.
|
370 |
public function plugin_action_links($links, $file) {
|
371 |
-
if (
|
372 |
$settings_link = '<a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__("Settings", "updraftplus").'</a>';
|
373 |
array_unshift($links, $settings_link);
|
374 |
// $settings_link = '<a href="http://david.dw-perspective.org.uk/donate">'.__("Donate","UpdraftPlus").'</a>';
|
@@ -733,73 +732,29 @@ class UpdraftPlus_Admin {
|
|
733 |
curl_setopt($ch, CURLOPT_URL, $uri);
|
734 |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
735 |
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
736 |
-
|
737 |
-
curl_setopt($ch, CURLOPT_VERBOSE, true);
|
738 |
-
curl_setopt($ch, CURLOPT_STDERR, $output=fopen('php://temp', "w+"));
|
739 |
$response = curl_exec($ch);
|
740 |
$error = curl_error($ch);
|
741 |
$getinfo = curl_getinfo($ch);
|
742 |
curl_close($ch);
|
743 |
-
$resp = array();
|
744 |
if (false === $response) {
|
745 |
-
|
746 |
-
|
747 |
}
|
748 |
-
|
749 |
-
rewind($output);
|
750 |
-
$verb = stream_get_contents($output);
|
751 |
-
if (!empty($verb)) $resp['r'] = htmlspecialchars($verb)."\n\n".$resp['r'];
|
752 |
-
echo json_encode($resp);
|
753 |
-
// echo json_encode(array('r' => htmlspecialchars(substr($response, 0, 2048))));
|
754 |
} else {
|
755 |
$response = wp_remote_get($uri, array('timeout' => 10));
|
756 |
if (is_wp_error($response)) {
|
757 |
echo json_encode(array('e' => htmlspecialchars($response->get_error_message())));
|
758 |
die;
|
759 |
}
|
760 |
-
echo json_encode(array('r' => $response['response']['code'].': '.htmlspecialchars(substr($response['body'], 0,
|
761 |
}
|
762 |
die;
|
763 |
} elseif (isset($_REQUEST['subaction']) && 'dismissautobackup' == $_REQUEST['subaction']) {
|
764 |
UpdraftPlus_Options::update_updraft_option('updraftplus_dismissedautobackup', time() + 84*86400);
|
765 |
} elseif (isset($_REQUEST['subaction']) && 'dismissexpiry' == $_REQUEST['subaction']) {
|
766 |
UpdraftPlus_Options::update_updraft_option('updraftplus_dismissedexpiry', time() + 14*86400);
|
767 |
-
} elseif (isset($_REQUEST['subaction']) && 'poplog' == $_REQUEST['subaction']){
|
768 |
-
# New code to handle AJAX request for log file
|
769 |
-
|
770 |
-
#Set the backup nonce to either passed value or the latest backup
|
771 |
-
if (empty($_REQUEST['backup_nonce'])){
|
772 |
-
list ($mod_time, $log_file, $nonce) = $updraftplus->last_modified_log();
|
773 |
-
} else {
|
774 |
-
$nonce = $_REQUEST['backup_nonce'];
|
775 |
-
}
|
776 |
-
|
777 |
-
if (!preg_match('/^[0-9a-f]+$/', $nonce)) die('Security check');
|
778 |
-
|
779 |
-
$log_content = '';
|
780 |
-
|
781 |
-
if (!empty($nonce)) {
|
782 |
-
$updraft_dir = $updraftplus->backups_dir_location();
|
783 |
-
|
784 |
-
# Open the log file and read into log content
|
785 |
-
$potential_log_file = $updraft_dir."/log.".$nonce.".txt";
|
786 |
-
|
787 |
-
if (is_readable($potential_log_file)){
|
788 |
-
$log_content = file_get_contents($potential_log_file);
|
789 |
-
} else {
|
790 |
-
$log_content .= __('The log file could not be read.','updraftplus');
|
791 |
-
}
|
792 |
-
|
793 |
-
} else {
|
794 |
-
$log_content .= __('The log file could not be read.','updraftplus');
|
795 |
-
}
|
796 |
-
|
797 |
-
|
798 |
-
echo json_encode(array(
|
799 |
-
'html' => $log_content,
|
800 |
-
'nonce' => $nonce
|
801 |
-
));
|
802 |
-
|
803 |
} elseif (isset($_GET['subaction']) && 'restore_alldownloaded' == $_GET['subaction'] && isset($_GET['restoreopts']) && isset($_GET['timestamp'])) {
|
804 |
|
805 |
$backups = $updraftplus->get_backup_history();
|
@@ -848,8 +803,7 @@ class UpdraftPlus_Admin {
|
|
848 |
}
|
849 |
|
850 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
851 |
-
$backupable_plus_db = $backupable_entities;
|
852 |
-
$backupable_plus_db['db'] = array('path' => 'path-unused', 'description' => __('Database', 'updraftplus'));
|
853 |
|
854 |
if (!empty($backups[$timestamp]['meta_foreign'])) {
|
855 |
$foreign_known = apply_filters('updraftplus_accept_archivename', array());
|
@@ -1096,8 +1050,7 @@ class UpdraftPlus_Admin {
|
|
1096 |
|
1097 |
$msg = '<strong>'.__('Start backup','updraftplus').':</strong> '.htmlspecialchars(__('OK. You should soon see activity in the "Last log message" field below.','updraftplus'));
|
1098 |
$this->close_browser_connection($msg);
|
1099 |
-
|
1100 |
-
do_action($event, apply_filters('updraft_backupnow_options', array('nocloud' => $backupnow_nocloud)));
|
1101 |
|
1102 |
# Old-style: schedule an event in 5 seconds time. This has the advantage of testing out the scheduler, and alerting the user if it doesn't work... but has the disadvantage of not working in that case.
|
1103 |
# I don't think the </div>s should be here - in case this is ever re-activated
|
@@ -1175,6 +1128,7 @@ class UpdraftPlus_Admin {
|
|
1175 |
} elseif (isset($_POST['subaction']) && $_POST['subaction'] == 'credentials_test') {
|
1176 |
$method = (preg_match("/^[a-z0-9]+$/", $_POST['method'])) ? $_POST['method'] : "";
|
1177 |
|
|
|
1178 |
require_once(UPDRAFTPLUS_DIR."/methods/$method.php");
|
1179 |
$objname = "UpdraftPlus_BackupModule_$method";
|
1180 |
|
@@ -1408,8 +1362,6 @@ class UpdraftPlus_Admin {
|
|
1408 |
$err[] = sprintf(__('Error: %s', 'updraftplus'), __('To import an ordinary WordPress site into a multisite installation requires both the multisite and migrator add-ons.', 'updraftplus'));
|
1409 |
return array($mess, $warn, $err);
|
1410 |
}
|
1411 |
-
} elseif (isset($old_siteinfo['multisite']) && $old_siteinfo['multisite'] && !is_multisite()) {
|
1412 |
-
$warn[] = __('Warning:', 'updraftplus').' '.__('Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible.', 'updraftplus').' <a href="http://codex.wordpress.org/Create_A_Network">'.__('If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite.', 'updraftplus').'</a>';
|
1413 |
}
|
1414 |
} elseif (preg_match('/^([^=]+)=(.*)$/', $matches[1], $kvmatches)) {
|
1415 |
$key = $kvmatches[1];
|
@@ -1645,7 +1597,7 @@ CREATE TABLE $wpdb->signups (
|
|
1645 |
if (!isset($_POST['chunks']) || (isset($_POST['chunk']) && $_POST['chunk'] == $_POST['chunks']-1)) {
|
1646 |
$file = basename($status['file']);
|
1647 |
# TODO: Make compatible with incremental naming scheme
|
1648 |
-
if (!preg_match('/^log\.[a-f0-9]{12}\.txt/
|
1649 |
$accept = apply_filters('updraftplus_accept_archivename', array());
|
1650 |
if (is_array($accept)) {
|
1651 |
foreach ($accept as $acc) {
|
@@ -1901,11 +1853,7 @@ CREATE TABLE $wpdb->signups (
|
|
1901 |
$updraft_dir = $updraftplus->backups_dir_location();
|
1902 |
$backup_disabled = ($updraftplus->really_is_writable($updraft_dir)) ? '' : 'disabled="disabled"';
|
1903 |
?>
|
1904 |
-
|
1905 |
-
<div id="updraft-poplog" >
|
1906 |
-
<div id="updraft-poplog-content"></div>
|
1907 |
-
</div>
|
1908 |
-
|
1909 |
<div id="updraft-navtab-status-content">
|
1910 |
|
1911 |
<div id="updraft-insert-admin-warning"></div>
|
@@ -1922,7 +1870,7 @@ CREATE TABLE $wpdb->signups (
|
|
1922 |
<th><?php _e('Actions', 'updraftplus');?>:</th>
|
1923 |
<td>
|
1924 |
|
1925 |
-
<button type="button" <?php echo $backup_disabled ?> class="button-primary updraft-bigbutton" <?php if ($backup_disabled) echo 'title="'.esc_attr(__('This button is disabled because your backup directory is not writable (see the settings).', 'updraftplus')).'" ';?> onclick="jQuery('#
|
1926 |
|
1927 |
<button type="button" class="button-primary updraft-bigbutton" onclick="updraft_openrestorepanel();">
|
1928 |
<?php _e('Restore','updraftplus');?>
|
@@ -1998,7 +1946,7 @@ CREATE TABLE $wpdb->signups (
|
|
1998 |
<th><?php _e('Last log message','updraftplus');?>:</th>
|
1999 |
<td>
|
2000 |
<span id="updraft_lastlogcontainer"><?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_lastmessage', __('(Nothing yet logged)','updraftplus'))); ?></span><br>
|
2001 |
-
<a href="?page=updraftplus&action=downloadlatestmodlog&wpnonce=<?php echo wp_create_nonce('updraftplus_download') ?>"
|
2002 |
</td>
|
2003 |
</tr>
|
2004 |
|
@@ -2046,7 +1994,7 @@ CREATE TABLE $wpdb->signups (
|
|
2046 |
</div>
|
2047 |
|
2048 |
<div id="updraft-backupnow-modal" title="UpdraftPlus - <?php _e('Perform a one-time backup','updraftplus'); ?>">
|
2049 |
-
<p><?php _e("To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity.",
|
2050 |
|
2051 |
<p>
|
2052 |
<input type="checkbox" id="backupnow_nodb"> <label for="backupnow_nodb"><?php _e("Don't include the database in the backup", 'updraftplus'); ?></label><br>
|
@@ -2054,8 +2002,6 @@ CREATE TABLE $wpdb->signups (
|
|
2054 |
<input type="checkbox" id="backupnow_nocloud"> <label for="backupnow_nocloud"><?php _e("Don't send this backup to remote storage", 'updraftplus'); ?></label>
|
2055 |
</p>
|
2056 |
|
2057 |
-
<?php do_action('updraft_backupnow_modal_afteroptions'); ?>
|
2058 |
-
|
2059 |
<p><?php _e('Does nothing happen when you attempt backups?','updraftplus');?> <a href="http://updraftplus.com/faqs/my-scheduled-backups-and-pressing-backup-now-does-nothing-however-pressing-debug-backup-does-produce-a-backup/"><?php _e('Go here for help.', 'updraftplus');?></a></p>
|
2060 |
</div>
|
2061 |
|
@@ -2225,6 +2171,7 @@ CREATE TABLE $wpdb->signups (
|
|
2225 |
?>
|
2226 |
<div><input id="updraft_restore_db" type="checkbox" name="updraft_restore[]" value="db"> <label for="updraft_restore_db"><?php _e('Database','updraftplus'); ?></label><br>
|
2227 |
|
|
|
2228 |
<div id="updraft_restorer_dboptions" style="display:none; padding:12px; margin: 8px 0 4px; border: dashed 1px;"><h4 style="margin: 0px 0px 6px; padding:0px;"><?php echo sprintf(__('%s restoration options:','updraftplus'),__('Database','updraftplus')); ?></h4>
|
2229 |
|
2230 |
<?php
|
@@ -2540,7 +2487,8 @@ CREATE TABLE $wpdb->signups (
|
|
2540 |
$ret .= '<div style="min-width: 480px; margin-top: 4px; clear:left; float:left; padding: 8px; border: 1px solid;" id="updraft-jobid-'.$job_id.'"><span style="font-weight:bold;" title="'.esc_attr(sprintf(__('Job ID: %s', 'updraftplus'), $job_id)).$title_info.'">'.$began_at.'</span> ';
|
2541 |
|
2542 |
$ret .= $show_inline_info;
|
2543 |
-
|
|
|
2544 |
|
2545 |
if (!$is_oneshot) $ret .=' - <a title="'.esc_attr(__('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.', 'updraftplus')).'" href="javascript:updraft_activejobs_delete(\''.$job_id.'\')">'.__('delete schedule', 'updraftplus').'</a>';
|
2546 |
|
@@ -2771,7 +2719,8 @@ CREATE TABLE $wpdb->signups (
|
|
2771 |
$updraft_dir = $updraftplus->backups_dir_location();
|
2772 |
|
2773 |
$potential_log_file = $updraft_dir."/log.".$updraft_last_backup['backup_nonce'].".txt";
|
2774 |
-
|
|
|
2775 |
}
|
2776 |
|
2777 |
} else {
|
@@ -3362,11 +3311,11 @@ CREATE TABLE $wpdb->signups (
|
|
3362 |
$rawbackup .= '</p></pre>';
|
3363 |
|
3364 |
$jobdata = $updraftplus->jobdata_getarray($non);
|
3365 |
-
$datespan = apply_filters('updraftplus_showbackup_date',
|
3366 |
|
3367 |
$ret .= <<<ENDHERE
|
3368 |
<tr id="updraft_existing_backups_row_$key">
|
3369 |
-
<td><div class="updraftplus-remove" style="width: 19px; height: 19px; padding-top:0px; font-size: 18px; text-align:center;font-weight:bold; border-radius: 7px;"><a style="text-decoration:none;" href="javascript:updraft_delete('$key', '$non', $sval);" title="$title">×</a></div></td><td class="updraft_existingbackup_date" data-rawbackup="$rawbackup">$datespan
|
3370 |
ENDHERE;
|
3371 |
|
3372 |
# TODO: This probably isn't showing the right thing when an incremental backup finishes
|
@@ -3507,6 +3456,7 @@ ENDHERE;
|
|
3507 |
}
|
3508 |
$ret .= '</td>';
|
3509 |
};
|
|
|
3510 |
if (empty($backup['meta_foreign'])) {
|
3511 |
$ret .= '<td>';
|
3512 |
if (isset($backup['nonce']) && preg_match("/^[0-9a-f]{12}$/",$backup['nonce']) && is_readable($updraft_dir.'/log.'.$backup['nonce'].'.txt')) {
|
@@ -3518,7 +3468,7 @@ ENDHERE;
|
|
3518 |
<input type="hidden" name="action" value="downloadlog" />
|
3519 |
<input type="hidden" name="page" value="updraftplus" />
|
3520 |
<input type="hidden" name="updraftplus_backup_nonce" value="$nval" />
|
3521 |
-
<input type="submit" value="$lt"
|
3522 |
</form>
|
3523 |
ENDHERE;
|
3524 |
} else {
|
@@ -3684,7 +3634,7 @@ ENDHERE;
|
|
3684 |
$itext = ($index == 0) ? '' : $index;
|
3685 |
} elseif (false != ($accepted_foreign = apply_filters('updraftplus_accept_foreign', false, $entry)) && false !== ($btime = apply_filters('updraftplus_foreign_gettime', false, $accepted_foreign, $entry))) {
|
3686 |
$nonce = substr(md5($entry), 0, 12);
|
3687 |
-
$type =
|
3688 |
$index = '0';
|
3689 |
$itext = '';
|
3690 |
$potmessage = array(
|
@@ -3693,7 +3643,7 @@ ENDHERE;
|
|
3693 |
'method' => '',
|
3694 |
'message' => sprintf(__('Backup created by: %s.', 'updraftplus'), $accept[$accepted_foreign]['desc'])
|
3695 |
);
|
3696 |
-
} elseif ('.zip' ==
|
3697 |
$potmessage = array(
|
3698 |
'code' => 'possibleforeign_'.md5($entry),
|
3699 |
'desc' => $entry,
|
36 |
|
37 |
$service = UpdraftPlus_Options::get_updraft_option('updraft_service');
|
38 |
|
39 |
+
if (UpdraftPlus_Options::user_can_manage() && ('googledrive' === $service || is_array($service) && in_array('googledrive', $service))) {
|
40 |
+
$opts = UpdraftPlus_Options::get_updraft_option('updraft_googledrive');
|
41 |
+
if (empty($opts)) {
|
42 |
+
$clientid = UpdraftPlus_Options::get_updraft_option('updraft_googledrive_clientid', '');
|
43 |
+
$token = UpdraftPlus_Options::get_updraft_option('updraft_googledrive_token', '');
|
44 |
+
} else {
|
45 |
+
$clientid = $opts['clientid'];
|
46 |
+
$token = (empty($opts['token'])) ? '' : $opts['token'];
|
|
|
|
|
|
|
47 |
}
|
48 |
+
if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googledrive'));
|
49 |
+
}
|
50 |
+
|
51 |
+
if (UpdraftPlus_Options::user_can_manage()) {
|
52 |
+
if ('dropbox' === $service || is_array($service) && in_array('dropbox', $service)) {
|
53 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_dropbox');
|
54 |
if (empty($opts['tk_request_token'])) {
|
55 |
add_action('all_admin_notices', array($this,'show_admin_warning_dropbox') );
|
56 |
}
|
57 |
}
|
58 |
+
if ('bitcasa' === $service || is_array($service) && in_array('bitcasa', $service)) {
|
59 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_bitcasa');
|
60 |
if (!empty($opts['clientid']) && !empty($opts['secret']) && empty($opts['token'])) add_action('all_admin_notices', array($this,'show_admin_warning_bitcasa') );
|
61 |
}
|
62 |
+
if ('copycom' === $service || is_array($service) && in_array('copycom', $service)) {
|
63 |
$opts = UpdraftPlus_Options::get_updraft_option('updraft_copycom');
|
64 |
if (!empty($opts['clientid']) && !empty($opts['secret']) && empty($opts['token'])) add_action('all_admin_notices', array($this,'show_admin_warning_copycom') );
|
65 |
}
|
169 |
'createbutton' => __('Create', 'updraftplus'),
|
170 |
'close' => __('Close', 'updraftplus'),
|
171 |
'restore' => __('Restore', 'updraftplus'),
|
|
|
172 |
) );
|
173 |
}
|
174 |
|
352 |
#ud_downloadstatus .file, #ud_downloadstatus2 .file {
|
353 |
margin-top: 8px;
|
354 |
}
|
|
|
355 |
</style>
|
356 |
<?php
|
357 |
|
367 |
|
368 |
# Adds the settings link under the plugin on the plugin screen.
|
369 |
public function plugin_action_links($links, $file) {
|
370 |
+
if ($file == 'updraftplus/updraftplus.php'){
|
371 |
$settings_link = '<a href="'.UpdraftPlus_Options::admin_page_url().'?page=updraftplus">'.__("Settings", "updraftplus").'</a>';
|
372 |
array_unshift($links, $settings_link);
|
373 |
// $settings_link = '<a href="http://david.dw-perspective.org.uk/donate">'.__("Donate","UpdraftPlus").'</a>';
|
732 |
curl_setopt($ch, CURLOPT_URL, $uri);
|
733 |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
734 |
curl_setopt($ch, CURLOPT_FAILONERROR, true);
|
735 |
+
$output = curl_exec($ch);
|
|
|
|
|
736 |
$response = curl_exec($ch);
|
737 |
$error = curl_error($ch);
|
738 |
$getinfo = curl_getinfo($ch);
|
739 |
curl_close($ch);
|
|
|
740 |
if (false === $response) {
|
741 |
+
echo json_encode(array('e' => htmlspecialchars($error)));
|
742 |
+
die;
|
743 |
}
|
744 |
+
echo json_encode(array('r' => $getinfo['http_code'].': '.htmlspecialchars(substr($response, 0, 200))));
|
|
|
|
|
|
|
|
|
|
|
745 |
} else {
|
746 |
$response = wp_remote_get($uri, array('timeout' => 10));
|
747 |
if (is_wp_error($response)) {
|
748 |
echo json_encode(array('e' => htmlspecialchars($response->get_error_message())));
|
749 |
die;
|
750 |
}
|
751 |
+
echo json_encode(array('r' => $response['response']['code'].': '.htmlspecialchars(substr($response['body'], 0, 200))));
|
752 |
}
|
753 |
die;
|
754 |
} elseif (isset($_REQUEST['subaction']) && 'dismissautobackup' == $_REQUEST['subaction']) {
|
755 |
UpdraftPlus_Options::update_updraft_option('updraftplus_dismissedautobackup', time() + 84*86400);
|
756 |
} elseif (isset($_REQUEST['subaction']) && 'dismissexpiry' == $_REQUEST['subaction']) {
|
757 |
UpdraftPlus_Options::update_updraft_option('updraftplus_dismissedexpiry', time() + 14*86400);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
758 |
} elseif (isset($_GET['subaction']) && 'restore_alldownloaded' == $_GET['subaction'] && isset($_GET['restoreopts']) && isset($_GET['timestamp'])) {
|
759 |
|
760 |
$backups = $updraftplus->get_backup_history();
|
803 |
}
|
804 |
|
805 |
$backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
|
806 |
+
$backupable_plus_db = $backupable_entities; $backupable_plus_db['db'] = array('path' => 'path-unused', 'description' => __('Database', 'updraftplus'));
|
|
|
807 |
|
808 |
if (!empty($backups[$timestamp]['meta_foreign'])) {
|
809 |
$foreign_known = apply_filters('updraftplus_accept_archivename', array());
|
1050 |
|
1051 |
$msg = '<strong>'.__('Start backup','updraftplus').':</strong> '.htmlspecialchars(__('OK. You should soon see activity in the "Last log message" field below.','updraftplus'));
|
1052 |
$this->close_browser_connection($msg);
|
1053 |
+
do_action($event, $backupnow_nocloud);
|
|
|
1054 |
|
1055 |
# Old-style: schedule an event in 5 seconds time. This has the advantage of testing out the scheduler, and alerting the user if it doesn't work... but has the disadvantage of not working in that case.
|
1056 |
# I don't think the </div>s should be here - in case this is ever re-activated
|
1128 |
} elseif (isset($_POST['subaction']) && $_POST['subaction'] == 'credentials_test') {
|
1129 |
$method = (preg_match("/^[a-z0-9]+$/", $_POST['method'])) ? $_POST['method'] : "";
|
1130 |
|
1131 |
+
// Test the credentials, return a code
|
1132 |
require_once(UPDRAFTPLUS_DIR."/methods/$method.php");
|
1133 |
$objname = "UpdraftPlus_BackupModule_$method";
|
1134 |
|
1362 |
$err[] = sprintf(__('Error: %s', 'updraftplus'), __('To import an ordinary WordPress site into a multisite installation requires both the multisite and migrator add-ons.', 'updraftplus'));
|
1363 |
return array($mess, $warn, $err);
|
1364 |
}
|
|
|
|
|
1365 |
}
|
1366 |
} elseif (preg_match('/^([^=]+)=(.*)$/', $matches[1], $kvmatches)) {
|
1367 |
$key = $kvmatches[1];
|
1597 |
if (!isset($_POST['chunks']) || (isset($_POST['chunk']) && $_POST['chunk'] == $_POST['chunks']-1)) {
|
1598 |
$file = basename($status['file']);
|
1599 |
# TODO: Make compatible with incremental naming scheme
|
1600 |
+
if (!preg_match('/^log\.[a-f0-9]{12}\.txt/', $file) && !preg_match('/^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-([\-a-z]+)([0-9]+(of[0-9]+)?)?\.(zip|gz|gz\.crypt)$/i', $file, $matches)) {
|
1601 |
$accept = apply_filters('updraftplus_accept_archivename', array());
|
1602 |
if (is_array($accept)) {
|
1603 |
foreach ($accept as $acc) {
|
1853 |
$updraft_dir = $updraftplus->backups_dir_location();
|
1854 |
$backup_disabled = ($updraftplus->really_is_writable($updraft_dir)) ? '' : 'disabled="disabled"';
|
1855 |
?>
|
1856 |
+
|
|
|
|
|
|
|
|
|
1857 |
<div id="updraft-navtab-status-content">
|
1858 |
|
1859 |
<div id="updraft-insert-admin-warning"></div>
|
1870 |
<th><?php _e('Actions', 'updraftplus');?>:</th>
|
1871 |
<td>
|
1872 |
|
1873 |
+
<button type="button" <?php echo $backup_disabled ?> class="button-primary updraft-bigbutton" <?php if ($backup_disabled) echo 'title="'.esc_attr(__('This button is disabled because your backup directory is not writable (see the settings).', 'updraftplus')).'" ';?> onclick="jQuery('#updraft-backupnow-modal').dialog('open');"><?php _e('Backup Now', 'updraftplus');?></button>
|
1874 |
|
1875 |
<button type="button" class="button-primary updraft-bigbutton" onclick="updraft_openrestorepanel();">
|
1876 |
<?php _e('Restore','updraftplus');?>
|
1946 |
<th><?php _e('Last log message','updraftplus');?>:</th>
|
1947 |
<td>
|
1948 |
<span id="updraft_lastlogcontainer"><?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_lastmessage', __('(Nothing yet logged)','updraftplus'))); ?></span><br>
|
1949 |
+
<a href="?page=updraftplus&action=downloadlatestmodlog&wpnonce=<?php echo wp_create_nonce('updraftplus_download') ?>"><?php _e('Download most recently modified log file','updraftplus');?></a>
|
1950 |
</td>
|
1951 |
</tr>
|
1952 |
|
1994 |
</div>
|
1995 |
|
1996 |
<div id="updraft-backupnow-modal" title="UpdraftPlus - <?php _e('Perform a one-time backup','updraftplus'); ?>">
|
1997 |
+
<p><?php _e("To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity after about 10 seconds. WordPress should start the backup running in the background.",'updraftplus');?></p>
|
1998 |
|
1999 |
<p>
|
2000 |
<input type="checkbox" id="backupnow_nodb"> <label for="backupnow_nodb"><?php _e("Don't include the database in the backup", 'updraftplus'); ?></label><br>
|
2002 |
<input type="checkbox" id="backupnow_nocloud"> <label for="backupnow_nocloud"><?php _e("Don't send this backup to remote storage", 'updraftplus'); ?></label>
|
2003 |
</p>
|
2004 |
|
|
|
|
|
2005 |
<p><?php _e('Does nothing happen when you attempt backups?','updraftplus');?> <a href="http://updraftplus.com/faqs/my-scheduled-backups-and-pressing-backup-now-does-nothing-however-pressing-debug-backup-does-produce-a-backup/"><?php _e('Go here for help.', 'updraftplus');?></a></p>
|
2006 |
</div>
|
2007 |
|
2171 |
?>
|
2172 |
<div><input id="updraft_restore_db" type="checkbox" name="updraft_restore[]" value="db"> <label for="updraft_restore_db"><?php _e('Database','updraftplus'); ?></label><br>
|
2173 |
|
2174 |
+
|
2175 |
<div id="updraft_restorer_dboptions" style="display:none; padding:12px; margin: 8px 0 4px; border: dashed 1px;"><h4 style="margin: 0px 0px 6px; padding:0px;"><?php echo sprintf(__('%s restoration options:','updraftplus'),__('Database','updraftplus')); ?></h4>
|
2176 |
|
2177 |
<?php
|
2487 |
$ret .= '<div style="min-width: 480px; margin-top: 4px; clear:left; float:left; padding: 8px; border: 1px solid;" id="updraft-jobid-'.$job_id.'"><span style="font-weight:bold;" title="'.esc_attr(sprintf(__('Job ID: %s', 'updraftplus'), $job_id)).$title_info.'">'.$began_at.'</span> ';
|
2488 |
|
2489 |
$ret .= $show_inline_info;
|
2490 |
+
|
2491 |
+
$ret .= '- <a href="?page=updraftplus&action=downloadlog&updraftplus_backup_nonce='.$job_id.'">'.__('show log', 'updraftplus').'</a>';
|
2492 |
|
2493 |
if (!$is_oneshot) $ret .=' - <a title="'.esc_attr(__('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.', 'updraftplus')).'" href="javascript:updraft_activejobs_delete(\''.$job_id.'\')">'.__('delete schedule', 'updraftplus').'</a>';
|
2494 |
|
2719 |
$updraft_dir = $updraftplus->backups_dir_location();
|
2720 |
|
2721 |
$potential_log_file = $updraft_dir."/log.".$updraft_last_backup['backup_nonce'].".txt";
|
2722 |
+
|
2723 |
+
if (is_readable($potential_log_file)) $last_backup_text .= "<a href=\"?page=updraftplus&action=downloadlog&updraftplus_backup_nonce=".$updraft_last_backup['backup_nonce']."\">".__('Download log file','updraftplus')."</a>";
|
2724 |
}
|
2725 |
|
2726 |
} else {
|
3311 |
$rawbackup .= '</p></pre>';
|
3312 |
|
3313 |
$jobdata = $updraftplus->jobdata_getarray($non);
|
3314 |
+
$datespan = apply_filters('updraftplus_showbackup_date', $pretty_date, $backup, $jobdata);
|
3315 |
|
3316 |
$ret .= <<<ENDHERE
|
3317 |
<tr id="updraft_existing_backups_row_$key">
|
3318 |
+
<td><div class="updraftplus-remove" style="width: 19px; height: 19px; padding-top:0px; font-size: 18px; text-align:center;font-weight:bold; border-radius: 7px;"><a style="text-decoration:none;" href="javascript:updraft_delete('$key', '$non', $sval);" title="$title">×</a></div></td><td class="updraft_existingbackup_date" data-rawbackup="$rawbackup"><b>$datespan</b>
|
3319 |
ENDHERE;
|
3320 |
|
3321 |
# TODO: This probably isn't showing the right thing when an incremental backup finishes
|
3456 |
}
|
3457 |
$ret .= '</td>';
|
3458 |
};
|
3459 |
+
|
3460 |
if (empty($backup['meta_foreign'])) {
|
3461 |
$ret .= '<td>';
|
3462 |
if (isset($backup['nonce']) && preg_match("/^[0-9a-f]{12}$/",$backup['nonce']) && is_readable($updraft_dir.'/log.'.$backup['nonce'].'.txt')) {
|
3468 |
<input type="hidden" name="action" value="downloadlog" />
|
3469 |
<input type="hidden" name="page" value="updraftplus" />
|
3470 |
<input type="hidden" name="updraftplus_backup_nonce" value="$nval" />
|
3471 |
+
<input type="submit" value="$lt" />
|
3472 |
</form>
|
3473 |
ENDHERE;
|
3474 |
} else {
|
3634 |
$itext = ($index == 0) ? '' : $index;
|
3635 |
} elseif (false != ($accepted_foreign = apply_filters('updraftplus_accept_foreign', false, $entry)) && false !== ($btime = apply_filters('updraftplus_foreign_gettime', false, $accepted_foreign, $entry))) {
|
3636 |
$nonce = substr(md5($entry), 0, 12);
|
3637 |
+
$type = preg_match('/\.sql(\.(bz2|gz))?$/', $entry) ? 'db' : 'wpcore';
|
3638 |
$index = '0';
|
3639 |
$itext = '';
|
3640 |
$potmessage = array(
|
3643 |
'method' => '',
|
3644 |
'message' => sprintf(__('Backup created by: %s.', 'updraftplus'), $accept[$accepted_foreign]['desc'])
|
3645 |
);
|
3646 |
+
} elseif ('.zip' == substr($entry, -4, 4) || preg_match('/\.sql(\.(bz2|gz))?$/', $entry)) {
|
3647 |
$potmessage = array(
|
3648 |
'code' => 'possibleforeign_'.md5($entry),
|
3649 |
'desc' => $entry,
|
@@ -3,7 +3,7 @@
|
|
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 |
-
// This file contains functions that are only needed/loaded when a backup is running (reduces memory usage on other pages)
|
7 |
|
8 |
class UpdraftPlus_Backup {
|
9 |
|
@@ -14,7 +14,7 @@ class UpdraftPlus_Backup {
|
|
14 |
public $zipfiles_dirbatched;
|
15 |
public $zipfiles_batched;
|
16 |
public $zipfiles_skipped_notaltered;
|
17 |
-
private $zip_split_every =
|
18 |
private $zip_last_ratio = 1;
|
19 |
private $whichone;
|
20 |
private $zip_basename = '';
|
@@ -575,7 +575,7 @@ class UpdraftPlus_Backup {
|
|
575 |
}
|
576 |
|
577 |
$body = apply_filters('updraft_report_body',
|
578 |
-
__('Backup of:'
|
579 |
"UpdraftPlus ".__('WordPress backup is complete','updraftplus').".\r\n".
|
580 |
__('Backup contains:','updraftplus')." $backup_contains\r\n".
|
581 |
__('Latest status:', 'updraftplus').' '.$final_message."\r\n".
|
@@ -1571,7 +1571,7 @@ class UpdraftPlus_Backup {
|
|
1571 |
|
1572 |
// Caution: $source is allowed to be an array, not just a filename
|
1573 |
// $destination is the temporary file (ending in .tmp)
|
1574 |
-
private function make_zipfile($source, $backup_file_basename, $whichone
|
1575 |
|
1576 |
global $updraftplus;
|
1577 |
|
@@ -1583,7 +1583,7 @@ class UpdraftPlus_Backup {
|
|
1583 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
1584 |
|
1585 |
// Legacy/redundant
|
1586 |
-
|
1587 |
|
1588 |
// When to prefer PCL:
|
1589 |
// - We were asked to
|
@@ -1694,19 +1694,13 @@ class UpdraftPlus_Backup {
|
|
1694 |
|
1695 |
// Any not yet dispatched? Under our present scheme, at this point nothing has yet been despatched. And since the enumerating of all files can take a while, we can at this point do a further modification check to reduce the chance of overlaps.
|
1696 |
// This relies on us *not* touch()ing the zip file to indicate to any resumption 'behind us' that we're already here. Rather, we're relying on the combined facts that a) if it takes us a while to search the directory tree, then it should do for the one behind us too (though they'll have the benefit of cache, so could catch very fast) and b) we touch *immediately* after finishing the enumeration of the files to add.
|
1697 |
-
|
1698 |
-
if ($retry_on_error) $updraftplus->check_recent_modification($destination);
|
1699 |
// Here we're relying on the fact that both PclZip and ZipArchive will happily operate on an empty file. Note that BinZip *won't* (for that, may need a new strategy - e.g. add the very first file on its own, in order to 'lay down a marker')
|
1700 |
if (empty($do_bump_index)) @touch($destination);
|
1701 |
|
1702 |
-
if (count($this->zipfiles_dirbatched)
|
1703 |
-
|
1704 |
$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)));
|
1705 |
-
|
1706 |
-
// 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).
|
1707 |
-
$warn_on_failures = ($retry_on_error) ? false : true;
|
1708 |
-
$add_them = $this->makezip_addfiles($warn_on_failures);
|
1709 |
-
|
1710 |
if (is_wp_error($add_them)) {
|
1711 |
foreach ($add_them->get_error_messages() as $msg) {
|
1712 |
$updraftplus->log("Error returned from makezip_addfiles: ".$msg);
|
@@ -1716,34 +1710,30 @@ class UpdraftPlus_Backup {
|
|
1716 |
$updraftplus->log("Error: makezip_addfiles returned false");
|
1717 |
$error_occurred = true;
|
1718 |
}
|
1719 |
-
|
1720 |
}
|
1721 |
|
1722 |
-
|
1723 |
|
1724 |
$itext = (empty($this->index)) ? '' : ($this->index+1);
|
1725 |
# TODO: Make compatible with filenames which indicate increments
|
1726 |
$destination_base = $backup_file_basename.'-'.$whichone.$itext.'.zip.tmp';
|
1727 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
1728 |
|
1729 |
-
|
1730 |
-
|
1731 |
-
|
1732 |
-
|
1733 |
-
|
1734 |
-
|
1735 |
-
|
1736 |
-
$ret = $this->make_zipfile($source, $backup_file_basename, $whichone, false);
|
1737 |
-
$this->use_zip_object = $saved_zip_object;
|
1738 |
-
return $ret;
|
1739 |
-
}
|
1740 |
-
|
1741 |
-
// zipfiles_added > 0 means that $zip->close() has been called. i.e. An attempt was made to add something: something _should_ be there.
|
1742 |
-
// 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.
|
1743 |
-
// (file_exists($destination) || $this->index == $original_index) might be an alternative to $this->zipfiles_added > 0 - ? But, don't change what's not broken.
|
1744 |
-
if ($error_occurred == false || $this->zipfiles_added > 0) {
|
1745 |
return true;
|
1746 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
1747 |
$updraftplus->log("makezip failure: zipfiles_added=".$this->zipfiles_added.", error_occurred=".$error_occurred." (method=".$this->use_zip_object.")");
|
1748 |
return false;
|
1749 |
}
|
@@ -1771,20 +1761,18 @@ class UpdraftPlus_Backup {
|
|
1771 |
// 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)
|
1772 |
|
1773 |
// We batch up the files, rather than do them one at a time. So we are more efficient than open,one-write,close.
|
1774 |
-
|
1775 |
-
private function makezip_addfiles($warn_on_failures) {
|
1776 |
|
1777 |
global $updraftplus;
|
1778 |
|
1779 |
# Used to detect requests to bump the size
|
1780 |
$bump_index = false;
|
1781 |
-
$ret = true;
|
1782 |
|
1783 |
# TODO: Make compatible with filenames which indicate increments
|
1784 |
$zipfile = $this->zip_basename.(($this->index == 0) ? '' : ($this->index+1)).'.zip.tmp';
|
1785 |
|
1786 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
1787 |
-
if ((int)$maxzipbatch <
|
1788 |
|
1789 |
// Short-circuit the null case, because we want to detect later if something useful happenned
|
1790 |
if (count($this->zipfiles_dirbatched) == 0 && count($this->zipfiles_batched) == 0) return true;
|
@@ -1844,7 +1832,7 @@ class UpdraftPlus_Backup {
|
|
1844 |
$original_size = filesize($zipfile);
|
1845 |
clearstatcache();
|
1846 |
} else {
|
1847 |
-
$create_code = (
|
1848 |
$opencode = $zip->open($zipfile, $create_code);
|
1849 |
$original_size = 0;
|
1850 |
}
|
@@ -1872,7 +1860,6 @@ class UpdraftPlus_Backup {
|
|
1872 |
@touch($zipfile);
|
1873 |
$zip->addFile($file, $add_as);
|
1874 |
$zipfiles_added_thisbatch++;
|
1875 |
-
// N.B., Since makezip_addfiles() can get called more than once if there were errors detected, potentially $zipfiles_added_thisrun can exceed the total number of batched files (if they get processed twice).
|
1876 |
$this->zipfiles_added_thisrun++;
|
1877 |
$files_zipadded_since_open[] = array('file' => $file, 'addas' => $add_as);
|
1878 |
|
@@ -1903,13 +1890,13 @@ class UpdraftPlus_Backup {
|
|
1903 |
} else {
|
1904 |
$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)');
|
1905 |
}
|
1906 |
-
|
1907 |
if (!$zip->close()) {
|
1908 |
-
|
1909 |
-
$
|
1910 |
-
|
|
|
|
|
1911 |
}
|
1912 |
-
|
1913 |
$zipfiles_added_thisbatch = 0;
|
1914 |
|
1915 |
# This triggers a re-open, later
|
@@ -2064,9 +2051,7 @@ class UpdraftPlus_Backup {
|
|
2064 |
// Testing shows that calling time() 1000 times takes negligible time
|
2065 |
$this->zipfiles_lastwritetime=time();
|
2066 |
}
|
2067 |
-
|
2068 |
$this->zipfiles_added++;
|
2069 |
-
|
2070 |
// Don't call something_useful_happened() here - nothing necessarily happens until close() is called
|
2071 |
if ($this->zipfiles_added % 100 == 0) $updraftplus->log("Zip: ".basename($zipfile).": ".$this->zipfiles_added." files added (on-disk size: ".round(@filesize($zipfile)/1024,1)." Kb)");
|
2072 |
|
@@ -2100,7 +2085,13 @@ class UpdraftPlus_Backup {
|
|
2100 |
$this->zipfiles_batched = array();
|
2101 |
$this->zipfiles_skipped_notaltered = array();
|
2102 |
|
2103 |
-
if (false == ($
|
|
|
|
|
|
|
|
|
|
|
|
|
2104 |
|
2105 |
do_action("updraftplus_makezip_addfiles_finished", $this, $this->whichone);
|
2106 |
|
@@ -2116,19 +2107,7 @@ class UpdraftPlus_Backup {
|
|
2116 |
|
2117 |
clearstatcache();
|
2118 |
|
2119 |
-
return
|
2120 |
-
}
|
2121 |
-
|
2122 |
-
private function record_zip_error($files_zipadded_since_open, $msg, $warn = true) {
|
2123 |
-
global $updraftplus;
|
2124 |
-
|
2125 |
-
if ($warn) $updraftplus->log(__('A zip error occurred - check your log for more details.', 'updraftplus'), 'warning', 'zipcloseerror-'.$this->whichone);
|
2126 |
-
|
2127 |
-
$updraftplus->log("The attempt to close the zip file returned an error ($msg). List of files we were trying to add follows (check their permissions).");
|
2128 |
-
|
2129 |
-
foreach ($files_zipadded_since_open as $ffile) {
|
2130 |
-
$updraftplus->log("File: ".$ffile['addas']." (exists: ".(int)@file_exists($ffile['file']).", is_readable: ".(int)@is_readable($ffile['file'])." size: ".@filesize($ffile['file']).')', 'notice', false, true);
|
2131 |
-
}
|
2132 |
}
|
2133 |
|
2134 |
private function bump_index() {
|
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 |
+
// This file contains functions that are only needed/loaded when a backup is running (reduces memory usage on other site pages)
|
7 |
|
8 |
class UpdraftPlus_Backup {
|
9 |
|
14 |
public $zipfiles_dirbatched;
|
15 |
public $zipfiles_batched;
|
16 |
public $zipfiles_skipped_notaltered;
|
17 |
+
private $zip_split_every = 838860800; # 800Mb
|
18 |
private $zip_last_ratio = 1;
|
19 |
private $whichone;
|
20 |
private $zip_basename = '';
|
575 |
}
|
576 |
|
577 |
$body = apply_filters('updraft_report_body',
|
578 |
+
__('Backup of:').' '.site_url()."\r\n".
|
579 |
"UpdraftPlus ".__('WordPress backup is complete','updraftplus').".\r\n".
|
580 |
__('Backup contains:','updraftplus')." $backup_contains\r\n".
|
581 |
__('Latest status:', 'updraftplus').' '.$final_message."\r\n".
|
1571 |
|
1572 |
// Caution: $source is allowed to be an array, not just a filename
|
1573 |
// $destination is the temporary file (ending in .tmp)
|
1574 |
+
private function make_zipfile($source, $backup_file_basename, $whichone = '') {
|
1575 |
|
1576 |
global $updraftplus;
|
1577 |
|
1583 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
1584 |
|
1585 |
// Legacy/redundant
|
1586 |
+
if (empty($whichone) && is_string($whichone)) $whichone = basename($source);
|
1587 |
|
1588 |
// When to prefer PCL:
|
1589 |
// - We were asked to
|
1694 |
|
1695 |
// Any not yet dispatched? Under our present scheme, at this point nothing has yet been despatched. And since the enumerating of all files can take a while, we can at this point do a further modification check to reduce the chance of overlaps.
|
1696 |
// This relies on us *not* touch()ing the zip file to indicate to any resumption 'behind us' that we're already here. Rather, we're relying on the combined facts that a) if it takes us a while to search the directory tree, then it should do for the one behind us too (though they'll have the benefit of cache, so could catch very fast) and b) we touch *immediately* after finishing the enumeration of the files to add.
|
1697 |
+
$updraftplus->check_recent_modification($destination);
|
|
|
1698 |
// Here we're relying on the fact that both PclZip and ZipArchive will happily operate on an empty file. Note that BinZip *won't* (for that, may need a new strategy - e.g. add the very first file on its own, in order to 'lay down a marker')
|
1699 |
if (empty($do_bump_index)) @touch($destination);
|
1700 |
|
1701 |
+
if (count($this->zipfiles_dirbatched)>0 || count($this->zipfiles_batched)>0) {
|
|
|
1702 |
$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)));
|
1703 |
+
$add_them = $this->makezip_addfiles();
|
|
|
|
|
|
|
|
|
1704 |
if (is_wp_error($add_them)) {
|
1705 |
foreach ($add_them->get_error_messages() as $msg) {
|
1706 |
$updraftplus->log("Error returned from makezip_addfiles: ".$msg);
|
1710 |
$updraftplus->log("Error: makezip_addfiles returned false");
|
1711 |
$error_occurred = true;
|
1712 |
}
|
|
|
1713 |
}
|
1714 |
|
1715 |
+
# Reset these variables because the index may have changed since we began
|
1716 |
|
1717 |
$itext = (empty($this->index)) ? '' : ($this->index+1);
|
1718 |
# TODO: Make compatible with filenames which indicate increments
|
1719 |
$destination_base = $backup_file_basename.'-'.$whichone.$itext.'.zip.tmp';
|
1720 |
$destination = $this->updraft_dir.'/'.$destination_base;
|
1721 |
|
1722 |
+
if ($this->zipfiles_added > 0 || $error_occurred == false) {
|
1723 |
+
// ZipArchive::addFile sometimes fails
|
1724 |
+
if ((file_exists($destination) || $this->index == $original_index) && @filesize($destination) < 90 && 'UpdraftPlus_ZipArchive' == $this->use_zip_object) {
|
1725 |
+
$updraftplus->log("makezip_addfiles(ZipArchive) apparently failed (file=".basename($destination).", type=$whichone, size=".filesize($destination).") - retrying with PclZip");
|
1726 |
+
$this->use_zip_object = 'UpdraftPlus_PclZip';
|
1727 |
+
return $this->make_zipfile($source, $backup_file_basename, $whichone);
|
1728 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1729 |
return true;
|
1730 |
} else {
|
1731 |
+
# If ZipArchive, and if an error occurred, and if apparently ZipArchive did nothing, then immediately retry with PclZip. Q. Why this specific criteria? A. Because we've seen it in the wild, and it's quicker to try PcLZip now than waiting until resumption 9 when the automatic switchover happens.
|
1732 |
+
if ($error_occurred != false && (file_exists($destination) || $this->index == $original_index) && @filesize($destination) < 90 && 'UpdraftPlus_ZipArchive' == $this->use_zip_object) {
|
1733 |
+
$updraftplus->log("makezip_addfiles(ZipArchive) apparently failed (file=".basename($destination).", type=$whichone, size=".filesize($destination).") - retrying with PclZip");
|
1734 |
+
$this->use_zip_object = 'UpdraftPlus_PclZip';
|
1735 |
+
return $this->make_zipfile($source, $backup_file_basename, $whichone);
|
1736 |
+
}
|
1737 |
$updraftplus->log("makezip failure: zipfiles_added=".$this->zipfiles_added.", error_occurred=".$error_occurred." (method=".$this->use_zip_object.")");
|
1738 |
return false;
|
1739 |
}
|
1761 |
// 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)
|
1762 |
|
1763 |
// We batch up the files, rather than do them one at a time. So we are more efficient than open,one-write,close.
|
1764 |
+
private function makezip_addfiles() {
|
|
|
1765 |
|
1766 |
global $updraftplus;
|
1767 |
|
1768 |
# Used to detect requests to bump the size
|
1769 |
$bump_index = false;
|
|
|
1770 |
|
1771 |
# TODO: Make compatible with filenames which indicate increments
|
1772 |
$zipfile = $this->zip_basename.(($this->index == 0) ? '' : ($this->index+1)).'.zip.tmp';
|
1773 |
|
1774 |
$maxzipbatch = $updraftplus->jobdata_get('maxzipbatch', 26214400);
|
1775 |
+
if ((int)$maxzipbatch < 1) $maxzipbatch = 26214400;
|
1776 |
|
1777 |
// Short-circuit the null case, because we want to detect later if something useful happenned
|
1778 |
if (count($this->zipfiles_dirbatched) == 0 && count($this->zipfiles_batched) == 0) return true;
|
1832 |
$original_size = filesize($zipfile);
|
1833 |
clearstatcache();
|
1834 |
} else {
|
1835 |
+
$create_code = (defined('ZIPARCHIVE::CREATE')) ? ZIPARCHIVE::CREATE : 1;
|
1836 |
$opencode = $zip->open($zipfile, $create_code);
|
1837 |
$original_size = 0;
|
1838 |
}
|
1860 |
@touch($zipfile);
|
1861 |
$zip->addFile($file, $add_as);
|
1862 |
$zipfiles_added_thisbatch++;
|
|
|
1863 |
$this->zipfiles_added_thisrun++;
|
1864 |
$files_zipadded_since_open[] = array('file' => $file, 'addas' => $add_as);
|
1865 |
|
1890 |
} else {
|
1891 |
$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)');
|
1892 |
}
|
|
|
1893 |
if (!$zip->close()) {
|
1894 |
+
$updraftplus->log(__('A zip error occurred - check your log for more details.', 'updraftplus'), 'warning', 'zipcloseerror');
|
1895 |
+
$updraftplus->log("The attempt to close the zip file returned an error (".$zip->last_error."). List of files we were trying to add follows (check their permissions).");
|
1896 |
+
foreach ($files_zipadded_since_open as $ffile) {
|
1897 |
+
$updraftplus->log("File: ".$ffile['addas']." (exists: ".(int)@file_exists($ffile['file']).", is_readable: ".(int)@is_readable($ffile['file'])." size: ".@filesize($ffile['file']).')');
|
1898 |
+
}
|
1899 |
}
|
|
|
1900 |
$zipfiles_added_thisbatch = 0;
|
1901 |
|
1902 |
# This triggers a re-open, later
|
2051 |
// Testing shows that calling time() 1000 times takes negligible time
|
2052 |
$this->zipfiles_lastwritetime=time();
|
2053 |
}
|
|
|
2054 |
$this->zipfiles_added++;
|
|
|
2055 |
// Don't call something_useful_happened() here - nothing necessarily happens until close() is called
|
2056 |
if ($this->zipfiles_added % 100 == 0) $updraftplus->log("Zip: ".basename($zipfile).": ".$this->zipfiles_added." files added (on-disk size: ".round(@filesize($zipfile)/1024,1)." Kb)");
|
2057 |
|
2085 |
$this->zipfiles_batched = array();
|
2086 |
$this->zipfiles_skipped_notaltered = array();
|
2087 |
|
2088 |
+
if (false == ($ret = $zip->close())) {
|
2089 |
+
$updraftplus->log(__('A zip error occurred - check your log for more details.', 'updraftplus'), 'warning', 'zipcloseerror');
|
2090 |
+
$updraftplus->log("Closing the zip file returned an error (".$zip->last_error."). List of files we were trying to add follows (check their permissions).");
|
2091 |
+
foreach ($files_zipadded_since_open as $ffile) {
|
2092 |
+
$updraftplus->log("File: ".$ffile['addas']." (exists: ".(int)@file_exists($ffile['file']).", size: ".@filesize($ffile['file']).')');
|
2093 |
+
}
|
2094 |
+
}
|
2095 |
|
2096 |
do_action("updraftplus_makezip_addfiles_finished", $this, $this->whichone);
|
2097 |
|
2107 |
|
2108 |
clearstatcache();
|
2109 |
|
2110 |
+
return $ret;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2111 |
}
|
2112 |
|
2113 |
private function bump_index() {
|
@@ -18,6 +18,7 @@ class UpdraftPlus {
|
|
18 |
'copycom' => 'Copy.Com',
|
19 |
'sftp' => 'SFTP / SCP',
|
20 |
'webdav' => 'WebDAV',
|
|
|
21 |
's3generic' => 'S3-Compatible (Generic)',
|
22 |
'openstack' => 'OpenStack (Swift)',
|
23 |
'dreamobjects' => 'DreamObjects',
|
@@ -47,9 +48,6 @@ class UpdraftPlus {
|
|
47 |
|
48 |
public function __construct() {
|
49 |
|
50 |
-
# Bitcasa support is deprecated
|
51 |
-
if (is_file(UPDRAFTPLUS_DIR.'/addons/bitcasa.php')) $this->backup_methods['bitcasa'] = 'Bitcasa';
|
52 |
-
|
53 |
// Initialisation actions - takes place on plugin load
|
54 |
|
55 |
if ($fp = fopen(UPDRAFTPLUS_DIR.'/updraftplus.php', 'r')) {
|
@@ -133,31 +131,6 @@ class UpdraftPlus {
|
|
133 |
return $matches;
|
134 |
}
|
135 |
|
136 |
-
public function last_modified_log() {
|
137 |
-
$updraft_dir = $this->backups_dir_location();
|
138 |
-
|
139 |
-
$log_file = '';
|
140 |
-
$mod_time = 0;
|
141 |
-
$nonce = '';
|
142 |
-
|
143 |
-
if ($handle = @opendir($updraft_dir)) {
|
144 |
-
while (false !== ($entry = readdir($handle))) {
|
145 |
-
// The latter match is for files created internally by zipArchive::addFile
|
146 |
-
if (preg_match('/^log\.([a-z0-9]+)\.txt$/i', $entry, $matches)) {
|
147 |
-
$mtime = filemtime($updraft_dir.'/'.$entry);
|
148 |
-
if ($mtime > $mod_time) {
|
149 |
-
$mod_time = $mtime;
|
150 |
-
$log_file = $updraft_dir.'/'.$entry;
|
151 |
-
$nonce = $matches[1];
|
152 |
-
}
|
153 |
-
}
|
154 |
-
}
|
155 |
-
@closedir($handle);
|
156 |
-
}
|
157 |
-
|
158 |
-
return array($mod_time, $log_file, $nonce);
|
159 |
-
}
|
160 |
-
|
161 |
// This function may get called multiple times, so write accordingly
|
162 |
public function admin_menu() {
|
163 |
// We are in the admin area: now load all that code
|
@@ -166,7 +139,24 @@ class UpdraftPlus {
|
|
166 |
|
167 |
if (isset($_GET['wpnonce']) && isset($_GET['page']) && isset($_GET['action']) && $_GET['page'] == 'updraftplus' && $_GET['action'] == 'downloadlatestmodlog' && wp_verify_nonce($_GET['wpnonce'], 'updraftplus_download')) {
|
168 |
|
169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
170 |
|
171 |
if ($mod_time >0) {
|
172 |
if (is_readable($log_file)) {
|
@@ -228,7 +218,6 @@ class UpdraftPlus {
|
|
228 |
$log_file = $updraft_dir.'/log.'.$_GET['updraftplus_backup_nonce'].'.txt';
|
229 |
if (is_readable($log_file)) {
|
230 |
header('Content-type: text/plain');
|
231 |
-
if (!empty($_GET['force_download'])) header('Content-Disposition: attachment; filename="'.basename($log_file).'"');
|
232 |
readfile($log_file);
|
233 |
exit;
|
234 |
} else {
|
@@ -1500,24 +1489,21 @@ class UpdraftPlus {
|
|
1500 |
$this->boot_backup(false, true);
|
1501 |
}
|
1502 |
|
1503 |
-
public function backup_all($
|
1504 |
-
$
|
1505 |
-
$this->boot_backup(1, 1, false, false, ($skip_cloud) ? 'none' : false, $options);
|
1506 |
}
|
1507 |
|
1508 |
-
public function backupnow_files($
|
1509 |
-
$
|
1510 |
-
$this->boot_backup(1, 0, false, false, ($skip_cloud) ? 'none' : false, $options);
|
1511 |
}
|
1512 |
|
1513 |
-
public function backupnow_database($
|
1514 |
-
$
|
1515 |
-
$this->boot_backup(0, 1, false, false, ($skip_cloud) ? 'none' : false, $options);
|
1516 |
}
|
1517 |
|
1518 |
// This procedure initiates a backup run
|
1519 |
// $backup_files/$backup_database: true/false = yes/no (over-write allowed); 1/0 = yes/no (force)
|
1520 |
-
public function boot_backup($backup_files, $backup_database, $restrict_files_to_override = false, $one_shot = false, $service = false
|
1521 |
|
1522 |
@ignore_user_abort(true);
|
1523 |
@set_time_limit(900);
|
@@ -1641,8 +1627,6 @@ class UpdraftPlus {
|
|
1641 |
array_push($initial_jobdata, 'backup_database', $dbs);
|
1642 |
array_push($initial_jobdata, 'backup_files', (($backup_files) ? 'begun' : 'no'));
|
1643 |
|
1644 |
-
if (is_array($options) && !empty($options['label'])) array_push($initial_jobdata, 'label', $options['label']);
|
1645 |
-
|
1646 |
// Use of jobdata_set_multi saves around 200ms
|
1647 |
call_user_func_array(array($this, 'jobdata_set_multi'), apply_filters('updraftplus_initial_jobdata', $initial_jobdata));
|
1648 |
|
@@ -2112,7 +2096,6 @@ class UpdraftPlus {
|
|
2112 |
$backup_history = (is_array($backup_history)) ? $backup_history : array();
|
2113 |
$backup_array['nonce'] = $this->nonce;
|
2114 |
$backup_array['service'] = $this->jobdata_get('service');
|
2115 |
-
if ('' != ($label = $this->jobdata_get('label', ''))) $backup_array['label'] = $label;
|
2116 |
$backup_history[$this->backup_time] = $backup_array;
|
2117 |
UpdraftPlus_Options::update_updraft_option('updraft_backup_history', $backup_history, false);
|
2118 |
} else {
|
@@ -2167,45 +2150,40 @@ class UpdraftPlus {
|
|
2167 |
admin settings are saved it is called.
|
2168 |
*/
|
2169 |
public function schedule_backup($interval) {
|
2170 |
-
$previous_time = wp_next_scheduled('updraft_backup');
|
2171 |
|
2172 |
// Clear schedule so that we don't stack up scheduled backups
|
2173 |
wp_clear_scheduled_hook('updraft_backup');
|
|
|
2174 |
if ('manual' == $interval) return 'manual';
|
2175 |
|
2176 |
-
$previous_interval = UpdraftPlus_Options::get_updraft_option('updraft_interval');
|
2177 |
-
|
2178 |
$valid_schedules = wp_get_schedules();
|
2179 |
if (empty($valid_schedules[$interval])) $interval = 'daily';
|
2180 |
|
2181 |
-
|
2182 |
-
$default_time = ($interval == $previous_interval && $previous_time>0) ? $previous_time : time()+120;
|
2183 |
-
$first_time = apply_filters('updraftplus_schedule_firsttime_files', $default_time);
|
2184 |
-
|
2185 |
wp_schedule_event($first_time, $interval, 'updraft_backup');
|
2186 |
|
2187 |
return $interval;
|
2188 |
}
|
2189 |
|
2190 |
public function schedule_backup_database($interval) {
|
2191 |
-
$previous_time = wp_next_scheduled('updraft_backup_database');
|
2192 |
|
2193 |
// Clear schedule so that we don't stack up scheduled backups
|
2194 |
wp_clear_scheduled_hook('updraft_backup_database');
|
2195 |
-
if ('manual' == $interval) return 'manual';
|
2196 |
|
2197 |
-
$
|
2198 |
|
2199 |
$valid_schedules = wp_get_schedules();
|
2200 |
if (empty($valid_schedules[$interval])) $interval = 'daily';
|
2201 |
|
2202 |
-
|
2203 |
-
$default_time = ($interval == $previous_interval && $previous_time>0) ? $previous_time : time()+120;
|
2204 |
-
|
2205 |
-
$first_time = apply_filters('updraftplus_schedule_firsttime_db', $default_time);
|
2206 |
wp_schedule_event($first_time, $interval, 'updraft_backup_database');
|
2207 |
|
2208 |
return $interval;
|
|
|
|
|
|
|
|
|
|
|
2209 |
}
|
2210 |
|
2211 |
// Acts as a WordPress options filter
|
@@ -2329,11 +2307,10 @@ class UpdraftPlus {
|
|
2329 |
|
2330 |
// Check for the existence of the dir and prevent enumeration
|
2331 |
// index.php is for a sanity check - make sure that we're not somewhere unexpected
|
2332 |
-
if((!is_dir($updraft_dir) || !is_file($updraft_dir.'/index.html') || !is_file($updraft_dir.'/.htaccess')) && !is_file($updraft_dir.'/index.php')
|
2333 |
@mkdir($updraft_dir, 0775, true);
|
2334 |
@file_put_contents($updraft_dir.'/index.html',"<html><body><a href=\"http://updraftplus.com\">WordPress backups by UpdraftPlus</a></body></html>");
|
2335 |
if (!is_file($updraft_dir.'/.htaccess')) @file_put_contents($updraft_dir.'/.htaccess','deny from all');
|
2336 |
-
if (!is_file($updraft_dir.'/web.config')) @file_put_contents($updraft_dir.'/web.config', "<configuration>\n<system.webServer>\n<authorization>\n<deny users=\"*\" />\n</authorization>\n</system.webServer>\n</configuration>\n");
|
2337 |
}
|
2338 |
|
2339 |
$this->backup_dir = $updraft_dir;
|
@@ -2476,16 +2453,6 @@ class UpdraftPlus {
|
|
2476 |
return fetch_feed('http://feeds.feedburner.com/updraftplus/');
|
2477 |
}
|
2478 |
|
2479 |
-
public function get_wplang() {
|
2480 |
-
# See: https://core.trac.wordpress.org/changeset/29630
|
2481 |
-
global $wp_current_db_version;
|
2482 |
-
if ( $wp_current_db_version < 29630 ) {
|
2483 |
-
return (defined('WPLANG')) ? WPLANG : '';
|
2484 |
-
} else {
|
2485 |
-
return get_option('WPLANG', '');
|
2486 |
-
}
|
2487 |
-
}
|
2488 |
-
|
2489 |
public function wordshell_random_advert($urls) {
|
2490 |
if (defined('UPDRAFTPLUS_NOADS_B')) return "";
|
2491 |
$rad = rand(0, 8);
|
@@ -2494,8 +2461,7 @@ class UpdraftPlus {
|
|
2494 |
return $this->url_start($urls,'updraftplus.com').__("Want more features or paid, guaranteed support? Check out UpdraftPlus.Com", 'updraftplus').$this->url_end($urls,'updraftplus.com');
|
2495 |
break;
|
2496 |
case 1:
|
2497 |
-
|
2498 |
-
if (strlen($wplang)>0 && !is_file(UPDRAFTPLUS_DIR.'/languages/updraftplus-'.$wplang.
|
2499 |
'.mo')) return __('Can you translate? Want to improve UpdraftPlus for speakers of your language?','updraftplus').' '.$this->url_start($urls,'updraftplus.com/translate/')."Please go here for instructions - it is easy.".$this->url_end($urls,'updraftplus.com/translate/');
|
2500 |
|
2501 |
return __('UpdraftPlus is on social media - check us out here:','updraftplus').' '.$this->url_start($urls,'twitter.com/updraftplus', true).__('Twitter', 'updraftplus').$this->url_end($urls,'twitter.com/updraftplus', true).' - '.$this->url_start($urls,'facebook.com/updraftplus', true).__('Facebook', 'updraftplus').$this->url_end($urls,'facebook.com/updraftplus', true).' - '.$this->url_start($urls,'plus.google.com/u/0/b/112313994681166369508/112313994681166369508/about', true).__('Google+', 'updraftplus').$this->url_end($urls,'plus.google.com/u/0/b/112313994681166369508/112313994681166369508/about', true).' - '.$this->url_start($urls,'www.linkedin.com/company/updraftplus', true).__('LinkedIn', 'updraftplus').$this->url_end($urls,'www.linkedin.com/company/updraftplus', true);
|
18 |
'copycom' => 'Copy.Com',
|
19 |
'sftp' => 'SFTP / SCP',
|
20 |
'webdav' => 'WebDAV',
|
21 |
+
'bitcasa' => 'Bitcasa',
|
22 |
's3generic' => 'S3-Compatible (Generic)',
|
23 |
'openstack' => 'OpenStack (Swift)',
|
24 |
'dreamobjects' => 'DreamObjects',
|
48 |
|
49 |
public function __construct() {
|
50 |
|
|
|
|
|
|
|
51 |
// Initialisation actions - takes place on plugin load
|
52 |
|
53 |
if ($fp = fopen(UPDRAFTPLUS_DIR.'/updraftplus.php', 'r')) {
|
131 |
return $matches;
|
132 |
}
|
133 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
134 |
// This function may get called multiple times, so write accordingly
|
135 |
public function admin_menu() {
|
136 |
// We are in the admin area: now load all that code
|
139 |
|
140 |
if (isset($_GET['wpnonce']) && isset($_GET['page']) && isset($_GET['action']) && $_GET['page'] == 'updraftplus' && $_GET['action'] == 'downloadlatestmodlog' && wp_verify_nonce($_GET['wpnonce'], 'updraftplus_download')) {
|
141 |
|
142 |
+
$updraft_dir = $this->backups_dir_location();
|
143 |
+
|
144 |
+
$log_file = '';
|
145 |
+
$mod_time = 0;
|
146 |
+
|
147 |
+
if ($handle = @opendir($updraft_dir)) {
|
148 |
+
while (false !== ($entry = readdir($handle))) {
|
149 |
+
// The latter match is for files created internally by zipArchive::addFile
|
150 |
+
if (preg_match('/^log\.[a-z0-9]+\.txt$/i', $entry)) {
|
151 |
+
$mtime = filemtime($updraft_dir.'/'.$entry);
|
152 |
+
if ($mtime > $mod_time) {
|
153 |
+
$mod_time = $mtime;
|
154 |
+
$log_file = $updraft_dir.'/'.$entry;
|
155 |
+
}
|
156 |
+
}
|
157 |
+
}
|
158 |
+
@closedir($handle);
|
159 |
+
}
|
160 |
|
161 |
if ($mod_time >0) {
|
162 |
if (is_readable($log_file)) {
|
218 |
$log_file = $updraft_dir.'/log.'.$_GET['updraftplus_backup_nonce'].'.txt';
|
219 |
if (is_readable($log_file)) {
|
220 |
header('Content-type: text/plain');
|
|
|
221 |
readfile($log_file);
|
222 |
exit;
|
223 |
} else {
|
1489 |
$this->boot_backup(false, true);
|
1490 |
}
|
1491 |
|
1492 |
+
public function backup_all($skip_cloud) {
|
1493 |
+
$this->boot_backup(1, 1, false, false, ($skip_cloud) ? 'none' : false);
|
|
|
1494 |
}
|
1495 |
|
1496 |
+
public function backupnow_files($skip_cloud) {
|
1497 |
+
$this->boot_backup(1, 0, false, false, ($skip_cloud) ? 'none' : false);
|
|
|
1498 |
}
|
1499 |
|
1500 |
+
public function backupnow_database($skip_cloud) {
|
1501 |
+
$this->boot_backup(0, 1, false, false, ($skip_cloud) ? 'none' : false);
|
|
|
1502 |
}
|
1503 |
|
1504 |
// This procedure initiates a backup run
|
1505 |
// $backup_files/$backup_database: true/false = yes/no (over-write allowed); 1/0 = yes/no (force)
|
1506 |
+
public function boot_backup($backup_files, $backup_database, $restrict_files_to_override = false, $one_shot = false, $service = false) {
|
1507 |
|
1508 |
@ignore_user_abort(true);
|
1509 |
@set_time_limit(900);
|
1627 |
array_push($initial_jobdata, 'backup_database', $dbs);
|
1628 |
array_push($initial_jobdata, 'backup_files', (($backup_files) ? 'begun' : 'no'));
|
1629 |
|
|
|
|
|
1630 |
// Use of jobdata_set_multi saves around 200ms
|
1631 |
call_user_func_array(array($this, 'jobdata_set_multi'), apply_filters('updraftplus_initial_jobdata', $initial_jobdata));
|
1632 |
|
2096 |
$backup_history = (is_array($backup_history)) ? $backup_history : array();
|
2097 |
$backup_array['nonce'] = $this->nonce;
|
2098 |
$backup_array['service'] = $this->jobdata_get('service');
|
|
|
2099 |
$backup_history[$this->backup_time] = $backup_array;
|
2100 |
UpdraftPlus_Options::update_updraft_option('updraft_backup_history', $backup_history, false);
|
2101 |
} else {
|
2150 |
admin settings are saved it is called.
|
2151 |
*/
|
2152 |
public function schedule_backup($interval) {
|
|
|
2153 |
|
2154 |
// Clear schedule so that we don't stack up scheduled backups
|
2155 |
wp_clear_scheduled_hook('updraft_backup');
|
2156 |
+
|
2157 |
if ('manual' == $interval) return 'manual';
|
2158 |
|
|
|
|
|
2159 |
$valid_schedules = wp_get_schedules();
|
2160 |
if (empty($valid_schedules[$interval])) $interval = 'daily';
|
2161 |
|
2162 |
+
$first_time = apply_filters('updraftplus_schedule_firsttime_files', time()+120);
|
|
|
|
|
|
|
2163 |
wp_schedule_event($first_time, $interval, 'updraft_backup');
|
2164 |
|
2165 |
return $interval;
|
2166 |
}
|
2167 |
|
2168 |
public function schedule_backup_database($interval) {
|
|
|
2169 |
|
2170 |
// Clear schedule so that we don't stack up scheduled backups
|
2171 |
wp_clear_scheduled_hook('updraft_backup_database');
|
|
|
2172 |
|
2173 |
+
if ('manual' == $interval) return 'manual';
|
2174 |
|
2175 |
$valid_schedules = wp_get_schedules();
|
2176 |
if (empty($valid_schedules[$interval])) $interval = 'daily';
|
2177 |
|
2178 |
+
$first_time = apply_filters('updraftplus_schedule_firsttime_db', time()+120);
|
|
|
|
|
|
|
2179 |
wp_schedule_event($first_time, $interval, 'updraft_backup_database');
|
2180 |
|
2181 |
return $interval;
|
2182 |
+
|
2183 |
+
}
|
2184 |
+
|
2185 |
+
public function deactivation () {
|
2186 |
+
// wp_clear_scheduled_hook('updraftplus_weekly_ping');
|
2187 |
}
|
2188 |
|
2189 |
// Acts as a WordPress options filter
|
2307 |
|
2308 |
// Check for the existence of the dir and prevent enumeration
|
2309 |
// index.php is for a sanity check - make sure that we're not somewhere unexpected
|
2310 |
+
if((!is_dir($updraft_dir) || !is_file($updraft_dir.'/index.html') || !is_file($updraft_dir.'/.htaccess')) && !is_file($updraft_dir.'/index.php')) {
|
2311 |
@mkdir($updraft_dir, 0775, true);
|
2312 |
@file_put_contents($updraft_dir.'/index.html',"<html><body><a href=\"http://updraftplus.com\">WordPress backups by UpdraftPlus</a></body></html>");
|
2313 |
if (!is_file($updraft_dir.'/.htaccess')) @file_put_contents($updraft_dir.'/.htaccess','deny from all');
|
|
|
2314 |
}
|
2315 |
|
2316 |
$this->backup_dir = $updraft_dir;
|
2453 |
return fetch_feed('http://feeds.feedburner.com/updraftplus/');
|
2454 |
}
|
2455 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2456 |
public function wordshell_random_advert($urls) {
|
2457 |
if (defined('UPDRAFTPLUS_NOADS_B')) return "";
|
2458 |
$rad = rand(0, 8);
|
2461 |
return $this->url_start($urls,'updraftplus.com').__("Want more features or paid, guaranteed support? Check out UpdraftPlus.Com", 'updraftplus').$this->url_end($urls,'updraftplus.com');
|
2462 |
break;
|
2463 |
case 1:
|
2464 |
+
if (defined('WPLANG') && strlen(WPLANG)>0 && !is_file(UPDRAFTPLUS_DIR.'/languages/updraftplus-'.WPLANG.
|
|
|
2465 |
'.mo')) return __('Can you translate? Want to improve UpdraftPlus for speakers of your language?','updraftplus').' '.$this->url_start($urls,'updraftplus.com/translate/')."Please go here for instructions - it is easy.".$this->url_end($urls,'updraftplus.com/translate/');
|
2466 |
|
2467 |
return __('UpdraftPlus is on social media - check us out here:','updraftplus').' '.$this->url_start($urls,'twitter.com/updraftplus', true).__('Twitter', 'updraftplus').$this->url_end($urls,'twitter.com/updraftplus', true).' - '.$this->url_start($urls,'facebook.com/updraftplus', true).__('Facebook', 'updraftplus').$this->url_end($urls,'facebook.com/updraftplus', true).' - '.$this->url_start($urls,'plus.google.com/u/0/b/112313994681166369508/112313994681166369508/about', true).__('Google+', 'updraftplus').$this->url_end($urls,'plus.google.com/u/0/b/112313994681166369508/112313994681166369508/about', true).' - '.$this->url_start($urls,'www.linkedin.com/company/updraftplus', true).__('LinkedIn', 'updraftplus').$this->url_end($urls,'www.linkedin.com/company/updraftplus', true);
|
@@ -234,7 +234,7 @@ class UpdraftPlus_PclZip {
|
|
234 |
}
|
235 |
|
236 |
# Route around PHP bug (exact version with the problem not known)
|
237 |
-
$ziparchive_create_match = (version_compare(PHP_VERSION, '5.2.
|
238 |
|
239 |
if ($flags == $ziparchive_create_match && file_exists($path)) @unlink($path);
|
240 |
|
234 |
}
|
235 |
|
236 |
# Route around PHP bug (exact version with the problem not known)
|
237 |
+
$ziparchive_create_match = (version_compare(PHP_VERSION, '5.2.6', '>') && defined('ZIPARCHIVE::CREATE')) ? ZIPARCHIVE::CREATE : 1;
|
238 |
|
239 |
if ($flags == $ziparchive_create_match && file_exists($path)) @unlink($path);
|
240 |
|
@@ -8,7 +8,7 @@
|
|
8 |
* @link https://status.dropbox.com Dropbox status
|
9 |
* @package Dropbox
|
10 |
*/
|
11 |
-
class
|
12 |
{
|
13 |
// API Endpoints
|
14 |
const API_URL = 'https://api.dropbox.com/1/';
|
8 |
* @link https://status.dropbox.com Dropbox status
|
9 |
* @package Dropbox
|
10 |
*/
|
11 |
+
class Dropbox_API
|
12 |
{
|
13 |
// API Endpoints
|
14 |
const API_URL = 'https://api.dropbox.com/1/';
|
@@ -65,7 +65,7 @@ abstract class Dropbox_ConsumerAbstract
|
|
65 |
{
|
66 |
// Nullify any request token we already have
|
67 |
$this->storage->set(null, 'request_token');
|
68 |
-
$url =
|
69 |
$response = $this->fetch('POST', $url, '');
|
70 |
$token = $this->parseTokenString($response['body']);
|
71 |
$this->storage->set($token, 'request_token');
|
@@ -132,7 +132,7 @@ abstract class Dropbox_ConsumerAbstract
|
|
132 |
public function getAccessToken()
|
133 |
{
|
134 |
// Get the signed request URL
|
135 |
-
$response = $this->fetch('POST',
|
136 |
$token = $this->parseTokenString($response['body']);
|
137 |
$this->storage->set($token, 'access_token');
|
138 |
}
|
65 |
{
|
66 |
// Nullify any request token we already have
|
67 |
$this->storage->set(null, 'request_token');
|
68 |
+
$url = Dropbox_API::API_URL . self::REQUEST_TOKEN_METHOD;
|
69 |
$response = $this->fetch('POST', $url, '');
|
70 |
$token = $this->parseTokenString($response['body']);
|
71 |
$this->storage->set($token, 'request_token');
|
132 |
public function getAccessToken()
|
133 |
{
|
134 |
// Get the signed request URL
|
135 |
+
$response = $this->fetch('POST', Dropbox_API::API_URL, self::ACCESS_TOKEN_METHOD);
|
136 |
$token = $this->parseTokenString($response['body']);
|
137 |
$this->storage->set($token, 'access_token');
|
138 |
}
|
@@ -3864,260 +3864,3 @@ TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
|
|
3864 |
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
|
3865 |
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
|
3866 |
-----END CERTIFICATE-----
|
3867 |
-
|
3868 |
-
QuoVadis Root CA 1 G3
|
3869 |
-
=====================
|
3870 |
-
-----BEGIN CERTIFICATE-----
|
3871 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
|
3895 |
-
hMJKzRwuJIczYOXD
|
3896 |
-
-----END CERTIFICATE-----
|
3897 |
-
|
3898 |
-
QuoVadis Root CA 2 G3
|
3899 |
-
=====================
|
3900 |
-
-----BEGIN CERTIFICATE-----
|
3901 |
-
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
-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
-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
-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
-
RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh
|
3906 |
-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
-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
-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
-
MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l
|
3910 |
-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
-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
-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
-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
-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
-
AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI
|
3916 |
-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
-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
-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
-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
-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
-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
-
mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD
|
3923 |
-
zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN
|
3924 |
-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
|
3925 |
-
O3jtZsSOeWmD3n+M
|
3926 |
-
-----END CERTIFICATE-----
|
3927 |
-
|
3928 |
-
QuoVadis Root CA 3 G3
|
3929 |
-
=====================
|
3930 |
-
-----BEGIN CERTIFICATE-----
|
3931 |
-
MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG
|
3932 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM
|
3943 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
3955 |
-
PpxxVJkES/1Y+Zj0
|
3956 |
-
-----END CERTIFICATE-----
|
3957 |
-
|
3958 |
-
DigiCert Assured ID Root G2
|
3959 |
-
===========================
|
3960 |
-
-----BEGIN CERTIFICATE-----
|
3961 |
-
MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
|
3962 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
|
3963 |
-
IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
|
3964 |
-
MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
|
3965 |
-
ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
|
3966 |
-
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
|
3967 |
-
35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
|
3968 |
-
bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
|
3969 |
-
VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
|
3970 |
-
YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
|
3971 |
-
lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
|
3972 |
-
w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
|
3973 |
-
0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
|
3974 |
-
d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
|
3975 |
-
hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
|
3976 |
-
jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
|
3977 |
-
IhNzbM8m9Yop5w==
|
3978 |
-
-----END CERTIFICATE-----
|
3979 |
-
|
3980 |
-
DigiCert Assured ID Root G3
|
3981 |
-
===========================
|
3982 |
-
-----BEGIN CERTIFICATE-----
|
3983 |
-
MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
|
3984 |
-
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
|
3985 |
-
VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
|
3986 |
-
MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
|
3987 |
-
d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
|
3988 |
-
BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
|
3989 |
-
RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
|
3990 |
-
KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
|
3991 |
-
UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
|
3992 |
-
YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
|
3993 |
-
1vUhZscv6pZjamVFkpUBtA==
|
3994 |
-
-----END CERTIFICATE-----
|
3995 |
-
|
3996 |
-
DigiCert Global Root G2
|
3997 |
-
=======================
|
3998 |
-
-----BEGIN CERTIFICATE-----
|
3999 |
-
MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
|
4000 |
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
|
4001 |
-
HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
|
4002 |
-
MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
|
4003 |
-
dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
|
4004 |
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
|
4005 |
-
kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
|
4006 |
-
3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
|
4007 |
-
BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
|
4008 |
-
UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
|
4009 |
-
o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
|
4010 |
-
5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
|
4011 |
-
F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
|
4012 |
-
WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
|
4013 |
-
QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
|
4014 |
-
iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
|
4015 |
-
MrY=
|
4016 |
-
-----END CERTIFICATE-----
|
4017 |
-
|
4018 |
-
DigiCert Global Root G3
|
4019 |
-
=======================
|
4020 |
-
-----BEGIN CERTIFICATE-----
|
4021 |
-
MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
|
4022 |
-
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
|
4023 |
-
VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
|
4024 |
-
MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
|
4025 |
-
aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
|
4026 |
-
AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
|
4027 |
-
YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
|
4028 |
-
BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
|
4029 |
-
Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
|
4030 |
-
3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
|
4031 |
-
VOKa5Vt8sycX
|
4032 |
-
-----END CERTIFICATE-----
|
4033 |
-
|
4034 |
-
DigiCert Trusted Root G4
|
4035 |
-
========================
|
4036 |
-
-----BEGIN CERTIFICATE-----
|
4037 |
-
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
-
EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw
|
4039 |
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
4062 |
-
82Z+
|
4063 |
-
-----END CERTIFICATE-----
|
4064 |
-
|
4065 |
-
WoSign
|
4066 |
-
======
|
4067 |
-
-----BEGIN CERTIFICATE-----
|
4068 |
-
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
-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
-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
-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
-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
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh
|
4090 |
-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
-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
-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
|
4093 |
-
-----END CERTIFICATE-----
|
4094 |
-
|
4095 |
-
WoSign China
|
4096 |
-
============
|
4097 |
-
-----BEGIN CERTIFICATE-----
|
4098 |
-
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
-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
-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
-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
-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
-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
-
uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85
|
4105 |
-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
-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
-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
-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
-
+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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
-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
|
4122 |
-
kI26oQ==
|
4123 |
-
-----END CERTIFICATE-----
|
3864 |
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
|
3865 |
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
|
3866 |
-----END CERTIFICATE-----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -33,9 +33,7 @@ class UpdraftPlus_ftp_wrapper {
|
|
33 |
ftp_pasv($this->conn_id, $this->passive);
|
34 |
$this->system_type = ftp_systype($this->conn_id);
|
35 |
return true;
|
36 |
-
}
|
37 |
-
|
38 |
-
if (time() - $time_start > 19) {
|
39 |
global $updraftplus_admin;
|
40 |
if (isset($updraftplus_admin->logged) && is_array($updraftplus_admin->logged)) {
|
41 |
$updraftplus_admin->logged[] = sprintf(__('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.', 'updraftplus'), 'FTP');
|
33 |
ftp_pasv($this->conn_id, $this->passive);
|
34 |
$this->system_type = ftp_systype($this->conn_id);
|
35 |
return true;
|
36 |
+
} elseif (time() - $time_start > 19) {
|
|
|
|
|
37 |
global $updraftplus_admin;
|
38 |
if (isset($updraftplus_admin->logged) && is_array($updraftplus_admin->logged)) {
|
39 |
$updraftplus_admin->logged[] = sprintf(__('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.', 'updraftplus'), 'FTP');
|
@@ -142,41 +142,6 @@ function updraft_activejobs_update(force) {
|
|
142 |
});
|
143 |
}
|
144 |
|
145 |
-
//function to display pop-up window containing the log
|
146 |
-
function updraft_popuplog(backup_nonce){
|
147 |
-
|
148 |
-
popuplog_sdata = {
|
149 |
-
action: 'updraft_ajax',
|
150 |
-
subaction: 'poplog',
|
151 |
-
nonce: updraft_credentialtest_nonce,
|
152 |
-
backup_nonce: backup_nonce
|
153 |
-
};
|
154 |
-
|
155 |
-
jQuery.get(ajaxurl, popuplog_sdata, function(response){
|
156 |
-
|
157 |
-
var resp = jQuery.parseJSON(response);
|
158 |
-
|
159 |
-
var download_url = '?page=updraftplus&action=downloadlog&force_download=1&updraftplus_backup_nonce='+resp.nonce;
|
160 |
-
|
161 |
-
jQuery('#updraft-poplog-content').html('<pre style="white-space: pre-wrap;">'+resp.html+'</pre>'); //content of the log file
|
162 |
-
|
163 |
-
var log_popup_buttons = {};
|
164 |
-
log_popup_buttons[updraftlion.download] = function() { window.location.href = download_url; };
|
165 |
-
log_popup_buttons[updraftlion.close] = function() { jQuery(this).dialog("close"); };
|
166 |
-
|
167 |
-
//Set the dialog buttons: Download log, Close log
|
168 |
-
jQuery('#updraft-poplog').dialog("option", "buttons", log_popup_buttons);
|
169 |
-
//[
|
170 |
-
//{ text: "Download", click: function() { window.location.href = download_url } },
|
171 |
-
//{ text: "Close", click: function(){ jQuery( this ).dialog("close");} }
|
172 |
-
//]
|
173 |
-
|
174 |
-
jQuery('#updraft-poplog').dialog("option", "title", 'log.'+resp.nonce+'.txt'); //Set dialog title
|
175 |
-
jQuery('#updraft-poplog').dialog("open");
|
176 |
-
|
177 |
-
});
|
178 |
-
}
|
179 |
-
|
180 |
function updraft_showlastlog(repeat){
|
181 |
lastlog_sdata.nonce = updraft_credentialtest_nonce;
|
182 |
jQuery.get(ajaxurl, lastlog_sdata, function(response) {
|
@@ -664,15 +629,7 @@ jQuery(document).ready(function($){
|
|
664 |
}, 1700);
|
665 |
setTimeout(function() {updraft_activejobs_update(true);}, 1000);
|
666 |
setTimeout(function() {jQuery('#updraft_backup_started').fadeOut('slow');}, 75000);
|
667 |
-
jQuery.post(ajaxurl, {
|
668 |
-
action: 'updraft_ajax',
|
669 |
-
subaction: 'backupnow',
|
670 |
-
nonce: updraft_credentialtest_nonce,
|
671 |
-
backupnow_nodb: backupnow_nodb,
|
672 |
-
backupnow_nofiles: backupnow_nofiles,
|
673 |
-
backupnow_nocloud: backupnow_nocloud,
|
674 |
-
backupnow_label: jQuery('#backupnow_label').val()
|
675 |
-
}, function(response) {
|
676 |
jQuery('#updraft_backup_started').html(response);
|
677 |
// Kick off some activity to get WP to get the scheduled task moving as soon as possible
|
678 |
// setTimeout(function() {jQuery.get(updraft_siteurl);}, 5100);
|
@@ -682,7 +639,7 @@ jQuery(document).ready(function($){
|
|
682 |
backupnow_modal_buttons[updraftlion.cancel] = function() { jQuery(this).dialog("close"); };
|
683 |
|
684 |
jQuery("#updraft-backupnow-modal" ).dialog({
|
685 |
-
autoOpen: false, height:
|
686 |
buttons: backupnow_modal_buttons
|
687 |
});
|
688 |
|
@@ -692,11 +649,7 @@ jQuery(document).ready(function($){
|
|
692 |
autoOpen: false, height: 295, width: 420, modal: true,
|
693 |
buttons: migrate_modal_buttons
|
694 |
});
|
695 |
-
|
696 |
-
jQuery( "#updraft-poplog" ).dialog({
|
697 |
-
autoOpen: false, height: 600, width: '75%', modal: true,
|
698 |
-
});
|
699 |
-
|
700 |
jQuery('#enableexpertmode').click(function() {
|
701 |
jQuery('.expertmode').fadeIn();
|
702 |
jQuery('#enableexpertmode').off('click');
|
@@ -937,16 +890,14 @@ jQuery(document).ready(function($){
|
|
937 |
resp = jQuery.parseJSON(response);
|
938 |
if (resp.e) {
|
939 |
alert(resp.e);
|
940 |
-
}
|
941 |
-
|
942 |
-
$('#updraftplus_httpget_results').html('<pre>'+resp.r+'</pre>');
|
943 |
} else {
|
944 |
console.log(response);
|
945 |
-
|
946 |
}
|
947 |
|
948 |
} catch(err) {
|
949 |
-
console.log(err);
|
950 |
console.log(response);
|
951 |
alert(updraftlion.jsonnotunderstood);
|
952 |
}
|
142 |
});
|
143 |
}
|
144 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
function updraft_showlastlog(repeat){
|
146 |
lastlog_sdata.nonce = updraft_credentialtest_nonce;
|
147 |
jQuery.get(ajaxurl, lastlog_sdata, function(response) {
|
629 |
}, 1700);
|
630 |
setTimeout(function() {updraft_activejobs_update(true);}, 1000);
|
631 |
setTimeout(function() {jQuery('#updraft_backup_started').fadeOut('slow');}, 75000);
|
632 |
+
jQuery.post(ajaxurl, { action: 'updraft_ajax', subaction: 'backupnow', nonce: updraft_credentialtest_nonce, backupnow_nodb: backupnow_nodb, backupnow_nofiles: backupnow_nofiles, backupnow_nocloud: backupnow_nocloud }, function(response) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
633 |
jQuery('#updraft_backup_started').html(response);
|
634 |
// Kick off some activity to get WP to get the scheduled task moving as soon as possible
|
635 |
// setTimeout(function() {jQuery.get(updraft_siteurl);}, 5100);
|
639 |
backupnow_modal_buttons[updraftlion.cancel] = function() { jQuery(this).dialog("close"); };
|
640 |
|
641 |
jQuery("#updraft-backupnow-modal" ).dialog({
|
642 |
+
autoOpen: false, height: 335, width: 480, modal: true,
|
643 |
buttons: backupnow_modal_buttons
|
644 |
});
|
645 |
|
649 |
autoOpen: false, height: 295, width: 420, modal: true,
|
650 |
buttons: migrate_modal_buttons
|
651 |
});
|
652 |
+
|
|
|
|
|
|
|
|
|
653 |
jQuery('#enableexpertmode').click(function() {
|
654 |
jQuery('.expertmode').fadeIn();
|
655 |
jQuery('#enableexpertmode').off('click');
|
890 |
resp = jQuery.parseJSON(response);
|
891 |
if (resp.e) {
|
892 |
alert(resp.e);
|
893 |
+
} else if (resp.r) {
|
894 |
+
$('#updraftplus_httpget_results').html(resp.r);
|
|
|
895 |
} else {
|
896 |
console.log(response);
|
897 |
+
alert(updraftlion.jsonnotunderstood);
|
898 |
}
|
899 |
|
900 |
} catch(err) {
|
|
|
901 |
console.log(response);
|
902 |
alert(updraftlion.jsonnotunderstood);
|
903 |
}
|
Binary file
|
@@ -2,7 +2,7 @@
|
|
2 |
# This file is distributed under the same license as the UpdraftPlus package.
|
3 |
msgid ""
|
4 |
msgstr ""
|
5 |
-
"PO-Revision-Date: 2014-
|
6 |
"MIME-Version: 1.0\n"
|
7 |
"Content-Type: text/plain; charset=UTF-8\n"
|
8 |
"Content-Transfer-Encoding: 8bit\n"
|
@@ -10,71 +10,15 @@ msgstr ""
|
|
10 |
"X-Generator: GlotPress/0.1\n"
|
11 |
"Project-Id-Version: UpdraftPlus\n"
|
12 |
|
13 |
-
#: addons/
|
14 |
-
msgid "API Key"
|
15 |
-
msgstr "API klíč"
|
16 |
-
|
17 |
-
#: addons/copycom.php:531
|
18 |
-
msgid "API Secret"
|
19 |
-
msgstr "API tajemství"
|
20 |
-
|
21 |
-
#: addons/copycom.php:541
|
22 |
-
msgid "(case-sensitive)"
|
23 |
-
msgstr "(citlivé na velikost písmen)"
|
24 |
-
|
25 |
-
#: addons/copycom.php:542
|
26 |
-
msgid "N.B. Copy is case-sensitive."
|
27 |
-
msgstr "Upozornění: Copy je citlivé na velikost písmen."
|
28 |
-
|
29 |
-
#: addons/reporting.php:55
|
30 |
-
msgid "Your label for this backup (optional)"
|
31 |
-
msgstr "Váš štítek pro tuto zálohu (nepovinné)"
|
32 |
-
|
33 |
-
#: addons/bitcasa.php:368
|
34 |
-
msgid "Bitcasa has removed its consumer API. You can no longer create new Bitcasa applications. Settings remain here only for the use of pre-existing users."
|
35 |
-
msgstr "Bitcasa odstranila uživatelské API. Nadále nelze vytvářet nové Bitcasa aplikace. Nastavení zde zůstává jen pro již existující uživatele."
|
36 |
-
|
37 |
-
#: methods/googledrive.php:851
|
38 |
-
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."
|
39 |
-
msgstr "%s nepovoluje autorizaci stránek hostovaných na IP adrese. Nejprve musíte změnit adresu stránky (%s), abyste mohli použít %s pro ukládání."
|
40 |
-
|
41 |
-
#: udaddons/updraftplus-addons.php:536
|
42 |
-
msgid "You need to supply both an email address and a password"
|
43 |
-
msgstr "Musíte poskytnout jak email, tak heslo"
|
44 |
-
|
45 |
-
#: udaddons/updraftplus-addons.php:621
|
46 |
-
msgid "Your email address was valid, but your password was not recognised by UpdraftPlus.Com."
|
47 |
-
msgstr "Váše emailová adresa byla správná, ale heslo nebylo UpdraftPlus.Com rozpoznáno."
|
48 |
-
|
49 |
-
#: udaddons/updraftplus-addons.php:621
|
50 |
-
msgid "Go here to reset your password."
|
51 |
-
msgstr "Pro reset hesla běžte sem."
|
52 |
-
|
53 |
-
#: udaddons/updraftplus-addons.php:623
|
54 |
-
msgid "You entered an email address that was not recognised by UpdraftPlus.Com"
|
55 |
-
msgstr "Vložili jste emailovou adresu, která nebyla UpdraftPlus.Com rozpoznána."
|
56 |
-
|
57 |
-
#: admin.php:2007
|
58 |
-
msgid "To proceed, press 'Backup Now'. Then, watch the 'Last Log Message' field for activity."
|
59 |
-
msgstr "Pro pokračování stiskněte 'Zálohovat nyní'. Pak sledujte, zda se mění 'Poslední zpráva logu'."
|
60 |
-
|
61 |
-
#: admin.php:1374
|
62 |
-
msgid "Your backup is of a WordPress multisite install; but this site is not. Only the first site of the network will be accessible."
|
63 |
-
msgstr "Vaše záloha je z Wordpress multisite instalace, ale tato stránka ne. Budou k dispozici pouze první stránky."
|
64 |
-
|
65 |
-
#: admin.php:1374
|
66 |
-
msgid "If you want to restore a multisite backup, you should first set up your WordPress installation as a multisite."
|
67 |
-
msgstr "Pokud chcete obnovit multisite zálohu, měli byste nejdřív nastavit svůj WordPress jako multisite."
|
68 |
-
|
69 |
-
#: addons/migrator.php:712
|
70 |
msgid "already done"
|
71 |
msgstr "již hotovo"
|
72 |
|
73 |
-
#: addons/migrator.php:
|
74 |
msgid "Search and replacing table:"
|
75 |
msgstr "Hledání a nahrazování tabulky:"
|
76 |
|
77 |
-
#: addons/migrator.php:
|
78 |
msgid "skipped (not in list)"
|
79 |
msgstr "přeskočeno (není v seznamu)"
|
80 |
|
@@ -90,7 +34,7 @@ msgstr "Pouze tyto tabulky"
|
|
90 |
msgid "Enter a comma-separated list; otherwise, leave blank for all tables."
|
91 |
msgstr "Vložte seznam oddělený čárkami; pro všechny tabulky nechte prázdné."
|
92 |
|
93 |
-
#: addons/bitcasa.php:
|
94 |
msgid "To get your credentials, log in at the %s developer portal."
|
95 |
msgstr "K získání přihlašovacích údajů se přihlašte do vývojového portálu na %s."
|
96 |
|
@@ -102,119 +46,119 @@ msgstr "Zatím nejste spojeni se svým UpdraftPlus.Com účtem."
|
|
102 |
msgid "You need to connect to receive future updates to UpdraftPlus."
|
103 |
msgstr "Pro budoucí aktualizace se musíte spojit s UpdraftPlus."
|
104 |
|
105 |
-
#: admin.php:
|
106 |
msgid "The site in this backup was running on a webserver with version %s of %s. "
|
107 |
msgstr "Stránka z této zálohy běžela na webserveru s verzí %s z %s."
|
108 |
|
109 |
-
#: admin.php:
|
110 |
msgid "This is significantly newer than the server which you are now restoring onto (version %s)."
|
111 |
msgstr "Což je velký rozdíl oproti verzi, na kterou chcete zálohu obnovit (verze %s)."
|
112 |
|
113 |
-
#: admin.php:
|
114 |
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."
|
115 |
msgstr "Měli byste pokračovat pouze pokud neaktualizujete současný server a jste si jisti (nebo ochotni riskovat), že vyše pluginy / témata / atd. jsou kompatibilní se starší verzí %s."
|
116 |
|
117 |
-
#: admin.php:
|
118 |
msgid "Any support requests to do with %s should be raised with your web hosting company."
|
119 |
msgstr "Jakákoliv žádost o podporu týkající se %s, by měla být řešena s vaším poskytovatelem hostingu."
|
120 |
|
121 |
-
#: class-updraftplus.php:
|
122 |
msgid "UpdraftPlus is on social media - check us out here:"
|
123 |
msgstr "UpdraftPlus je na sociálních sítích - podívejte se na nás tady:"
|
124 |
|
125 |
-
#: class-updraftplus.php:
|
126 |
msgid "Twitter"
|
127 |
msgstr "Twitter"
|
128 |
|
129 |
-
#: class-updraftplus.php:
|
130 |
msgid "Facebook"
|
131 |
msgstr "Facebook"
|
132 |
|
133 |
-
#: class-updraftplus.php:
|
134 |
msgid "Google+"
|
135 |
msgstr "Google+"
|
136 |
|
137 |
-
#: class-updraftplus.php:
|
138 |
msgid "LinkedIn"
|
139 |
msgstr "LinkedIn"
|
140 |
|
141 |
-
#: admin.php:
|
142 |
msgid "UpdraftPlus will split up backup archives when they exceed this file size. The default value is %s megabytes. Be careful to leave some margin if your web-server has a hard size limit (e.g. the 2 Gb / 2048 Mb limit on some 32-bit servers/file systems)."
|
143 |
msgstr "Pokud záložní archiv překročí danou velikost, pak je UpdraftPlus rozdělí. Výchozí hodnota je %s megabytes. Pokud má Váš web-server natvrdo nastavený limit, nechte nějakou rezervu (například limit na některých 32-bitových serverech / souborových systémech 2Gb / 2048 Mb)."
|
144 |
|
145 |
-
#: admin.php:
|
146 |
msgid "Why am I seeing this?"
|
147 |
msgstr "Proč tohle vidím?"
|
148 |
|
149 |
-
#: admin.php:
|
150 |
msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded."
|
151 |
msgstr "Pro podívání se po nových zálohách, které jste nahráli do složky UpdraftPlus (na vašem hostingu) klikněte zde."
|
152 |
|
153 |
-
#: admin.php:
|
154 |
msgid "The location of this directory is set in the expert settings, in the Settings tab."
|
155 |
msgstr "Umístění složky je uloženo v pokročilém nastavení, na záložce Nastavení."
|
156 |
|
157 |
-
#: admin.php:
|
158 |
msgid "Start backup"
|
159 |
msgstr "Zahájit zálohu"
|
160 |
|
161 |
-
#: restorer.php:
|
162 |
msgid "You are using the %s webserver, but do not seem to have the %s module loaded."
|
163 |
msgstr "Používáte %s webserver, ale vypadá to, že nemáte načtený %s modul."
|
164 |
|
165 |
-
#: restorer.php:
|
166 |
msgid "You should enable %s to make your pretty permalinks (e.g. %s) work"
|
167 |
msgstr "Pro fungování pěkných trvalých odkazů (například %s), byste měli povolit %s"
|
168 |
|
169 |
-
#: admin.php:
|
170 |
msgid "If you would like to automatically schedule backups, choose schedules from the dropdowns above."
|
171 |
msgstr "Pokud chcete naplánovat zálohy automaticky, vyberte rozvrh z výběru výše."
|
172 |
|
173 |
-
#: admin.php:
|
174 |
msgid "If the two schedules are the same, then the two backups will take place together."
|
175 |
msgstr "Pokud jsou oba plány shodné, budou obě zálohy na stejném místě."
|
176 |
|
177 |
-
#: admin.php:
|
178 |
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."
|
179 |
msgstr "Pro konzultaci, jak povolit WordPress pluginu zapisovat do složky, budete potřebovat kontaktovat vašeho poskytovatele."
|
180 |
|
181 |
-
#: admin.php:
|
182 |
msgid "Unless you have a problem, you can completely ignore everything here."
|
183 |
msgstr "Pokud nemáte žádný problém, můžete ignorovat všechno, co tu je."
|
184 |
|
185 |
-
#: admin.php:
|
186 |
msgid "You will find more information about this in the Settings section."
|
187 |
msgstr "Více informací o tom najdete v sekci Nastavení."
|
188 |
|
189 |
-
#: admin.php:
|
190 |
msgid "This file could not be uploaded"
|
191 |
msgstr "Tento soubor nemůže být nahrán"
|
192 |
|
193 |
-
#: addons/importer.php:
|
194 |
msgid "Was this a backup created by a different backup plugin? If so, then you might first need to rename it so that it can be recognised - please follow this link."
|
195 |
msgstr "Je toto záloha provedená jiným zálohovacím pluginem? Pokud ano, budete ho možná nejdříve muset přejmenovat, aby mohla být rozpoznána - prosím následujte odkaz."
|
196 |
|
197 |
-
#: addons/importer.php:
|
198 |
msgid "Supported backup plugins: %s"
|
199 |
msgstr "Podporované zálohovací pluginy: %s"
|
200 |
|
201 |
-
#: admin.php:
|
202 |
msgid "Incremental file backup intervals"
|
203 |
msgstr "Intervaly přírůstkového zálohování"
|
204 |
|
205 |
-
#: admin.php:
|
206 |
msgid "Tell me more about incremental backups"
|
207 |
msgstr "Řekněte mi víc o přírůstkových zálohách"
|
208 |
|
209 |
-
#: admin.php:
|
210 |
msgid "Memory limit"
|
211 |
msgstr "Limit paměti"
|
212 |
|
213 |
-
#: admin.php:
|
214 |
msgid "restoration"
|
215 |
msgstr "obnovení"
|
216 |
|
217 |
-
#: restorer.php:
|
218 |
msgid "Table to be implicitly dropped: %s"
|
219 |
msgstr "Tabulka, která bude implicitně smazána: %s"
|
220 |
|
@@ -226,20 +170,20 @@ msgstr "Plná záloha"
|
|
226 |
msgid "Incremental"
|
227 |
msgstr "Přírůstková"
|
228 |
|
229 |
-
#: addons/autobackup.php:
|
230 |
msgid "Backup succeeded"
|
231 |
msgstr "Záloha úspěšná"
|
232 |
|
233 |
-
#: addons/autobackup.php:
|
234 |
msgid "(view log...)"
|
235 |
msgstr "(zobrazit log...)"
|
236 |
|
237 |
-
#: addons/autobackup.php:
|
238 |
msgid "now proceeding with the updates..."
|
239 |
msgstr "nyní pokračovat s aktualizacemi..."
|
240 |
|
241 |
-
#: updraftplus.php:67 updraftplus.php:68 admin.php:
|
242 |
-
#: admin.php:
|
243 |
msgid "Every %s hours"
|
244 |
msgstr "Každých %s hodin"
|
245 |
|
@@ -275,7 +219,7 @@ msgstr "Najít/nahradit nemůže být vráceno zpět - jste si jisti, že to chc
|
|
275 |
msgid "Go"
|
276 |
msgstr "Začni"
|
277 |
|
278 |
-
#: restorer.php:
|
279 |
msgid "Too many database errors have occurred - aborting"
|
280 |
msgstr "Vyskytlo se příliš mnoho chyb databáze - přerušuji"
|
281 |
|
@@ -287,63 +231,63 @@ msgstr "čtete více na %s"
|
|
287 |
msgid "Email reports created by UpdraftPlus (free edition) bring you the latest UpdraftPlus.com news"
|
288 |
msgstr "Emailové reporty vytvořené pomocí UpdraftPlus (verze zdarma) vám přináší UpdraftPlus.com novinky"
|
289 |
|
290 |
-
#: methods/googledrive.php:
|
291 |
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."
|
292 |
msgstr "Poznámka: Pokud nainstalujete UpdraftPlus na několika WordPress stránkách, nemůžete použít jeden projekt pro všechny. Pro každou stránku musíte v Google API konzoli vytvořit nový."
|
293 |
|
294 |
-
#: admin.php:
|
295 |
msgid "You have not yet made any backups."
|
296 |
msgstr "Zatím jste nevytvořili žádnou zálohu."
|
297 |
|
298 |
-
#: admin.php:
|
299 |
msgid "Database Options"
|
300 |
msgstr "Možnosti databáze"
|
301 |
|
302 |
-
#: admin.php:
|
303 |
msgid "The buttons below will immediately execute a backup run, independently of WordPress's scheduler. If these work whilst your scheduled backups do absolutely nothing (i.e. not even produce a log file), then it means that your scheduler is broken."
|
304 |
msgstr "Tlačítka níže okamžitě vykonají zálohu bez ohledu na plánovači WordPressu. Pokud toto na rozdíl od naplánované zálohy funguje (neboli plánovaná záloha nevytvoří ani log soubor), znamená to, že je plánovač rozbitý."
|
305 |
|
306 |
-
#: admin.php:
|
307 |
msgid "%s (%s used)"
|
308 |
msgstr "%s (%s použito)"
|
309 |
|
310 |
-
#: admin.php:
|
311 |
msgid "Plugins for debugging:"
|
312 |
msgstr "Pluginy pro debugování:"
|
313 |
|
314 |
-
#: admin.php:
|
315 |
msgid "Free disk space in account:"
|
316 |
msgstr "Volné místo na disku pro účet:"
|
317 |
|
318 |
-
#: admin.php:
|
319 |
msgid "Existing Backups: Downloading And Restoring"
|
320 |
msgstr "Existující zálohy: Stahování a obnovování"
|
321 |
|
322 |
-
#: admin.php:
|
323 |
msgid "Current Status"
|
324 |
msgstr "Současný stav"
|
325 |
|
326 |
-
#: admin.php:
|
327 |
msgid "Existing Backups"
|
328 |
msgstr "Existující zálohy"
|
329 |
|
330 |
-
#: admin.php:
|
331 |
msgid "Debugging / Expert Tools"
|
332 |
msgstr "Debugování / Nástroje pro experty"
|
333 |
|
334 |
-
#: admin.php:
|
335 |
msgid "This button is disabled because your backup directory is not writable (see the settings)."
|
336 |
msgstr "Toto tlačítko je zakázané, protože se do vaší složky pro zálohy nedá zapisovat (podívejte se do nastavení)."
|
337 |
|
338 |
-
#: admin.php:
|
339 |
msgid "Welcome to UpdraftPlus!"
|
340 |
msgstr "Vítejte v UpdraftPlus!"
|
341 |
|
342 |
-
#: admin.php:
|
343 |
msgid "To make a backup, just press the Backup Now button."
|
344 |
msgstr "K vytvoření zálohy prostě stiskněte tlačítko Zálohovat nyní."
|
345 |
|
346 |
-
#: admin.php:
|
347 |
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."
|
348 |
msgstr "Ke změně výchozího nastavení toho, co se zálohuje, k nastavení naplánovaných záloh, k odeslání záloh na vzdálené uložiště (doporučujeme) a mnoho dalšího, jděte na záložku nastavení."
|
349 |
|
@@ -415,63 +359,63 @@ msgstr "jméno databáze"
|
|
415 |
msgid "database connection attempt failed"
|
416 |
msgstr "selhal pokus o připojení k databázi"
|
417 |
|
418 |
-
#: addons/reporting.php:
|
419 |
msgid "External database (%s)"
|
420 |
msgstr "Externí databáze (%s)"
|
421 |
|
422 |
-
#: methods/googledrive.php:
|
423 |
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."
|
424 |
msgstr "Následujte tento odkaz do vaší Google API konzole a aktivujte tam Drive API a vytvořte Client ID v sekci API Access."
|
425 |
|
426 |
-
#: methods/googledrive.php:
|
427 |
msgid "failed to access parent folder"
|
428 |
msgstr "nepodařilo se přistoupit k nadřazené složce"
|
429 |
|
430 |
-
#: methods/googledrive.php:
|
431 |
msgid "However, subsequent access attempts failed:"
|
432 |
msgstr "Nicméně následné pokusy o připojení selhaly:"
|
433 |
|
434 |
-
#: admin.php:
|
435 |
msgid "External database"
|
436 |
msgstr "Externí databáze"
|
437 |
|
438 |
-
#: admin.php:
|
439 |
msgid "This will also cause debugging output from all plugins to be shown upon this screen - please do not be surprised to see these."
|
440 |
msgstr "Způsobí to, že se zde zobrazí i debug výstup ostatních pluginů - nebuďte proto překvapeni, že tomu tak je."
|
441 |
|
442 |
-
#: admin.php:
|
443 |
msgid "Back up more databases"
|
444 |
msgstr "Zálohovat více databází"
|
445 |
|
446 |
-
#: admin.php:
|
447 |
msgid "Don't want to be spied on? UpdraftPlus Premium can encrypt your database backup."
|
448 |
msgstr "Nechcete být špehování? UpdraftPlus Premium dokáže zálohu databáze šifrovat."
|
449 |
|
450 |
-
#: admin.php:
|
451 |
msgid "It can also backup external databases."
|
452 |
msgstr "Dokáže také zálohovat externí databáze."
|
453 |
|
454 |
-
#: admin.php:
|
455 |
msgid "You can manually decrypt an encrypted database here."
|
456 |
msgstr "Zde můžete ručně dešifrovat šifrovanou databázi."
|
457 |
|
458 |
-
#: admin.php:
|
459 |
msgid "First, enter the decryption key"
|
460 |
msgstr "Nejprve vložte dešifrovací klíč"
|
461 |
|
462 |
-
#: admin.php:
|
463 |
msgid "use UpdraftPlus Premium"
|
464 |
msgstr "použít UpdraftPlus Premium"
|
465 |
|
466 |
-
#: admin.php:
|
467 |
msgid "Decryption failed. The database file is encrypted."
|
468 |
msgstr "Dešifrování selhalo. Soubor databáze je šifrován."
|
469 |
|
470 |
-
#: admin.php:
|
471 |
msgid "Only the WordPress database can be restored; you will need to deal with the external database manually."
|
472 |
msgstr "Obnovena může být pouze WordPress databáze; s externí databází si budete muset poradit ručně."
|
473 |
|
474 |
-
#: restorer.php:
|
475 |
msgid "An error occurred on the first %s command - aborting run"
|
476 |
msgstr "Při prvním %s příkazu nastala chyba - ruším běh"
|
477 |
|
@@ -487,35 +431,35 @@ msgstr "Připojení selhalo: zkontrolujte přístupové údaje, jestli server s
|
|
487 |
msgid "In %s, path names are case sensitive."
|
488 |
msgstr "V %s u cesty záleží na velikosti písmen."
|
489 |
|
490 |
-
#: addons/migrator.php:
|
491 |
msgid "Warning: the database's home URL (%s) is different to what we expected (%s)"
|
492 |
msgstr "Varování: domovská URL databáze (%s) je jiná, než jsme očekávali (%s)"
|
493 |
|
494 |
-
#: addons/bitcasa.php:
|
495 |
msgid "You have not yet configured and saved your %s credentials"
|
496 |
msgstr "Zatím jste ještě nenastavili a neuložili své přihlašovací údaje pro %s"
|
497 |
|
498 |
-
#: addons/bitcasa.php:
|
499 |
msgid "After logging in, create a sandbox app. You can leave all of the questions for creating an app blank (except for the app's name)."
|
500 |
msgstr "Po přihlášení vytvořte sandbox aplikaci. Všechny otázky (kromě jména aplikace) můžete nechat prázdné."
|
501 |
|
502 |
-
#: addons/bitcasa.php:
|
503 |
msgid "Enter the path of the %s folder you wish to use here."
|
504 |
msgstr "Vložte cestu k %s složce, kterou zde chcete použít."
|
505 |
|
506 |
-
#: addons/bitcasa.php:
|
507 |
msgid "If the folder does not already exist, then it will be created."
|
508 |
msgstr "Pokud složka neexistuje, bude vytvořena."
|
509 |
|
510 |
-
#: addons/bitcasa.php:
|
511 |
msgid "e.g. %s"
|
512 |
msgstr "např. %s"
|
513 |
|
514 |
-
#: addons/bitcasa.php:
|
515 |
msgid "If you leave it blank, then the backup will be placed in the root of your %s"
|
516 |
msgstr "Pokud ji necháte prázdnou, bude záloha uložena do kořene vaší %s"
|
517 |
|
518 |
-
#: addons/bitcasa.php:
|
519 |
msgid "Bitcasa"
|
520 |
msgstr "Bitcasa"
|
521 |
|
@@ -567,24 +511,24 @@ msgstr "Musí se jednat o v2 (Keystone) ověřovací URI; v1 (Swauth) není podp
|
|
567 |
msgid "Failed to upload %s"
|
568 |
msgstr "Nahrání %s se nezdařilo"
|
569 |
|
570 |
-
#: methods/dropbox.php:
|
571 |
-
#: addons/bitcasa.php:
|
572 |
msgid "Success:"
|
573 |
msgstr "Úspěch:"
|
574 |
|
575 |
-
#: methods/dropbox.php:
|
576 |
msgid "Dropbox"
|
577 |
msgstr "Dropbox"
|
578 |
|
579 |
-
#: methods/dropbox.php:
|
580 |
msgid "(You appear to be already authenticated)."
|
581 |
msgstr "(Vypadá to, že již jste ověřeni)."
|
582 |
|
583 |
-
#: methods/dropbox.php:
|
584 |
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."
|
585 |
msgstr "<strong>Poté</strong> co uložíte nastavení (kliknutím na \"Uložit změny\" níže), vraťte se sem a klikněte na tento odkaz pro dokončení ověření s %s."
|
586 |
|
587 |
-
#: methods/dropbox.php:
|
588 |
msgid "Authenticate with %s"
|
589 |
msgstr "Ověření s %s"
|
590 |
|
@@ -592,8 +536,7 @@ msgstr "Ověření s %s"
|
|
592 |
msgid "Error downloading remote file: Failed to download"
|
593 |
msgstr "Chyba při stahování vzdáleného souboru: Nepodařilo se ho stáhnout"
|
594 |
|
595 |
-
#: methods/openstack-base.php:329 addons/bitcasa.php:
|
596 |
-
#: addons/copycom.php:184
|
597 |
msgid "The %s object was not found"
|
598 |
msgstr "Objekt %s nebyl nalezen"
|
599 |
|
@@ -610,8 +553,7 @@ msgstr "Oblast: %s"
|
|
610 |
msgid "Could not access %s container"
|
611 |
msgstr "Nepodařilo se přistoupit ke kontejneru %s"
|
612 |
|
613 |
-
#: methods/googledrive.php:
|
614 |
-
#: addons/copycom.php:549
|
615 |
msgid "Account holder's name: %s."
|
616 |
msgstr "Jméno držitele účtu: %s."
|
617 |
|
@@ -621,28 +563,28 @@ msgstr "Jméno držitele účtu: %s."
|
|
621 |
msgid "%s error - failed to access the container"
|
622 |
msgstr "%s chyba - nepodařilo se přistoupit ke kontejneru"
|
623 |
|
624 |
-
#: methods/googledrive.php:
|
625 |
msgid "<strong>This is NOT a folder name</strong>."
|
626 |
msgstr "<strong>Toto NENÍ název složky</strong>."
|
627 |
|
628 |
-
#: methods/googledrive.php:
|
629 |
msgid "It is an ID number internal to Google Drive"
|
630 |
msgstr "Je to vnitřní ID Google Disku"
|
631 |
|
632 |
-
#: methods/googledrive.php:
|
633 |
msgid "To be able to set a custom folder name, use UpdraftPlus Premium."
|
634 |
msgstr "Pokud chcete moct nastavit vlastní název složky, použijte UpdraftPlus Premium."
|
635 |
|
636 |
-
#: methods/googledrive.php:
|
637 |
-
#: addons/bitcasa.php:
|
638 |
msgid "Folder"
|
639 |
msgstr "Složka"
|
640 |
|
641 |
-
#: methods/googledrive.php:
|
642 |
msgid "Name: %s."
|
643 |
msgstr "Jméno: %s."
|
644 |
|
645 |
-
#: methods/googledrive.php:
|
646 |
msgid "%s download: failed: file not found"
|
647 |
msgstr "%s stahování: selhalo: soubor nenalezen"
|
648 |
|
@@ -658,27 +600,27 @@ msgstr "Budete muset požádat svého poskytovatele o aktualizaci."
|
|
658 |
msgid "Your %s version: %s."
|
659 |
msgstr "Vaše %s verze: %s."
|
660 |
|
661 |
-
#: methods/googledrive.php:
|
662 |
msgid "Google Drive list files: failed to access parent folder"
|
663 |
msgstr "Seznam souborů Google Disku: nelze přistoupit k rodičovské složce"
|
664 |
|
665 |
-
#: admin.php:
|
666 |
msgid "Theme directory (%s) not found, but lower-case version exists; updating database option accordingly"
|
667 |
msgstr "Složka tématu (%s) nebyla nalezena, ale existuje její verze s malými písmeny; patřičně upravuji možnost databáze"
|
668 |
|
669 |
-
#: admin.php:
|
670 |
msgid "Fetch"
|
671 |
msgstr "Přinést"
|
672 |
|
673 |
-
#: admin.php:
|
674 |
msgid "Call"
|
675 |
msgstr "Zavolat"
|
676 |
|
677 |
-
#: admin.php:
|
678 |
msgid "This feature requires %s version %s or later"
|
679 |
msgstr "Tato vlastnost vyžaduje %s verzi %s, nebo novější"
|
680 |
|
681 |
-
#: restorer.php:
|
682 |
msgid "Elegant themes theme builder plugin data detected: resetting temporary folder"
|
683 |
msgstr "Detekován Elegant themes theme builder plugin: resetuji dočasnou složku"
|
684 |
|
@@ -686,15 +628,15 @@ msgstr "Detekován Elegant themes theme builder plugin: resetuji dočasnou slož
|
|
686 |
msgid "Failed to unpack the archive"
|
687 |
msgstr "Nepodařilo se rozbalit archiv"
|
688 |
|
689 |
-
#: restorer.php:
|
690 |
msgid "%s files have been extracted"
|
691 |
msgstr "%s souborů bylo rozbaleno"
|
692 |
|
693 |
-
#: class-updraftplus.php:
|
694 |
msgid "Error - failed to download the file"
|
695 |
msgstr "Chyba - nepodařilo se stáhnout soubor"
|
696 |
|
697 |
-
#: admin.php:
|
698 |
msgid "Rescan local folder for new backup sets"
|
699 |
msgstr "Vyhledat nové zálohy v lokální složce"
|
700 |
|
@@ -734,71 +676,71 @@ msgstr "Klíč"
|
|
734 |
msgid "PKCS1 (PEM header: BEGIN RSA PRIVATE KEY), XML and PuTTY format keys are accepted."
|
735 |
msgstr "PKCS1 (PEM hlavička: BEGIN RSA PRIVATE KEY), jsou povoleny formáty klíče XML a PuTTY."
|
736 |
|
737 |
-
#: admin.php:
|
738 |
msgid "Backup created by: %s."
|
739 |
msgstr "Zálohu vytvořil: %s."
|
740 |
|
741 |
-
#: admin.php:
|
742 |
msgid "Files and database WordPress backup (created by %s)"
|
743 |
msgstr "Záloha souborů a databáze WordPressu (vytvořil %s)"
|
744 |
|
745 |
-
#: admin.php:
|
746 |
msgid "Files backup (created by %s)"
|
747 |
msgstr "Záloha souborů (vytvořil %s)"
|
748 |
|
749 |
-
#: admin.php:
|
750 |
msgid "unknown source"
|
751 |
msgstr "neznámý zdroj"
|
752 |
|
753 |
-
#: admin.php:
|
754 |
msgid "Database (created by %s)"
|
755 |
msgstr "Databáze (vytvořil %s)"
|
756 |
|
757 |
-
#: admin.php:
|
758 |
msgid "Rescan remote storage"
|
759 |