UpdraftPlus WordPress Backup Plugin - Version 1.6.1

Version Description

  • 05/06/2013 =
  • FEATURE: New "Migrator" add-on for moving sites from one WordPress install to another (http://updraftplus.com/shop/)
  • FEATURE: The "More files" add-on can now back up any files from anywhere on your filesystem (not just parts of WordPress)
  • FEATURE: The "More files" add-on can now exclude specified directories from the backup of WordPress core
  • FEATURE: Dropbox and Google Drive now check available quota before uploading
  • FEATURE: Nederlands / Dutch (nl_NL) translation: thanks to Hans van der Vlist - hansvandervlist@gmail.com
  • FEATURE: The SFTP/FTPS add-on now supports implicit encryption (so now both explicit + implicit are supported)
  • FIX: Google Drive now requires additional permissions to download your files - you will need to re-authenticate if you are downloading or restoring.
  • FIX: Fix serious corruption issue in larger Rackspace Cloud Files backups (fixed a bug in Rackspace's Cloud Files library)
  • FIX: Fix mcrypt call in Dropbox module to be compatible with PHP 5.2 on Windows, and with ancient FreeBSD versions which have no /dev/urandom
  • FIX: Allow top-level "Restore" button even if no backup sets currently known (to allow uploading some)
  • FIX: Fixed issues hindering restoration on web hosting setups with file permissions that invoked WP's remote filesystem methods
  • TWEAK: Database backup now includes more info about original WP install (e.g. WP/PHP versions)
  • TWEAK: The "More files" add-on now allows the user to choose whether to restore wp-config.php or not (and gives help)
  • TWEAK: Added an approximate expected row count when beginning to dump out a table
  • TWEAK: Remove the Google Drive URL prefix automatically for those who don't spot the instruction to do so
Download this release

Release Info

Developer DavidAnderson
Plugin Icon 128x128 UpdraftPlus WordPress Backup Plugin
Version 1.6.1
Comparing to
See all releases

Code changes from version 1.5.22 to 1.6.1

admin.php CHANGED
@@ -140,6 +140,10 @@ class UpdraftPlus_Admin {
140
 
141
  }
142
 
 
 
 
 
143
  function disk_space_check($space) {
144
  global $updraftplus;
145
  $updraft_dir = $updraftplus->backups_dir_location();
@@ -183,7 +187,7 @@ class UpdraftPlus_Admin {
183
  }
184
 
185
  function show_admin_warning_googledrive() {
186
- $this->show_admin_warning('<strong>'.__('UpdraftPlus notice:','updraftplus').'</strong> <a href="options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth&updraftplus_googleauth=doit">.'.sprintf(__('Click here to authenticate your %s account (you will not be able to back up to %s without it).','updraftplus'),'Google Drive','Google Drive').'</a>');
187
  }
188
 
189
  // This options filter removes ABSPATH off the front of updraft_dir, if it is given absolutely and contained within it
@@ -323,7 +327,7 @@ class UpdraftPlus_Admin {
323
 
324
  if (!$service) $service = UpdraftPlus_Options::get_updraft_option('updraft_service');
325
 
326
- $updraftplus->log("Requested file from remote service: $service:$file");
327
 
328
  $method_include = UPDRAFTPLUS_DIR.'/methods/'.$service.'.php';
329
  if (file_exists($method_include)) require_once($method_include);
@@ -599,8 +603,8 @@ class UpdraftPlus_Admin {
599
 
600
  /*
601
  we use request here because the initial restore is triggered by a POSTed form. we then may need to obtain credentials
602
- for the WP_Filesystem. to do this WP outputs a form that we can't insert variables into (apparently). So the values are
603
- passed back in as GET parameters. REQUEST covers both GET and POST so this weird logic works.
604
  */
605
  if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'updraft_restore' && isset($_REQUEST['backup_timestamp'])) {
606
  $backup_success = $this->restore_backup($_REQUEST['backup_timestamp']);
@@ -651,8 +655,9 @@ class UpdraftPlus_Admin {
651
  if(isset($_GET['action']) && $_GET['action'] == 'updraft_create_backup_dir') {
652
  if(!$this->create_backup_dir()) {
653
  echo '<p>'.__('Backup directory could not be created','updraftplus').'...</p><br/>';
 
 
654
  }
655
- echo '<p>'.__('Backup directory successfully created.','updraftplus').'</p><br/>';
656
  echo '<b>'.__('Actions','updraftplus').':</b> <a href="options-general.php?page=updraftplus">'.__('Return to UpdraftPlus Configuration','updraftplus').'</a>';
657
  return;
658
  }
@@ -673,7 +678,7 @@ class UpdraftPlus_Admin {
673
  if(isset($_POST['action']) && $_POST['action'] == 'updraft_backup_debug_all') { $updraftplus->boot_backup(true,true); }
674
  elseif (isset($_POST['action']) && $_POST['action'] == 'updraft_backup_debug_db') { $updraftplus->backup_db(); }
675
  elseif (isset($_POST['action']) && $_POST['action'] == 'updraft_wipesettings') {
676
- $settings = array('updraft_interval', 'updraft_interval_database', 'updraft_retain', 'updraft_retain_db', 'updraft_encryptionphrase', 'updraft_service', 'updraft_dropbox_appkey', 'updraft_dropbox_secret', 'updraft_googledrive_clientid', 'updraft_googledrive_secret', 'updraft_googledrive_remotepath', 'updraft_ftp_login', 'updraft_ftp_pass', 'updraft_ftp_remote_path', 'updraft_server_address', 'updraft_dir', 'updraft_email', 'updraft_delete_local', 'updraft_debug_mode', 'updraft_include_plugins', 'updraft_include_themes', 'updraft_include_uploads', 'updraft_include_others', 'updraft_include_wpcore',
677
  'updraft_include_blogs', 'updraft_include_mu-plugins', 'updraft_include_others_exclude', 'updraft_lastmessage', 'updraft_googledrive_clientid', 'updraft_googledrive_token', 'updraft_dropboxtk_request_token', 'updraft_dropboxtk_access_token', 'updraft_dropbox_folder', 'updraft_last_backup', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_sftp_settings', 'updraft_disable_ping', 'updraft_cloudfiles_user', 'updraft_cloudfiles_apikey', 'updraft_cloudfiles_path', 'updraft_cloudfiles_authurl', 'updraft_ssl_useservercerts', 'updraft_ssl_disableverify');
678
  foreach ($settings as $s) {
679
  UpdraftPlus_Options::delete_updraft_option($s);
@@ -770,7 +775,7 @@ class UpdraftPlus_Admin {
770
  ?>
771
 
772
  <tr>
773
- <th><?php _e('Next scheduled backups','updraftplus');?>:</th>
774
  <td>
775
  <div style="width: 76px; float:left;"><?php _e('Files','updraftplus'); ?>:</div><div style="color:blue; float:left;"><?php echo $next_scheduled_backup?></div>
776
  <div style="width: 76px; clear: left; float:left;"><?php _e('Database','updraftplus');?>: </div><div style="color:blue; float:left;"><?php echo $next_scheduled_backup_database?></div>
@@ -789,9 +794,8 @@ class UpdraftPlus_Admin {
789
  <?php
790
  $backup_history = UpdraftPlus_Options::get_updraft_option('updraft_backup_history');
791
  $backup_history = (is_array($backup_history))?$backup_history:array();
792
- $restore_disabled = (count($backup_history) == 0) ? 'disabled="disabled"' : "";
793
  ?>
794
- <input type="button" class="button-primary" <?php echo $restore_disabled ?> value="<?php _e('Restore','updraftplus');?>" style="padding-top:2px;padding-bottom:2px;font-size:22px !important; min-height: 32px;" onclick="jQuery('.download-backups').slideDown(); updraft_historytimertoggle(1); jQuery('html,body').animate({scrollTop: jQuery('#updraft_lastlogcontainer').offset().top},'slow');">
795
  </div>
796
  </div>
797
  </div>
@@ -814,6 +818,9 @@ class UpdraftPlus_Admin {
814
  <li><strong><?php _e('Downloading','updraftplus');?>:</strong> <?php _e("Pressing a button for Database/Plugins/Themes/Uploads/Others will make UpdraftPlus try to bring the backup file back from the remote storage (if any - e.g. Amazon S3, Dropbox, Google Drive, FTP) to your webserver. Then you will be allowed to download it to your computer. If the fetch from the remote storage stops progressing (wait 30 seconds to make sure), then press again to resume. Remember that you can also visit the cloud storage vendor's website directly.",'updraftplus');?></li>
815
  <li><strong><?php _e('Restoring','updraftplus');?>:</strong> <?php _e("Press the button for the backup you wish to restore. If your site is large and you are using remote storage, then you should first click on each entity in order to retrieve it back to the webserver. This will prevent time-outs from occuring during the restore process itself.",'updraftplus');?> <?php _e('More tasks:','updraftplus');?> <a href="#" onclick="jQuery('#updraft-plupload-modal').slideToggle(); return false;"><?php _e('upload backup files','updraftplus');?></a> | <a href="#" onclick="updraft_updatehistory(1); return false;" title="<?php _e('Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded. The location of this directory is set in the expert settings, below.','updraftplus'); ?>"><?php _e('rescan folder for new backup sets','updraftplus');?></a></li>
816
  <li><strong><?php _e('Opera web browser','updraftplus');?>:</strong> <?php _e('If you are using this, then turn Turbo/Road mode off.','updraftplus');?></li>
 
 
 
817
  <li title="<?php _e('This is a count of the contents of your Updraft directory','updraftplus');?>"><strong><?php _e('Web-server disk space in use by UpdraftPlus','updraftplus');?>:</strong> <span id="updraft_diskspaceused"><em>(calculating...)</em></span> <a href="#" onclick="updraftplus_diskspace(); return false;"><?php _e('refresh','updraftplus');?></a></li></ul>
818
 
819
  <div id="updraft-plupload-modal" title="<?php _e('UpdraftPlus - Upload backup files','updraftplus'); ?>" style="width: 75%; margin: 16px; display:none; margin-left: 100px;">
@@ -932,7 +939,7 @@ class UpdraftPlus_Admin {
932
 
933
  <div id="updraft-restore-modal" title="UpdraftPlus - <?php _e('Restore backup','updraftplus');?>">
934
  <p><strong><?php _e('Restore backup from','updraftplus');?>:</strong> <span id="updraft_restore_date"></span></p>
935
- <p><?php _e("Restoring will replace this site's themes, plugins, uploads, database and/or other content directories (according to what is contained in the backup set, and your selection",'updraftplus');?>). <?php _e('Choose the components to restore','updraftplus');?>:</p>
936
  <form id="updraft_restore_form" method="post">
937
  <fieldset>
938
  <input type="hidden" name="action" value="updraft_restore">
@@ -946,10 +953,48 @@ class UpdraftPlus_Admin {
946
 
947
  $backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
948
  foreach ($backupable_entities as $type => $info) {
949
- echo '<div><input id="updraft_restore_'.$type.'" type="checkbox" name="updraft_restore[]" value="'.$type.'"> <label for="updraft_restore_'.$type.'">'.$info['description'].'</label><br></div>';
 
 
 
 
 
 
 
 
 
950
  }
951
  ?>
952
- <div><input id="updraft_restore_db" type="checkbox" name="updraft_restore[]" value="db"> <label for="updraft_restore_db"><?php _e('Database','updraftplus'); ?></label><br></div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
953
  </fieldset>
954
  </form>
955
  <p><em><a href="http://updraftplus.com/faqs/what-should-i-understand-before-undertaking-a-restoration/" target="_new"><?php _e('Do read this helpful article of useful things to know before restoring.','updraftplus');?></a></em></p>
@@ -958,7 +1003,7 @@ class UpdraftPlus_Admin {
958
  <div id="updraft-backupnow-modal" title="UpdraftPlus - <?php _e('Perform a backup now','updraftplus'); ?>">
959
  <p><?php _e("This will schedule a one-time backup. To proceed, press 'Backup Now', then wait 10 seconds, then visit any page on your site. WordPress should then start the backup running in the background.",'updraftplus');?></p>
960
 
961
- <form id="updraft-backupnow-form" method="post" action="">
962
  <input type="hidden" name="action" value="updraft_backup" />
963
  </form>
964
 
@@ -1043,7 +1088,8 @@ class UpdraftPlus_Admin {
1043
  exit;
1044
  }
1045
 
1046
- $list = $wp_filesystem->dirlist(WP_CONTENT_DIR);
 
1047
 
1048
  $return_code = true;
1049
 
@@ -1051,7 +1097,7 @@ class UpdraftPlus_Admin {
1051
  if (substr($item['name'], -4, 4) == "-old") {
1052
  //recursively delete
1053
  print "<strong>".__('Delete','updraftplus').": </strong>".htmlspecialchars($item['name']).": ";
1054
- if(!$wp_filesystem->delete(WP_CONTENT_DIR.'/'.$item['name'], true)) {
1055
  $return_code = false;
1056
  print "<strong>Failed</strong><br>";
1057
  } else {
@@ -1073,7 +1119,8 @@ class UpdraftPlus_Admin {
1073
  }
1074
 
1075
  $updraft_dir = $updraftplus->backups_dir_location();
1076
- $default_backup_dir = WP_CONTENT_DIR.'/updraft';
 
1077
  $updraft_dir = ($updraft_dir)?$updraft_dir:$default_backup_dir;
1078
 
1079
  if (!$wp_filesystem->mkdir($updraft_dir, 0775)) return false;
@@ -1189,9 +1236,37 @@ class UpdraftPlus_Admin {
1189
  foreach ($backupable_entities as $key => $info) {
1190
  $included = (UpdraftPlus_Options::get_updraft_option("updraft_include_$key", apply_filters("updraftplus_defaultoption_include_".$key, true))) ? 'checked="checked"' : "";
1191
  if ('others' == $key) {
1192
- ?><input id="updraft_include_others" type="checkbox" name="updraft_include_others" value="1" <?php echo $included; ?> /> <label for="updraft_include_<?php echo $key ?>"><?php echo __('Any other directories found inside wp-content but exclude these directories:', 'updraftplus');?></label> <input type="text" name="updraft_include_others_exclude" size="44" value="<?php echo htmlspecialchars($include_others_exclude); ?>"/><br><?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1193
  } else {
1194
  echo "<input id=\"updraft_include_$key\" type=\"checkbox\" name=\"updraft_include_$key\" value=\"1\" $included /><label for=\"updraft_include_$key\"> ".$info['description']."</label><br>";
 
1195
  }
1196
  }
1197
  ?>
@@ -1340,7 +1415,7 @@ class UpdraftPlus_Admin {
1340
  updraft_check_same_times();
1341
 
1342
  jQuery( "#updraft-restore-modal" ).dialog({
1343
- autoOpen: false, height: 385, width: 480, modal: true,
1344
  buttons: {
1345
  '<?php _e('Restore','updraftplus');?>': function() {
1346
  var anyselected = 0;
@@ -1560,9 +1635,10 @@ class UpdraftPlus_Admin {
1560
  <?php
1561
  foreach ($backupable_entities as $type => $info) {
1562
  echo '<td>';
 
 
1563
  if (isset($value[$type])) {
1564
  $entities .= '/'.$type.'/';
1565
- $sdescrip = preg_replace('/ \(.*\)$/', '', $info['description']);
1566
  ?>
1567
  <form id="uddownloadform_<?php echo $type.'_'.$key;?>" action="admin-ajax.php" onsubmit="return updraft_downloader('uddlstatus_', '<?php echo $key."', '".$type;?>')" method="post">
1568
  <?php wp_nonce_field('updraftplus_download'); ?>
@@ -1571,7 +1647,7 @@ class UpdraftPlus_Admin {
1571
  <input type="hidden" name="timestamp" value="<?php echo $key?>" />
1572
  <input type="submit" title="<?php echo __('Press here to download','updraftplus').' '.strtolower($info['description']); ?>" value="<?php echo $sdescrip;?>" />
1573
  </form>
1574
- <?php } else { printf(_x('(No %s)','Message shown when no such object is available','updraftplus'), preg_replace('/\s\(.{12,}\)/', '', strtolower($info['description']))); } ?>
1575
  </td>
1576
  <?php }; ?>
1577
 
@@ -1589,20 +1665,25 @@ class UpdraftPlus_Admin {
1589
  <form method="post" action="">
1590
  <input type="hidden" name="backup_timestamp" value="<?php echo $key;?>">
1591
  <input type="hidden" name="action" value="updraft_restore" />
1592
- <?php if ($entities) { ?><button title="<?php _e('After pressing this button, you will be given the option to choose which components you wish to restore','updraftplus');?>" type="button" <?php echo $restore_disabled ?> class="button-primary" style="padding-top:2px;padding-bottom:2px;font-size:16px !important; min-height:26px;" onclick="updraft_restore_options('<?php echo $entities;?>'); jQuery('#updraft_restore_timestamp').val('<?php echo $key;?>'); jQuery('#updraft_restore_date').html('<?php echo $pretty_date;?>'); jQuery('#updraft-restore-modal').dialog('open');"><?php _e('Restore','updraftplus');?></button><?php } ?>
1593
  </form>
1594
  </td>
1595
  </tr>
1596
  <script>
1597
- function updraft_restore_options(entities) {
 
1598
  jQuery('input[name="updraft_restore[]"]').each(function(x,y){
1599
  var entity = jQuery(y).val();
1600
  if (entities.indexOf('/'+entity+'/') != -1) {
1601
  jQuery(y).removeAttr('disabled').parent().show();
 
 
1602
  } else {
1603
  jQuery(y).attr('disabled','disabled').parent().hide();
1604
  }
1605
  });
 
 
1606
  }
1607
  </script>
1608
  <?php }
@@ -1676,7 +1757,23 @@ class UpdraftPlus_Admin {
1676
  return false;
1677
  }
1678
 
1679
- $credentials = request_filesystem_credentials("options-general.php?page=updraftplus&action=updraft_restore&backup_timestamp=$timestamp");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1680
  WP_Filesystem($credentials);
1681
  if ( $wp_filesystem->errors->get_error_code() ) {
1682
  foreach ( $wp_filesystem->errors->get_error_messages() as $message )
@@ -1691,12 +1788,31 @@ class UpdraftPlus_Admin {
1691
 
1692
  $service = (isset($backup_history[$timestamp]['service'])) ? $backup_history[$timestamp]['service'] : false;
1693
 
1694
- if (!isset($_POST['updraft_restore']) || !is_array($_POST['updraft_restore'])) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1695
  echo '<p>'.__('ABORT: Could not find the information on which entities to restore.', 'updraftplus').'</p>';
 
1696
  return false;
1697
  }
1698
 
1699
- $entities_to_restore = array_flip($_POST['updraft_restore']);
 
 
 
1700
 
1701
  $backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
1702
 
@@ -1705,6 +1821,8 @@ class UpdraftPlus_Admin {
1705
 
1706
  if (!isset($backupable_entities[$type]) && 'db' != $type) continue;
1707
 
 
 
1708
  if ($type == 'db') {
1709
  echo "<h2>".__('Database','updraftplus')."</h2>";
1710
  } else {
@@ -1742,7 +1860,10 @@ class UpdraftPlus_Admin {
1742
  if(!class_exists('WP_Upgrader')) require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
1743
  require_once(UPDRAFTPLUS_DIR.'/includes/updraft-restorer.php');
1744
  $restorer = new Updraft_Restorer();
1745
- $val = $restorer->restore_backup($fullpath, $type, $service, $backupable_entities[$type]);
 
 
 
1746
 
1747
  if(is_wp_error($val)) {
1748
  foreach ($val->get_error_messages() as $msg) {
140
 
141
  }
142
 
143
+ function googledrive_remove_folderurlprefix($input) {
144
+ return str_replace('https://drive.google.com/#folders/', '', $input);
145
+ }
146
+
147
  function disk_space_check($space) {
148
  global $updraftplus;
149
  $updraft_dir = $updraftplus->backups_dir_location();
187
  }
188
 
189
  function show_admin_warning_googledrive() {
190
+ $this->show_admin_warning('<strong>'.__('UpdraftPlus notice:','updraftplus').'</strong> <a href="options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth&updraftplus_googleauth=doit">'.sprintf(__('Click here to authenticate your %s account (you will not be able to back up to %s without it).','updraftplus'),'Google Drive','Google Drive').'</a>');
191
  }
192
 
193
  // This options filter removes ABSPATH off the front of updraft_dir, if it is given absolutely and contained within it
327
 
328
  if (!$service) $service = UpdraftPlus_Options::get_updraft_option('updraft_service');
329
 
330
+ $updraftplus->log("Requested file from remote service: $service: $file");
331
 
332
  $method_include = UPDRAFTPLUS_DIR.'/methods/'.$service.'.php';
333
  if (file_exists($method_include)) require_once($method_include);
603
 
604
  /*
605
  we use request here because the initial restore is triggered by a POSTed form. we then may need to obtain credentials
606
+ for the WP_Filesystem. to do this WP outputs a form, but we don't pass our parameters via that. So the values are
607
+ passed back in as GET parameters. REQUEST covers both GET and POST so this logic works.
608
  */
609
  if(isset($_REQUEST['action']) && $_REQUEST['action'] == 'updraft_restore' && isset($_REQUEST['backup_timestamp'])) {
610
  $backup_success = $this->restore_backup($_REQUEST['backup_timestamp']);
655
  if(isset($_GET['action']) && $_GET['action'] == 'updraft_create_backup_dir') {
656
  if(!$this->create_backup_dir()) {
657
  echo '<p>'.__('Backup directory could not be created','updraftplus').'...</p><br/>';
658
+ } else {
659
+ echo '<p>'.__('Backup directory successfully created.','updraftplus').'</p><br/>';
660
  }
 
661
  echo '<b>'.__('Actions','updraftplus').':</b> <a href="options-general.php?page=updraftplus">'.__('Return to UpdraftPlus Configuration','updraftplus').'</a>';
662
  return;
663
  }
678
  if(isset($_POST['action']) && $_POST['action'] == 'updraft_backup_debug_all') { $updraftplus->boot_backup(true,true); }
679
  elseif (isset($_POST['action']) && $_POST['action'] == 'updraft_backup_debug_db') { $updraftplus->backup_db(); }
680
  elseif (isset($_POST['action']) && $_POST['action'] == 'updraft_wipesettings') {
681
+ $settings = array('updraft_interval', 'updraft_interval_database', 'updraft_retain', 'updraft_retain_db', 'updraft_encryptionphrase', 'updraft_service', 'updraft_dropbox_appkey', 'updraft_dropbox_secret', 'updraft_googledrive_clientid', 'updraft_googledrive_secret', 'updraft_googledrive_remotepath', 'updraft_ftp_login', 'updraft_ftp_pass', 'updraft_ftp_remote_path', 'updraft_server_address', 'updraft_dir', 'updraft_email', 'updraft_delete_local', 'updraft_debug_mode', 'updraft_include_plugins', 'updraft_include_themes', 'updraft_include_uploads', 'updraft_include_others', 'updraft_include_wpcore', 'updraft_include_wpcore_exclude', 'updraft_include_more',
682
  'updraft_include_blogs', 'updraft_include_mu-plugins', 'updraft_include_others_exclude', 'updraft_lastmessage', 'updraft_googledrive_clientid', 'updraft_googledrive_token', 'updraft_dropboxtk_request_token', 'updraft_dropboxtk_access_token', 'updraft_dropbox_folder', 'updraft_last_backup', 'updraft_starttime_files', 'updraft_starttime_db', 'updraft_sftp_settings', 'updraft_disable_ping', 'updraft_cloudfiles_user', 'updraft_cloudfiles_apikey', 'updraft_cloudfiles_path', 'updraft_cloudfiles_authurl', 'updraft_ssl_useservercerts', 'updraft_ssl_disableverify');
683
  foreach ($settings as $s) {
684
  UpdraftPlus_Options::delete_updraft_option($s);
775
  ?>
776
 
777
  <tr>
778
+ <th><span title="<?php _e('All the times shown in this section are using WordPress\'s configured time zone, which you can set in Settings -> General', 'updraftplus'); ?>"><?php _e('Next scheduled backups','updraftplus');?>:</span></th>
779
  <td>
780
  <div style="width: 76px; float:left;"><?php _e('Files','updraftplus'); ?>:</div><div style="color:blue; float:left;"><?php echo $next_scheduled_backup?></div>
781
  <div style="width: 76px; clear: left; float:left;"><?php _e('Database','updraftplus');?>: </div><div style="color:blue; float:left;"><?php echo $next_scheduled_backup_database?></div>
794
  <?php
795
  $backup_history = UpdraftPlus_Options::get_updraft_option('updraft_backup_history');
796
  $backup_history = (is_array($backup_history))?$backup_history:array();
 
797
  ?>
798
+ <input type="button" class="button-primary" value="<?php _e('Restore','updraftplus');?>" style="padding-top:2px;padding-bottom:2px;font-size:22px !important; min-height: 32px;" onclick="jQuery('.download-backups').slideDown(); updraft_historytimertoggle(1); jQuery('html,body').animate({scrollTop: jQuery('#updraft_lastlogcontainer').offset().top},'slow');">
799
  </div>
800
  </div>
801
  </div>
818
  <li><strong><?php _e('Downloading','updraftplus');?>:</strong> <?php _e("Pressing a button for Database/Plugins/Themes/Uploads/Others will make UpdraftPlus try to bring the backup file back from the remote storage (if any - e.g. Amazon S3, Dropbox, Google Drive, FTP) to your webserver. Then you will be allowed to download it to your computer. If the fetch from the remote storage stops progressing (wait 30 seconds to make sure), then press again to resume. Remember that you can also visit the cloud storage vendor's website directly.",'updraftplus');?></li>
819
  <li><strong><?php _e('Restoring','updraftplus');?>:</strong> <?php _e("Press the button for the backup you wish to restore. If your site is large and you are using remote storage, then you should first click on each entity in order to retrieve it back to the webserver. This will prevent time-outs from occuring during the restore process itself.",'updraftplus');?> <?php _e('More tasks:','updraftplus');?> <a href="#" onclick="jQuery('#updraft-plupload-modal').slideToggle(); return false;"><?php _e('upload backup files','updraftplus');?></a> | <a href="#" onclick="updraft_updatehistory(1); return false;" title="<?php _e('Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded. The location of this directory is set in the expert settings, below.','updraftplus'); ?>"><?php _e('rescan folder for new backup sets','updraftplus');?></a></li>
820
  <li><strong><?php _e('Opera web browser','updraftplus');?>:</strong> <?php _e('If you are using this, then turn Turbo/Road mode off.','updraftplus');?></li>
821
+ <?php if (UpdraftPlus_Options::get_updraft_option('updraft_service') == 'googledrive') {
822
+ ?><li><strong><?php _e('Google Drive','updraftplus');?>:</strong> <?php _e('Google changed their permissions setup recently (April 2013). To download or restore from Google Drive, you <strong>must</strong> first re-authenticate (using the link in the Google Drive configuration section).','updraftplus');?></li>
823
+ <?php } ?>
824
  <li title="<?php _e('This is a count of the contents of your Updraft directory','updraftplus');?>"><strong><?php _e('Web-server disk space in use by UpdraftPlus','updraftplus');?>:</strong> <span id="updraft_diskspaceused"><em>(calculating...)</em></span> <a href="#" onclick="updraftplus_diskspace(); return false;"><?php _e('refresh','updraftplus');?></a></li></ul>
825
 
826
  <div id="updraft-plupload-modal" title="<?php _e('UpdraftPlus - Upload backup files','updraftplus'); ?>" style="width: 75%; margin: 16px; display:none; margin-left: 100px;">
939
 
940
  <div id="updraft-restore-modal" title="UpdraftPlus - <?php _e('Restore backup','updraftplus');?>">
941
  <p><strong><?php _e('Restore backup from','updraftplus');?>:</strong> <span id="updraft_restore_date"></span></p>
942
+ <p><?php _e("Restoring will replace this site's themes, plugins, uploads, database and/or other content directories (according to what is contained in the backup set, and your selection).",'updraftplus');?> <?php _e('Choose the components to restore','updraftplus');?>:</p>
943
  <form id="updraft_restore_form" method="post">
944
  <fieldset>
945
  <input type="hidden" name="action" value="updraft_restore">
953
 
954
  $backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
955
  foreach ($backupable_entities as $type => $info) {
956
+ if (!isset($info['restorable']) || $info['restorable'] == true) {
957
+ echo '<div><input id="updraft_restore_'.$type.'" type="checkbox" name="updraft_restore[]" value="'.$type.'"> <label for="updraft_restore_'.$type.'">'.$info['description'].'</label><br>';
958
+
959
+ do_action("updraftplus_restore_form_$type");
960
+
961
+ echo '</div>';
962
+ } else {
963
+ $sdescrip = isset($info['shortdescription']) ? $info['shortdescription'] : $info['description'];
964
+ echo "<div style=\"margin: 8px 0;\"><em>".htmlspecialchars(sprintf(__('The following entity cannot be restored automatically: "%s".', 'updraftplus'), $sdescrip))." ".__('You will need to restore it manually.', 'updraftplus')."</em><br>".'<input id="updraft_restore_'.$type.'" type="hidden" name="updraft_restore[]" value="'.$type.'"></div>';
965
+ }
966
  }
967
  ?>
968
+ <div><input id="updraft_restore_db" type="checkbox" name="updraft_restore[]" value="db"> <label for="updraft_restore_db"><?php _e('Database','updraftplus'); ?></label><br>
969
+
970
+
971
+ <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>
972
+
973
+ <?php
974
+
975
+ do_action("updraftplus_restore_form_db");
976
+
977
+ if (!class_exists('UpdraftPlus_Addons_Migrator')) {
978
+
979
+ echo '<a href="http://updraftplus.com/faqs/tell-me-more-about-the-search-and-replace-site-location-in-the-database-option/">'.__('You can search and replace your database (for migrating a website to a new location/URL) with the Migrator add-on - follow this link for more information','updraftplus').'</a>';
980
+
981
+ }
982
+
983
+ ?>
984
+
985
+ <script>
986
+ jQuery('#updraft_restore_db').change(function(){
987
+ if (jQuery('#updraft_restore_db').is(':checked')) {
988
+ jQuery('#updraft_restorer_dboptions').slideDown();
989
+ } else {
990
+ jQuery('#updraft_restorer_dboptions').slideUp();
991
+ }
992
+ });
993
+ </script>
994
+
995
+ </div>
996
+
997
+ </div>
998
  </fieldset>
999
  </form>
1000
  <p><em><a href="http://updraftplus.com/faqs/what-should-i-understand-before-undertaking-a-restoration/" target="_new"><?php _e('Do read this helpful article of useful things to know before restoring.','updraftplus');?></a></em></p>
1003
  <div id="updraft-backupnow-modal" title="UpdraftPlus - <?php _e('Perform a backup now','updraftplus'); ?>">
1004
  <p><?php _e("This will schedule a one-time backup. To proceed, press 'Backup Now', then wait 10 seconds, then visit any page on your site. WordPress should then start the backup running in the background.",'updraftplus');?></p>
1005
 
1006
+ <form id="updraft-backupnow-form" method="post">
1007
  <input type="hidden" name="action" value="updraft_backup" />
1008
  </form>
1009
 
1088
  exit;
1089
  }
1090
 
1091
+ $content_dir = $wp_filesystem->wp_content_dir();
1092
+ $list = $wp_filesystem->dirlist($content_dir);
1093
 
1094
  $return_code = true;
1095
 
1097
  if (substr($item['name'], -4, 4) == "-old") {
1098
  //recursively delete
1099
  print "<strong>".__('Delete','updraftplus').": </strong>".htmlspecialchars($item['name']).": ";
1100
+ if(!$wp_filesystem->delete($content_dir.$item['name'], true)) {
1101
  $return_code = false;
1102
  print "<strong>Failed</strong><br>";
1103
  } else {
1119
  }
1120
 
1121
  $updraft_dir = $updraftplus->backups_dir_location();
1122
+
1123
+ $default_backup_dir = $wp_filesystem->find_folder($updraft_dir);
1124
  $updraft_dir = ($updraft_dir)?$updraft_dir:$default_backup_dir;
1125
 
1126
  if (!$wp_filesystem->mkdir($updraft_dir, 0775)) return false;
1236
  foreach ($backupable_entities as $key => $info) {
1237
  $included = (UpdraftPlus_Options::get_updraft_option("updraft_include_$key", apply_filters("updraftplus_defaultoption_include_".$key, true))) ? 'checked="checked"' : "";
1238
  if ('others' == $key) {
1239
+ ?><input id="updraft_include_others" type="checkbox" name="updraft_include_others" value="1" <?php echo $included; ?> /> <label for="updraft_include_<?php echo $key ?>"><?php echo __('Any other directories found inside wp-content', 'updraftplus');?></label><br><?php
1240
+
1241
+ $display = ($included) ? '' : 'style="display:none;"';
1242
+
1243
+ echo "<div id=\"updraft_include_others_exclude\" $display>";
1244
+
1245
+ echo '<label for="updraft_include_others_exclude">'.__('Exclude these:', 'updraftplus').'</label>';
1246
+
1247
+ echo '<input title="'.__('If entering multiple files/directories, then separate them with commas', 'updraftplus').'" type="text" id="updraft_include_others_exclude" name="updraft_include_others_exclude" size="54" value="'.htmlspecialchars($include_others_exclude).'" />';
1248
+
1249
+ echo '<br>';
1250
+
1251
+ echo '</div>';
1252
+
1253
+ echo <<<ENDHERE
1254
+ <script>
1255
+ jQuery(document).ready(function() {
1256
+ jQuery('#updraft_include_others').click(function() {
1257
+ if (jQuery('#updraft_include_others').is(':checked')) {
1258
+ jQuery('#updraft_include_others_exclude').slideDown();
1259
+ } else {
1260
+ jQuery('#updraft_include_others_exclude').slideUp();
1261
+ }
1262
+ });
1263
+ });
1264
+ </script>
1265
+ ENDHERE;
1266
+
1267
  } else {
1268
  echo "<input id=\"updraft_include_$key\" type=\"checkbox\" name=\"updraft_include_$key\" value=\"1\" $included /><label for=\"updraft_include_$key\"> ".$info['description']."</label><br>";
1269
+ do_action("updraftplus_config_option_include_$key");
1270
  }
1271
  }
1272
  ?>
1415
  updraft_check_same_times();
1416
 
1417
  jQuery( "#updraft-restore-modal" ).dialog({
1418
+ autoOpen: false, height: 505, width: 590, modal: true,
1419
  buttons: {
1420
  '<?php _e('Restore','updraftplus');?>': function() {
1421
  var anyselected = 0;
1635
  <?php
1636
  foreach ($backupable_entities as $type => $info) {
1637
  echo '<td>';
1638
+ $sdescrip = preg_replace('/ \(.*\)$/', '', $info['description']);
1639
+ if (strlen($sdescrip) > 20 && isset($info['shortdescription'])) $sdescrip = $info['shortdescription'];
1640
  if (isset($value[$type])) {
1641
  $entities .= '/'.$type.'/';
 
1642
  ?>
1643
  <form id="uddownloadform_<?php echo $type.'_'.$key;?>" action="admin-ajax.php" onsubmit="return updraft_downloader('uddlstatus_', '<?php echo $key."', '".$type;?>')" method="post">
1644
  <?php wp_nonce_field('updraftplus_download'); ?>
1647
  <input type="hidden" name="timestamp" value="<?php echo $key?>" />
1648
  <input type="submit" title="<?php echo __('Press here to download','updraftplus').' '.strtolower($info['description']); ?>" value="<?php echo $sdescrip;?>" />
1649
  </form>
1650
+ <?php } else { printf(_x('(No %s)','Message shown when no such object is available','updraftplus'), preg_replace('/\s\(.{12,}\)/', '', strtolower($sdescrip))); } ?>
1651
  </td>
1652
  <?php }; ?>
1653
 
1665
  <form method="post" action="">
1666
  <input type="hidden" name="backup_timestamp" value="<?php echo $key;?>">
1667
  <input type="hidden" name="action" value="updraft_restore" />
1668
+ <?php if ($entities) { ?><button title="<?php _e('After pressing this button, you will be given the option to choose which components you wish to restore','updraftplus');?>" type="button" class="button-primary" style="padding-top:2px;padding-bottom:2px;font-size:16px !important; min-height:26px;" onclick="updraft_restore_setoptions('<?php echo $entities;?>'); jQuery('#updraft_restore_timestamp').val('<?php echo $key;?>'); jQuery('#updraft_restore_date').html('<?php echo $pretty_date;?>'); jQuery('#updraft-restore-modal').dialog('open');"><?php _e('Restore','updraftplus');?></button><?php } ?>
1669
  </form>
1670
  </td>
1671
  </tr>
1672
  <script>
1673
+ function updraft_restore_setoptions(entities) {
1674
+ var howmany = 0;
1675
  jQuery('input[name="updraft_restore[]"]').each(function(x,y){
1676
  var entity = jQuery(y).val();
1677
  if (entities.indexOf('/'+entity+'/') != -1) {
1678
  jQuery(y).removeAttr('disabled').parent().show();
1679
+ howmany++;
1680
+ if (entity == 'db') { howmany += 4.5;}
1681
  } else {
1682
  jQuery(y).attr('disabled','disabled').parent().hide();
1683
  }
1684
  });
1685
+ var height = 276+howmany*20;
1686
+ jQuery('#updraft-restore-modal').dialog("option", "height", height);
1687
  }
1688
  </script>
1689
  <?php }
1757
  return false;
1758
  }
1759
 
1760
+ // request_filesystem_credentials passes on fields just via hidden name/value pairs.
1761
+ // Build array of parameters to be passed via this
1762
+ $extra_fields = array();
1763
+ if (isset($_POST['updraft_restore']) && is_array($_POST['updraft_restore'])) {
1764
+ foreach ($_POST['updraft_restore'] as $entity) {
1765
+ $_POST['updraft_restore_'.$entity] = 1;
1766
+ $extra_fields[] = 'updraft_restore_'.$entity;
1767
+ }
1768
+ }
1769
+ // Now make sure that updraft_restorer_ option fields get passed along to request_filesystem_credentials
1770
+ foreach ($_POST as $key => $value) {
1771
+ if (strpos($key, 'updraft_restorer_') === 0 ) {
1772
+ $extra_fields[] = $key;
1773
+ }
1774
+ }
1775
+
1776
+ $credentials = request_filesystem_credentials("options-general.php?page=updraftplus&action=updraft_restore&backup_timestamp=$timestamp", '', false, false, $extra_fields);
1777
  WP_Filesystem($credentials);
1778
  if ( $wp_filesystem->errors->get_error_code() ) {
1779
  foreach ( $wp_filesystem->errors->get_error_messages() as $message )
1788
 
1789
  $service = (isset($backup_history[$timestamp]['service'])) ? $backup_history[$timestamp]['service'] : false;
1790
 
1791
+ // Now, need to turn any updraft_restore_<entity> fields (that came from a potential WP_Filesystem form) back into parts of the _POST array (which we want to use)
1792
+ if (empty($_POST['updraft_restore']) || (!is_array($_POST['updraft_restore']))) $_POST['updraft_restore'] = array();
1793
+
1794
+ $entities_to_restore = array_flip($_POST['updraft_restore']);
1795
+
1796
+ foreach ($_POST as $key => $value) {
1797
+ if (strpos($key, 'updraft_restore_') === 0 ) {
1798
+ $nkey = substr($key, 16);
1799
+ if (!isset($entities_to_restore[$nkey])) {
1800
+ $_POST['updraft_restore'][] = $nkey;
1801
+ $entities_to_restore[$nkey] = 1;
1802
+ }
1803
+ }
1804
+ }
1805
+
1806
+ if (count($_POST['updraft_restore']) == 0) {
1807
  echo '<p>'.__('ABORT: Could not find the information on which entities to restore.', 'updraftplus').'</p>';
1808
+ echo '<p>'.__('If making a request for support, please include this information:','updraftplus').' '.count($_POST).' : '.htmlspecialchars(serialize($_POST)).'</p>';
1809
  return false;
1810
  }
1811
 
1812
+ /*
1813
+ $_POST['updraft_restore'] is typically something like: array( 0=>'db', 1=>'plugins', 2=>'themes'), etc.
1814
+ i.e. array ( 'db', 'plugins', themes')
1815
+ */
1816
 
1817
  $backupable_entities = $updraftplus->get_backupable_file_entities(true, true);
1818
 
1821
 
1822
  if (!isset($backupable_entities[$type]) && 'db' != $type) continue;
1823
 
1824
+ if (isset($backupable_entities[$type]['restorable']) && $backupable_entities[$type]['restorable'] == false) continue;
1825
+
1826
  if ($type == 'db') {
1827
  echo "<h2>".__('Database','updraftplus')."</h2>";
1828
  } else {
1860
  if(!class_exists('WP_Upgrader')) require_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
1861
  require_once(UPDRAFTPLUS_DIR.'/includes/updraft-restorer.php');
1862
  $restorer = new Updraft_Restorer();
1863
+
1864
+ $info = (isset($backupable_entities[$type])) ? $backupable_entities[$type] : array();
1865
+
1866
+ $val = $restorer->restore_backup($file, $type, $service, $info);
1867
 
1868
  if(is_wp_error($val)) {
1869
  foreach ($val->get_error_messages() as $msg) {
backup.php CHANGED
@@ -242,10 +242,10 @@ class UpdraftPlus_Backup {
242
  if (filesize($zipfile) > $before_size) $updraftplus->something_useful_happened();
243
  clearstatcache();
244
  }
245
- }
246
  $this->zipfiles_added++;
247
  // Don't call something_useful_happened() here - nothing necessarily happens until close() is called
248
- 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, lwt=".round(time() - $this->zipfiles_lastwritetime,1)."s)");
249
  }
250
  // Reset the array
251
  $this->zipfiles_batched = array();
242
  if (filesize($zipfile) > $before_size) $updraftplus->something_useful_happened();
243
  clearstatcache();
244
  }
245
+ }
246
  $this->zipfiles_added++;
247
  // Don't call something_useful_happened() here - nothing necessarily happens until close() is called
248
+ 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)");
249
  }
250
  // Reset the array
251
  $this->zipfiles_batched = array();
includes/Dropbox/OAuth/Storage/Encrypter.php CHANGED
@@ -51,8 +51,10 @@ class Dropbox_Encrypter
51
  // Only MCRYPT_RAND is available on Windows prior to PHP 5.3
52
  if (version_compare(phpversion(), '5.3.0', '<') && strtoupper(substr(php_uname('s'), 0, 3)) === 'WIN') {
53
  $crypt_source = MCRYPT_RAND;
54
- } else {
55
  $crypt_source = MCRYPT_DEV_URANDOM;
 
 
56
  }
57
  $iv = mcrypt_create_iv(self::IV_SIZE, $crypt_source);
58
  $cipherText = @mcrypt_encrypt(self::CIPHER, $this->key, $token, self::MODE, $iv);
51
  // Only MCRYPT_RAND is available on Windows prior to PHP 5.3
52
  if (version_compare(phpversion(), '5.3.0', '<') && strtoupper(substr(php_uname('s'), 0, 3)) === 'WIN') {
53
  $crypt_source = MCRYPT_RAND;
54
+ } elseif (@is_readable("/dev/urandom")) {
55
  $crypt_source = MCRYPT_DEV_URANDOM;
56
+ } else {
57
+ $crypt_source = MCRYPT_RAND;
58
  }
59
  $iv = mcrypt_create_iv(self::IV_SIZE, $crypt_source);
60
  $cipherText = @mcrypt_encrypt(self::CIPHER, $this->key, $token, self::MODE, $iv);
includes/ftp.class.php CHANGED
@@ -10,6 +10,8 @@ class UpdraftPlus_ftp_wrapper {
10
  public $passive = true;
11
  public $system_type = '';
12
  public $ssl = false;
 
 
13
  public $login_type = 'non-encrypted';
14
 
15
  public function __construct($host, $username, $password, $port = 21)
@@ -58,11 +60,12 @@ class UpdraftPlus_ftp_wrapper {
58
  $existing_size = 0;
59
  if ($resume) {
60
  $existing_size = ftp_size($this->conn_id, $remote_file_path);
61
- if ($existing_size <=0) { $resume = false; $existing_size = 0; }
62
- elseif ($updraftplus) {
63
- $updraftplus->log("File already exists at remote site: size $existing_size. Will attempt resumption.");
 
64
  if ($existing_size >= $file_size) {
65
- $updraftplus->log("File is apparently already completely uploaded");
66
  return true;
67
  }
68
  }
@@ -79,7 +82,7 @@ class UpdraftPlus_ftp_wrapper {
79
  // $existing_size can now be re-purposed
80
 
81
  while ($ret == FTP_MOREDATA) {
82
- if ($updraftplus) {
83
  $new_size = ftell($fh);
84
  if ($new_size - $existing_size > 524288) {
85
  $existing_size = $new_size;
@@ -94,7 +97,7 @@ class UpdraftPlus_ftp_wrapper {
94
  fclose($fh);
95
 
96
  if ($ret != FTP_FINISHED) {
97
- if ($updraftplus) $updraftplus->log("FTP upload: error ($ret)");
98
  return false;
99
  }
100
 
10
  public $passive = true;
11
  public $system_type = '';
12
  public $ssl = false;
13
+ public $use_server_certs = false;
14
+ public $disable_verify = true;
15
  public $login_type = 'non-encrypted';
16
 
17
  public function __construct($host, $username, $password, $port = 21)
60
  $existing_size = 0;
61
  if ($resume) {
62
  $existing_size = ftp_size($this->conn_id, $remote_file_path);
63
+ if ($existing_size <=0) {
64
+ $resume = false; $existing_size = 0;
65
+ } else {
66
+ if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("File already exists at remote site: size $existing_size. Will attempt resumption.");
67
  if ($existing_size >= $file_size) {
68
+ if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("File is apparently already completely uploaded");
69
  return true;
70
  }
71
  }
82
  // $existing_size can now be re-purposed
83
 
84
  while ($ret == FTP_MOREDATA) {
85
+ if (is_a($updraftplus, 'UpdraftPlus')) {
86
  $new_size = ftell($fh);
87
  if ($new_size - $existing_size > 524288) {
88
  $existing_size = $new_size;
97
  fclose($fh);
98
 
99
  if ($ret != FTP_FINISHED) {
100
+ if (is_a($updraftplus, 'UpdraftPlus')) $updraftplus->log("FTP upload: error ($ret)");
101
  return false;
102
  }
103
 
includes/jquery-ui-1.8.22.custom.css CHANGED
@@ -560,4 +560,4 @@ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra pad
560
  * http://docs.jquery.com/UI/Progressbar#theming
561
  */
562
  .ui-progressbar { height:2em; text-align: left; overflow: hidden; }
563
- .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
560
  * http://docs.jquery.com/UI/Progressbar#theming
561
  */
562
  .ui-progressbar { height:2em; text-align: left; overflow: hidden; }
563
+ .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
includes/updraft-restorer.php CHANGED
@@ -4,6 +4,7 @@ class Updraft_Restorer extends WP_Upgrader {
4
  function backup_strings() {
5
  $this->strings['not_possible'] = __('UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually.','updraftplus');
6
  $this->strings['no_package'] = __('Backup file not available.','updraftplus');
 
7
  $this->strings['unpack_package'] = __('Unpacking backup...','updraftplus');
8
  $this->strings['decrypt_database'] = __('Decrypting database (can take a while)...','updraftplus');
9
  $this->strings['decrypted_database'] = __('Database successfully decrypted.','updraftplus');
@@ -17,20 +18,26 @@ class Updraft_Restorer extends WP_Upgrader {
17
  $this->strings['delete_failed'] = __('Failed to delete working directory after restoring.','updraftplus');
18
  }
19
 
 
20
  function unpack_package($package, $delete_package = true) {
21
 
 
 
 
 
22
  // If not database, then it is a zip - unpack in the usual way
23
- if (!preg_match('/db\.gz(\.crypt)?$/i', $package)) return parent::unpack_package($package, $delete_package);
 
 
24
 
25
  // Unpack a database. The general shape of the following is copied from class-wp-upgrader.php
26
 
27
  @set_time_limit(1800);
28
 
29
- global $wp_filesystem;
30
-
31
  $this->skin->feedback('unpack_package');
32
 
33
  $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
 
34
 
35
  //Clean up contents of upgrade directory beforehand.
36
  $upgrade_files = $wp_filesystem->dirlist($upgrade_folder);
@@ -41,12 +48,13 @@ class Updraft_Restorer extends WP_Upgrader {
41
 
42
  //We need a working directory
43
  $working_dir = $upgrade_folder . basename($package, '.crypt');
 
44
 
45
  // Clean up working directory
46
  if ( $wp_filesystem->is_dir($working_dir) )
47
  $wp_filesystem->delete($working_dir, true);
48
 
49
- if (!$wp_filesystem->mkdir($working_dir, 0775)) return new WP_Error('mkdir_failed', __('Failed to create a temporary directory','updraftplus'));
50
 
51
  // Unpack package to working directory
52
  if (preg_match('/\.crypt$/i', $package)) {
@@ -60,7 +68,7 @@ class Updraft_Restorer extends WP_Upgrader {
60
 
61
  // Get decryption key
62
  $rijndael->setKey($encryption);
63
- $ciphertext = $rijndael->decrypt($wp_filesystem->get_contents($package));
64
  if ($ciphertext) {
65
  $this->skin->feedback('decrypted_database');
66
  if (!$wp_filesystem->put_contents($working_dir.'/backup.db.gz', $ciphertext)) {
@@ -70,19 +78,26 @@ class Updraft_Restorer extends WP_Upgrader {
70
  return new WP_Error('decryption_failed', __('Decryption failed. The most likely cause is that you used the wrong key.','updraftplus'));
71
  }
72
  } else {
73
- $wp_filesystem->copy($package, $working_dir.'/backup.db.gz');
 
 
 
 
 
 
 
74
  }
75
 
76
- // Once extracted, delete the package if required.
77
  if ( $delete_package )
78
- unlink($package);
79
 
80
  return $working_dir;
81
 
82
  }
83
 
84
  // For moving files out of a directory into their new location
85
- // The only purpose of the $type parameter is to detect 'others' and apply a historical bugfix
86
  // Must use only wp_filesystem
87
  // $dest_dir must already have a trailing slash
88
  function move_backup_in($working_dir, $dest_dir, $make_backup = true, $do_not_overwrite = array('plugins', 'themes', 'uploads', 'upgrade'), $type = 'not-others') {
@@ -106,6 +121,17 @@ class Updraft_Restorer extends WP_Upgrader {
106
  $wp_filesystem->rmdir($working_dir . "/$tmp_file", false);
107
  }
108
 
 
 
 
 
 
 
 
 
 
 
 
109
  # Sanity check (should not be possible as these were excluded at backup time)
110
  if (!in_array($file, $do_not_overwrite)) {
111
  # First, move the existing one, if necessary (may not be present)
@@ -135,14 +161,18 @@ class Updraft_Restorer extends WP_Upgrader {
135
 
136
  }
137
 
 
138
  function restore_backup($backup_file, $type, $service, $info) {
139
 
 
 
 
 
 
140
  global $wp_filesystem;
141
  $this->init();
142
  $this->backup_strings();
143
 
144
- $dirname = basename($info['path']);
145
-
146
  $res = $this->fs_connect(array(ABSPATH, WP_CONTENT_DIR) );
147
  if(!$res) exit;
148
 
@@ -150,52 +180,58 @@ class Updraft_Restorer extends WP_Upgrader {
150
 
151
  @set_time_limit(1800);
152
 
153
- $download = $this->download_package($backup_file);
154
- if ( is_wp_error($download) ) return $download;
155
-
156
  $delete = (UpdraftPlus_Options::get_updraft_option('updraft_delete_local')) ? true : false;
157
  if ('none' == $service) {
158
  if ($delete) _e('Will not delete the archive after unpacking it, because there was no cloud storage for this backup','updraftplus').'<br>';
159
  $delete = false;
160
  }
161
 
162
- $working_dir = $this->unpack_package($download, $delete);
 
 
163
  if (is_wp_error($working_dir)) return $working_dir;
 
164
 
165
  @set_time_limit(1800);
166
 
167
  if ($type == 'others' ) {
168
 
 
 
169
  // In this special case, the backup contents are not in a folder, so it is not simply a case of moving the folder around, but rather looping over all that we find
170
 
171
  $this->move_backup_in($working_dir, $wp_dir."wp-content/", true, array('plugins', 'themes', 'uploads', 'upgrade'), 'others');
172
 
173
  } elseif ('db' == $type) {
174
 
 
 
175
  // There is a file backup.db.gz inside the working directory
176
 
177
  # The 'off' check is for badly configured setups - http://wordpress.org/support/topic/plugin-wp-super-cache-warning-php-safe-mode-enabled-but-safe-mode-is-off
178
- if(@ini_get('safe_mode') && strtolower(@ini_get('safe_mode')) != "off") {
179
  echo "<p>".__('Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method.', 'updraftplus')."</p><br/>";
180
  return false;
181
  }
182
 
183
-
184
- global $wpdb;
185
-
186
- if (!is_readable($working_dir.'/backup.db.gz')) return new WP_Error('gzopen_failed',__('Failed to find database file','updraftplus'));
187
 
188
  $this->skin->feedback('restore_database');
189
 
190
  // Read-only access: don't need to go through WP_Filesystem
191
- $dbhandle = gzopen($working_dir.'/backup.db.gz', 'r');
192
  if (!$dbhandle) return new WP_Error('gzopen_failed',__('Failed to open database file','updraftplus'));
193
 
194
  $line = 0;
195
 
 
 
196
  // Line up a wpdb-like object to use
197
  // mysql_query will throw E_DEPRECATED from PHP 5.5, so we expect WordPress to have switched to something else by then
198
- $use_wpdb = (version_compare(phpversion(), '5.5', '>=') || !function_exists('mysql_query') || !$wpdb->is_mysql || !$wpdb->ready) ? true : false;
 
 
199
 
200
  if (false == $use_wpdb) {
201
  // We have our own extension which drops lots of the overhead on the query
@@ -235,7 +271,7 @@ class Updraft_Restorer extends WP_Upgrader {
235
 
236
  # The timed overhead of this is negligible
237
  if (preg_match('/^\s*create table \`?([^\`]*)`?\s+\(/i', $sql_line, $matches)) {
238
- echo __('Restoring table','updraftplus').": ".htmlspecialchars($matches[1])."<br>";
239
  }
240
 
241
  if ($use_wpdb) {
@@ -247,7 +283,7 @@ class Updraft_Restorer extends WP_Upgrader {
247
  }
248
 
249
  if (!$req) {
250
- echo sprintf(_x('An error (%s) occured:', 'The user is being told the number of times an error has happened, e.g. An error (27) occurred', 'updraftplus'), $errors).' '.$wpdb_obj->last_error.' - '.__('the database query being run was: ','updraftplus').' '.htmlspecialchars($sql_line).'<br>';
251
  $errors++;
252
  if ($errors>49) {
253
  return new WP_Error('too_many_db_errors', __('Too many database errors have occurred - aborting restoration (you will need to restore manually)','updraftplus'));
@@ -268,10 +304,12 @@ class Updraft_Restorer extends WP_Upgrader {
268
  $time_taken = microtime(true) - $start_time;
269
  echo sprintf(__('Finished: lines processed: %d in %.2f seconds','updraftplus'),$line, $time_taken)."<br>";
270
  gzclose($dbhandle);
271
- @unlink($working_dir.'/backup.db.gz');
272
 
273
  } else {
274
 
 
 
275
  show_message($this->strings['moving_old']);
276
 
277
  $movedin = apply_filters('updraftplus_restore_movein_'.$type, $working_dir, $wp_dir);
@@ -304,6 +342,7 @@ class Updraft_Restorer extends WP_Upgrader {
304
  @$wp_filesystem->chmod($wp_dir . "wp-content/$dirname", 0775, true);
305
  break;
306
  case 'db':
 
307
  break;
308
  default:
309
  @$wp_filesystem->chmod($wp_dir . "wp-content/$dirname", FS_CHMOD_DIR);
@@ -320,4 +359,4 @@ class UpdraftPlus_WPDB extends wpdb {
320
  }
321
 
322
  }
323
- ?>
4
  function backup_strings() {
5
  $this->strings['not_possible'] = __('UpdraftPlus is not able to directly restore this kind of entity. It must be restored manually.','updraftplus');
6
  $this->strings['no_package'] = __('Backup file not available.','updraftplus');
7
+ $this->strings['copy_failed'] = __('Copying this entity failed.','updraftplus');
8
  $this->strings['unpack_package'] = __('Unpacking backup...','updraftplus');
9
  $this->strings['decrypt_database'] = __('Decrypting database (can take a while)...','updraftplus');
10
  $this->strings['decrypted_database'] = __('Database successfully decrypted.','updraftplus');
18
  $this->strings['delete_failed'] = __('Failed to delete working directory after restoring.','updraftplus');
19
  }
20
 
21
+ // This returns a wp_filesystem location (and we musn't change that, as we must retain compatibility with the class parent)
22
  function unpack_package($package, $delete_package = true) {
23
 
24
+ global $wp_filesystem, $updraftplus;
25
+
26
+ $updraft_dir = $updraftplus->backups_dir_location();
27
+
28
  // If not database, then it is a zip - unpack in the usual way
29
+ if (!preg_match('/db\.gz(\.crypt)?$/i', $package)) return parent::unpack_package($updraft_dir.'/'.$package, $delete_package);
30
+
31
+ $backup_dir = $wp_filesystem->find_folder($updraft_dir);
32
 
33
  // Unpack a database. The general shape of the following is copied from class-wp-upgrader.php
34
 
35
  @set_time_limit(1800);
36
 
 
 
37
  $this->skin->feedback('unpack_package');
38
 
39
  $upgrade_folder = $wp_filesystem->wp_content_dir() . 'upgrade/';
40
+ @$wp_filesystem->mkdir($upgrade_folder, 0775);
41
 
42
  //Clean up contents of upgrade directory beforehand.
43
  $upgrade_files = $wp_filesystem->dirlist($upgrade_folder);
48
 
49
  //We need a working directory
50
  $working_dir = $upgrade_folder . basename($package, '.crypt');
51
+ # $working_dir_filesystem = WP_CONTENT_DIR.'/upgrade/'. basename($package, '.crypt');
52
 
53
  // Clean up working directory
54
  if ( $wp_filesystem->is_dir($working_dir) )
55
  $wp_filesystem->delete($working_dir, true);
56
 
57
+ if (!$wp_filesystem->mkdir($working_dir, 0775)) return new WP_Error('mkdir_failed', __('Failed to create a temporary directory','updraftplus').' ('.$working_dir.')');
58
 
59
  // Unpack package to working directory
60
  if (preg_match('/\.crypt$/i', $package)) {
68
 
69
  // Get decryption key
70
  $rijndael->setKey($encryption);
71
+ $ciphertext = $rijndael->decrypt($wp_filesystem->get_contents($backup_dir.$package));
72
  if ($ciphertext) {
73
  $this->skin->feedback('decrypted_database');
74
  if (!$wp_filesystem->put_contents($working_dir.'/backup.db.gz', $ciphertext)) {
78
  return new WP_Error('decryption_failed', __('Decryption failed. The most likely cause is that you used the wrong key.','updraftplus'));
79
  }
80
  } else {
81
+
82
+ if (!$wp_filesystem->copy($backup_dir.$package, $working_dir.'/backup.db.gz')) {
83
+ if ( $wp_filesystem->errors->get_error_code() ) {
84
+ foreach ( $wp_filesystem->errors->get_error_messages() as $message ) show_message($message);
85
+ }
86
+ return new WP_Error('copy_failed', $this->strings['copy_failed']);
87
+ }
88
+
89
  }
90
 
91
+ // Once extracted, delete the package if required (non-recursive, is a file)
92
  if ( $delete_package )
93
+ $wp_filesystem->delete($backup_dir.$package, false, true);
94
 
95
  return $working_dir;
96
 
97
  }
98
 
99
  // For moving files out of a directory into their new location
100
+ // The only purpose of the $type parameter is 1) to detect 'others' and apply a historical bugfix 2) to detect wpcore, and apply the setting for what to do with wp-config.php
101
  // Must use only wp_filesystem
102
  // $dest_dir must already have a trailing slash
103
  function move_backup_in($working_dir, $dest_dir, $make_backup = true, $do_not_overwrite = array('plugins', 'themes', 'uploads', 'upgrade'), $type = 'not-others') {
121
  $wp_filesystem->rmdir($working_dir . "/$tmp_file", false);
122
  }
123
 
124
+ if ('wpcore' == $type && 'wp-config.php' == $file) {
125
+ if (empty($_POST['updraft_restorer_wpcore_includewpconfig'])) {
126
+ _e('wp-config.php from backup: will restore as wp-config-backup.php', 'updraftplus');
127
+ $wp_filesystem->move($working_dir . "/$file", $working_dir . "/wp-config-backup.php", true);
128
+ $file = "wp-config-backup.php";
129
+ } else {
130
+ _e('wp-config.php from backup: restoring (as per user\'s request)', 'updraftplus');
131
+ }
132
+ echo '<br>';
133
+ }
134
+
135
  # Sanity check (should not be possible as these were excluded at backup time)
136
  if (!in_array($file, $do_not_overwrite)) {
137
  # First, move the existing one, if necessary (may not be present)
161
 
162
  }
163
 
164
+ // $backup_file is just the basename
165
  function restore_backup($backup_file, $type, $service, $info) {
166
 
167
+ if ($type == 'more') {
168
+ show_message($this->strings['not_possible']);
169
+ return;
170
+ }
171
+
172
  global $wp_filesystem;
173
  $this->init();
174
  $this->backup_strings();
175
 
 
 
176
  $res = $this->fs_connect(array(ABSPATH, WP_CONTENT_DIR) );
177
  if(!$res) exit;
178
 
180
 
181
  @set_time_limit(1800);
182
 
 
 
 
183
  $delete = (UpdraftPlus_Options::get_updraft_option('updraft_delete_local')) ? true : false;
184
  if ('none' == $service) {
185
  if ($delete) _e('Will not delete the archive after unpacking it, because there was no cloud storage for this backup','updraftplus').'<br>';
186
  $delete = false;
187
  }
188
 
189
+ // This returns the wp_filesystem path
190
+ $working_dir = $this->unpack_package($backup_file, $delete);
191
+
192
  if (is_wp_error($working_dir)) return $working_dir;
193
+ $working_dir_filesystem = WP_CONTENT_DIR.'/upgrade/'.basename($working_dir);
194
 
195
  @set_time_limit(1800);
196
 
197
  if ($type == 'others' ) {
198
 
199
+ $dirname = basename($info['path']);
200
+
201
  // In this special case, the backup contents are not in a folder, so it is not simply a case of moving the folder around, but rather looping over all that we find
202
 
203
  $this->move_backup_in($working_dir, $wp_dir."wp-content/", true, array('plugins', 'themes', 'uploads', 'upgrade'), 'others');
204
 
205
  } elseif ('db' == $type) {
206
 
207
+ do_action('updraftplus_restore_db_pre');
208
+
209
  // There is a file backup.db.gz inside the working directory
210
 
211
  # The 'off' check is for badly configured setups - http://wordpress.org/support/topic/plugin-wp-super-cache-warning-php-safe-mode-enabled-but-safe-mode-is-off
212
+ if (@ini_get('safe_mode') && strtolower(@ini_get('safe_mode')) != "off") {
213
  echo "<p>".__('Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method.', 'updraftplus')."</p><br/>";
214
  return false;
215
  }
216
 
217
+ // wp_filesystem has no gzopen method, so we switch to using the local filesystem (which is harmless, since we are performing read-only operations)
218
+ if (!is_readable($working_dir_filesystem.'/backup.db.gz')) return new WP_Error('gzopen_failed',__('Failed to find database file','updraftplus')." ($working_dir/backup.db.gz)");
 
 
219
 
220
  $this->skin->feedback('restore_database');
221
 
222
  // Read-only access: don't need to go through WP_Filesystem
223
+ $dbhandle = gzopen($working_dir_filesystem.'/backup.db.gz', 'r');
224
  if (!$dbhandle) return new WP_Error('gzopen_failed',__('Failed to open database file','updraftplus'));
225
 
226
  $line = 0;
227
 
228
+ global $wpdb;
229
+
230
  // Line up a wpdb-like object to use
231
  // mysql_query will throw E_DEPRECATED from PHP 5.5, so we expect WordPress to have switched to something else by then
232
+ // $use_wpdb = (version_compare(phpversion(), '5.5', '>=') || !function_exists('mysql_query') || !$wpdb->is_mysql || !$wpdb->ready) ? true : false;
233
+ // Seems not - PHP 5.5 is immanent for release
234
+ $use_wpdb = (!function_exists('mysql_query') || !$wpdb->is_mysql || !$wpdb->ready) ? true : false;
235
 
236
  if (false == $use_wpdb) {
237
  // We have our own extension which drops lots of the overhead on the query
271
 
272
  # The timed overhead of this is negligible
273
  if (preg_match('/^\s*create table \`?([^\`]*)`?\s+\(/i', $sql_line, $matches)) {
274
+ echo '<strong>'.__('Restoring table','updraftplus').":</strong> ".htmlspecialchars($matches[1])."<br>";
275
  }
276
 
277
  if ($use_wpdb) {
283
  }
284
 
285
  if (!$req) {
286
+ echo sprintf(_x('An error (%s) occured:', 'The user is being told the number of times an error has happened, e.g. An error (27) occurred', 'updraftplus'), $errors)." - ".htmlspecialchars($last_error)." - ".__('the database query being run was:','updraftplus').' '.htmlspecialchars($sql_line).'<br>';
287
  $errors++;
288
  if ($errors>49) {
289
  return new WP_Error('too_many_db_errors', __('Too many database errors have occurred - aborting restoration (you will need to restore manually)','updraftplus'));
304
  $time_taken = microtime(true) - $start_time;
305
  echo sprintf(__('Finished: lines processed: %d in %.2f seconds','updraftplus'),$line, $time_taken)."<br>";
306
  gzclose($dbhandle);
307
+ $wp_filesystem->delete($working_dir.'/backup.db.gz', false, true);
308
 
309
  } else {
310
 
311
+ $dirname = basename($info['path']);
312
+
313
  show_message($this->strings['moving_old']);
314
 
315
  $movedin = apply_filters('updraftplus_restore_movein_'.$type, $working_dir, $wp_dir);
342
  @$wp_filesystem->chmod($wp_dir . "wp-content/$dirname", 0775, true);
343
  break;
344
  case 'db':
345
+ do_action('updraftplus_restored_db');
346
  break;
347
  default:
348
  @$wp_filesystem->chmod($wp_dir . "wp-content/$dirname", FS_CHMOD_DIR);
359
  }
360
 
361
  }
362
+ ?>
languages/updraftplus.pot CHANGED
@@ -2,8 +2,8 @@ msgid ""
2
  msgstr ""
3
  "Project-Id-Version: UpdraftPlus\n"
4
  "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: 2013-04-12 00:39+0100\n"
6
- "PO-Revision-Date: 2013-04-12 00:39+0100\n"
7
  "Last-Translator: David Anderson <contact@updraftplus.com>\n"
8
  "Language-Team: <contact@updraftplus.com>\n"
9
  "Language: \n"
@@ -18,195 +18,195 @@ msgstr ""
18
  msgid "UpdraftPlus Backups"
19
  msgstr ""
20
 
21
- #: updraftplus.php:270
22
- #: updraftplus.php:275
23
- #: updraftplus.php:280
24
- #: admin.php:167
25
- #: admin.php:171
26
  msgid "UpdraftPlus notice:"
27
  msgstr ""
28
 
29
- #: updraftplus.php:270
30
  msgid "The log file could not be read."
31
  msgstr ""
32
 
33
- #: updraftplus.php:275
34
  msgid "No log files were found."
35
  msgstr ""
36
 
37
- #: updraftplus.php:280
38
  msgid "The given file could not be read."
39
  msgstr ""
40
 
41
- #: updraftplus.php:404
42
  msgid "Plugins"
43
  msgstr ""
44
 
45
- #: updraftplus.php:405
46
  msgid "Themes"
47
  msgstr ""
48
 
49
- #: updraftplus.php:406
50
  msgid "Uploads"
51
  msgstr ""
52
 
53
- #: updraftplus.php:421
54
  msgid "Others"
55
  msgstr ""
56
 
57
- #: updraftplus.php:689
58
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
59
  msgstr ""
60
 
61
- #: updraftplus.php:758
62
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
63
  msgstr ""
64
 
65
- #: updraftplus.php:792
66
  msgid "The backup apparently succeeded and is now complete"
67
  msgstr ""
68
 
69
- #: updraftplus.php:795
70
  msgid "The backup attempt has finished, apparently unsuccessfully"
71
  msgstr ""
72
 
73
- #: updraftplus.php:798
74
  msgid "The backup has not finished; a resumption is scheduled within 5 minutes"
75
  msgstr ""
76
 
77
- #: updraftplus.php:849
78
  msgid "Backed up"
79
  msgstr ""
80
 
81
- #: updraftplus.php:849
82
  msgid "WordPress backup is complete"
83
  msgstr ""
84
 
85
- #: updraftplus.php:849
86
  msgid "Backup contains"
87
  msgstr ""
88
 
89
- #: updraftplus.php:849
90
  msgid "Latest status"
91
  msgstr ""
92
 
93
- #: updraftplus.php:1093
94
  #, php-format
95
  msgid "Backup directory (%s) is not writable, or does not exist."
96
  msgstr ""
97
 
98
- #: updraftplus.php:1218
99
  msgid "Could not read the directory"
100
  msgstr ""
101
 
102
- #: updraftplus.php:1235
103
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
104
  msgstr ""
105
 
106
- #: updraftplus.php:1264
107
  msgid "Could not open the backup file for writing"
108
  msgstr ""
109
 
110
- #: updraftplus.php:1274
111
  #, php-format
112
  msgid "Generated: %s"
113
  msgstr ""
114
 
115
- #: updraftplus.php:1275
116
  #, php-format
117
  msgid "Hostname: %s"
118
  msgstr ""
119
 
120
- #: updraftplus.php:1276
121
  #, php-format
122
  msgid "Database: %s"
123
  msgstr ""
124
 
125
- #: updraftplus.php:1320
126
  msgid "The backup directory is not writable."
127
  msgstr ""
128
 
129
- #: updraftplus.php:1341
130
  #, php-format
131
  msgid "Table: %s"
132
  msgstr ""
133
 
134
- #: updraftplus.php:1346
135
  #, php-format
136
  msgid "Skipping non-WP table: %s"
137
  msgstr ""
138
 
139
- #: updraftplus.php:1441
140
  #, php-format
141
  msgid "Delete any existing table %s"
142
  msgstr ""
143
 
144
- #: updraftplus.php:1450
145
  #, php-format
146
  msgid "Table structure of table %s"
147
  msgstr ""
148
 
149
- #: updraftplus.php:1456
150
  #, php-format
151
  msgid "Error with SHOW CREATE TABLE for %s."
152
  msgstr ""
153
 
154
- #: updraftplus.php:1534
155
  #, php-format
156
  msgid "End of data contents of table %s"
157
  msgstr ""
158
 
159
- #: updraftplus.php:1706
160
- #: includes/updraft-restorer.php:55
161
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
162
  msgstr ""
163
 
164
- #: updraftplus.php:1719
165
- #: includes/updraft-restorer.php:70
166
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
167
  msgstr ""
168
 
169
- #: updraftplus.php:1719
170
  msgid "The decryption key used:"
171
  msgstr ""
172
 
173
- #: updraftplus.php:1734
174
  msgid "File not found"
175
  msgstr ""
176
 
177
- #: updraftplus.php:1784
178
  msgid "Can you translate? Want to improve UpdraftPlus for speakers of your language?"
179
  msgstr ""
180
 
181
- #: updraftplus.php:1786
182
  msgid "Find UpdraftPlus useful?"
183
  msgstr ""
184
 
185
- #: updraftplus.php:1786
186
  msgid "Please make a donation"
187
  msgstr ""
188
 
189
- #: updraftplus.php:1791
190
  msgid "Like UpdraftPlus and can spare one minute?"
191
  msgstr ""
192
 
193
- #: updraftplus.php:1791
194
  msgid "Please help UpdraftPlus by giving a positive review at wordpress.org"
195
  msgstr ""
196
 
197
- #: updraftplus.php:1798
198
  msgid "Need even more features and support? Check out UpdraftPlus Premium"
199
  msgstr ""
200
 
201
- #: updraftplus.php:1807
202
  msgid "Check out UpdraftPlus.Com for help, add-ons and support"
203
  msgstr ""
204
 
205
- #: updraftplus.php:1810
206
  msgid "Want to say thank-you for UpdraftPlus?"
207
  msgstr ""
208
 
209
- #: updraftplus.php:1810
210
  msgid "Please buy our very cheap 'no adverts' add-on."
211
  msgstr ""
212
 
@@ -219,791 +219,840 @@ msgstr ""
219
  msgid "Could not create %s zip. Consult the log file for more information."
220
  msgstr ""
221
 
222
- #: admin.php:76
223
- #: admin.php:93
224
  msgid "Allowed Files"
225
  msgstr ""
226
 
227
- #: admin.php:143
228
  msgid "Settings"
229
  msgstr ""
230
 
231
- #: admin.php:147
232
  msgid "Add-Ons / Pro Support"
233
  msgstr ""
234
 
235
- #: admin.php:159
236
- #: admin.php:163
237
- #: admin.php:1459
238
- #: admin.php:1465
239
- #: admin.php:1467
 
240
  msgid "Warning"
241
  msgstr ""
242
 
243
- #: admin.php:159
244
  #, php-format
245
  msgid "You have less than %s of free disk space on the disk which UpdraftPlus is configured to use to create backups. UpdraftPlus could well run out of space. Contact your the operator of your server (e.g. your web hosting company) to resolve this issue."
246
  msgstr ""
247
 
248
- #: admin.php:163
249
  #, php-format
250
  msgid "UpdraftPlus does not officially support versions of WordPress before %s. It may work for you, but if it does not, then please be aware that no support is available until you upgrade WordPress."
251
  msgstr ""
252
 
253
- #: admin.php:167
254
- #: admin.php:171
 
 
 
 
 
 
 
 
 
255
  #, php-format
256
  msgid "Click here to authenticate your %s account (you will not be able to back up to %s without it)."
257
  msgstr ""
258
 
259
- #: admin.php:322
260
  #, php-format
261
  msgid "The backup archive for restoring this file could not be found. The remote storage method in use (%s) does not allow us to retrieve files. To proceed with this restoration, you need to obtain a copy of this file and place it inside UpdraftPlus's working folder"
262
  msgstr ""
263
 
264
- #: admin.php:337
265
  msgid "Nothing yet logged"
266
  msgstr ""
267
 
268
- #: admin.php:354
269
  msgid "Download failed"
270
  msgstr ""
271
 
272
- #: admin.php:368
273
- #: admin.php:890
274
  msgid "File ready."
275
  msgstr ""
276
 
277
- #: admin.php:376
278
  msgid "Download in progress"
279
  msgstr ""
280
 
281
- #: admin.php:379
282
  msgid "No local copy present."
283
  msgstr ""
284
 
285
- #: admin.php:487
286
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
287
  msgstr ""
288
 
289
- #: admin.php:566
290
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
291
  msgstr ""
292
 
293
- #: admin.php:593
294
  msgid "Restore successful!"
295
  msgstr ""
296
 
297
- #: admin.php:594
298
- #: admin.php:629
299
- #: admin.php:641
300
  msgid "Actions"
301
  msgstr ""
302
 
303
- #: admin.php:594
304
  #: admin.php:609
305
- #: admin.php:629
306
- #: admin.php:641
 
307
  msgid "Return to UpdraftPlus Configuration"
308
  msgstr ""
309
 
310
- #: admin.php:618
311
  msgid "Remove old directories"
312
  msgstr ""
313
 
314
- #: admin.php:624
315
  msgid "Old directories successfully removed."
316
  msgstr ""
317
 
318
- #: admin.php:627
319
  msgid "Old directory removal failed for some reason. You may want to do this manually."
320
  msgstr ""
321
 
322
- #: admin.php:638
323
  msgid "Backup directory could not be created"
324
  msgstr ""
325
 
326
- #: admin.php:640
327
  msgid "Backup directory successfully created."
328
  msgstr ""
329
 
330
- #: admin.php:647
331
  msgid "Schedule backup"
332
  msgstr ""
333
 
334
- #: admin.php:650
335
  msgid "Failed."
336
  msgstr ""
337
 
338
- #: admin.php:652
339
  msgid "OK. Now load any page from your site to make sure the schedule can trigger. You should then see activity in the \"Last log message\" field below."
340
  msgstr ""
341
 
342
- #: admin.php:652
343
  msgid "Nothing happening? Follow this link for help."
344
  msgstr ""
345
 
346
- #: admin.php:666
347
  msgid "Your settings have been wiped."
348
  msgstr ""
349
 
350
- #: admin.php:673
351
  msgid "By UpdraftPlus.Com"
352
  msgstr ""
353
 
354
- #: admin.php:673
355
  msgid "Lead developer's homepage"
356
  msgstr ""
357
 
358
- #: admin.php:673
359
  msgid "Donate"
360
  msgstr ""
361
 
362
- #: admin.php:673
363
  msgid "Other WordPress plugins"
364
  msgstr ""
365
 
366
- #: admin.php:673
367
  msgid "Version"
368
  msgstr ""
369
 
370
- #: admin.php:679
371
  msgid "Your backup has been restored."
372
  msgstr ""
373
 
374
- #: admin.php:679
375
  msgid "Your old (themes, uploads, plugins, whatever) directories have been retained with \"-old\" appended to their name. Remove them when you are satisfied that the backup worked properly."
376
  msgstr ""
377
 
378
- #: admin.php:685
379
  msgid "Old directories successfully deleted."
380
  msgstr ""
381
 
382
- #: admin.php:688
383
  msgid "Your PHP memory limit (set by your web hosting company) is quite low. UpdraftPlus attempted to raise it but was unsuccessful. This plugin may struggle with a memory limit of less than 64 Mb - especially if you have very large files uploaded (though on the other hand, many sites will bhe successful with a 32Mb limit - your experience may vary)."
384
  msgstr ""
385
 
386
- #: admin.php:688
387
  msgid "Current limit is:"
388
  msgstr ""
389
 
390
- #: admin.php:692
391
  msgid "Your PHP max_execution_time is less than 60 seconds. This possibly means you're running in safe_mode. Either disable safe_mode or modify your php.ini to set max_execution_time to a higher number. If you do not, then longer will be needed to complete a backup (but that is all). Present limit is:"
392
  msgstr ""
393
 
394
- #: admin.php:692
395
  msgid "seconds"
396
  msgstr ""
397
 
398
- #: admin.php:697
399
  msgid "You have old directories from a previous backup (technical information: these are found in wp-content, and suffixed with -old). Use this button to delete them (if you have verified that the restoration worked)."
400
  msgstr ""
401
 
402
- #: admin.php:701
403
  msgid "Delete Old Directories"
404
  msgstr ""
405
 
406
- #: admin.php:701
407
  msgid "Are you sure you want to delete the old directories? This cannot be undone."
408
  msgstr ""
409
 
410
- #: admin.php:714
411
  msgid "Existing Schedule And Backups"
412
  msgstr ""
413
 
414
- #: admin.php:718
415
  msgid "JavaScript warning"
416
  msgstr ""
417
 
418
- #: admin.php:719
419
  msgid "This admin interface uses JavaScript heavily. You either need to activate it within your browser, or to use a JavaScript-capable browser."
420
  msgstr ""
421
 
422
- #: admin.php:732
423
- #: admin.php:745
424
  msgid "Nothing currently scheduled"
425
  msgstr ""
426
 
427
- #: admin.php:737
428
  msgid "At the same time as the files backup"
429
  msgstr ""
430
 
431
- #: admin.php:757
 
 
 
 
432
  msgid "Next scheduled backups"
433
  msgstr ""
434
 
435
- #: admin.php:759
436
  msgid "Files"
437
  msgstr ""
438
 
439
- #: admin.php:760
440
- #: admin.php:936
441
- #: admin.php:1531
442
- #: admin.php:1538
443
- #: admin.php:1692
 
444
  msgid "Database"
445
  msgstr ""
446
 
447
- #: admin.php:761
448
  msgid "Time now"
449
  msgstr ""
450
 
451
- #: admin.php:765
452
  msgid "Last finished backup run"
453
  msgstr ""
454
 
455
- #: admin.php:770
456
- #: admin.php:1349
457
  msgid "Backup Now"
458
  msgstr ""
459
 
460
- #: admin.php:778
461
- #: admin.php:1328
462
- #: admin.php:1575
463
  msgid "Restore"
464
  msgstr ""
465
 
466
- #: admin.php:785
467
  msgid "Last log message"
468
  msgstr ""
469
 
470
- #: admin.php:787
471
  msgid "(Nothing yet logged)"
472
  msgstr ""
473
 
474
- #: admin.php:788
475
  msgid "Download most recently modified log file"
476
  msgstr ""
477
 
478
- #: admin.php:792
479
  msgid "Backups, logs & restoring"
480
  msgstr ""
481
 
482
- #: admin.php:793
483
  msgid "Press to see available backups"
484
  msgstr ""
485
 
486
- #: admin.php:793
487
  #, php-format
488
  msgid "%d set(s) available"
489
  msgstr ""
490
 
491
- #: admin.php:798
492
  msgid "Downloading"
493
  msgstr ""
494
 
495
- #: admin.php:798
496
  msgid "Pressing a button for Database/Plugins/Themes/Uploads/Others will make UpdraftPlus try to bring the backup file back from the remote storage (if any - e.g. Amazon S3, Dropbox, Google Drive, FTP) to your webserver. Then you will be allowed to download it to your computer. If the fetch from the remote storage stops progressing (wait 30 seconds to make sure), then press again to resume. Remember that you can also visit the cloud storage vendor's website directly."
497
  msgstr ""
498
 
499
- #: admin.php:799
500
  msgid "Restoring"
501
  msgstr ""
502
 
503
- #: admin.php:799
504
  msgid "Press the button for the backup you wish to restore. If your site is large and you are using remote storage, then you should first click on each entity in order to retrieve it back to the webserver. This will prevent time-outs from occuring during the restore process itself."
505
  msgstr ""
506
 
507
- #: admin.php:799
508
  msgid "More tasks:"
509
  msgstr ""
510
 
511
- #: admin.php:799
512
  msgid "upload backup files"
513
  msgstr ""
514
 
515
- #: admin.php:799
516
  msgid "Press here to look inside your UpdraftPlus directory (in your web hosting space) for any new backup sets that you have uploaded. The location of this directory is set in the expert settings, below."
517
  msgstr ""
518
 
519
- #: admin.php:799
520
  msgid "rescan folder for new backup sets"
521
  msgstr ""
522
 
523
- #: admin.php:800
524
  msgid "Opera web browser"
525
  msgstr ""
526
 
527
- #: admin.php:800
528
  msgid "If you are using this, then turn Turbo/Road mode off."
529
  msgstr ""
530
 
531
- #: admin.php:801
532
  msgid "This is a count of the contents of your Updraft directory"
533
  msgstr ""
534
 
535
- #: admin.php:801
536
  msgid "Web-server disk space in use by UpdraftPlus"
537
  msgstr ""
538
 
539
- #: admin.php:801
540
  msgid "refresh"
541
  msgstr ""
542
 
543
- #: admin.php:803
544
  msgid "UpdraftPlus - Upload backup files"
545
  msgstr ""
546
 
547
- #: admin.php:804
548
  msgid "Upload files into UpdraftPlus. Use this to import backups made on a different WordPress installation."
549
  msgstr ""
550
 
551
- #: admin.php:808
552
  msgid "Drop backup zips here"
553
  msgstr ""
554
 
555
- #: admin.php:809
556
- #: admin.php:1205
557
  msgid "or"
558
  msgstr ""
559
 
560
- #: admin.php:822
561
  msgid "calculating..."
562
  msgstr ""
563
 
564
- #: admin.php:880
565
- #: admin.php:902
566
  msgid "Error:"
567
  msgstr ""
568
 
569
- #: admin.php:890
570
  msgid "You should:"
571
  msgstr ""
572
 
573
- #: admin.php:897
574
  msgid "Download error: the server sent us a response (JSON) which we did not understand"
575
  msgstr ""
576
 
577
- #: admin.php:902
578
  msgid "Download error: the server sent us a response which we did not understand."
579
  msgstr ""
580
 
581
- #: admin.php:917
582
  msgid "Restore backup"
583
  msgstr ""
584
 
585
- #: admin.php:918
586
  msgid "Restore backup from"
587
  msgstr ""
588
 
589
- #: admin.php:919
590
- msgid "Restoring will replace this site's themes, plugins, uploads, database and/or other content directories (according to what is contained in the backup set, and your selection"
591
  msgstr ""
592
 
593
- #: admin.php:919
594
  msgid "Choose the components to restore"
595
  msgstr ""
596
 
597
- #: admin.php:928
598
  msgid "Your web server has PHP's so-called safe_mode active."
599
  msgstr ""
600
 
601
- #: admin.php:928
602
  msgid "This makes time-outs much more likely. You are recommended to turn safe_mode off, or to restore only one entity at a time, <a href=\"http://updraftplus.com/faqs/i-want-to-restore-but-have-either-cannot-or-have-failed-to-do-so-from-the-wp-admin-console/\">or to restore manually</a>."
603
  msgstr ""
604
 
605
- #: admin.php:941
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
606
  msgid "Perform a backup now"
607
  msgstr ""
608
 
609
- #: admin.php:942
610
  msgid "This will schedule a one-time backup. To proceed, press 'Backup Now', then wait 10 seconds, then visit any page on your site. WordPress should then start the backup running in the background."
611
  msgstr ""
612
 
613
- #: admin.php:948
614
  msgid "Does nothing happen when you schedule backups?"
615
  msgstr ""
616
 
617
- #: admin.php:948
618
  msgid "Go here for help."
619
  msgstr ""
620
 
621
- #: admin.php:954
622
  msgid "Multisite"
623
  msgstr ""
624
 
625
- #: admin.php:958
626
  msgid "Do you need WordPress Multisite support?"
627
  msgstr ""
628
 
629
- #: admin.php:958
630
  msgid "Please check out UpdraftPlus Premium, or the stand-alone Multisite add-on."
631
  msgstr ""
632
 
633
- #: admin.php:963
634
  msgid "Configure Backup Contents And Schedule"
635
  msgstr ""
636
 
637
- #: admin.php:969
638
  msgid "Debug Information And Expert Options"
639
  msgstr ""
640
 
641
- #: admin.php:974
642
  msgid "Peak memory usage"
643
  msgstr ""
644
 
645
- #: admin.php:975
646
  msgid "Current memory usage"
647
  msgstr ""
648
 
649
- #: admin.php:976
650
  msgid "PHP memory limit"
651
  msgstr ""
652
 
653
- #: admin.php:979
654
  msgid "The buttons below will immediately execute a backup run, independently of WordPress's scheduler. If these work whilst your scheduled backups and the \"Backup Now\" button do absolutely nothing (i.e. not even produce a log file), then it means that your scheduler is broken. You should then disable all your other plugins, and try the \"Backup Now\" button. If that fails, then contact your web hosting company and ask them if they have disabled wp-cron. If it succeeds, then re-activate your other plugins one-by-one, and find the one that is the problem and report a bug to them."
655
  msgstr ""
656
 
657
- #: admin.php:983
658
  msgid "Debug Full Backup"
659
  msgstr ""
660
 
661
- #: admin.php:983
662
  msgid "This will cause an immediate backup. The page will stall loading until it finishes (ie, unscheduled)."
663
  msgstr ""
664
 
665
- #: admin.php:987
666
  msgid "Debug Database Backup"
667
  msgstr ""
668
 
669
- #: admin.php:987
670
  msgid "This will cause an immediate DB backup. The page will stall loading until it finishes (ie, unscheduled). The backup may well run out of time; really this button is only helpful for checking that the backup is able to get through the initial stages, or for small WordPress sites.."
671
  msgstr ""
672
 
673
- #: admin.php:989
674
  msgid "Wipe Settings"
675
  msgstr ""
676
 
677
- #: admin.php:990
678
  msgid "This button will delete all UpdraftPlus settings (but not any of your existing backups from your cloud storage). You will then need to enter all your settings again. You can also do this before deactivating/deinstalling UpdraftPlus if you wish."
679
  msgstr ""
680
 
681
- #: admin.php:993
682
  msgid "Wipe All Settings"
683
  msgstr ""
684
 
685
- #: admin.php:993
686
  msgid "This will delete all your UpdraftPlus settings - are you sure you want to do this?"
687
  msgstr ""
688
 
689
- #: admin.php:1036
690
  msgid "Delete"
691
  msgstr ""
692
 
693
- #: admin.php:1100
694
  msgid "Download log file"
695
  msgstr ""
696
 
697
- #: admin.php:1106
698
  msgid "No backup has been completed."
699
  msgstr ""
700
 
701
- #: admin.php:1123
702
  msgid "File backup intervals"
703
  msgstr ""
704
 
705
- #: admin.php:1126
706
  msgid "Manual"
707
  msgstr ""
708
 
709
- #: admin.php:1126
710
  msgid "Every 4 hours"
711
  msgstr ""
712
 
713
- #: admin.php:1126
714
  msgid "Every 8 hours"
715
  msgstr ""
716
 
717
- #: admin.php:1126
718
  msgid "Every 12 hours"
719
  msgstr ""
720
 
721
- #: admin.php:1126
722
  msgid "Daily"
723
  msgstr ""
724
 
725
- #: admin.php:1126
726
  msgid "Weekly"
727
  msgstr ""
728
 
729
- #: admin.php:1126
730
  msgid "Fortnightly"
731
  msgstr ""
732
 
733
- #: admin.php:1126
734
  msgid "Monthly"
735
  msgstr ""
736
 
737
- #: admin.php:1135
738
- #: admin.php:1153
739
  msgid "and retain this many backups"
740
  msgstr ""
741
 
742
- #: admin.php:1142
743
  msgid "Database backup intervals"
744
  msgstr ""
745
 
746
- #: admin.php:1160
747
  msgid "If you would like to automatically schedule backups, choose schedules from the dropdowns above. Backups will occur at the intervals specified. If the two schedules are the same, then the two backups will take place together. If you choose \"manual\" then you must click the \"Backup Now\" button whenever you wish a backup to occur."
748
  msgstr ""
749
 
750
- #: admin.php:1161
751
  msgid "To fix the time at which a backup should take place,"
752
  msgstr ""
753
 
754
- #: admin.php:1161
755
  msgid "e.g. if your server is busy at day and you want to run overnight"
756
  msgstr ""
757
 
758
- #: admin.php:1161
759
  msgid "use the \"Fix Time\" add-on"
760
  msgstr ""
761
 
762
- #: admin.php:1165
763
  msgid "Include in files backup"
764
  msgstr ""
765
 
766
- #: admin.php:1175
767
- msgid "Any other directories found inside wp-content but exclude these directories:"
 
 
 
 
 
 
 
 
768
  msgstr ""
769
 
770
- #: admin.php:1181
771
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
772
  msgstr ""
773
 
774
- #: admin.php:1181
775
  msgid "Or, get the \"More Files\" add-on from our shop."
776
  msgstr ""
777
 
778
- #: admin.php:1181
779
  msgid "Use WordShell for automatic backup, version control and patching"
780
  msgstr ""
781
 
782
- #: admin.php:1185
783
  msgid "Email"
784
  msgstr ""
785
 
786
- #: admin.php:1186
787
  msgid "Enter an address here to have a report sent (and the whole backup, if you choose) to it."
788
  msgstr ""
789
 
790
- #: admin.php:1190
791
  msgid "Database encryption phrase"
792
  msgstr ""
793
 
794
- #: admin.php:1197
795
  msgid "If you enter text here, it is used to encrypt backups (Rijndael). <strong>Do make a separate record of it and do not lose it, or all your backups <em>will</em> be useless.</strong> Presently, only the database file is encrypted. This is also the key used to decrypt backups from this admin interface (so if you change it, then automatic decryption will not work until you change it back)."
796
  msgstr ""
797
 
798
- #: admin.php:1197
799
  msgid "You can also decrypt a database manually here."
800
  msgstr ""
801
 
802
- #: admin.php:1200
803
  msgid "Manually decrypt a database backup file"
804
  msgstr ""
805
 
806
- #: admin.php:1204
807
  msgid "Drop encrypted database files (db.crypt.gz files) here to upload them for decryption"
808
  msgstr ""
809
 
810
- #: admin.php:1207
811
  msgid "Use decryption key"
812
  msgstr ""
813
 
814
- #: admin.php:1221
815
  msgid "Copying Your Backup To Remote Storage"
816
  msgstr ""
817
 
818
- #: admin.php:1225
819
  msgid "Choose your remote storage"
820
  msgstr ""
821
 
822
- #: admin.php:1237
823
  msgid "None"
824
  msgstr ""
825
 
826
- #: admin.php:1342
827
- #: admin.php:1352
828
  msgid "Cancel"
829
  msgstr ""
830
 
831
- #: admin.php:1376
832
  msgid "Advanced / Debugging Settings"
833
  msgstr ""
834
 
835
- #: admin.php:1379
836
  msgid "Debug mode"
837
  msgstr ""
838
 
839
- #: admin.php:1380
840
  msgid "Check this to receive more information and emails on the backup process - useful if something is going wrong. You <strong>must</strong> send us this log if you are filing a bug report."
841
  msgstr ""
842
 
843
- #: admin.php:1383
844
  msgid "Expert settings"
845
  msgstr ""
846
 
847
- #: admin.php:1384
848
  msgid "Show expert settings"
849
  msgstr ""
850
 
851
- #: admin.php:1384
852
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
853
  msgstr ""
854
 
855
- #: admin.php:1391
856
  msgid "Delete local backup"
857
  msgstr ""
858
 
859
- #: admin.php:1392
860
  msgid "Uncheck this to prevent deletion of any superfluous backup files from your server after the backup run finishes (i.e. any files despatched remotely will also remain locally, and any files being kept locally will not be subject to the retention limits)."
861
  msgstr ""
862
 
863
- #: admin.php:1397
864
  msgid "Backup directory"
865
  msgstr ""
866
 
867
- #: admin.php:1405
868
  msgid "Backup directory specified is writable, which is good."
869
  msgstr ""
870
 
871
- #: admin.php:1407
872
  msgid "Backup directory specified is <b>not</b> writable, or does not exist."
873
  msgstr ""
874
 
875
- #: admin.php:1407
876
  msgid "Click here to attempt to create the directory and set the permissions"
877
  msgstr ""
878
 
879
- #: admin.php:1407
880
  msgid "or, to reset this option"
881
  msgstr ""
882
 
883
- #: admin.php:1407
884
  msgid "click here"
885
  msgstr ""
886
 
887
- #: admin.php:1407
888
  msgid "If that is unsuccessful check the permissions on your server or change it to another directory that is writable by your web server process."
889
  msgstr ""
890
 
891
- #: admin.php:1410
892
  msgid "This is where UpdraftPlus will write the zip files it creates initially. This directory must be writable by your web server. Typically you'll want to have it inside your wp-content folder (this is the default). <b>Do not</b> place it inside your uploads dir, as that will cause recursion issues (backups of backups of backups of...)."
893
  msgstr ""
894
 
895
- #: admin.php:1414
896
  msgid "Use the server's SSL certificates"
897
  msgstr ""
898
 
899
- #: admin.php:1415
900
  msgid "By default UpdraftPlus uses its own store of SSL certificates to verify the identity of remote sites (i.e. to make sure it is talking to the real Dropbox, Amazon S3, etc., and not an attacker). We keep these up to date. However, if you get an SSL error, then choosing this option (which causes UpdraftPlus to use your web server's collection instead) may help."
901
  msgstr ""
902
 
903
- #: admin.php:1419
904
  msgid "Do not verify SSL certificates"
905
  msgstr ""
906
 
907
- #: admin.php:1420
908
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from verifying the identity of encrypted sites that it connects to (e.g. Dropbox, Google Drive). It means that UpdraftPlus will be using SSL only for encryption of traffic, and not for authentication."
909
  msgstr ""
910
 
911
- #: admin.php:1420
912
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
913
  msgstr ""
914
 
915
- #: admin.php:1424
916
  msgid "Disable SSL entirely where possible"
917
  msgstr ""
918
 
919
- #: admin.php:1425
920
  msgid "Choosing this option lowers your security by stopping UpdraftPlus from using SSL for authentication and encrypted transport at all, where possible. Note that some cloud storage providers do not allow this (e.g. Dropbox), so with those providers this setting will have no effect."
921
  msgstr ""
922
 
923
- #: admin.php:1449
924
  msgid "Save Changes"
925
  msgstr ""
926
 
927
- #: admin.php:1459
928
  #, php-format
929
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
930
  msgstr ""
931
 
932
- #: admin.php:1459
933
  #, php-format
934
  msgid "UpdraftPlus's %s module <strong>requires</strong> Curl. Your only options to get this working are 1) Install/enable curl or 2) Hire us or someone else to code additional support options into UpdraftPlus. 3) Wait, possibly forever, for someone else to do this."
935
  msgstr ""
936
 
937
- #: admin.php:1465
938
  #, php-format
939
  msgid "Your web server's PHP/Curl installation does not support https access. Communications with %s will be unencrypted. ask your web host to install Curl/SSL in order to gain the ability for encryption (via an add-on)."
940
  msgstr ""
941
 
942
- #: admin.php:1467
943
  #, php-format
944
  msgid "Your web server's PHP/Curl installation does not support https access. We cannot access %s without this support. Please contact your web hosting provider's support. %s <strong>requires</strong> Curl+https. Please do not file any support requests; there is no alternative."
945
  msgstr ""
946
 
947
- #: admin.php:1470
948
  #, php-format
949
  msgid "Good news: Your site's communications with %s can be encrypted. If you see any errors to do with encryption, then look in the 'Expert Settings' for more help."
950
  msgstr ""
951
 
952
- #: admin.php:1555
953
  msgid "Press here to download"
954
  msgstr ""
955
 
956
- #: admin.php:1557
957
  #, php-format
958
  msgid "(No %s)"
959
  msgstr ""
960
 
961
- #: admin.php:1567
962
  msgid "Backup Log"
963
  msgstr ""
964
 
965
- #: admin.php:1575
966
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
967
  msgstr ""
968
 
969
- #: admin.php:1658
970
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
971
  msgstr ""
972
 
973
- #: admin.php:1671
974
  msgid "UpdraftPlus Restoration: Progress"
975
  msgstr ""
976
 
977
- #: admin.php:1678
978
  msgid "ABORT: Could not find the information on which entities to restore."
979
  msgstr ""
980
 
981
- #: admin.php:1698
 
 
 
 
982
  msgid "This component was not selected for restoration - skipping."
983
  msgstr ""
984
 
985
- #: admin.php:1706
986
  msgid "File is not locally present - needs retrieving from remote storage (for large files, it is better to do this in advance from the download console)"
987
  msgstr ""
988
 
989
- #: admin.php:1712
990
  msgid "Archive is expected to be size:"
991
  msgstr ""
992
 
993
- #: admin.php:1717
994
  msgid "ERROR"
995
  msgstr ""
996
 
997
- #: admin.php:1720
998
  msgid "The backup records do not contain information about the proper size of this file."
999
  msgstr ""
1000
 
1001
- #: admin.php:1732
1002
  msgid "Error message"
1003
  msgstr ""
1004
 
1005
- #: admin.php:1738
1006
- #: admin.php:1739
1007
  msgid "Could not find one of the files for restoration"
1008
  msgstr ""
1009
 
@@ -1059,57 +1108,65 @@ msgstr ""
1059
  msgid "Failed to delete working directory after restoring."
1060
  msgstr ""
1061
 
1062
- #: includes/updraft-restorer.php:49
1063
  msgid "Failed to create a temporary directory"
1064
  msgstr ""
1065
 
1066
- #: includes/updraft-restorer.php:67
1067
  msgid "Failed to write out the decrypted database to the filesystem"
1068
  msgstr ""
1069
 
1070
- #: includes/updraft-restorer.php:158
 
 
 
 
 
 
 
 
1071
  msgid "Will not delete the archive after unpacking it, because there was no cloud storage for this backup"
1072
  msgstr ""
1073
 
1074
- #: includes/updraft-restorer.php:179
1075
  msgid "Warning: PHP safe_mode is active on your server. Timeouts are much more likely. If these happen, then you will need to manually restore the file via phpMyAdmin or another method."
1076
  msgstr ""
1077
 
1078
- #: includes/updraft-restorer.php:186
1079
  msgid "Failed to find database file"
1080
  msgstr ""
1081
 
1082
- #: includes/updraft-restorer.php:192
1083
  msgid "Failed to open database file"
1084
  msgstr ""
1085
 
1086
- #: includes/updraft-restorer.php:212
1087
  msgid "Database access: Direct MySQL access is not available, so we are falling back to wpdb (this will be considerably slower)"
1088
  msgstr ""
1089
 
1090
- #: includes/updraft-restorer.php:238
1091
  msgid "Restoring table"
1092
  msgstr ""
1093
 
1094
- #: includes/updraft-restorer.php:250
1095
  #, php-format
1096
  msgid "An error (%s) occured:"
1097
  msgstr ""
1098
 
1099
- #: includes/updraft-restorer.php:250
1100
- msgid "the database query being run was: "
1101
  msgstr ""
1102
 
1103
- #: includes/updraft-restorer.php:253
1104
  msgid "Too many database errors have occurred - aborting restoration (you will need to restore manually)"
1105
  msgstr ""
1106
 
1107
- #: includes/updraft-restorer.php:260
1108
  #, php-format
1109
  msgid "Database lines processed: %d in %.2f seconds"
1110
  msgstr ""
1111
 
1112
- #: includes/updraft-restorer.php:269
1113
  #, php-format
1114
  msgid "Finished: lines processed: %d in %.2f seconds"
1115
  msgstr ""
@@ -1135,258 +1192,273 @@ msgstr ""
1135
  msgid "follow this link to get it"
1136
  msgstr ""
1137
 
1138
- #: methods/googledrive.php:95
1139
- #: methods/cloudfiles.php:449
1140
- msgid "Success"
 
 
 
1141
  msgstr ""
1142
 
1143
- #: methods/googledrive.php:95
1144
  #, php-format
1145
- msgid "you have authenticated your %s account"
1146
  msgstr ""
1147
 
1148
- #: methods/googledrive.php:95
1149
- #: methods/googledrive.php:331
1150
- #: methods/googledrive.php:333
1151
- #: methods/googledrive.php:351
1152
- #: methods/googledrive.php:355
1153
- #: methods/googledrive.php:359
1154
- msgid "Google Drive"
1155
  msgstr ""
1156
 
1157
- #: methods/googledrive.php:99
1158
- msgid "No refresh token was received from Google. This often means that you entered your client secret wrongly, or that you have not yet re-authenticated (below) since correcting it. Re-check it, then follow the link to authenticate again. Finally, if that does not work, then use expert mode to wipe all your settings, create a new Google client ID/secret, and start again."
 
1159
  msgstr ""
1160
 
1161
- #: methods/googledrive.php:104
1162
- msgid "Authorization failed"
 
 
 
 
 
1163
  msgstr ""
1164
 
1165
- #: methods/googledrive.php:118
1166
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
1167
  msgstr ""
1168
 
1169
- #: methods/googledrive.php:119
1170
- #: methods/googledrive.php:255
1171
  msgid "Have not yet obtained an access token from Google (has the user authorised?)"
1172
  msgstr ""
1173
 
1174
- #: methods/googledrive.php:136
 
 
 
 
 
1175
  #, php-format
1176
  msgid "Failed to upload to %s"
1177
  msgstr ""
1178
 
1179
- #: methods/googledrive.php:190
1180
  msgid "Error"
1181
  msgstr ""
1182
 
1183
- #: methods/googledrive.php:226
1184
- msgid "An error occurred during GoogleDrive upload (see log for more details)"
 
1185
  msgstr ""
1186
 
1187
- #: methods/googledrive.php:267
1188
  #, php-format
1189
  msgid "Google Drive error: %d: could not download: could not find a record of the Google Drive file ID for this file"
1190
  msgstr ""
1191
 
1192
- #: methods/googledrive.php:272
1193
  #, php-format
1194
  msgid "Could not find %s in order to download it"
1195
  msgstr ""
1196
 
1197
- #: methods/googledrive.php:284
1198
  msgid "Google Drive "
1199
  msgstr ""
1200
 
1201
- #: methods/googledrive.php:284
1202
  msgid "error: zero-size file was downloaded"
1203
  msgstr ""
1204
 
1205
- #: methods/googledrive.php:302
1206
  msgid "Account is not authorized."
1207
  msgstr ""
1208
 
1209
- #: methods/googledrive.php:334
1210
- #: methods/cloudfiles.php:335
1211
  #, php-format
1212
- msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your blog is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
1213
  msgstr ""
1214
 
1215
- #: methods/googledrive.php:340
1216
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
1217
  msgstr ""
1218
 
1219
- #: methods/googledrive.php:341
1220
  msgid "Follow this link to your Google API Console, and there create a Client ID in the API Access section."
1221
  msgstr ""
1222
 
1223
- #: methods/googledrive.php:341
1224
  msgid "Select 'Web Application' as the application type."
1225
  msgstr ""
1226
 
1227
- #: methods/googledrive.php:341
1228
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
1229
  msgstr ""
1230
 
1231
- #: methods/googledrive.php:341
1232
- msgid "N.B. If you install UpdraftPlus on several WordPress sites, then you cannot re-use your client ID; you must create a new one from your Google API console for each blog."
1233
  msgstr ""
1234
 
1235
- #: methods/googledrive.php:344
1236
  msgid "You do not have the SimpleXMLElement installed. Google Drive backups will <b>not</b> work until you do."
1237
  msgstr ""
1238
 
1239
- #: methods/googledrive.php:351
1240
  msgid "Client ID"
1241
  msgstr ""
1242
 
1243
- #: methods/googledrive.php:352
1244
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
1245
  msgstr ""
1246
 
1247
- #: methods/googledrive.php:355
1248
  msgid "Client Secret"
1249
  msgstr ""
1250
 
1251
- #: methods/googledrive.php:359
1252
  msgid "Folder ID"
1253
  msgstr ""
1254
 
1255
- #: methods/googledrive.php:360
1256
  msgid "<strong>This is NOT a folder name</strong>. To get a folder's ID navigate to that folder in Google Drive in your web browser and copy the ID from your browser's address bar. It is the part that comes after <kbd>#folders/.</kbd> Leave empty to use your root folder)"
1257
  msgstr ""
1258
 
1259
- #: methods/googledrive.php:363
1260
  msgid "Authenticate with Google"
1261
  msgstr ""
1262
 
1263
- #: methods/googledrive.php:364
1264
  msgid "<strong>After</strong> you have saved your settings (by clicking 'Save Changes' below), then come back here once and click this link to complete authentication with Google."
1265
  msgstr ""
1266
 
1267
  #: methods/cloudfiles.php:58
1268
  #: methods/cloudfiles.php:62
1269
- #: methods/cloudfiles.php:219
1270
- #: methods/cloudfiles.php:223
1271
- #: methods/cloudfiles.php:429
1272
- #: methods/cloudfiles.php:432
1273
- #: methods/cloudfiles.php:435
1274
  msgid "Cloud Files authentication failed"
1275
  msgstr ""
1276
 
1277
  #: methods/cloudfiles.php:66
1278
- #: methods/cloudfiles.php:227
1279
- #: methods/cloudfiles.php:244
1280
  msgid "Cloud Files error - failed to create and access the container"
1281
  msgstr ""
1282
 
1283
- #: methods/cloudfiles.php:90
1284
  #, php-format
1285
  msgid "%s Error: Failed to open local file"
1286
  msgstr ""
1287
 
1288
- #: methods/cloudfiles.php:107
1289
- #: methods/cloudfiles.php:148
1290
  #, php-format
1291
  msgid "%s Error: Failed to upload"
1292
  msgstr ""
1293
 
1294
- #: methods/cloudfiles.php:168
1295
  msgid "Cloud Files error - failed to re-assemble chunks"
1296
  msgstr ""
1297
 
1298
- #: methods/cloudfiles.php:179
1299
- #: methods/cloudfiles.php:180
1300
  msgid "Cloud Files error - failed to upload file"
1301
  msgstr ""
1302
 
1303
- #: methods/cloudfiles.php:271
1304
- #: methods/cloudfiles.php:288
1305
  msgid "Cloud Files Error"
1306
  msgstr ""
1307
 
1308
- #: methods/cloudfiles.php:271
1309
  msgid "Error opening local file: Failed to download"
1310
  msgstr ""
1311
 
1312
- #: methods/cloudfiles.php:288
1313
  msgid "Error downloading remote file: Failed to download ("
1314
  msgstr ""
1315
 
1316
- #: methods/cloudfiles.php:297
1317
  msgid "Cloud Files error - no such file exists at Cloud Files"
1318
  msgstr ""
1319
 
1320
- #: methods/cloudfiles.php:300
1321
- #: methods/cloudfiles.php:301
1322
  msgid "Cloud Files error - failed to download the file"
1323
  msgstr ""
1324
 
1325
- #: methods/cloudfiles.php:343
 
 
 
 
 
 
 
 
 
 
1326
  msgid "Get your API key <a href=\"https://mycloud.rackspace.com/\">from your Rackspace Cloud console</a> (read instructions <a href=\"http://www.rackspace.com/knowledge_center/article/rackspace-cloud-essentials-1-generating-your-api-key\">here</a>), then pick a container name to use for storage. This container will be created for you if it does not already exist."
1327
  msgstr ""
1328
 
1329
- #: methods/cloudfiles.php:343
1330
  msgid "Also, you should read this important FAQ."
1331
  msgstr ""
1332
 
1333
- #: methods/cloudfiles.php:347
1334
  msgid "US or UK Cloud"
1335
  msgstr ""
1336
 
1337
- #: methods/cloudfiles.php:353
1338
  msgid "US (default)"
1339
  msgstr ""
1340
 
1341
- #: methods/cloudfiles.php:354
1342
  msgid "UK"
1343
  msgstr ""
1344
 
1345
- #: methods/cloudfiles.php:359
1346
  msgid "Cloud Files username"
1347
  msgstr ""
1348
 
1349
- #: methods/cloudfiles.php:363
1350
  msgid "Cloud Files API key"
1351
  msgstr ""
1352
 
1353
- #: methods/cloudfiles.php:367
1354
  msgid "Cloud Files container"
1355
  msgstr ""
1356
 
1357
- #: methods/cloudfiles.php:377
1358
  #, php-format
1359
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
1360
  msgstr ""
1361
 
1362
- #: methods/cloudfiles.php:387
1363
- #, php-format
1364
- msgid "Test %s Settings"
1365
- msgstr ""
1366
-
1367
- #: methods/cloudfiles.php:395
1368
- #: methods/cloudfiles.php:400
1369
  #, php-format
1370
  msgid "Failure: No %s was given."
1371
  msgstr ""
1372
 
1373
- #: methods/cloudfiles.php:395
1374
  msgid "API key"
1375
  msgstr ""
1376
 
1377
- #: methods/cloudfiles.php:400
1378
  msgid "Username"
1379
  msgstr ""
1380
 
1381
- #: methods/cloudfiles.php:420
1382
  msgid "Failure: No container details were given."
1383
  msgstr ""
1384
 
1385
- #: methods/cloudfiles.php:445
1386
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
1387
  msgstr ""
1388
 
1389
- #: methods/cloudfiles.php:449
1390
  msgid "We accessed the container, and were able to create files within it."
1391
  msgstr ""
1392
 
@@ -1505,52 +1577,62 @@ msgid "The communication with %s was not encrypted."
1505
  msgstr ""
1506
 
1507
  #: methods/dropbox.php:35
1508
- #: methods/dropbox.php:167
 
 
 
 
 
1509
  msgid "You do not appear to be authenticated with Dropbox"
1510
  msgstr ""
1511
 
1512
- #: methods/dropbox.php:46
1513
  #, php-format
1514
  msgid "error: %s (see log file for more)"
1515
  msgstr ""
1516
 
1517
- #: methods/dropbox.php:98
1518
- #: methods/dropbox.php:103
1519
  #, php-format
1520
  msgid "error: failed to upload file to %s (see log file for more)"
1521
  msgstr ""
1522
 
1523
- #: methods/dropbox.php:223
1524
  msgid "Need to use sub-folders?"
1525
  msgstr ""
1526
 
1527
- #: methods/dropbox.php:223
1528
  msgid "Backups are saved in"
1529
  msgstr ""
1530
 
1531
- #: methods/dropbox.php:223
1532
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
1533
  msgstr ""
1534
 
1535
- #: methods/dropbox.php:223
1536
  msgid "there's an add-on for that."
1537
  msgstr ""
1538
 
1539
- #: methods/dropbox.php:228
1540
  msgid "Authenticate with Dropbox"
1541
  msgstr ""
1542
 
1543
- #: methods/dropbox.php:229
1544
  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 Dropbox."
1545
  msgstr ""
1546
 
1547
- #: methods/dropbox.php:289
 
 
 
 
 
1548
  msgid "though part of the returned information was not as expected - your mileage may vary"
1549
  msgstr ""
1550
 
1551
- #: methods/dropbox.php:292
1552
  #, php-format
1553
- msgid "Your %s account name"
1554
  msgstr ""
1555
 
1556
  #: methods/ftp.php:30
@@ -1650,30 +1732,72 @@ msgstr ""
1650
  msgid "Enter a complete URL, beginning with webdav:// or webdavs:// and including path, username, password and port as required - e.g.%s"
1651
  msgstr ""
1652
 
1653
- #: addons/webdav.php:281
1654
- #: addons/sftp.php:281
1655
  msgid "Failed"
1656
  msgstr ""
1657
 
1658
- #: addons/webdav.php:295
1659
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
1660
  msgstr ""
1661
 
1662
- #: addons/morefiles.php:26
 
 
 
 
 
 
 
 
 
 
 
 
 
1663
  msgid "The above files comprise everything in a WordPress installation."
1664
  msgstr ""
1665
 
1666
- #: addons/morefiles.php:34
1667
  msgid "WordPress core (including any additions to your WordPress root directory)"
1668
  msgstr ""
1669
 
1670
- #: addons/morefiles.php:75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1671
  #, php-format
1672
  msgid "No backup of %s directories: there was nothing found to back up"
1673
  msgstr ""
1674
 
1675
- #: addons/morefiles.php:75
1676
- msgid "WordPress Core"
1677
  msgstr ""
1678
 
1679
  #: addons/sftp.php:23
@@ -1704,7 +1828,7 @@ msgid "SFTP password"
1704
  msgstr ""
1705
 
1706
  #: addons/sftp.php:50
1707
- #: addons/sftp.php:293
1708
  msgid "Check your file permissions: Could not successfully create and enter:"
1709
  msgstr ""
1710
 
@@ -1737,23 +1861,23 @@ msgstr ""
1737
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
1738
  msgstr ""
1739
 
1740
- #: addons/sftp.php:254
1741
  msgid "host name"
1742
  msgstr ""
1743
 
1744
- #: addons/sftp.php:258
1745
  msgid "username"
1746
  msgstr ""
1747
 
1748
- #: addons/sftp.php:262
1749
  msgid "password"
1750
  msgstr ""
1751
 
1752
- #: addons/sftp.php:267
1753
  msgid "Failure: Port must be an integer."
1754
  msgstr ""
1755
 
1756
- #: addons/sftp.php:307
1757
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully created a file in that location."
1758
  msgstr ""
1759
 
@@ -1767,26 +1891,119 @@ msgstr ""
1767
  msgid "Enter in format HH:MM (e.g. 14:22)"
1768
  msgstr ""
1769
 
1770
- #: addons/multisite.php:114
1771
  msgid "Multisite Install"
1772
  msgstr ""
1773
 
1774
- #: addons/multisite.php:120
1775
  msgid "You do not have sufficient permissions to access this page."
1776
  msgstr ""
1777
 
1778
- #: addons/multisite.php:139
1779
  msgid "You do not have permission to access this page."
1780
  msgstr ""
1781
 
1782
- #: addons/multisite.php:195
1783
  msgid "Must-use plugins"
1784
  msgstr ""
1785
 
1786
- #: addons/multisite.php:196