UpdraftPlus WordPress Backup Plugin - Version 1.9.26

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

Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 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 CHANGED
@@ -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
- if ('googledrive' === $service || (is_array($service) && in_array('googledrive', $service))) {
41
- $opts = UpdraftPlus_Options::get_updraft_option('updraft_googledrive');
42
- if (empty($opts)) {
43
- $clientid = UpdraftPlus_Options::get_updraft_option('updraft_googledrive_clientid', '');
44
- $token = UpdraftPlus_Options::get_updraft_option('updraft_googledrive_token', '');
45
- } else {
46
- $clientid = $opts['clientid'];
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 ('dropbox' === $service || (is_array($service) && in_array('dropbox', $service))) {
 
 
 
 
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 || (is_array($service) && in_array('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 || (is_array($service) && in_array('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 (is_array($links) && $file == 'updraftplus/updraftplus.php'){
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
- curl_setopt($ch, CURLOPT_HEADER, true);
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
- $resp['e'] = htmlspecialchars($error);
746
- # json_encode(array('e' => htmlspecialchars($error)));
747
  }
748
- $resp['r'] = (empty($response)) ? '' : htmlspecialchars(substr($response, 0, 2048));
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, 2048))));
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/i', $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)) {
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('#backupnow_label').val(''); jQuery('#updraft-backupnow-modal').dialog('open');"><?php _e('Backup Now', 'updraftplus');?></button>
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') ?>" class="updraft-log-link" onclick="event.preventDefault(); updraft_popuplog('');"><?php _e('Download most recently modified log file','updraftplus');?></a>
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.", 'updraftplus');?></p>
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
- $ret .= '- <a href="?page=updraftplus&action=downloadlog&updraftplus_backup_nonce='.$job_id.'" class="updraft-log-link" onclick="event.preventDefault(); updraft_popuplog(\''.$job_id.'\');">'.__('show log', 'updraftplus').'</a>';
 
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
- if (is_readable($potential_log_file)) $last_backup_text .= "<a href=\"?page=updraftplus&action=downloadlog&updraftplus_backup_nonce=".$updraft_last_backup['backup_nonce']."\" class=\"updraft-log-link\" onclick=\"event.preventDefault(); updraft_popuplog('".$updraft_last_backup['backup_nonce']."');\">".__('Download log file','updraftplus')."</a>";
 
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', '<strong>'.$pretty_date.'</strong>', $backup, $jobdata);
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" class="updraft-log-link" onclick="event.preventDefault(); updraft_popuplog('$nval');" />
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 = (preg_match('/\.sql(\.(bz2|gz))?$/i', $entry) || preg_match('/-database-([-0-9]+)\.zip$/i', $entry)) ? 'db' : 'wpcore';
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' == strtolower(substr($entry, -4, 4)) || preg_match('/\.sql(\.(bz2|gz))?$/i', $entry)) {
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,
backup.php CHANGED
@@ -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 = 524288000; # 500Mb
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:', 'updraftplus').' '.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,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, $retry_on_error = true) {
1575
 
1576
  global $updraftplus;
1577
 
@@ -1583,7 +1583,7 @@ class UpdraftPlus_Backup {
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,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
- // $retry_on_error is here being used as a proxy for 'not the second time around, when there might be the remains of the file on the first time around'
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) > 0 || count($this->zipfiles_batched) > 0) {
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
- // Reset these variables because the index may have changed since we began
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
- // ZipArchive::addFile sometimes fails - there's nothing when we expected something.
1730
- // Did not used to have || $error_occured here. But it is better to retry, than to simply warn the user to check his logs.
1731
- if (((file_exists($destination) || $this->index == $original_index) && @filesize($destination) < 90 && 'UpdraftPlus_ZipArchive' == $this->use_zip_object) || ($error_occurred && $retry_on_error)) {
1732
- // This can be made more sophisticated if feedback justifies it. Currently we just switch to PclZip. But, it may have been a BinZip failure, so we could then try ZipArchive if that is available. If doing that, make sure that an infinite recursion isn't made possible.
1733
- $updraftplus->log("makezip_addfiles(".$this->use_zip_object.") apparently failed (file=".basename($destination).", type=$whichone, size=".filesize($destination).") - retrying with PclZip");
1734
- $saved_zip_object = $this->use_zip_object;
1735
- $this->use_zip_object = 'UpdraftPlus_PclZip';
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
- // To call into here, the array $this->zipfiles_batched must be populated (keys=paths, values=add-to-zip-as values). It gets reset upon exit from here.
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 < 1024) $maxzipbatch = 26214400;
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 = (version_compare(PHP_VERSION, '5.2.12', '>') && defined('ZIPARCHIVE::CREATE')) ? ZIPARCHIVE::CREATE : 1;
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
- // Though we will continue processing the files we've got, the final error code will be false, to allow a second attempt on the failed ones. This also keeps us consistent with a negative result for $zip->close() further down. We don't just retry here, because we have seen cases (with BinZip) where upon failure, the existing zip had actually been deleted. So, to be safe we need to re-scan the existing zips.
1909
- $ret = false;
1910
- $this->record_zip_error($files_zipadded_since_open, $zip->last_error, $warn_on_failures);
 
 
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 == ($nret = $zip->close())) $this->record_zip_error($files_zipadded_since_open, $zip->last_error, $warn_on_failures);
 
 
 
 
 
 
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 ($ret == false) ? false : $nret;
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() {
class-updraftplus.php CHANGED
@@ -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
- list ($mod_time, $log_file, $nonce) = $this->last_modified_log();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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($options) {
1504
- $skip_cloud = empty($options['nocloud']) ? false : true;
1505
- $this->boot_backup(1, 1, false, false, ($skip_cloud) ? 'none' : false, $options);
1506
  }
1507
 
1508
- public function backupnow_files($options) {
1509
- $skip_cloud = empty($options['nocloud']) ? false : true;
1510
- $this->boot_backup(1, 0, false, false, ($skip_cloud) ? 'none' : false, $options);
1511
  }
1512
 
1513
- public function backupnow_database($options) {
1514
- $skip_cloud = empty($options['nocloud']) ? false : true;
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, $options = array()) {
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
- // Try to avoid changing the time is one was already scheduled. This is fairly conservative - we could do more, e.g. check if a backup already happened today.
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
- $previous_interval = UpdraftPlus_Options::get_updraft_option('updraft_interval_database');
2198
 
2199
  $valid_schedules = wp_get_schedules();
2200
  if (empty($valid_schedules[$interval])) $interval = 'daily';
2201
 
2202
- // Try to avoid changing the time is one was already scheduled. This is fairly conservative - we could do more, e.g. check if a backup already happened today.
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') || !is_file($updraft_dir.'/web.config')) {
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
- $wplang = $this->get_wplang();
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);
class-zip.php CHANGED
@@ -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.12', '>') && defined('ZIPARCHIVE::CREATE')) ? ZIPARCHIVE::CREATE : 1;
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
 
includes/Dropbox/API.php CHANGED
@@ -8,7 +8,7 @@
8
  * @link https://status.dropbox.com Dropbox status
9
  * @package Dropbox
10
  */
11
- class UpdraftPlus_Dropbox_API
12
  {
13
  // API Endpoints
14
  const API_URL = 'https://api.dropbox.com/1/';
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/';
includes/Dropbox/OAuth/Consumer/ConsumerAbstract.php CHANGED
@@ -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 = UpdraftPlus_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,7 +132,7 @@ abstract class Dropbox_ConsumerAbstract
132
  public function getAccessToken()
133
  {
134
  // Get the signed request URL
135
- $response = $this->fetch('POST', UpdraftPlus_Dropbox_API::API_URL, self::ACCESS_TOKEN_METHOD);
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
  }
includes/cacert.pem CHANGED
@@ -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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
- RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE
3876
- 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
- PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6
3878
- 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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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
- 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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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
- dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X
3921
- 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
- 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
- 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
- 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
3925
- O3jtZsSOeWmD3n+M
3926
- -----END CERTIFICATE-----
3927
-
3928
- QuoVadis Root CA 3 G3
3929
- =====================
3930
- -----BEGIN CERTIFICATE-----
3931
- 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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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
- 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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
- TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du
3950
- 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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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
- 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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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
- vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY
4046
- 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
- MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm
4048
- 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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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
- yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy
4056
- 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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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
- dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
4073
- 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
- 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
- 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
- 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
- +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
- EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk
4079
- 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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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
- 5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/
4089
- 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
- mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx
4091
- 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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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
- VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN
4102
- 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
- 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
- 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
- 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
- Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy
4107
- 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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-----
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/ftp.class.php CHANGED
@@ -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');
includes/updraft-admin-ui.js CHANGED
@@ -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: 355, width: 480, modal: true,
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
- if (resp.r) {
942
- $('#updraftplus_httpget_results').html('<pre>'+resp.r+'</pre>');
943
  } else {
944
  console.log(response);
945
- //alert(updraftlion.jsonnotunderstood);
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
  }
languages/updraftplus-cs_CZ.mo CHANGED
Binary file
languages/updraftplus-cs_CZ.po CHANGED
@@ -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-10-20 17:26:35+0000\n"
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/copycom.php:526
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:684 addons/migrator.php:712
74
  msgid "Search and replacing table:"
75
  msgstr "Hledání a nahrazování tabulky:"
76
 
77
- #: addons/migrator.php:684
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:369 addons/copycom.php:512
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:1352
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:1352
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:1352
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:1352
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:2492 class-updraftplus.php:2521
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:2492 class-updraftplus.php:2521 admin.php:1818
126
  msgid "Twitter"
127
  msgstr "Twitter"
128
 
129
- #: class-updraftplus.php:2492 class-updraftplus.php:2521
130
  msgid "Facebook"
131
  msgstr "Facebook"
132
 
133
- #: class-updraftplus.php:2492 class-updraftplus.php:2521
134
  msgid "Google+"
135
  msgstr "Google+"
136
 
137
- #: class-updraftplus.php:2492 class-updraftplus.php:2521
138
  msgid "LinkedIn"
139
  msgstr "LinkedIn"
140
 
141
- #: admin.php:3070
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:3816
146
  msgid "Why am I seeing this?"
147
  msgstr "Proč tohle vidím?"
148
 
149
- #: admin.php:2071
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:2071
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:1059
158
  msgid "Start backup"
159
  msgstr "Zahájit zálohu"
160
 
161
- #: restorer.php:892
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:892
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:2816
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:2816
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:2662
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:2222
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:1538
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:1573
190
  msgid "This file could not be uploaded"
191
  msgstr "Tento soubor nemůže být nahrán"
192
 
193
- #: addons/importer.php:38
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:38
198
  msgid "Supported backup plugins: %s"
199
  msgstr "Podporované zálohovací pluginy: %s"
200
 
201
- #: admin.php:2789
202
  msgid "Incremental file backup intervals"
203
  msgstr "Intervaly přírůstkového zálohování"
204
 
205
- #: admin.php:2792
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:2236
210
  msgid "Memory limit"
211
  msgstr "Limit paměti"
212
 
213
- #: admin.php:1450
214
  msgid "restoration"
215
  msgstr "obnovení"
216
 
217
- #: restorer.php:1474
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:231 addons/autobackup.php:233
230
  msgid "Backup succeeded"
231
  msgstr "Záloha úspěšná"
232
 
233
- #: addons/autobackup.php:231 addons/autobackup.php:233
234
  msgid "(view log...)"
235
  msgstr "(zobrazit log...)"
236
 
237
- #: addons/autobackup.php:231 addons/autobackup.php:233
238
  msgid "now proceeding with the updates..."
239
  msgstr "nyní pokračovat s aktualizacemi..."
240
 
241
- #: updraftplus.php:67 updraftplus.php:68 admin.php:2748 admin.php:2749
242
- #: admin.php:2750
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:1525
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:857
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:3301
295
  msgid "You have not yet made any backups."
296
  msgstr "Zatím jste nevytvořili žádnou zálohu."
297
 
298
- #: admin.php:2860
299
  msgid "Database Options"
300
  msgstr "Možnosti databáze"
301
 
302
- #: admin.php:2288
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:2258
307
  msgid "%s (%s used)"
308
  msgstr "%s (%s použito)"
309
 
310
- #: admin.php:2261
311
  msgid "Plugins for debugging:"
312
  msgstr "Pluginy pro debugování:"
313
 
314
- #: admin.php:2258
315
  msgid "Free disk space in account:"
316
  msgstr "Volné místo na disku pro účet:"
317
 
318
- #: admin.php:2058
319
  msgid "Existing Backups: Downloading And Restoring"
320
  msgstr "Existující zálohy: Stahování a obnovování"
321
 
322
- #: admin.php:1856
323
  msgid "Current Status"
324
  msgstr "Současný stav"
325
 
326
- #: admin.php:1030 admin.php:1128 admin.php:1857
327
  msgid "Existing Backups"
328
  msgstr "Existující zálohy"
329
 
330
- #: admin.php:1859
331
  msgid "Debugging / Expert Tools"
332
  msgstr "Debugování / Nástroje pro experty"
333
 
334
- #: admin.php:1883
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:417
339
  msgid "Welcome to UpdraftPlus!"
340
  msgstr "Vítejte v UpdraftPlus!"
341
 
342
- #: admin.php:417
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:417
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:315
419
  msgid "External database (%s)"
420
  msgstr "Externí databáze (%s)"
421
 
422
- #: methods/googledrive.php:857
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:374
427
  msgid "failed to access parent folder"
428
  msgstr "nepodařilo se přistoupit k nadřazené složce"
429
 
430
- #: methods/googledrive.php:331
431
  msgid "However, subsequent access attempts failed:"
432
  msgstr "Nicméně následné pokusy o připojení selhaly:"
433
 
434
- #: admin.php:3368
435
  msgid "External database"
436
  msgstr "Externí databáze"
437
 
438
- #: admin.php:3065
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:2918
443
  msgid "Back up more databases"
444
  msgstr "Zálohovat více databází"
445
 
446
- #: admin.php:2869
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:2869
451
  msgid "It can also backup external databases."
452
  msgstr "Dokáže také zálohovat externí databáze."
453
 
454
- #: admin.php:2878
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:2896
459
  msgid "First, enter the decryption key"
460
  msgstr "Nejprve vložte dešifrovací klíč"
461
 
462
- #: admin.php:2817
463
  msgid "use UpdraftPlus Premium"
464
  msgstr "použít UpdraftPlus Premium"
465
 
466
- #: admin.php:1261
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:806
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:1284 restorer.php:1493 restorer.php:1522
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:626
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:250 addons/bitcasa.php:344 addons/copycom.php:260
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:370 addons/copycom.php:513
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:395 addons/google-enhanced.php:73 addons/copycom.php:542
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:395 addons/google-enhanced.php:73 addons/copycom.php:542
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:395 addons/google-enhanced.php:73 addons/copycom.php:542
511
  msgid "e.g. %s"
512
  msgstr "např. %s"
513
 
514
- #: addons/bitcasa.php:395 addons/google-enhanced.php:73 addons/copycom.php:542
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:400 addons/bitcasa.php:403
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:482 methods/dropbox.php:484 addons/bitcasa.php:299
571
- #: addons/bitcasa.php:301 addons/copycom.php:385 addons/copycom.php:387
572
  msgid "Success:"
573
  msgstr "Úspěch:"
574
 
575
- #: methods/dropbox.php:416 methods/dropbox.php:417
576
  msgid "Dropbox"
577
  msgstr "Dropbox"
578
 
579
- #: methods/dropbox.php:417 addons/bitcasa.php:401 addons/copycom.php:548
580
  msgid "(You appear to be already authenticated)."
581
  msgstr "(Vypadá to, že již jste ověřeni)."
582
 
583
- #: methods/dropbox.php:417 addons/bitcasa.php:403 addons/copycom.php:550
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:416 addons/bitcasa.php:400 addons/copycom.php:547
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:118 addons/copycom.php:160
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:906 methods/dropbox.php:423 addons/bitcasa.php:402
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:886
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:886
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:895
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:882 methods/googledrive.php:892
637
- #: addons/bitcasa.php:394 addons/google-enhanced.php:72 addons/copycom.php:541
638
  msgid "Folder"
639
  msgstr "Složka"
640
 
641
- #: methods/googledrive.php:351
642
  msgid "Name: %s."
643
  msgstr "Jméno: %s."
644
 
645
- #: methods/googledrive.php:814
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:150
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:4090
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:2263
670
  msgid "Fetch"
671
  msgstr "Přinést"
672
 
673
- #: admin.php:2265
674
  msgid "Call"
675
  msgstr "Zavolat"
676
 
677
- #: admin.php:2092 admin.php:2886
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:1631
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:224
690
  msgid "%s files have been extracted"
691
  msgstr "%s souborů bylo rozbaleno"
692
 
693
- #: class-updraftplus.php:728
694
  msgid "Error - failed to download the file"
695
  msgstr "Chyba - nepodařilo se stáhnout soubor"
696
 
697
- #: admin.php:2071
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:3408 admin.php:3655 addons/importer.php:131
738
  msgid "Backup created by: %s."
739
  msgstr "Zálohu vytvořil: %s."
740
 
741
- #: admin.php:3415
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:3415
746
  msgid "Files backup (created by %s)"
747
  msgstr "Záloha souborů (vytvořil %s)"
748
 
749
- #: admin.php:3348 admin.php:3410
750
  msgid "unknown source"
751
  msgstr "neznámý zdroj"
752
 
753
- #: admin.php:3351
754
  msgid "Database (created by %s)"
755
  msgstr "Databáze (vytvořil %s)"
756
 
757
- #: admin.php:2072
758
  msgid "Rescan remote storage"
759