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
1787
  msgid "Blog uploads"
1788
  msgstr ""
1789
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1790
  #: addons/dropbox-folders.php:21
1791
  msgid "Store at"
1792
  msgstr ""
2
  msgstr ""
3
  "Project-Id-Version: UpdraftPlus\n"
4
  "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2013-04-29 17:05+0100\n"
6
+ "PO-Revision-Date: 2013-04-29 17:05+0100\n"
7
  "Last-Translator: David Anderson <contact@updraftplus.com>\n"
8
  "Language-Team: <contact@updraftplus.com>\n"
9
  "Language: \n"
18
  msgid "UpdraftPlus Backups"
19
  msgstr ""
20
 
21
+ #: updraftplus.php:279
22
+ #: updraftplus.php:284
23
+ #: updraftplus.php:289
24
+ #: admin.php:182
25
+ #: admin.php:186
26
  msgid "UpdraftPlus notice:"
27
  msgstr ""
28
 
29
+ #: updraftplus.php:279
30
  msgid "The log file could not be read."
31
  msgstr ""
32
 
33
+ #: updraftplus.php:284
34
  msgid "No log files were found."
35
  msgstr ""
36
 
37
+ #: updraftplus.php:289
38
  msgid "The given file could not be read."
39
  msgstr ""
40
 
41
+ #: updraftplus.php:416
42
  msgid "Plugins"
43
  msgstr ""
44
 
45
+ #: updraftplus.php:417
46
  msgid "Themes"
47
  msgstr ""
48
 
49
+ #: updraftplus.php:418
50
  msgid "Uploads"
51
  msgstr ""
52
 
53
+ #: updraftplus.php:433
54
  msgid "Others"
55
  msgstr ""
56
 
57
+ #: updraftplus.php:704
58
  msgid "Could not create files in the backup directory. Backup aborted - check your UpdraftPlus settings."
59
  msgstr ""
60
 
61
+ #: updraftplus.php:773
62
  msgid "Encryption error occurred when encrypting database. Encryption aborted."
63
  msgstr ""
64
 
65
+ #: updraftplus.php:807
66
  msgid "The backup apparently succeeded and is now complete"
67
  msgstr ""
68
 
69
+ #: updraftplus.php:810
70
  msgid "The backup attempt has finished, apparently unsuccessfully"
71
  msgstr ""
72
 
73
+ #: updraftplus.php:813
74
  msgid "The backup has not finished; a resumption is scheduled within 5 minutes"
75
  msgstr ""
76
 
77
+ #: updraftplus.php:864
78
  msgid "Backed up"
79
  msgstr ""
80
 
81
+ #: updraftplus.php:864
82
  msgid "WordPress backup is complete"
83
  msgstr ""
84
 
85
+ #: updraftplus.php:864
86
  msgid "Backup contains"
87
  msgstr ""
88
 
89
+ #: updraftplus.php:864
90
  msgid "Latest status"
91
  msgstr ""
92
 
93
+ #: updraftplus.php:1108
94
  #, php-format
95
  msgid "Backup directory (%s) is not writable, or does not exist."
96
  msgstr ""
97
 
98
+ #: updraftplus.php:1233
99
  msgid "Could not read the directory"
100
  msgstr ""
101
 
102
+ #: updraftplus.php:1250
103
  msgid "Could not save backup history because we have no backup array. Backup probably failed."
104
  msgstr ""
105
 
106
+ #: updraftplus.php:1279
107
  msgid "Could not open the backup file for writing"
108
  msgstr ""
109
 
110
+ #: updraftplus.php:1294
111
  #, php-format
112
  msgid "Generated: %s"
113
  msgstr ""
114
 
115
+ #: updraftplus.php:1295
116
  #, php-format
117
  msgid "Hostname: %s"
118
  msgstr ""
119
 
120
+ #: updraftplus.php:1296
121
  #, php-format
122
  msgid "Database: %s"
123
  msgstr ""
124
 
125
+ #: updraftplus.php:1340
126
  msgid "The backup directory is not writable."
127
  msgstr ""
128
 
129
+ #: updraftplus.php:1361
130
  #, php-format
131
  msgid "Table: %s"
132
  msgstr ""
133
 
134
+ #: updraftplus.php:1366
135
  #, php-format
136
  msgid "Skipping non-WP table: %s"
137
  msgstr ""
138
 
139
+ #: updraftplus.php:1461
140
  #, php-format
141
  msgid "Delete any existing table %s"
142
  msgstr ""
143
 
144
+ #: updraftplus.php:1470
145
  #, php-format
146
  msgid "Table structure of table %s"
147
  msgstr ""
148
 
149
+ #: updraftplus.php:1476
150
  #, php-format
151
  msgid "Error with SHOW CREATE TABLE for %s."
152
  msgstr ""
153
 
154
+ #: updraftplus.php:1554
155
  #, php-format
156
  msgid "End of data contents of table %s"
157
  msgstr ""
158
 
159
+ #: updraftplus.php:1726
160
+ #: includes/updraft-restorer.php:56
161
  msgid "Decryption failed. The database file is encrypted, but you have no encryption key entered."
162
  msgstr ""
163
 
164
+ #: updraftplus.php:1739
165
+ #: includes/updraft-restorer.php:71
166
  msgid "Decryption failed. The most likely cause is that you used the wrong key."
167
  msgstr ""
168
 
169
+ #: updraftplus.php:1739
170
  msgid "The decryption key used:"
171
  msgstr ""
172
 
173
+ #: updraftplus.php:1754
174
  msgid "File not found"
175
  msgstr ""
176
 
177
+ #: updraftplus.php:1804
178
  msgid "Can you translate? Want to improve UpdraftPlus for speakers of your language?"
179
  msgstr ""
180
 
181
+ #: updraftplus.php:1806
182
  msgid "Find UpdraftPlus useful?"
183
  msgstr ""
184
 
185
+ #: updraftplus.php:1806
186
  msgid "Please make a donation"
187
  msgstr ""
188
 
189
+ #: updraftplus.php:1811
190
  msgid "Like UpdraftPlus and can spare one minute?"
191
  msgstr ""
192
 
193
+ #: updraftplus.php:1811
194
  msgid "Please help UpdraftPlus by giving a positive review at wordpress.org"
195
  msgstr ""
196
 
197
+ #: updraftplus.php:1818
198
  msgid "Need even more features and support? Check out UpdraftPlus Premium"
199
  msgstr ""
200
 
201
+ #: updraftplus.php:1827
202
  msgid "Check out UpdraftPlus.Com for help, add-ons and support"
203
  msgstr ""
204
 
205
+ #: updraftplus.php:1830
206
  msgid "Want to say thank-you for UpdraftPlus?"
207
  msgstr ""
208
 
209
+ #: updraftplus.php:1830
210
  msgid "Please buy our very cheap 'no adverts' add-on."
211
  msgstr ""
212
 
219
  msgid "Could not create %s zip. Consult the log file for more information."
220
  msgstr ""
221
 
222
+ #: admin.php:87
223
+ #: admin.php:104
224
  msgid "Allowed Files"
225
  msgstr ""
226
 
227
+ #: admin.php:154
228
  msgid "Settings"
229
  msgstr ""
230
 
231
+ #: admin.php:158
232
  msgid "Add-Ons / Pro Support"
233
  msgstr ""
234
 
235
+ #: admin.php:170
236
+ #: admin.php:174
237
+ #: admin.php:178
238
+ #: admin.php:1541
239
+ #: admin.php:1547
240
+ #: admin.php:1549
241
  msgid "Warning"
242
  msgstr ""
243
 
244
+ #: admin.php:170
245
  #, php-format
246
  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."
247
  msgstr ""
248
 
249
+ #: admin.php:174
250
  #, php-format
251
  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."
252
  msgstr ""
253
 
254
+ #: admin.php:178
255
+ #, php-format
256
+ msgid "Your website is hosted using the %s web server."
257
+ msgstr ""
258
+
259
+ #: admin.php:178
260
+ msgid "Please consult this FAQ if you have problems backing up."
261
+ msgstr ""
262
+
263
+ #: admin.php:182
264
+ #: admin.php:186
265
  #, php-format
266
  msgid "Click here to authenticate your %s account (you will not be able to back up to %s without it)."
267
  msgstr ""
268
 
269
+ #: admin.php:337
270
  #, php-format
271
  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"
272
  msgstr ""
273
 
274
+ #: admin.php:352
275
  msgid "Nothing yet logged"
276
  msgstr ""
277
 
278
+ #: admin.php:369
279
  msgid "Download failed"
280
  msgstr ""
281
 
282
+ #: admin.php:383
283
+ #: admin.php:905
284
  msgid "File ready."
285
  msgstr ""
286
 
287
+ #: admin.php:391
288
  msgid "Download in progress"
289
  msgstr ""
290
 
291
+ #: admin.php:394
292
  msgid "No local copy present."
293
  msgstr ""
294
 
295
+ #: admin.php:502
296
  msgid "Bad filename format - this does not look like a file created by UpdraftPlus"
297
  msgstr ""
298
 
299
+ #: admin.php:581
300
  msgid "Bad filename format - this does not look like an encrypted database file created by UpdraftPlus"
301
  msgstr ""
302
 
303
+ #: admin.php:608
304
  msgid "Restore successful!"
305
  msgstr ""
306
 
307
+ #: admin.php:609
308
+ #: admin.php:644
309
+ #: admin.php:656
310
  msgid "Actions"
311
  msgstr ""
312
 
 
313
  #: admin.php:609
314
+ #: admin.php:624
315
+ #: admin.php:644
316
+ #: admin.php:656
317
  msgid "Return to UpdraftPlus Configuration"
318
  msgstr ""
319
 
320
+ #: admin.php:633
321
  msgid "Remove old directories"
322
  msgstr ""
323
 
324
+ #: admin.php:639
325
  msgid "Old directories successfully removed."
326
  msgstr ""
327
 
328
+ #: admin.php:642
329
  msgid "Old directory removal failed for some reason. You may want to do this manually."
330
  msgstr ""
331
 
332
+ #: admin.php:653
333
  msgid "Backup directory could not be created"
334
  msgstr ""
335
 
336
+ #: admin.php:655
337
  msgid "Backup directory successfully created."
338
  msgstr ""
339
 
340
+ #: admin.php:662
341
  msgid "Schedule backup"
342
  msgstr ""
343
 
344
+ #: admin.php:665
345
  msgid "Failed."
346
  msgstr ""
347
 
348
+ #: admin.php:667
349
  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."
350
  msgstr ""
351
 
352
+ #: admin.php:667
353
  msgid "Nothing happening? Follow this link for help."
354
  msgstr ""
355
 
356
+ #: admin.php:681
357
  msgid "Your settings have been wiped."
358
  msgstr ""
359
 
360
+ #: admin.php:688
361
  msgid "By UpdraftPlus.Com"
362
  msgstr ""
363
 
364
+ #: admin.php:688
365
  msgid "Lead developer's homepage"
366
  msgstr ""
367
 
368
+ #: admin.php:688
369
  msgid "Donate"
370
  msgstr ""
371
 
372
+ #: admin.php:688
373
  msgid "Other WordPress plugins"
374
  msgstr ""
375
 
376
+ #: admin.php:688
377
  msgid "Version"
378
  msgstr ""
379
 
380
+ #: admin.php:694
381
  msgid "Your backup has been restored."
382
  msgstr ""
383
 
384
+ #: admin.php:694
385
  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."
386
  msgstr ""
387
 
388
+ #: admin.php:700
389
  msgid "Old directories successfully deleted."
390
  msgstr ""
391
 
392
+ #: admin.php:703
393
  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)."
394
  msgstr ""
395
 
396
+ #: admin.php:703
397
  msgid "Current limit is:"
398
  msgstr ""
399
 
400
+ #: admin.php:707
401
  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:"
402
  msgstr ""
403
 
404
+ #: admin.php:707
405
  msgid "seconds"
406
  msgstr ""
407
 
408
+ #: admin.php:712
409
  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)."
410
  msgstr ""
411
 
412
+ #: admin.php:716
413
  msgid "Delete Old Directories"
414
  msgstr ""
415
 
416
+ #: admin.php:716
417
  msgid "Are you sure you want to delete the old directories? This cannot be undone."
418
  msgstr ""
419
 
420
+ #: admin.php:730
421
  msgid "Existing Schedule And Backups"
422
  msgstr ""
423
 
424
+ #: admin.php:734
425
  msgid "JavaScript warning"
426
  msgstr ""
427
 
428
+ #: admin.php:735
429
  msgid "This admin interface uses JavaScript heavily. You either need to activate it within your browser, or to use a JavaScript-capable browser."
430
  msgstr ""
431
 
432
+ #: admin.php:748
433
+ #: admin.php:761
434
  msgid "Nothing currently scheduled"
435
  msgstr ""
436
 
437
+ #: admin.php:753
438
  msgid "At the same time as the files backup"
439
  msgstr ""
440
 
441
+ #: admin.php:773
442
+ msgid "All the times shown in this section are using WordPress's configured time zone, which you can set in Settings -> General"
443
+ msgstr ""
444
+
445
+ #: admin.php:773
446
  msgid "Next scheduled backups"
447
  msgstr ""
448
 
449
+ #: admin.php:775
450
  msgid "Files"
451
  msgstr ""
452
 
453
+ #: admin.php:776
454
+ #: admin.php:960
455
+ #: admin.php:963
456
+ #: admin.php:1613
457
+ #: admin.php:1620
458
+ #: admin.php:1783
459
  msgid "Database"
460
  msgstr ""
461
 
462
+ #: admin.php:777
463
  msgid "Time now"
464
  msgstr ""
465
 
466
+ #: admin.php:781
467
  msgid "Last finished backup run"
468
  msgstr ""
469
 
470
+ #: admin.php:786
471
+ #: admin.php:1431
472
  msgid "Backup Now"
473
  msgstr ""
474
 
475
+ #: admin.php:793
476
+ #: admin.php:1410
477
+ #: admin.php:1658
478
  msgid "Restore"
479
  msgstr ""
480
 
481
+ #: admin.php:800
482
  msgid "Last log message"
483
  msgstr ""
484
 
485
+ #: admin.php:802
486
  msgid "(Nothing yet logged)"
487
  msgstr ""
488
 
489
+ #: admin.php:803
490
  msgid "Download most recently modified log file"
491
  msgstr ""
492
 
493
+ #: admin.php:807
494
  msgid "Backups, logs & restoring"
495
  msgstr ""
496
 
497
+ #: admin.php:808
498
  msgid "Press to see available backups"
499
  msgstr ""
500
 
501
+ #: admin.php:808
502
  #, php-format
503
  msgid "%d set(s) available"
504
  msgstr ""
505
 
506
+ #: admin.php:813
507
  msgid "Downloading"
508
  msgstr ""
509
 
510
+ #: admin.php:813
511
  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."
512
  msgstr ""
513
 
514
+ #: admin.php:814
515
  msgid "Restoring"
516
  msgstr ""
517
 
518
+ #: admin.php:814
519
  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."
520
  msgstr ""
521
 
522
+ #: admin.php:814
523
  msgid "More tasks:"
524
  msgstr ""
525
 
526
+ #: admin.php:814
527
  msgid "upload backup files"
528
  msgstr ""
529
 
530
+ #: admin.php:814
531
  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."
532
  msgstr ""
533
 
534
+ #: admin.php:814
535
  msgid "rescan folder for new backup sets"
536
  msgstr ""
537
 
538
+ #: admin.php:815
539
  msgid "Opera web browser"
540
  msgstr ""
541
 
542
+ #: admin.php:815
543
  msgid "If you are using this, then turn Turbo/Road mode off."
544
  msgstr ""
545
 
546
+ #: admin.php:816
547
  msgid "This is a count of the contents of your Updraft directory"
548
  msgstr ""
549
 
550
+ #: admin.php:816
551
  msgid "Web-server disk space in use by UpdraftPlus"
552
  msgstr ""
553
 
554
+ #: admin.php:816
555
  msgid "refresh"
556
  msgstr ""
557
 
558
+ #: admin.php:818
559
  msgid "UpdraftPlus - Upload backup files"
560
  msgstr ""
561
 
562
+ #: admin.php:819
563
  msgid "Upload files into UpdraftPlus. Use this to import backups made on a different WordPress installation."
564
  msgstr ""
565
 
566
+ #: admin.php:823
567
  msgid "Drop backup zips here"
568
  msgstr ""
569
 
570
+ #: admin.php:824
571
+ #: admin.php:1287
572
  msgid "or"
573
  msgstr ""
574
 
575
+ #: admin.php:837
576
  msgid "calculating..."
577
  msgstr ""
578
 
579
+ #: admin.php:895
580
+ #: admin.php:917
581
  msgid "Error:"
582
  msgstr ""
583
 
584
+ #: admin.php:905
585
  msgid "You should:"
586
  msgstr ""
587
 
588
+ #: admin.php:912
589
  msgid "Download error: the server sent us a response (JSON) which we did not understand"
590
  msgstr ""
591
 
592
+ #: admin.php:917
593
  msgid "Download error: the server sent us a response which we did not understand."
594
  msgstr ""
595
 
596
+ #: admin.php:932
597
  msgid "Restore backup"
598
  msgstr ""
599
 
600
+ #: admin.php:933
601
  msgid "Restore backup from"
602
  msgstr ""
603
 
604
+ #: admin.php:934
605
+ 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)."
606
  msgstr ""
607
 
608
+ #: admin.php:934
609
  msgid "Choose the components to restore"
610
  msgstr ""
611
 
612
+ #: admin.php:943
613
  msgid "Your web server has PHP's so-called safe_mode active."
614
  msgstr ""
615
 
616
+ #: admin.php:943
617
  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>."
618
  msgstr ""
619
 
620
+ #: admin.php:956
621
+ #, php-format
622
+ msgid "The following entity cannot be restored automatically: \"%s\"."
623
+ msgstr ""
624
+
625
+ #: admin.php:956
626
+ msgid "You will need to restore it manually."
627
+ msgstr ""
628
+
629
+ #: admin.php:963
630
+ #, php-format
631
+ msgid "%s restoration options:"
632
+ msgstr ""
633
+
634
+ #: admin.php:971
635
+ msgid "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"
636
+ msgstr ""
637
+
638
+ #: admin.php:992
639
+ msgid "Do read this helpful article of useful things to know before restoring."
640
+ msgstr ""
641
+
642
+ #: admin.php:995
643
  msgid "Perform a backup now"
644
  msgstr ""
645
 
646
+ #: admin.php:996
647
  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."
648
  msgstr ""
649
 
650
+ #: admin.php:1002
651
  msgid "Does nothing happen when you schedule backups?"
652
  msgstr ""
653
 
654
+ #: admin.php:1002
655
  msgid "Go here for help."
656
  msgstr ""
657
 
658
+ #: admin.php:1008
659
  msgid "Multisite"
660
  msgstr ""
661
 
662
+ #: admin.php:1012
663
  msgid "Do you need WordPress Multisite support?"
664
  msgstr ""
665
 
666
+ #: admin.php:1012
667
  msgid "Please check out UpdraftPlus Premium, or the stand-alone Multisite add-on."
668
  msgstr ""
669
 
670
+ #: admin.php:1017
671
  msgid "Configure Backup Contents And Schedule"
672
  msgstr ""
673
 
674
+ #: admin.php:1023
675
  msgid "Debug Information And Expert Options"
676
  msgstr ""
677
 
678
+ #: admin.php:1028
679
  msgid "Peak memory usage"
680
  msgstr ""
681
 
682
+ #: admin.php:1029
683
  msgid "Current memory usage"
684
  msgstr ""
685
 
686
+ #: admin.php:1030
687
  msgid "PHP memory limit"
688
  msgstr ""
689
 
690
+ #: admin.php:1033
691
  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."
692
  msgstr ""
693
 
694
+ #: admin.php:1037
695
  msgid "Debug Full Backup"
696
  msgstr ""
697
 
698
+ #: admin.php:1037
699
  msgid "This will cause an immediate backup. The page will stall loading until it finishes (ie, unscheduled)."
700
  msgstr ""
701
 
702
+ #: admin.php:1041
703
  msgid "Debug Database Backup"
704
  msgstr ""
705
 
706
+ #: admin.php:1041
707
  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.."
708
  msgstr ""
709
 
710
+ #: admin.php:1043
711
  msgid "Wipe Settings"
712
  msgstr ""
713
 
714
+ #: admin.php:1044
715
  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."
716
  msgstr ""
717
 
718
+ #: admin.php:1047
719
  msgid "Wipe All Settings"
720
  msgstr ""
721
 
722
+ #: admin.php:1047
723
  msgid "This will delete all your UpdraftPlus settings - are you sure you want to do this?"
724
  msgstr ""
725
 
726
+ #: admin.php:1090
727
  msgid "Delete"
728
  msgstr ""
729
 
730
+ #: admin.php:1154
731
  msgid "Download log file"
732
  msgstr ""
733
 
734
+ #: admin.php:1160
735
  msgid "No backup has been completed."
736
  msgstr ""
737
 
738
+ #: admin.php:1177
739
  msgid "File backup intervals"
740
  msgstr ""
741
 
742
+ #: admin.php:1180
743
  msgid "Manual"
744
  msgstr ""
745
 
746
+ #: admin.php:1180
747
  msgid "Every 4 hours"
748
  msgstr ""
749
 
750
+ #: admin.php:1180
751
  msgid "Every 8 hours"
752
  msgstr ""
753
 
754
+ #: admin.php:1180
755
  msgid "Every 12 hours"
756
  msgstr ""
757
 
758
+ #: admin.php:1180
759
  msgid "Daily"
760
  msgstr ""
761
 
762
+ #: admin.php:1180
763
  msgid "Weekly"
764
  msgstr ""
765
 
766
+ #: admin.php:1180
767
  msgid "Fortnightly"
768
  msgstr ""
769
 
770
+ #: admin.php:1180
771
  msgid "Monthly"
772
  msgstr ""
773
 
774
+ #: admin.php:1189
775
+ #: admin.php:1207
776
  msgid "and retain this many backups"
777
  msgstr ""
778
 
779
+ #: admin.php:1196
780
  msgid "Database backup intervals"
781
  msgstr ""
782
 
783
+ #: admin.php:1214
784
  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."
785
  msgstr ""
786
 
787
+ #: admin.php:1215
788
  msgid "To fix the time at which a backup should take place,"
789
  msgstr ""
790
 
791
+ #: admin.php:1215
792
  msgid "e.g. if your server is busy at day and you want to run overnight"
793
  msgstr ""
794
 
795
+ #: admin.php:1215
796
  msgid "use the \"Fix Time\" add-on"
797
  msgstr ""
798
 
799
+ #: admin.php:1219
800
  msgid "Include in files backup"
801
  msgstr ""
802
 
803
+ #: admin.php:1229
804
+ msgid "Any other directories found inside wp-content"
805
+ msgstr ""
806
+
807
+ #: admin.php:1235
808
+ msgid "Exclude these:"
809
+ msgstr ""
810
+
811
+ #: admin.php:1237
812
+ msgid "If entering multiple files/directories, then separate them with commas"
813
  msgstr ""
814
 
815
+ #: admin.php:1263
816
  msgid "The above directories are everything, except for WordPress core itself which you can download afresh from WordPress.org."
817
  msgstr ""
818
 
819
+ #: admin.php:1263
820
  msgid "Or, get the \"More Files\" add-on from our shop."
821
  msgstr ""
822
 
823
+ #: admin.php:1263
824
  msgid "Use WordShell for automatic backup, version control and patching"
825
  msgstr ""
826
 
827
+ #: admin.php:1267
828
  msgid "Email"
829
  msgstr ""
830
 
831
+ #: admin.php:1268
832
  msgid "Enter an address here to have a report sent (and the whole backup, if you choose) to it."
833
  msgstr ""
834
 
835
+ #: admin.php:1272
836
  msgid "Database encryption phrase"
837
  msgstr ""
838
 
839
+ #: admin.php:1279
840
  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)."
841
  msgstr ""
842
 
843
+ #: admin.php:1279
844
  msgid "You can also decrypt a database manually here."
845
  msgstr ""
846
 
847
+ #: admin.php:1282
848
  msgid "Manually decrypt a database backup file"
849
  msgstr ""
850
 
851
+ #: admin.php:1286
852
  msgid "Drop encrypted database files (db.crypt.gz files) here to upload them for decryption"
853
  msgstr ""
854
 
855
+ #: admin.php:1289
856
  msgid "Use decryption key"
857
  msgstr ""
858
 
859
+ #: admin.php:1303
860
  msgid "Copying Your Backup To Remote Storage"
861
  msgstr ""
862
 
863
+ #: admin.php:1307
864
  msgid "Choose your remote storage"
865
  msgstr ""
866
 
867
+ #: admin.php:1319
868
  msgid "None"
869
  msgstr ""
870
 
871
+ #: admin.php:1424
872
+ #: admin.php:1434
873
  msgid "Cancel"
874
  msgstr ""
875
 
876
+ #: admin.php:1458
877
  msgid "Advanced / Debugging Settings"
878
  msgstr ""
879
 
880
+ #: admin.php:1461
881
  msgid "Debug mode"
882
  msgstr ""
883
 
884
+ #: admin.php:1462
885
  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."
886
  msgstr ""
887
 
888
+ #: admin.php:1465
889
  msgid "Expert settings"
890
  msgstr ""
891
 
892
+ #: admin.php:1466
893
  msgid "Show expert settings"
894
  msgstr ""
895
 
896
+ #: admin.php:1466
897
  msgid "click this to show some further options; don't bother with this unless you have a problem or are curious."
898
  msgstr ""
899
 
900
+ #: admin.php:1473
901
  msgid "Delete local backup"
902
  msgstr ""
903
 
904
+ #: admin.php:1474
905
  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)."
906
  msgstr ""
907
 
908
+ #: admin.php:1479
909
  msgid "Backup directory"
910
  msgstr ""
911
 
912
+ #: admin.php:1487
913
  msgid "Backup directory specified is writable, which is good."
914
  msgstr ""
915
 
916
+ #: admin.php:1489
917
  msgid "Backup directory specified is <b>not</b> writable, or does not exist."
918
  msgstr ""
919
 
920
+ #: admin.php:1489
921
  msgid "Click here to attempt to create the directory and set the permissions"
922
  msgstr ""
923
 
924
+ #: admin.php:1489
925
  msgid "or, to reset this option"
926
  msgstr ""
927
 
928
+ #: admin.php:1489
929
  msgid "click here"
930
  msgstr ""
931
 
932
+ #: admin.php:1489
933
  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."
934
  msgstr ""
935
 
936
+ #: admin.php:1492
937
  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...)."
938
  msgstr ""
939
 
940
+ #: admin.php:1496
941
  msgid "Use the server's SSL certificates"
942
  msgstr ""
943
 
944
+ #: admin.php:1497
945
  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."
946
  msgstr ""
947
 
948
+ #: admin.php:1501
949
  msgid "Do not verify SSL certificates"
950
  msgstr ""
951
 
952
+ #: admin.php:1502
953
  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."
954
  msgstr ""
955
 
956
+ #: admin.php:1502
957
  msgid "Note that not all cloud backup methods are necessarily using SSL authentication."
958
  msgstr ""
959
 
960
+ #: admin.php:1506
961
  msgid "Disable SSL entirely where possible"
962
  msgstr ""
963
 
964
+ #: admin.php:1507
965
  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."
966
  msgstr ""
967
 
968
+ #: admin.php:1531
969
  msgid "Save Changes"
970
  msgstr ""
971
 
972
+ #: admin.php:1541
973
  #, php-format
974
  msgid "Your web server's PHP installation does not included a required module (%s). Please contact your web hosting provider's support."
975
  msgstr ""
976
 
977
+ #: admin.php:1541
978
  #, php-format
979
  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."
980
  msgstr ""
981
 
982
+ #: admin.php:1547
983
  #, php-format
984
  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)."
985
  msgstr ""
986
 
987
+ #: admin.php:1549
988
  #, php-format
989
  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."
990
  msgstr ""
991
 
992
+ #: admin.php:1552
993
  #, php-format
994
  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."
995
  msgstr ""
996
 
997
+ #: admin.php:1638
998
  msgid "Press here to download"
999
  msgstr ""
1000
 
1001
+ #: admin.php:1640
1002
  #, php-format
1003
  msgid "(No %s)"
1004
  msgstr ""
1005
 
1006
+ #: admin.php:1650
1007
  msgid "Backup Log"
1008
  msgstr ""
1009
 
1010
+ #: admin.php:1658
1011
  msgid "After pressing this button, you will be given the option to choose which components you wish to restore"
1012
  msgstr ""
1013
 
1014
+ #: admin.php:1746
1015
  msgid "This backup does not exist in the backup history - restoration aborted. Timestamp:"
1016
  msgstr ""
1017
 
1018
+ #: admin.php:1759
1019
  msgid "UpdraftPlus Restoration: Progress"
1020
  msgstr ""
1021
 
1022
+ #: admin.php:1766
1023
  msgid "ABORT: Could not find the information on which entities to restore."
1024
  msgstr ""
1025
 
1026
+ #: admin.php:1767
1027
+ msgid "If making a request for support, please include this information:"
1028
+ msgstr ""
1029
+
1030
+ #: admin.php:1789
1031
  msgid "This component was not selected for restoration - skipping."
1032
  msgstr ""
1033
 
1034
+ #: admin.php:1797
1035
  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)"
1036
  msgstr ""
1037
 
1038
+ #: admin.php:1803
1039
  msgid "Archive is expected to be size:"
1040
  msgstr ""
1041
 
1042
+ #: admin.php:1808
1043
  msgid "ERROR"
1044
  msgstr ""
1045
 
1046
+ #: admin.php:1811
1047
  msgid "The backup records do not contain information about the proper size of this file."
1048
  msgstr ""
1049
 
1050
+ #: admin.php:1826
1051
  msgid "Error message"
1052
  msgstr ""
1053
 
1054
+ #: admin.php:1832
1055
+ #: admin.php:1833
1056
  msgid "Could not find one of the files for restoration"
1057
  msgstr ""
1058
 
1108
  msgid "Failed to delete working directory after restoring."
1109
  msgstr ""
1110
 
1111
+ #: includes/updraft-restorer.php:50
1112
  msgid "Failed to create a temporary directory"
1113
  msgstr ""
1114
 
1115
+ #: includes/updraft-restorer.php:68
1116
  msgid "Failed to write out the decrypted database to the filesystem"
1117
  msgstr ""
1118
 
1119
+ #: includes/updraft-restorer.php:112
1120
+ msgid "wp-config.php from backup: will restore as wp-config-backup.php"
1121
+ msgstr ""
1122
+
1123
+ #: includes/updraft-restorer.php:116
1124
+ msgid "wp-config.php from backup: restoring (as per user's request)"
1125
+ msgstr ""
1126
+
1127
+ #: includes/updraft-restorer.php:173
1128
  msgid "Will not delete the archive after unpacking it, because there was no cloud storage for this backup"
1129
  msgstr ""
1130
 
1131
+ #: includes/updraft-restorer.php:198
1132
  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."
1133
  msgstr ""
1134
 
1135
+ #: includes/updraft-restorer.php:203
1136
  msgid "Failed to find database file"
1137
  msgstr ""
1138
 
1139
+ #: includes/updraft-restorer.php:209
1140
  msgid "Failed to open database file"
1141
  msgstr ""
1142
 
1143
+ #: includes/updraft-restorer.php:233
1144
  msgid "Database access: Direct MySQL access is not available, so we are falling back to wpdb (this will be considerably slower)"
1145
  msgstr ""
1146
 
1147
+ #: includes/updraft-restorer.php:259
1148
  msgid "Restoring table"
1149
  msgstr ""
1150
 
1151
+ #: includes/updraft-restorer.php:271
1152
  #, php-format
1153
  msgid "An error (%s) occured:"
1154
  msgstr ""
1155
 
1156
+ #: includes/updraft-restorer.php:271
1157
+ msgid "the database query being run was:"
1158
  msgstr ""
1159
 
1160
+ #: includes/updraft-restorer.php:274
1161
  msgid "Too many database errors have occurred - aborting restoration (you will need to restore manually)"
1162
  msgstr ""
1163
 
1164
+ #: includes/updraft-restorer.php:281
1165
  #, php-format
1166
  msgid "Database lines processed: %d in %.2f seconds"
1167
  msgstr ""
1168
 
1169
+ #: includes/updraft-restorer.php:290
1170
  #, php-format
1171
  msgid "Finished: lines processed: %d in %.2f seconds"
1172
  msgstr ""
1192
  msgid "follow this link to get it"
1193
  msgstr ""
1194
 
1195
+ #: methods/googledrive.php:111
1196
+ 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."
1197
+ msgstr ""
1198
+
1199
+ #: methods/googledrive.php:116
1200
+ msgid "Authorization failed"
1201
  msgstr ""
1202
 
1203
+ #: methods/googledrive.php:137
1204
  #, php-format
1205
+ msgid "Your %s quota usage: %s %% used, %s available"
1206
  msgstr ""
1207
 
1208
+ #: methods/googledrive.php:143
1209
+ #: methods/cloudfiles.php:477
1210
+ msgid "Success"
 
 
 
 
1211
  msgstr ""
1212
 
1213
+ #: methods/googledrive.php:143
1214
+ #, php-format
1215
+ msgid "you have authenticated your %s account."
1216
  msgstr ""
1217
 
1218
+ #: methods/googledrive.php:143
1219
+ #: methods/googledrive.php:392
1220
+ #: methods/googledrive.php:394
1221
+ #: methods/googledrive.php:412
1222
+ #: methods/googledrive.php:416
1223
+ #: methods/googledrive.php:420
1224
+ msgid "Google Drive"
1225
  msgstr ""
1226
 
1227
+ #: methods/googledrive.php:159
1228
  msgid "Have not yet obtained an access token from Google - you need to authorise or re-authorise your connection to Google Drive."
1229
  msgstr ""
1230
 
1231
+ #: methods/googledrive.php:160
1232
+ #: methods/googledrive.php:318
1233
  msgid "Have not yet obtained an access token from Google (has the user authorised?)"
1234
  msgstr ""
1235
 
1236
+ #: methods/googledrive.php:191
1237
+ #, php-format
1238
+ msgid "Account full: your %s account has only %d bytes left, but the file to be uploaded is %d bytes"
1239
+ msgstr ""
1240
+
1241
+ #: methods/googledrive.php:201
1242
  #, php-format
1243
  msgid "Failed to upload to %s"
1244
  msgstr ""
1245
 
1246
+ #: methods/googledrive.php:253
1247
  msgid "Error"
1248
  msgstr ""
1249
 
1250
+ #: methods/googledrive.php:289
1251
+ #, php-format
1252
+ msgid "An error occurred during %s upload (see log for more details)"
1253
  msgstr ""
1254
 
1255
+ #: methods/googledrive.php:328
1256
  #, php-format
1257
  msgid "Google Drive error: %d: could not download: could not find a record of the Google Drive file ID for this file"
1258
  msgstr ""
1259
 
1260
+ #: methods/googledrive.php:333
1261
  #, php-format
1262
  msgid "Could not find %s in order to download it"
1263
  msgstr ""
1264
 
1265
+ #: methods/googledrive.php:345
1266
  msgid "Google Drive "
1267
  msgstr ""
1268
 
1269
+ #: methods/googledrive.php:345
1270
  msgid "error: zero-size file was downloaded"
1271
  msgstr ""
1272
 
1273
+ #: methods/googledrive.php:363
1274
  msgid "Account is not authorized."
1275
  msgstr ""
1276
 
1277
+ #: methods/googledrive.php:395
1278
+ #: methods/cloudfiles.php:362
1279
  #, php-format
1280
+ msgid "%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts."
1281
  msgstr ""
1282
 
1283
+ #: methods/googledrive.php:401
1284
  msgid "For longer help, including screenshots, follow this link. The description below is sufficient for more expert users."
1285
  msgstr ""
1286
 
1287
+ #: methods/googledrive.php:402
1288
  msgid "Follow this link to your Google API Console, and there create a Client ID in the API Access section."
1289
  msgstr ""
1290
 
1291
+ #: methods/googledrive.php:402
1292
  msgid "Select 'Web Application' as the application type."
1293
  msgstr ""
1294
 
1295
+ #: methods/googledrive.php:402
1296
  msgid "You must add the following as the authorised redirect URI (under \"More Options\") when asked"
1297
  msgstr ""
1298
 
1299
+ #: methods/googledrive.php:402
1300
+ 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 site."
1301
  msgstr ""
1302
 
1303
+ #: methods/googledrive.php:405
1304
  msgid "You do not have the SimpleXMLElement installed. Google Drive backups will <b>not</b> work until you do."
1305
  msgstr ""
1306
 
1307
+ #: methods/googledrive.php:412
1308
  msgid "Client ID"
1309
  msgstr ""
1310
 
1311
+ #: methods/googledrive.php:413
1312
  msgid "If Google later shows you the message \"invalid_client\", then you did not enter a valid client ID here."
1313
  msgstr ""
1314
 
1315
+ #: methods/googledrive.php:416
1316
  msgid "Client Secret"
1317
  msgstr ""
1318
 
1319
+ #: methods/googledrive.php:420
1320
  msgid "Folder ID"
1321
  msgstr ""
1322
 
1323
+ #: methods/googledrive.php:421
1324
  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)"
1325
  msgstr ""
1326
 
1327
+ #: methods/googledrive.php:424
1328
  msgid "Authenticate with Google"
1329
  msgstr ""
1330
 
1331
+ #: methods/googledrive.php:425
1332
  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."
1333
  msgstr ""
1334
 
1335
  #: methods/cloudfiles.php:58
1336
  #: methods/cloudfiles.php:62
1337
+ #: methods/cloudfiles.php:242
1338
+ #: methods/cloudfiles.php:246
1339
+ #: methods/cloudfiles.php:457
1340
+ #: methods/cloudfiles.php:460
1341
+ #: methods/cloudfiles.php:463
1342
  msgid "Cloud Files authentication failed"
1343
  msgstr ""
1344
 
1345
  #: methods/cloudfiles.php:66
1346
+ #: methods/cloudfiles.php:250
1347
+ #: methods/cloudfiles.php:268
1348
  msgid "Cloud Files error - failed to create and access the container"
1349
  msgstr ""
1350
 
1351
+ #: methods/cloudfiles.php:93
1352
  #, php-format
1353
  msgid "%s Error: Failed to open local file"
1354
  msgstr ""
1355
 
1356
+ #: methods/cloudfiles.php:110
1357
+ #: methods/cloudfiles.php:151
1358
  #, php-format
1359
  msgid "%s Error: Failed to upload"
1360
  msgstr ""
1361
 
1362
+ #: methods/cloudfiles.php:173
1363
  msgid "Cloud Files error - failed to re-assemble chunks"
1364
  msgstr ""
1365
 
1366
+ #: methods/cloudfiles.php:182
1367
+ #: methods/cloudfiles.php:183
1368
  msgid "Cloud Files error - failed to upload file"
1369
  msgstr ""
1370
 
1371
+ #: methods/cloudfiles.php:296
1372
+ #: methods/cloudfiles.php:313
1373
  msgid "Cloud Files Error"
1374
  msgstr ""
1375
 
1376
+ #: methods/cloudfiles.php:296
1377
  msgid "Error opening local file: Failed to download"
1378
  msgstr ""
1379
 
1380
+ #: methods/cloudfiles.php:313
1381
  msgid "Error downloading remote file: Failed to download ("
1382
  msgstr ""
1383
 
1384
+ #: methods/cloudfiles.php:322
1385
  msgid "Cloud Files error - no such file exists at Cloud Files"
1386
  msgstr ""
1387
 
1388
+ #: methods/cloudfiles.php:326
 
1389
  msgid "Cloud Files error - failed to download the file"
1390
  msgstr ""
1391
 
1392
+ #: methods/cloudfiles.php:335
1393
+ msgid "Testing - Please Wait..."
1394
+ msgstr ""
1395
+
1396
+ #: methods/cloudfiles.php:349
1397
+ #: methods/cloudfiles.php:414
1398
+ #, php-format
1399
+ msgid "Test %s Settings"
1400
+ msgstr ""
1401
+
1402
+ #: methods/cloudfiles.php:370
1403
  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."
1404
  msgstr ""
1405
 
1406
+ #: methods/cloudfiles.php:370
1407
  msgid "Also, you should read this important FAQ."
1408
  msgstr ""
1409
 
1410
+ #: methods/cloudfiles.php:374
1411
  msgid "US or UK Cloud"
1412
  msgstr ""
1413
 
1414
+ #: methods/cloudfiles.php:380
1415
  msgid "US (default)"
1416
  msgstr ""
1417
 
1418
+ #: methods/cloudfiles.php:381
1419
  msgid "UK"
1420
  msgstr ""
1421
 
1422
+ #: methods/cloudfiles.php:386
1423
  msgid "Cloud Files username"
1424
  msgstr ""
1425
 
1426
+ #: methods/cloudfiles.php:390
1427
  msgid "Cloud Files API key"
1428
  msgstr ""
1429
 
1430
+ #: methods/cloudfiles.php:394
1431
  msgid "Cloud Files container"
1432
  msgstr ""
1433
 
1434
+ #: methods/cloudfiles.php:404
1435
  #, php-format
1436
  msgid "UpdraftPlus's %s module <strong>requires</strong> %s. Please do not file any support requests; there is no alternative."
1437
  msgstr ""
1438
 
1439
+ #: methods/cloudfiles.php:422
1440
+ #: methods/cloudfiles.php:427
 
 
 
 
 
1441
  #, php-format
1442
  msgid "Failure: No %s was given."
1443
  msgstr ""
1444
 
1445
+ #: methods/cloudfiles.php:422
1446
  msgid "API key"
1447
  msgstr ""
1448
 
1449
+ #: methods/cloudfiles.php:427
1450
  msgid "Username"
1451
  msgstr ""
1452
 
1453
+ #: methods/cloudfiles.php:447
1454
  msgid "Failure: No container details were given."
1455
  msgstr ""
1456
 
1457
+ #: methods/cloudfiles.php:473
1458
  msgid "Cloud Files error - we accessed the container, but failed to create a file within it"
1459
  msgstr ""
1460
 
1461
+ #: methods/cloudfiles.php:477
1462
  msgid "We accessed the container, and were able to create files within it."
1463
  msgstr ""
1464
 
1577
  msgstr ""
1578
 
1579
  #: methods/dropbox.php:35
1580
+ #, php-format
1581
+ msgid "The %s PHP module is not installed"
1582
+ msgstr ""
1583
+
1584
+ #: methods/dropbox.php:41
1585
+ #: methods/dropbox.php:209
1586
  msgid "You do not appear to be authenticated with Dropbox"
1587
  msgstr ""
1588
 
1589
+ #: methods/dropbox.php:52
1590
  #, php-format
1591
  msgid "error: %s (see log file for more)"
1592
  msgstr ""
1593
 
1594
+ #: methods/dropbox.php:140
1595
+ #: methods/dropbox.php:145
1596
  #, php-format
1597
  msgid "error: failed to upload file to %s (see log file for more)"
1598
  msgstr ""
1599
 
1600
+ #: methods/dropbox.php:265
1601
  msgid "Need to use sub-folders?"
1602
  msgstr ""
1603
 
1604
+ #: methods/dropbox.php:265
1605
  msgid "Backups are saved in"
1606
  msgstr ""
1607
 
1608
+ #: methods/dropbox.php:265
1609
  msgid "If you back up several sites into the same Dropbox and want to organise with sub-folders, then "
1610
  msgstr ""
1611
 
1612
+ #: methods/dropbox.php:265
1613
  msgid "there's an add-on for that."
1614
  msgstr ""
1615
 
1616
+ #: methods/dropbox.php:270
1617
  msgid "Authenticate with Dropbox"
1618
  msgstr ""
1619
 
1620
+ #: methods/dropbox.php:271
1621
  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."
1622
  msgstr ""
1623
 
1624
+ #: methods/dropbox.php:328
1625
+ #, php-format
1626
+ msgid "you have authenticated your %s account"
1627
+ msgstr ""
1628
+
1629
+ #: methods/dropbox.php:331
1630
  msgid "though part of the returned information was not as expected - your mileage may vary"
1631
  msgstr ""
1632
 
1633
+ #: methods/dropbox.php:334
1634
  #, php-format
1635
+ msgid "Your %s account name: %s"
1636
  msgstr ""
1637
 
1638
  #: methods/ftp.php:30
1732
  msgid "Enter a complete URL, beginning with webdav:// or webdavs:// and including path, username, password and port as required - e.g.%s"
1733
  msgstr ""
1734
 
1735
+ #: addons/webdav.php:280
1736
+ #: addons/sftp.php:279
1737
  msgid "Failed"
1738
  msgstr ""
1739
 
1740
+ #: addons/webdav.php:294
1741
  msgid "Failed: We were not able to place a file in that directory - please check your credentials."
1742
  msgstr ""
1743
 
1744
+ #: addons/morefiles.php:37
1745
+ #: addons/morefiles.php:233
1746
+ msgid "WordPress Core"
1747
+ msgstr ""
1748
+
1749
+ #: addons/morefiles.php:41
1750
+ msgid "Over-write wp-config.php"
1751
+ msgstr ""
1752
+
1753
+ #: addons/morefiles.php:41
1754
+ msgid "(learn more about this important option)"
1755
+ msgstr ""
1756
+
1757
+ #: addons/morefiles.php:60
1758
  msgid "The above files comprise everything in a WordPress installation."
1759
  msgstr ""
1760
 
1761
+ #: addons/morefiles.php:67
1762
  msgid "WordPress core (including any additions to your WordPress root directory)"
1763
  msgstr ""
1764
 
1765
+ #: addons/morefiles.php:79
1766
+ msgid "Any other directory on your server that you wish to back up"
1767
+ msgstr ""
1768
+
1769
+ #: addons/morefiles.php:80
1770
+ msgid "More Files"
1771
+ msgstr ""
1772
+
1773
+ #: addons/morefiles.php:95
1774
+ msgid "Enter the directory:"
1775
+ msgstr ""
1776
+
1777
+ #: addons/morefiles.php:99
1778
+ msgid "If you are not sure what this option is for, then you will not want it, and should turn it off."
1779
+ msgstr ""
1780
+
1781
+ #: addons/morefiles.php:99
1782
+ msgid "If using it, enter an absolute path (it is not relative to your WordPress install)."
1783
+ msgstr ""
1784
+
1785
+ #: addons/morefiles.php:101
1786
+ msgid "Be careful what you enter - if you enter / then it really will try to create a zip containing your entire webserver."
1787
+ msgstr ""
1788
+
1789
+ #: addons/morefiles.php:131
1790
+ msgid "If entering multiple files/directories, then separate them with commas."
1791
+ msgstr ""
1792
+
1793
+ #: addons/morefiles.php:178
1794
+ #: addons/morefiles.php:233
1795
  #, php-format
1796
  msgid "No backup of %s directories: there was nothing found to back up"
1797
  msgstr ""
1798
 
1799
+ #: addons/morefiles.php:178
1800
+ msgid "more"
1801
  msgstr ""
1802
 
1803
  #: addons/sftp.php:23
1828
  msgstr ""
1829
 
1830
  #: addons/sftp.php:50
1831
+ #: addons/sftp.php:291
1832
  msgid "Check your file permissions: Could not successfully create and enter:"
1833
  msgstr ""
1834
 
1861
  msgid "Where to change directory to after logging in - often this is relative to your home directory."
1862
  msgstr ""
1863
 
1864
+ #: addons/sftp.php:252
1865
  msgid "host name"
1866
  msgstr ""
1867
 
1868
+ #: addons/sftp.php:256
1869
  msgid "username"
1870
  msgstr ""
1871
 
1872
+ #: addons/sftp.php:260
1873
  msgid "password"
1874
  msgstr ""
1875
 
1876
+ #: addons/sftp.php:265
1877
  msgid "Failure: Port must be an integer."
1878
  msgstr ""
1879
 
1880
+ #: addons/sftp.php:305
1881
  msgid "Failed: We were able to log in and move to the indicated directory, but failed to successfully created a file in that location."
1882
  msgstr ""
1883
 
1891
  msgid "Enter in format HH:MM (e.g. 14:22)"
1892
  msgstr ""
1893
 
1894
+ #: addons/multisite.php:117
1895
  msgid "Multisite Install"
1896
  msgstr ""
1897
 
1898
+ #: addons/multisite.php:123
1899
  msgid "You do not have sufficient permissions to access this page."
1900
  msgstr ""
1901
 
1902
+ #: addons/multisite.php:142
1903
  msgid "You do not have permission to access this page."
1904
  msgstr ""
1905
 
1906
+ #: addons/multisite.php:198
1907
  msgid "Must-use plugins"
1908
  msgstr ""
1909
 
1910
+ #: addons/multisite.php:199
1911
  msgid "Blog uploads"
1912
  msgstr ""
1913
 
1914
+ #: addons/migrator.php:18
1915
+ #, php-format
1916
+ msgid "All references to the site location in the database will be replaced with your current site URL, which is: %s"
1917
+ msgstr ""
1918
+
1919
+ #: addons/migrator.php:18
1920
+ msgid "Search and replace site location in the database (migrate)"
1921
+ msgstr ""
1922
+
1923
+ #: addons/migrator.php:18
1924
+ msgid "(learn more)"
1925
+ msgstr ""
1926
+
1927
+ #: addons/migrator.php:31
1928
+ msgid "Database: search and replace site URL"
1929
+ msgstr ""
1930
+
1931
+ #: addons/migrator.php:34
1932
+ msgid "This option was not selected."
1933
+ msgstr ""
1934
+
1935
+ #: addons/migrator.php:46
1936
+ #: addons/migrator.php:51
1937
+ #, php-format
1938
+ msgid "Error: unexpected empty parameter (%s, %s)"
1939
+ msgstr ""
1940
+
1941
+ #: addons/migrator.php:56
1942
+ #, php-format
1943
+ msgid "Nothing to do: the site URL is already: %s"
1944
+ msgstr ""
1945
+
1946
+ #: addons/migrator.php:64
1947
+ #, php-format
1948
+ msgid "Database search and replace: replace %s in backup dump with %s"
1949
+ msgstr ""
1950
+
1951
+ #: addons/migrator.php:74
1952
+ #, php-format
1953
+ msgid "Failed: the %s operation was not able to start."
1954
+ msgstr ""
1955
+
1956
+ #: addons/migrator.php:78
1957
+ #, php-format
1958
+ msgid "Failed: we did not understand the result returned by the %s operation."
1959
+ msgstr ""
1960
+
1961
+ #: addons/migrator.php:84
1962
+ msgid "Tables examined:"
1963
+ msgstr ""
1964
+
1965
+ #: addons/migrator.php:85
1966
+ msgid "Rows examined:"
1967
+ msgstr ""
1968
+
1969
+ #: addons/migrator.php:86
1970
+ msgid "Changes made:"
1971
+ msgstr ""
1972
+
1973
+ #: addons/migrator.php:87
1974
+ msgid "SQL update commands run:"
1975
+ msgstr ""
1976
+
1977
+ #: addons/migrator.php:88
1978
+ msgid "Errors:"
1979
+ msgstr ""
1980
+
1981
+ #: addons/migrator.php:89
1982
+ msgid "Time taken (seconds):"
1983
+ msgstr ""
1984
+
1985
+ #: addons/migrator.php:166
1986
+ msgid "Could not get list of tables"
1987
+ msgstr ""
1988
+
1989
+ #: addons/migrator.php:178
1990
+ msgid "No database tables were found"
1991
+ msgstr ""
1992
+
1993
+ #: addons/migrator.php:215
1994
+ msgid "Inspecting table:"
1995
+ msgstr ""
1996
+
1997
+ #: addons/migrator.php:244
1998
+ #, php-format
1999
+ msgid "rows: %d"
2000
+ msgstr ""
2001
+
2002
+ #: addons/migrator.php:309
2003
+ #, php-format
2004
+ msgid "\"%s\" has no primary key, manual change needed on row %s."
2005
+ msgstr ""
2006
+
2007
  #: addons/dropbox-folders.php:21
2008
  msgid "Store at"
2009
  msgstr ""
methods/cloudfiles.php CHANGED
@@ -363,7 +363,7 @@ class UpdraftPlus_BackupModule_cloudfiles {
363
  <tr class="updraftplusmethod cloudfiles">
364
  <th></th>
365
  <td>
366
- <p><?php _e('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.','updraftplus');?>. <a href="http://updraftplus.com/faqs/there-appear-to-be-lots-of-extra-files-in-my-rackspace-cloud-files-container/"><?php _e('Also, you should read this important FAQ.', 'updraftplus'); ?></a></p>
367
  </td>
368
  </tr>
369
  <tr class="updraftplusmethod cloudfiles">
363
  <tr class="updraftplusmethod cloudfiles">
364
  <th></th>
365
  <td>
366
+ <p><?php _e('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.','updraftplus');?> <a href="http://updraftplus.com/faqs/there-appear-to-be-lots-of-extra-files-in-my-rackspace-cloud-files-container/"><?php _e('Also, you should read this important FAQ.', 'updraftplus'); ?></a></p>
367
  </td>
368
  </tr>
369
  <tr class="updraftplusmethod cloudfiles">
methods/dropbox.php CHANGED
@@ -59,6 +59,35 @@ class UpdraftPlus_BackupModule_dropbox {
59
 
60
  foreach($backup_array as $file) {
61
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  $file_success = 1;
63
 
64
  $hash = md5($file);
@@ -66,6 +95,13 @@ class UpdraftPlus_BackupModule_dropbox {
66
 
67
  $filesize = filesize($updraft_dir.'/'.$file);
68
  $this->current_file_size = $filesize;
 
 
 
 
 
 
 
69
  // Into Kb
70
  $filesize = $filesize/1024;
71
  $microtime = microtime(true);
@@ -220,7 +256,7 @@ class UpdraftPlus_BackupModule_dropbox {
220
  <td></td>
221
  <td>
222
  <img alt="Dropbox logo" src="<?php echo UPDRAFTPLUS_URL.'/images/dropbox-logo.png' ?>">
223
- <p><em><?php printf(__('%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.','updraftplus'),'Dropbox');?></em></p>
224
  </td>
225
  </tr>
226
 
@@ -295,7 +331,19 @@ class UpdraftPlus_BackupModule_dropbox {
295
  $message .= " (".__('though part of the returned information was not as expected - your mileage may vary','updraftplus').")". $accountInfo['code'];
296
  } else {
297
  $body = $accountInfo['body'];
298
- $message .= ". ".sprintf(__('Your %s account name','updraftplus'),'Dropbox').": ".htmlspecialchars($body->display_name);
 
 
 
 
 
 
 
 
 
 
 
 
299
  }
300
  $updraftplus_admin->show_admin_warning($message);
301
 
59
 
60
  foreach($backup_array as $file) {
61
 
62
+ $available_quota = -1;
63
+
64
+ // If we experience any failures collecting account info, then carry on anyway
65
+ try {
66
+
67
+ $accountInfo = $dropbox->accountInfo();
68
+
69
+ if ($accountInfo['code'] != "200") {
70
+ $message = "Dropbox account/info did not return HTTP 200; returned: ". $accountInfo['code'];
71
+ } elseif (!isset($accountInfo['body'])) {
72
+ $message = "Dropbox account/info did not return the expected data";
73
+ } else {
74
+ $body = $accountInfo['body'];
75
+ if (!isset($body->quota_info)) {
76
+ $message = "Dropbox account/info did not return the expected data";
77
+ } else {
78
+ $quota_info = $body->quota_info;
79
+ $total_quota = $quota_info->quota;
80
+ $normal_quota = $quota_info->normal;
81
+ $shared_quota = $quota_info->shared;
82
+ $available_quota = $total_quota - ($normal_quota + $shared_quota);
83
+ $message = "Dropbox quota usage: normal=".round($normal_quota/1048576,1)." Mb, shared=".round($shared_quota/1048576,1)." Mb, total=".round($total_quota/1048576,1)." Mb, available=".round($available_quota/1048576,1)." Mb";
84
+ }
85
+ }
86
+ $updraftplus->log($message);
87
+ } catch (Exception $e) {
88
+ $updraftplus->log("Dropbox error: exception occurred whilst getting account info: ".$e->getMessage());
89
+ }
90
+
91
  $file_success = 1;
92
 
93
  $hash = md5($file);
95
 
96
  $filesize = filesize($updraft_dir.'/'.$file);
97
  $this->current_file_size = $filesize;
98
+
99
+ // We don't actually abort now - there's no harm in letting it try and then fail
100
+ if ($available_quota != -1 && $available_quota < $filesize) {
101
+ $updraftplus->log("File upload expected to fail: file ($file) size is $filesize b, whereas available quota is only $available_quota b");
102
+ $updraftplus->error(sprintf(__("Account full: your %s account has only %d bytes left, but the file to be uploaded is %d bytes",'updraftplus'),'Dropbox', $available_quota, $filesize));
103
+ }
104
+
105
  // Into Kb
106
  $filesize = $filesize/1024;
107
  $microtime = microtime(true);
256
  <td></td>
257
  <td>
258
  <img alt="Dropbox logo" src="<?php echo UPDRAFTPLUS_URL.'/images/dropbox-logo.png' ?>">
259
+ <p><em><?php printf(__('%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts.','updraftplus'),'Dropbox');?></em></p>
260
  </td>
261
  </tr>
262
 
331
  $message .= " (".__('though part of the returned information was not as expected - your mileage may vary','updraftplus').")". $accountInfo['code'];
332
  } else {
333
  $body = $accountInfo['body'];
334
+ $message .= ". <br>".sprintf(__('Your %s account name: %s','updraftplus'),'Dropbox', htmlspecialchars($body->display_name));
335
+
336
+ try {
337
+ $quota_info = $body->quota_info;
338
+ $total_quota = max($quota_info->quota, 1);
339
+ $normal_quota = $quota_info->normal;
340
+ $shared_quota = $quota_info->shared;
341
+ $available_quota =$total_quota - ($normal_quota + $shared_quota);
342
+ $used_perc = round(($normal_quota + $shared_quota)*100/$total_quota, 1);
343
+ $message .= ' <br>'.sprintf(__('Your %s quota usage: %s %% used, %s available','updraftplus'), 'Dropbox', $used_perc, round($available_quota/1048576, 1).' Mb');
344
+ } catch (Exception $e) {
345
+ }
346
+
347
  }
348
  $updraftplus_admin->show_admin_warning($message);
349
 
methods/ftp.php CHANGED
@@ -3,13 +3,21 @@
3
  class UpdraftPlus_BackupModule_ftp {
4
 
5
  // Get FTP object with parameters set
6
- function getFTP($server, $user, $pass, $disable_ssl = false, $passive = true) {
7
 
8
  if( !class_exists('UpdraftPlus_ftp_wrapper')) require_once(UPDRAFTPLUS_DIR.'/includes/ftp.class.php');
9
 
10
- $ftp = new UpdraftPlus_ftp_wrapper($server, $user, $pass);
 
 
 
 
 
 
11
 
12
  if ($disable_ssl) $ftp->ssl = false;
 
 
13
  if ($passive) $ftp->passive = true;
14
 
15
  return $ftp;
@@ -23,7 +31,13 @@ class UpdraftPlus_BackupModule_ftp {
23
  $server = UpdraftPlus_Options::get_updraft_option('updraft_server_address');
24
  $user = UpdraftPlus_Options::get_updraft_option('updraft_ftp_login');
25
 
26
- $ftp = $this->getFTP($server, $user, UpdraftPlus_Options::get_updraft_option('updraft_ftp_pass'), UpdraftPlus_Options::get_updraft_option('updraft_ssl_nossl'));
 
 
 
 
 
 
27
 
28
  if (!$ftp->connect()) {
29
  $updraftplus->log("FTP Failure: we did not successfully log in with those credentials.");
@@ -72,7 +86,9 @@ class UpdraftPlus_BackupModule_ftp {
72
  $ftp = $this->getFTP(
73
  UpdraftPlus_Options::get_updraft_option('updraft_server_address'),
74
  UpdraftPlus_Options::get_updraft_option('updraft_ftp_login'),
75
- UpdraftPlus_Options::get_updraft_option('updraft_ftp_pass'), UpdraftPlus_Options::get_updraft_option('updraft_ssl_nossl')
 
 
76
  );
77
 
78
  if (!$ftp->connect()) {
@@ -112,7 +128,7 @@ class UpdraftPlus_BackupModule_ftp {
112
  nossl: (jQuery('#updraft_ssl_nossl').is(':checked')) ? 1 : 0,
113
  };
114
  jQuery.post(ajaxurl, data, function(response) {
115
- alert('<?php _e('Settings test result','updraftplus');?>: ' + response);
116
  });
117
  });
118
  <?php
@@ -123,12 +139,12 @@ class UpdraftPlus_BackupModule_ftp {
123
 
124
  <tr class="updraftplusmethod ftp">
125
  <td></td>
126
- <td><p><em><?php printf(__('%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.','updraftplus'),'FTP');?></em></p></td>
127
  </tr>
128
 
129
  <tr class="updraftplusmethod ftp">
130
  <th></th>
131
- <td><em><?php echo apply_filters('updraft_sftp_ftps_notice', '<strong>'.htmlspecialchars(__('Only non-encrypted FTP is supported by regular UpdraftPlus.').'</strong> <a href="http://updraftplus.com/shop/sftp/">'.__('If you want encryption (e.g. you are storing sensitive business data), then an add-on is available.','updraftplus'))).'</a>'; ?></em></td>
132
  </tr>
133
 
134
  <tr class="updraftplusmethod ftp">
@@ -162,6 +178,9 @@ class UpdraftPlus_BackupModule_ftp {
162
  $path = $_POST['path'];
163
  $nossl = $_POST['nossl'];
164
 
 
 
 
165
  if (empty($server)) {
166
  _e("Failure: No server details were given.",'updraftplus');
167
  return;
@@ -175,7 +194,7 @@ class UpdraftPlus_BackupModule_ftp {
175
  return;
176
  }
177
 
178
- $ftp = self::getFTP($server, $login, $pass, $nossl);
179
 
180
  if (!$ftp->connect()) {
181
  _e("Failure: we did not successfully log in with those credentials.",'updraftplus');
@@ -189,7 +208,7 @@ class UpdraftPlus_BackupModule_ftp {
189
  _e("Failure: an unexpected internal UpdraftPlus error occurred when testing the credentials - please contact the developer");
190
  return;
191
  }
192
- if ($ftp->put(ABSPATH.'wp-includes/version.php', $fullpath, FTP_BINARY, false)) {
193
  echo __("Success: we successfully logged in, and confirmed our ability to create a file in the given directory (login type:",'updraftplus')." ".$ftp->login_type.')';
194
  @$ftp->delete($fullpath);
195
  } else {
3
  class UpdraftPlus_BackupModule_ftp {
4
 
5
  // Get FTP object with parameters set
6
+ function getFTP($server, $user, $pass, $disable_ssl = false, $disable_verify = true, $use_server_certs = false, $passive = true) {
7
 
8
  if( !class_exists('UpdraftPlus_ftp_wrapper')) require_once(UPDRAFTPLUS_DIR.'/includes/ftp.class.php');
9
 
10
+ $port = 21;
11
+ if (preg_match('/^(.*):(\d+)$/', $server, $matches)) {
12
+ $server = $matches[1];
13
+ $port = $matches[2];
14
+ }
15
+
16
+ $ftp = new UpdraftPlus_ftp_wrapper($server, $user, $pass, $port);
17
 
18
  if ($disable_ssl) $ftp->ssl = false;
19
+ $ftp->use_server_certs = $use_server_certs;
20
+ $ftp->disable_verify = $disable_verify;
21
  if ($passive) $ftp->passive = true;
22
 
23
  return $ftp;
31
  $server = UpdraftPlus_Options::get_updraft_option('updraft_server_address');
32
  $user = UpdraftPlus_Options::get_updraft_option('updraft_ftp_login');
33
 
34
+ $ftp = $this->getFTP(
35
+ $server,
36
+ $user,
37
+ UpdraftPlus_Options::get_updraft_option('updraft_ftp_pass'), UpdraftPlus_Options::get_updraft_option('updraft_ssl_nossl'),
38
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_disableverify'),
39
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_useservercerts')
40
+ );
41
 
42
  if (!$ftp->connect()) {
43
  $updraftplus->log("FTP Failure: we did not successfully log in with those credentials.");
86
  $ftp = $this->getFTP(
87
  UpdraftPlus_Options::get_updraft_option('updraft_server_address'),
88
  UpdraftPlus_Options::get_updraft_option('updraft_ftp_login'),
89
+ UpdraftPlus_Options::get_updraft_option('updraft_ftp_pass'), UpdraftPlus_Options::get_updraft_option('updraft_ssl_nossl'),
90
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_disableverify'),
91
+ UpdraftPlus_Options::get_updraft_option('updraft_ssl_useservercerts')
92
  );
93
 
94
  if (!$ftp->connect()) {
128
  nossl: (jQuery('#updraft_ssl_nossl').is(':checked')) ? 1 : 0,
129
  };
130
  jQuery.post(ajaxurl, data, function(response) {
131
+ alert('<?php _e('Settings test result','updraftplus');?>: ' + response);
132
  });
133
  });
134
  <?php
139
 
140
  <tr class="updraftplusmethod ftp">
141
  <td></td>
142
+ <td><p><em><?php printf(__('%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts.','updraftplus'),'FTP');?></em></p></td>
143
  </tr>
144
 
145
  <tr class="updraftplusmethod ftp">
146
  <th></th>
147
+ <td><em><?php echo apply_filters('updraft_sftp_ftps_notice', '<strong>'.htmlspecialchars(__('Only non-encrypted FTP is supported by regular UpdraftPlus.')).'</strong> <a href="http://updraftplus.com/shop/sftp/">'.__('If you want encryption (e.g. you are storing sensitive business data), then an add-on is available.','updraftplus')).'</a>'; ?></em></td>
148
  </tr>
149
 
150
  <tr class="updraftplusmethod ftp">
178
  $path = $_POST['path'];
179
  $nossl = $_POST['nossl'];
180
 
181
+ $disable_verify = $_POST['disableverify'];
182
+ $use_server_certs = $_POST['useservercerts'];
183
+
184
  if (empty($server)) {
185
  _e("Failure: No server details were given.",'updraftplus');
186
  return;
194
  return;
195
  }
196
 
197
+ $ftp = self::getFTP($server, $login, $pass, $nossl, $disable_verify, $use_server_certs);
198
 
199
  if (!$ftp->connect()) {
200
  _e("Failure: we did not successfully log in with those credentials.",'updraftplus');
208
  _e("Failure: an unexpected internal UpdraftPlus error occurred when testing the credentials - please contact the developer");
209
  return;
210
  }
211
+ if ($ftp->put(ABSPATH.'wp-includes/version.php', $fullpath, FTP_BINARY, false, true)) {
212
  echo __("Success: we successfully logged in, and confirmed our ability to create a file in the given directory (login type:",'updraftplus')." ".$ftp->login_type.')';
213
  @$ftp->delete($fullpath);
214
  } else {
methods/googledrive.php CHANGED
@@ -3,11 +3,13 @@
3
  class UpdraftPlus_BackupModule_googledrive {
4
 
5
  var $gdocs;
6
- var $gdocs_access_token;
7
 
8
  public static function action_auth() {
9
  if ( isset( $_GET['state'] ) ) {
10
- if ( $_GET['state'] == 'token' )
 
 
 
11
  self::gdrive_auth_token();
12
  elseif ( $_GET['state'] == 'revoke' )
13
  self::gdrive_auth_revoke();
@@ -51,7 +53,7 @@ class UpdraftPlus_BackupModule_googledrive {
51
  'response_type' => 'code',
52
  'client_id' => UpdraftPlus_Options::get_updraft_option('updraft_googledrive_clientid'),
53
  'redirect_uri' => admin_url('options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth'),
54
- 'scope' => 'https://www.googleapis.com/auth/drive.file https://docs.google.com/feeds/ https://docs.googleusercontent.com/ https://spreadsheets.google.com/feeds/',
55
  'state' => 'token',
56
  'access_type' => 'offline',
57
  'approval_prompt' => 'force'
@@ -91,8 +93,18 @@ class UpdraftPlus_BackupModule_googledrive {
91
  } else {
92
  $json_values = json_decode( $result['body'], true );
93
  if ( isset( $json_values['refresh_token'] ) ) {
94
- UpdraftPlus_Options::update_updraft_option('updraft_googledrive_token', $json_values['refresh_token']); // Save token
95
- header('Location: '.admin_url('options-general.php?page=updraftplus&message='.__('Success','updraftplus').': '.sprintf(__('you have authenticated your %s account','updraftplus'),__('Google Drive','updraftplus'))));
 
 
 
 
 
 
 
 
 
 
96
 
97
  }
98
  else {
@@ -101,10 +113,39 @@ class UpdraftPlus_BackupModule_googledrive {
101
  }
102
  }
103
  else {
104
- header('Location: '.admin_url('options-general.php?page=updraftplus&error=' . __( 'Authorization failed', 'updraftplus' ) ) );
105
  }
106
  }
107
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  // This function just does the formalities, and off-loads the main work to upload_file
109
  function backup($backup_array) {
110
 
@@ -119,14 +160,38 @@ class UpdraftPlus_BackupModule_googledrive {
119
  return new WP_Error( "no_access_token", __("Have not yet obtained an access token from Google (has the user authorised?)",'updraftplus'));
120
  }
121
 
122
- $this->gdocs_access_token = $access_token;
123
-
124
  $updraft_dir = $updraftplus->backups_dir_location().'/';
125
 
 
 
 
 
126
  foreach ($backup_array as $file) {
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  $file_path = $updraft_dir.$file;
128
  $file_name = basename($file_path);
129
  $updraftplus->log("$file_name: Attempting to upload to Google Drive");
 
 
 
 
 
 
 
 
 
130
  $timer_start = microtime(true);
131
  if ( $id = $this->upload_file( $file_path, $file_name, UpdraftPlus_Options::get_updraft_option('updraft_googledrive_remotepath')) ) {
132
  $updraftplus->log('OK: Archive ' . $file_name . ' uploaded to Google Drive in ' . ( round(microtime( true ) - $timer_start,2) ) . ' seconds (id: '.$id.')' );
@@ -166,8 +231,6 @@ class UpdraftPlus_BackupModule_googledrive {
166
 
167
  global $updraftplus;
168
 
169
- // Make sure $this->gdocs is a UpdraftPlus_GDocs object, or give an error
170
- if ( is_wp_error( $e = $this->need_gdocs() ) ) return false;
171
  $gdocs_object = $this->gdocs;
172
 
173
  $hash = md5($file);
@@ -222,8 +285,8 @@ class UpdraftPlus_BackupModule_googledrive {
222
  // echo '</div>';
223
 
224
  if ( is_wp_error( $res ) || $res !== true) {
225
- $updraftplus->log( "An error occurred during GoogleDrive upload (2)" );
226
- $updraftplus->error(__("An error occurred during GoogleDrive upload (see log for more details)",'') );
227
  if (is_wp_error( $res )) {
228
  foreach ($res->get_error_messages() as $msg) $updraftplus->log($msg);
229
  }
@@ -256,10 +319,8 @@ class UpdraftPlus_BackupModule_googledrive {
256
  return false;
257
  }
258
 
259
- $this->gdocs_access_token = $access_token;
260
-
261
  // Make sure $this->gdocs is a UpdraftPlus_GDocs object, or give an error
262
- if ( is_wp_error( $e = $this->need_gdocs() ) ) return false;
263
  $gdocs_object = $this->gdocs;
264
 
265
  $ids = UpdraftPlus_Options::get_updraft_option('updraft_file_ids', array());
@@ -292,7 +353,7 @@ class UpdraftPlus_BackupModule_googledrive {
292
  }
293
 
294
  // This function modified from wordpress.org/extend/plugins/backup, by Sorin Iclanzan, under the GPLv3 or later at your choice
295
- function need_gdocs() {
296
 
297
  global $updraftplus;
298
 
@@ -302,9 +363,9 @@ class UpdraftPlus_BackupModule_googledrive {
302
  return new WP_Error( "not_authorized", __("Account is not authorized.",'updraftplus') );
303
  }
304
 
305
- if ( is_wp_error( $this->gdocs_access_token ) ) return $access_token;
306
 
307
- $this->gdocs = new UpdraftPlus_GDocs( $this->gdocs_access_token );
308
  // We need to be able to upload at least one chunk within the timeout (at least, we have seen an error report where the failure to do this seemed to be the cause)
309
  // If we assume a user has at least 16kb/s (we saw one user with as low as 22kb/s), and that their provider may allow them only 15s, then we have the following settings
310
  $this->gdocs->set_option( 'chunk_size', 0.2 ); # 0.2Mb; change from default of 512Kb
@@ -331,14 +392,14 @@ class UpdraftPlus_BackupModule_googledrive {
331
  <td><?php _e('Google Drive','updraftplus');?>:</td>
332
  <td>
333
  <img src="https://developers.google.com/drive/images/drive_logo.png" alt="<?php _e('Google Drive','updraftplus');?>">
334
- <p><em><?php printf(__('%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.','updraftplus'),'Google Drive');?></em></p>
335
  </td>
336
  </tr>
337
  <tr class="updraftplusmethod googledrive">
338
  <th>Google Drive:</th>
339
  <td>
340
  <p><a href="http://updraftplus.com/support/configuring-google-drive-api-access-in-updraftplus/"><strong><?php _e('For longer help, including screenshots, follow this link. The description below is sufficient for more expert users.','updraftplus');?></strong></a></p>
341
- <p><a href="https://code.google.com/apis/console/"><?php _e('Follow this link to your Google API Console, and there create a Client ID in the API Access section.','updraftplus');?></a> <?php _e("Select 'Web Application' as the application type.",'updraftplus');?></p><p><?php echo htmlspecialchars(__('You must add the following as the authorised redirect URI (under "More Options") when asked','updraftplus'));?>: <kbd><?php echo admin_url('options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth'); ?></kbd> <?php _e('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.','updraftplus');?>
342
 
343
  <?php
344
  if (!class_exists('SimpleXMLElement')) { echo "<b>",__('Warning','updraftplus').':</b> '.__("You do not have the SimpleXMLElement installed. Google Drive backups will <b>not</b> work until you do.",'updraftplus'); }
@@ -356,7 +417,7 @@ class UpdraftPlus_BackupModule_googledrive {
356
  <td><input type="text" style="width:352px" name="updraft_googledrive_secret" value="<?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_googledrive_secret')); ?>" /></td>
357
  </tr>
358
  <tr class="updraftplusmethod googledrive">
359
- <th><?php echo __('Google Drive','updraftplus').' '.__('Folder ID','updraftplus'); ?>::</th>
360
  <td><input type="text" style="width:352px" name="updraft_googledrive_remotepath" value="<?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_googledrive_remotepath')); ?>" /> <em><?php _e("<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)",'updraftplus');?></em></td>
361
  </tr>
362
  <tr class="updraftplusmethod googledrive">
3
  class UpdraftPlus_BackupModule_googledrive {
4
 
5
  var $gdocs;
 
6
 
7
  public static function action_auth() {
8
  if ( isset( $_GET['state'] ) ) {
9
+ if ( $_GET['state'] == 'success') {
10
+ add_action('admin_notices', array('UpdraftPlus_BackupModule_googledrive', 'show_authed_admin_success') );
11
+ }
12
+ elseif ( $_GET['state'] == 'token' )
13
  self::gdrive_auth_token();
14
  elseif ( $_GET['state'] == 'revoke' )
15
  self::gdrive_auth_revoke();
53
  'response_type' => 'code',
54
  'client_id' => UpdraftPlus_Options::get_updraft_option('updraft_googledrive_clientid'),
55
  'redirect_uri' => admin_url('options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth'),
56
+ 'scope' => 'https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/drive.file https://docs.google.com/feeds/ https://docs.googleusercontent.com/ https://spreadsheets.google.com/feeds/',
57
  'state' => 'token',
58
  'access_type' => 'offline',
59
  'approval_prompt' => 'force'
93
  } else {
94
  $json_values = json_decode( $result['body'], true );
95
  if ( isset( $json_values['refresh_token'] ) ) {
96
+
97
+ // Save token
98
+ UpdraftPlus_Options::update_updraft_option('updraft_googledrive_token', $json_values['refresh_token']);
99
+
100
+ if ( isset($json_values['access_token'])) {
101
+
102
+ set_transient('updraftplus_tmp_googledrive_access_token', $json_values['access_token'], 3600);
103
+
104
+ // We do this to clear the GET parameters, otherwise WordPress sticks them in the _wp_referer in the form and brings them back, leading to confusion + errors
105
+ header('Location: '.admin_url('options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth&state=success'));
106
+
107
+ }
108
 
109
  }
110
  else {
113
  }
114
  }
115
  else {
116
+ header('Location: '.admin_url('options-general.php?page=updraftplus&error='. __( 'Authorization failed', 'updraftplus' ) ) );
117
  }
118
  }
119
 
120
+ function show_authed_admin_success() {
121
+
122
+ global $updraftplus_admin;
123
+
124
+ $updraftplus_tmp_access_token = get_transient('updraftplus_tmp_googledrive_access_token');
125
+ if (empty($updraftplus_tmp_access_token)) return;
126
+
127
+ $message = '';
128
+ try {
129
+ if( !class_exists('UpdraftPlus_GDocs')) require_once(UPDRAFTPLUS_DIR.'/includes/class-gdocs.php');
130
+ $x = new UpdraftPlus_BackupModule_googledrive;
131
+ if ( !is_wp_error( $e = $x->need_gdocs($updraftplus_tmp_access_token) ) ) {
132
+ $quota_total = max($x->gdocs->get_quota_total(), 1);
133
+ $quota_used = $x->gdocs->get_quota_used();
134
+ if (is_numeric($quota_total) && is_numeric($quota_used)) {
135
+ $available_quota = $quota_total - $quota_used;
136
+ $used_perc = round($quota_used*100/$quota_total, 1);
137
+ $message .= sprintf(__('Your %s quota usage: %s %% used, %s available','updraftplus'), 'Google Drive', $used_perc, round($available_quota/1048576, 1).' Mb');
138
+ }
139
+ }
140
+ } catch (Exception $e) {
141
+ }
142
+
143
+ $updraftplus_admin->show_admin_warning(__('Success','updraftplus').': '.sprintf(__('you have authenticated your %s account.','updraftplus'),__('Google Drive','updraftplus')).' '.$message);
144
+
145
+ delete_transient('updraftplus_tmp_googledrive_access_token');
146
+
147
+ }
148
+
149
  // This function just does the formalities, and off-loads the main work to upload_file
150
  function backup($backup_array) {
151
 
160
  return new WP_Error( "no_access_token", __("Have not yet obtained an access token from Google (has the user authorised?)",'updraftplus'));
161
  }
162
 
 
 
163
  $updraft_dir = $updraftplus->backups_dir_location().'/';
164
 
165
+ // Make sure $this->gdocs is a UpdraftPlus_GDocs object, or give an error
166
+ if ( is_wp_error( $e = $this->need_gdocs($access_token) ) ) return false;
167
+ $gdocs_object = $this->gdocs;
168
+
169
  foreach ($backup_array as $file) {
170
+
171
+ $available_quota = -1;
172
+
173
+ try {
174
+ $quota_total = $gdocs_object->get_quota_total();
175
+ $quota_used = $gdocs_object->get_quota_used();
176
+ $available_quota = $quota_total - $quota_used;
177
+ $message = "Google Drive quota usage: used=".round($quota_used/1048576,1)." Mb, total=".round($quota_total/1048576,1)." Mb, available=".round($available_quota/1048576,1)." Mb";
178
+ $updraftplus->log($message);
179
+ } catch (Exception $e) {
180
+ $updraftplus->log("Google Drive quota usage: failed to obtain this information: ".$e->getMessage());
181
+ }
182
+
183
  $file_path = $updraft_dir.$file;
184
  $file_name = basename($file_path);
185
  $updraftplus->log("$file_name: Attempting to upload to Google Drive");
186
+
187
+ if ($available_quota != -1) {
188
+ $filesize = filesize($file_path);
189
+ if ($filesize > $available_quota) {
190
+ $updraftplus->log("File upload expected to fail: file ($file_name) size is $filesize b, whereas available quota is only $available_quota b");
191
+ $updraftplus->error(sprintf(__("Account full: your %s account has only %d bytes left, but the file to be uploaded is %d bytes",'updraftplus'),'Google Drive', $available_quota, $filesize));
192
+ }
193
+ }
194
+
195
  $timer_start = microtime(true);
196
  if ( $id = $this->upload_file( $file_path, $file_name, UpdraftPlus_Options::get_updraft_option('updraft_googledrive_remotepath')) ) {
197
  $updraftplus->log('OK: Archive ' . $file_name . ' uploaded to Google Drive in ' . ( round(microtime( true ) - $timer_start,2) ) . ' seconds (id: '.$id.')' );
231
 
232
  global $updraftplus;
233
 
 
 
234
  $gdocs_object = $this->gdocs;
235
 
236
  $hash = md5($file);
285
  // echo '</div>';
286
 
287
  if ( is_wp_error( $res ) || $res !== true) {
288
+ $updraftplus->log( "An error occurred during Google Drive upload (2)" );
289
+ $updraftplus->error(sprintf(__("An error occurred during %s upload (see log for more details)",'updraftplus'), 'Google Drive'));
290
  if (is_wp_error( $res )) {
291
  foreach ($res->get_error_messages() as $msg) $updraftplus->log($msg);
292
  }
319
  return false;
320
  }
321
 
 
 
322
  // Make sure $this->gdocs is a UpdraftPlus_GDocs object, or give an error
323
+ if ( is_wp_error( $e = $this->need_gdocs($access_token) ) ) return false;
324
  $gdocs_object = $this->gdocs;
325
 
326
  $ids = UpdraftPlus_Options::get_updraft_option('updraft_file_ids', array());
353
  }
354
 
355
  // This function modified from wordpress.org/extend/plugins/backup, by Sorin Iclanzan, under the GPLv3 or later at your choice
356
+ function need_gdocs($access_token) {
357
 
358
  global $updraftplus;
359
 
363
  return new WP_Error( "not_authorized", __("Account is not authorized.",'updraftplus') );
364
  }
365
 
366
+ if ( is_wp_error($access_token) ) return $access_token;
367
 
368
+ $this->gdocs = new UpdraftPlus_GDocs($access_token);
369
  // We need to be able to upload at least one chunk within the timeout (at least, we have seen an error report where the failure to do this seemed to be the cause)
370
  // If we assume a user has at least 16kb/s (we saw one user with as low as 22kb/s), and that their provider may allow them only 15s, then we have the following settings
371
  $this->gdocs->set_option( 'chunk_size', 0.2 ); # 0.2Mb; change from default of 512Kb
392
  <td><?php _e('Google Drive','updraftplus');?>:</td>
393
  <td>
394
  <img src="https://developers.google.com/drive/images/drive_logo.png" alt="<?php _e('Google Drive','updraftplus');?>">
395
+ <p><em><?php printf(__('%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts.','updraftplus'),'Google Drive');?></em></p>
396
  </td>
397
  </tr>
398
  <tr class="updraftplusmethod googledrive">
399
  <th>Google Drive:</th>
400
  <td>
401
  <p><a href="http://updraftplus.com/support/configuring-google-drive-api-access-in-updraftplus/"><strong><?php _e('For longer help, including screenshots, follow this link. The description below is sufficient for more expert users.','updraftplus');?></strong></a></p>
402
+ <p><a href="https://code.google.com/apis/console/"><?php _e('Follow this link to your Google API Console, and there create a Client ID in the API Access section.','updraftplus');?></a> <?php _e("Select 'Web Application' as the application type.",'updraftplus');?></p><p><?php echo htmlspecialchars(__('You must add the following as the authorised redirect URI (under "More Options") when asked','updraftplus'));?>: <kbd><?php echo admin_url('options-general.php?page=updraftplus&action=updraftmethod-googledrive-auth'); ?></kbd> <?php _e('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 site.','updraftplus');?>
403
 
404
  <?php
405
  if (!class_exists('SimpleXMLElement')) { echo "<b>",__('Warning','updraftplus').':</b> '.__("You do not have the SimpleXMLElement installed. Google Drive backups will <b>not</b> work until you do.",'updraftplus'); }
417
  <td><input type="text" style="width:352px" name="updraft_googledrive_secret" value="<?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_googledrive_secret')); ?>" /></td>
418
  </tr>
419
  <tr class="updraftplusmethod googledrive">
420
+ <th><?php echo __('Google Drive','updraftplus').' '.__('Folder ID','updraftplus'); ?>:</th>
421
  <td><input type="text" style="width:352px" name="updraft_googledrive_remotepath" value="<?php echo htmlspecialchars(UpdraftPlus_Options::get_updraft_option('updraft_googledrive_remotepath')); ?>" /> <em><?php _e("<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)",'updraftplus');?></em></td>
422
  </tr>
423
  <tr class="updraftplusmethod googledrive">
methods/s3.php CHANGED
@@ -276,7 +276,7 @@ class UpdraftPlus_BackupModule_s3 {
276
  ?>
277
  <tr class="updraftplusmethod s3">
278
  <td></td>
279
- <td><img src="https://d36cz9buwru1tt.cloudfront.net/Powered-by-Amazon-Web-Services.jpg" alt="Amazon Web Services"><p><em><?php printf(__('%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.','updraftplus'),'Amazon S3');?></em></p></td>
280
  </tr>
281
  <tr class="updraftplusmethod s3">
282
  <th></th>
276
  ?>
277
  <tr class="updraftplusmethod s3">
278
  <td></td>
279
+ <td><img src="https://d36cz9buwru1tt.cloudfront.net/Powered-by-Amazon-Web-Services.jpg" alt="Amazon Web Services"><p><em><?php printf(__('%s is a great choice, because UpdraftPlus supports chunked uploads - no matter how big your site is, UpdraftPlus can upload it a little at a time, and not get thwarted by timeouts.','updraftplus'),'Amazon S3');?></em></p></td>
280
  </tr>
281
  <tr class="updraftplusmethod s3">
282
  <th></th>
options.php CHANGED
@@ -63,7 +63,7 @@ class UpdraftPlus_Options {
63
 
64
  register_setting('updraft-options-group', 'updraft_googledrive_clientid', array($updraftplus, 'googledrive_clientid_checkchange') );
65
  register_setting('updraft-options-group', 'updraft_googledrive_secret' );
66
- register_setting('updraft-options-group', 'updraft_googledrive_remotepath' );
67
 
68
  register_setting('updraft-options-group', 'updraft_ftp_login' );
69
  register_setting('updraft-options-group', 'updraft_ftp_pass' );
@@ -78,6 +78,9 @@ class UpdraftPlus_Options {
78
  register_setting('updraft-options-group', 'updraft_include_uploads', 'absint' );
79
  register_setting('updraft-options-group', 'updraft_include_others', 'absint' );
80
  register_setting('updraft-options-group', 'updraft_include_wpcore', 'absint' );
 
 
 
81
  register_setting('updraft-options-group', 'updraft_include_others_exclude' );
82
 
83
  register_setting('updraft-options-group', 'updraft_starttime_files', array('UpdraftPlus_Options', 'hourminute') );
63
 
64
  register_setting('updraft-options-group', 'updraft_googledrive_clientid', array($updraftplus, 'googledrive_clientid_checkchange') );
65
  register_setting('updraft-options-group', 'updraft_googledrive_secret' );
66
+ register_setting('updraft-options-group', 'updraft_googledrive_remotepath', array($updraftplus_admin, 'googledrive_remove_folderurlprefix') );
67
 
68
  register_setting('updraft-options-group', 'updraft_ftp_login' );
69
  register_setting('updraft-options-group', 'updraft_ftp_pass' );
78
  register_setting('updraft-options-group', 'updraft_include_uploads', 'absint' );
79
  register_setting('updraft-options-group', 'updraft_include_others', 'absint' );
80
  register_setting('updraft-options-group', 'updraft_include_wpcore', 'absint' );
81
+ register_setting('updraft-options-group', 'updraft_include_wpcore_exclude' );
82
+ register_setting('updraft-options-group', 'updraft_include_more', 'absint' );
83
+ register_setting('updraft-options-group', 'updraft_include_more_path' );
84
  register_setting('updraft-options-group', 'updraft_include_others_exclude' );
85
 
86
  register_setting('updraft-options-group', 'updraft_starttime_files', array('UpdraftPlus_Options', 'hourminute') );
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: DavidAnderson
3
  Tags: backup, restore, database, rackspace, amazon, s3, dropbox, google drive, ftp, webdav, back up, multisite
4
  Requires at least: 3.1
5
  Tested up to: 3.5.1
6
- Stable tag: 1.5.22
7
  Author URI: http://updraftplus.com
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
@@ -14,6 +14,8 @@ Easy and complete backups and restoration. Manual or automated backups (Amazon S
14
 
15
  <a href="http://updraftplus.com">UpdraftPlus</a> simplifies backups (and restoration). Backup into the cloud (Amazon S3, Dropbox, Google Drive, Rackspace Cloud, FTP, SFTP, WebDAV and email) and restore with a single click. Backups of files and database can have separate schedules.
16
 
 
 
17
  * Supports backups to Amazon S3, Dropbox, Google Drive, Rackspace Cloud Files, FTP (including SSL), email, SFTP and WebDAV
18
  * Quick restore (both file and database backups)
19
  * Backup automatically on a repeating schedule
@@ -24,7 +26,6 @@ Easy and complete backups and restoration. Manual or automated backups (Amazon S
24
  * Download backup archives direct from your WordPress dashboard
25
  * Database backups can be encrypted for security
26
  * Debug mode that gives full logging of the backup
27
- * Thousands of users: widely tested and reliable (over 100,000 downloads)
28
  * Internationalised (translations very welcome - see below)
29
  * Premium version and support available - <a href="http://updraftplus.com">http://updraftplus.com</a>
30
  * Tested and supported on all current PHP versions (5.2, 5.3, 5.4)
@@ -51,7 +52,8 @@ Many thanks to the existing translators:
51
 
52
  * Deutsch / German (de_DE): Marcel Herrguth - mherrguth@mrgeneration.de
53
  * Magyar / Hungarian (hu_HU): Szépe Viktor - http://www.szepe.net
54
- * Spanish / Español (es_ES): Fernando Villasmil - villasmil.fernando@gmail.com
 
55
 
56
  = Other support =
57
 
@@ -73,7 +75,7 @@ Check out <a href="http://updraftplus.com/updraftplus-full-feature-list/">our fu
73
 
74
  Firstly, please make sure you read this FAQ through to the end - it may already have the answer you need. If it does, then please consider a donation (http://david.dw-perspective.org.uk/donate); it takes time to develop this plugin and FAQ.
75
 
76
- If it does not, then contact me! This is a complex plugin and the only way I can ensure it's robust is to get bug reports and fix the problems that crop up. Please make sure you are using the latest version of the plugin, and that you include the version in your bug report - if you are not using the latest, then the first thing you will be asked to do is upgrade.
77
 
78
  Please turn on debugging mode (in the UpdraftPlus options page) and then try again, and after that send me the log if you can find it (there are links to download logs on the UpdraftPlus settings page; or you may be emailed it; failing that, it is in the directory wp-content/updraft, so FTP in and look for it there). If you cannot find the log, then I may not be able to help so much, but you can try - include as much information as you can when reporting (PHP version, your blog's site, the error you saw and how you got to the page that caused it, etcetera).
79
 
@@ -91,6 +93,10 @@ After you have set up UpdraftPlus, you must check that your backups are taking p
91
 
92
  UpdraftPlus supports resuming backup runs right from the beginning, so that it does not need to do everything in a single go; but this has limits. If your website is huge and your web hosting company gives your tiny resources on an over-loaded server, then your solution is to purchase better web hosting, or to hire me professionally. Otherwise, this is not considered a bug. UpdraftPlus is known to successfully back up websites that run into the gigabytes on web servers that are not resource-starved.
93
 
 
 
 
 
94
  = How is this better than the original Updraft? =
95
 
96
  You can check the changelog for changes; but the original Updraft, before I forked it, had three major problems. Firstly, it only backed up WP core tables from the database; if any of your plugins stored data in extra tables, then they were not backed up. Secondly, it only backed up your plugins/themes/uploads and not any further directories inside wp-content that other plugins might have created. Thirdly, the database backup did not include charset information, which meant that you needed to know some SQL wizardry to actually be able to use the backup. I made UpdraftPlus out of my experience of trying to back up several sites with Updraft. Then, I added encryption for the database file for extra peace of mind, and future-proofed by getting rid of some deprecated aspects. Since then, many new features have been added, e.g. resuming of failed uploads, and Dropbox support.
@@ -113,6 +119,23 @@ Thanks for asking - yes, I have. Check out my profile page - http://profiles.wor
113
 
114
  == Changelog ==
115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
116
  = 1.5.22 - 04/16/2013 =
117
  * FIX: 1.5.21 broke Dropbox authentication for some users. Upgrade if you had that issue.
118
 
@@ -400,17 +423,20 @@ Thanks for asking - yes, I have. Check out my profile page - http://profiles.wor
400
 
401
  3. Showing and downloading backup sets
402
 
403
- We recognise and thank the following for code and/or libraries used and/or modified under the terms of their licences:
 
404
  * UpdraftPlus is derived from the original Updraft by Paul Kehrer (Twitter: http://twitter.com/reaperhulk, Blog: http://langui.sh)
405
  * Sorin Iclanzan, http://profiles.wordpress.org/hel.io/
406
  * Ben Tadiar, https://github.com/BenTheDesigner/Dropbox
407
  * Beau Brownlee, http://www.solutionbot.com/2009/01/02/php-ftp-class/
408
  * Donovan Schonknecht, http://undesigned.org.za/2007/10/22/amazon-s3-php-class
 
 
 
409
 
410
  == License ==
411
 
412
- Portions copyright 2011-3 David Anderson
413
- Portions copyright 2010 Paul Kehrer
414
 
415
  This program is free software; you can redistribute it and/or modify
416
  it under the terms of the GNU General Public License as published by
@@ -429,4 +455,4 @@ We recognise and thank the following for code and/or libraries used and/or modif
429
  Furthermore, reliance upon any non-English translation is at your own risk. UpdraftPlus can give no guarantees that translations from the original English are accurate.
430
 
431
  == Upgrade Notice ==
432
- 1.5.21: New features: restore database, Rackspace Cloud Files, multi-uploader of external backups, drag-and-drop decrypter, translations, algorithm improvements, tweaks, bug fixes - recommended upgrade for all. 1.5.22: Version 1.5.21 broke Dropbox authentication for some users. Upgrade if you had that issue.
3
  Tags: backup, restore, database, rackspace, amazon, s3, dropbox, google drive, ftp, webdav, back up, multisite
4
  Requires at least: 3.1
5
  Tested up to: 3.5.1
6
+ Stable tag: 1.6.1
7
  Author URI: http://updraftplus.com
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
14
 
15
  <a href="http://updraftplus.com">UpdraftPlus</a> simplifies backups (and restoration). Backup into the cloud (Amazon S3, Dropbox, Google Drive, Rackspace Cloud, FTP, SFTP, WebDAV and email) and restore with a single click. Backups of files and database can have separate schedules.
16
 
17
+ * Thousands of users: widely tested and reliable (over 120,000 downloads). Ranks 102 on rankwp.com out of 24,000 plugins (top 0.5%).
18
+ * Top-quality: ranks 38th out of 24,000 plugins for quality on rankwp.com (top 0.25% - last checked 26th April 2013).
19
  * Supports backups to Amazon S3, Dropbox, Google Drive, Rackspace Cloud Files, FTP (including SSL), email, SFTP and WebDAV
20
  * Quick restore (both file and database backups)
21
  * Backup automatically on a repeating schedule
26
  * Download backup archives direct from your WordPress dashboard
27
  * Database backups can be encrypted for security
28
  * Debug mode that gives full logging of the backup
 
29
  * Internationalised (translations very welcome - see below)
30
  * Premium version and support available - <a href="http://updraftplus.com">http://updraftplus.com</a>
31
  * Tested and supported on all current PHP versions (5.2, 5.3, 5.4)
52
 
53
  * Deutsch / German (de_DE): Marcel Herrguth - mherrguth@mrgeneration.de
54
  * Magyar / Hungarian (hu_HU): Szépe Viktor - http://www.szepe.net
55
+ * Español / Spanish (es_ES): Fernando Villasmil - villasmil.fernando@gmail.com
56
+ * Nederlands / Dutch (nl_NL): Hans van der Vlist - hansvandervlist@gmail.com
57
 
58
  = Other support =
59
 
75
 
76
  Firstly, please make sure you read this FAQ through to the end - it may already have the answer you need. If it does, then please consider a donation (http://david.dw-perspective.org.uk/donate); it takes time to develop this plugin and FAQ.
77
 
78
+ If it does not, then contact me! This is a complex backup plugin and the only way I can ensure it's robust is to get bug reports and fix the problems that crop up. Please make sure you are using the latest version of the plugin, and that you include the version in your bug report - if you are not using the latest, then the first thing you will be asked to do is upgrade.
79
 
80
  Please turn on debugging mode (in the UpdraftPlus options page) and then try again, and after that send me the log if you can find it (there are links to download logs on the UpdraftPlus settings page; or you may be emailed it; failing that, it is in the directory wp-content/updraft, so FTP in and look for it there). If you cannot find the log, then I may not be able to help so much, but you can try - include as much information as you can when reporting (PHP version, your blog's site, the error you saw and how you got to the page that caused it, etcetera).
81
 
93
 
94
  UpdraftPlus supports resuming backup runs right from the beginning, so that it does not need to do everything in a single go; but this has limits. If your website is huge and your web hosting company gives your tiny resources on an over-loaded server, then your solution is to purchase better web hosting, or to hire me professionally. Otherwise, this is not considered a bug. UpdraftPlus is known to successfully back up websites that run into the gigabytes on web servers that are not resource-starved.
95
 
96
+ = Will you support Windows Live SkyDrive? =
97
+
98
+ No. Microsoft forbid the use of SkyDrive by backup utilities - see http://msdn.microsoft.com/en-us/library/live/hh826521.aspx ("Here are some examples of nonconforming apps: Apps that automatically back up files or folders to SkyDrive.").
99
+
100
  = How is this better than the original Updraft? =
101
 
102
  You can check the changelog for changes; but the original Updraft, before I forked it, had three major problems. Firstly, it only backed up WP core tables from the database; if any of your plugins stored data in extra tables, then they were not backed up. Secondly, it only backed up your plugins/themes/uploads and not any further directories inside wp-content that other plugins might have created. Thirdly, the database backup did not include charset information, which meant that you needed to know some SQL wizardry to actually be able to use the backup. I made UpdraftPlus out of my experience of trying to back up several sites with Updraft. Then, I added encryption for the database file for extra peace of mind, and future-proofed by getting rid of some deprecated aspects. Since then, many new features have been added, e.g. resuming of failed uploads, and Dropbox support.
119
 
120
  == Changelog ==
121
 
122
+ = 1.6.1 - 05/06/2013 =
123
+ * FEATURE: New "Migrator" add-on for moving sites from one WordPress install to another (http://updraftplus.com/shop/)
124
+ * FEATURE: The "More files" add-on can now back up any files from anywhere on your filesystem (not just parts of WordPress)
125
+ * FEATURE: The "More files" add-on can now exclude specified directories from the backup of WordPress core
126
+ * FEATURE: Dropbox and Google Drive now check available quota before uploading
127
+ * FEATURE: Nederlands / Dutch (nl_NL) translation: thanks to Hans van der Vlist - hansvandervlist@gmail.com
128
+ * FEATURE: The SFTP/FTPS add-on now supports implicit encryption (so now both explicit + implicit are supported)
129
+ * FIX: Google Drive now requires additional permissions to download your files - you will need to re-authenticate if you are downloading or restoring.
130
+ * FIX: Fix serious corruption issue in larger Rackspace Cloud Files backups (fixed a bug in Rackspace's Cloud Files library)
131
+ * 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
132
+ * FIX: Allow top-level "Restore" button even if no backup sets currently known (to allow uploading some)
133
+ * FIX: Fixed issues hindering restoration on web hosting setups with file permissions that invoked WP's remote filesystem methods
134
+ * TWEAK: Database backup now includes more info about original WP install (e.g. WP/PHP versions)
135
+ * TWEAK: The "More files" add-on now allows the user to choose whether to restore wp-config.php or not (and gives help)
136
+ * TWEAK: Added an approximate expected row count when beginning to dump out a table
137
+ * TWEAK: Remove the Google Drive URL prefix automatically for those who don't spot the instruction to do so
138
+
139
  = 1.5.22 - 04/16/2013 =
140
  * FIX: 1.5.21 broke Dropbox authentication for some users. Upgrade if you had that issue.
141
 
423
 
424
  3. Showing and downloading backup sets
425
 
426
+ We recognise and thank the following for code and/or libraries used and/or modified under the terms of their open source licences:
427
+
428
  * UpdraftPlus is derived from the original Updraft by Paul Kehrer (Twitter: http://twitter.com/reaperhulk, Blog: http://langui.sh)
429
  * Sorin Iclanzan, http://profiles.wordpress.org/hel.io/
430
  * Ben Tadiar, https://github.com/BenTheDesigner/Dropbox
431
  * Beau Brownlee, http://www.solutionbot.com/2009/01/02/php-ftp-class/
432
  * Donovan Schonknecht, http://undesigned.org.za/2007/10/22/amazon-s3-php-class
433
+ * Rackspace US, Inc., https://github.com/rackerlabs/php-cloudfiles
434
+ * Jim Wigginton, http://phpseclib.sourceforge.net
435
+ * Dave Coveney, https://github.com/interconnectit/Search-Replace-DB/
436
 
437
  == License ==
438
 
439
+ Copyright 2011-3 David Anderson
 
440
 
441
  This program is free software; you can redistribute it and/or modify
442
  it under the terms of the GNU General Public License as published by
455
  Furthermore, reliance upon any non-English translation is at your own risk. UpdraftPlus can give no guarantees that translations from the original English are accurate.
456
 
457
  == Upgrade Notice ==
458
+ 1.6.1: Various new features. Small bug fixes + one larger corruption issue in larger Rackspace Cloud Files backups (a bug in Rackspace's library). Recommended update for all. Google Drive users should re-authenticate in order to download or restore (due to a change made by Google).
updraftplus.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: UpdraftPlus - Backup/Restore
4
  Plugin URI: http://updraftplus.com
5
  Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
6
  Author: UpdraftPlus.Com, DavidAnderson
7
- Version: 1.5.22
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus
@@ -13,12 +13,25 @@ Author URI: http://updraftplus.com
13
 
14
  /*
15
  TODO - some of these are out of date/done, needs pruning
 
16
  // Add an appeal for translators to email me.
 
 
 
 
 
 
 
 
 
 
17
  // Search for other TODO-s in the code
 
 
 
 
18
  // Update all-features page at updraftplus.com (not updated after 1.5.5)
19
- // Better Dropbox errors (see item in To-Do box)
20
  // Count available time before doing a database restore
21
- // Put in more info on the restoration process, especially advice
22
  // Add in downloading in the 'Restore' modal, and remove the advice to do so manually.
23
  // Save database encryption key inside backup history on per-db basis, so that if it changes we can still decrypt
24
  // Switch to Google Drive SDK. Google folders. https://developers.google.com/drive/folder
@@ -26,7 +39,6 @@ TODO - some of these are out of date/done, needs pruning
26
  // Affiliate links? (I have no need...)
27
  // Convert S3.php to use WP's native HTTP functions
28
  // Ability to re-scan existing cloud storage
29
- // Migrator - search+replace the database, list+download from remote, kick-off backup remotely
30
  // Dropbox uses one mcrypt function - port to phpseclib for more portability
31
  // Store meta-data on which version of UD the backup was made with (will help if we ever introduce quirks that need ironing)
32
  // Test restoration when uploads dir is /assets/ (e.g. with Shoestrap theme)
@@ -36,7 +48,7 @@ TODO - some of these are out of date/done, needs pruning
36
  //Do an automated test periodically for the success of loop-back connections
37
  //When a manual backup is run, use a timer to update the 'Download backups and logs' section, just like 'Last finished backup run'. Beware of over-writing anything that's in there from a resumable downloader.
38
  //Change DB encryption to not require whole gzip in memory (twice)
39
- //Add Box.Net, SugarSync and Microsoft Skydrive support??
40
  //Make it easier to find add-ons
41
  //The restorer has a hard-coded wp-content - fix
42
  //?? On 'backup now', open up a modal, count down 5 seconds, open page via modal, then start examining the log file (if it can be found)
@@ -92,7 +104,7 @@ define('UPDRAFT_TRANSTIME', 3600*9+5);
92
  if (is_file(UPDRAFTPLUS_DIR.'/premium.php')) require_once(UPDRAFTPLUS_DIR.'/premium.php');
93
  if (is_file(UPDRAFTPLUS_DIR.'/autoload.php')) require_once(UPDRAFTPLUS_DIR.'/autoload.php');
94
 
95
- if ($dir_handle = opendir(UPDRAFTPLUS_DIR.'/addons')) {
96
  while ($e = readdir($dir_handle)) {
97
  if (is_file(UPDRAFTPLUS_DIR.'/addons/'.$e) && preg_match('/\.php$/', $e)) {
98
  include_once(UPDRAFTPLUS_DIR.'/addons/'.$e);
@@ -229,7 +241,8 @@ class UpdraftPlus {
229
  function handle_url_actions() {
230
 
231
  // First, basic security check: must be an admin page, with ability to manage options, with the right parameters
232
- if ( UpdraftPlus_Options::user_can_manage() && isset( $_GET['page'] ) && $_GET['page'] == 'updraftplus' && isset($_GET['action']) ) {
 
233
  if (preg_match("/^updraftmethod-([a-z]+)-([a-z]+)$/", $_GET['action'], $matches) && file_exists(UPDRAFTPLUS_DIR.'/methods/'.$matches[1].'.php')) {
234
  $method = $matches[1];
235
  require_once(UPDRAFTPLUS_DIR.'/methods/'.$method.'.php');
@@ -418,7 +431,7 @@ class UpdraftPlus {
418
 
419
  $arr = apply_filters('updraft_backupable_file_entities', $arr, $full_info);
420
 
421
- // We always then add 'others' on to the end
422
  if ($include_others) {
423
  if ($full_info) {
424
  $arr['others'] = array('path' => WP_CONTENT_DIR, 'description' => __('Others','updraftplus'));
@@ -427,6 +440,9 @@ class UpdraftPlus {
427
  }
428
  }
429
 
 
 
 
430
  return $arr;
431
 
432
  }
@@ -1270,9 +1286,14 @@ class UpdraftPlus {
1270
 
1271
  function backup_db_header() {
1272
 
1273
- //Begin new backup of MySql
1274
- $this->stow("# " . 'WordPress MySQL database backup' . "\n");
1275
- $this->stow("# " . 'Created by UpdraftPlus (http://updraftplus.com)' . "\n");
 
 
 
 
 
1276
  $this->stow("#\n");
1277
  $this->stow("# " . sprintf(__('Generated: %s','wp-db-backup'),date("l j. F Y H:i T")) . "\n");
1278
  $this->stow("# " . sprintf(__('Hostname: %s','wp-db-backup'),DB_HOST) . "\n");
@@ -1288,6 +1309,17 @@ class UpdraftPlus {
1288
  $this->stow("/*!40101 SET foreign_key_checks = 0 */;\n");
1289
  }
1290
 
 
 
 
 
 
 
 
 
 
 
 
1291
  /* This function is resumable, using the following method:
1292
  - Each table is written out to ($final_filename).table.tmp
1293
  - When the writing finishes, it is renamed to ($final_filename).table
@@ -1326,6 +1358,9 @@ class UpdraftPlus {
1326
 
1327
  $stitch_files = array();
1328
 
 
 
 
1329
  foreach ($all_tables as $table) {
1330
  $total_tables++;
1331
  // Increase script execution time-limit to 15 min for every table.
@@ -1454,7 +1489,7 @@ class UpdraftPlus {
1454
  $this->stow("#\n");
1455
  $this->stow("\n");
1456
 
1457
- $create_table = $wpdb->get_results("SHOW CREATE TABLE $table", ARRAY_N);
1458
  if (false === $create_table) {
1459
  $err_msg = sprintf(__('Error with SHOW CREATE TABLE for %s.','wp-db-backup'), $table);
1460
  //$this->error($err_msg);
@@ -1468,7 +1503,20 @@ class UpdraftPlus {
1468
  }
1469
 
1470
  // Comment in SQL-file
1471
- $this->stow("\n\n#\n# " . sprintf('Data contents of table %s',$this->backquote($table)) . "\n#\n");
 
 
 
 
 
 
 
 
 
 
 
 
 
1472
  }
1473
 
1474
  // In UpdraftPlus, segment is always 'none'
4
  Plugin URI: http://updraftplus.com
5
  Description: Backup and restore: take backups locally, or backup to Amazon S3, Dropbox, Google Drive, Rackspace, (S)FTP, WebDAV & email, on automatic schedules.
6
  Author: UpdraftPlus.Com, DavidAnderson
7
+ Version: 1.6.1
8
  Donate link: http://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus
13
 
14
  /*
15
  TODO - some of these are out of date/done, needs pruning
16
+ // When you migrate/restore, if there is a .htaccess, warn/give option about it.
17
  // Add an appeal for translators to email me.
18
+ // Embed changelog in UpdraftPlus.Com - see http://wordpress.org/extend/plugins/wp-readme-parser/
19
+ // Fix generation of excessive transients
20
+ // Deal with gigantic database tables - e.g. those over a million rows on cheap hosting. Also indicate beforehand how many rows there are.
21
+ // Some code assumes that the updraft_dir is inside WP_CONTENT_DIR. We should be using WP_Filesystem::find_folder to remove this assumption
22
+ // When restoring core, need an option to retain database settings / exclude wp-config.php
23
+ // Produce a command-line version of the restorer (so that people with shell access are immune from server-enforced timeouts)
24
+ // More sophisticated pruning options - e.g. "but only keep 1 backup every <x> <days> after <y> <weeks>"
25
+ // Migrator - search+replace the database, list+download from remote, kick-off backup remotely
26
+ // April 20, 2015: This is the date when the Google Documents API is likely to stop working (https://developers.google.com/google-apps/documents-list/terms)
27
+ // Fix-time add-on should also fix the day/date, when relevant
28
  // Search for other TODO-s in the code
29
+ // Stand-alone installer - take a look at this: http://wordpress.org/extend/plugins/duplicator/screenshots/
30
+ // Migrator should search+replace table by table if possible. Pick the "Backup of: " field out the db dump to get site_url() in advance. Perform an action each table. Remember which ones have been done. Then at the end, pick up those not done.
31
+ // More DB add-on (other non-WP tables; even other databases)
32
+ // Unlimited customers should be auto-emailed each time they add a site (security)
33
  // Update all-features page at updraftplus.com (not updated after 1.5.5)
 
34
  // Count available time before doing a database restore
 
35
  // Add in downloading in the 'Restore' modal, and remove the advice to do so manually.
36
  // Save database encryption key inside backup history on per-db basis, so that if it changes we can still decrypt
37
  // Switch to Google Drive SDK. Google folders. https://developers.google.com/drive/folder
39
  // Affiliate links? (I have no need...)
40
  // Convert S3.php to use WP's native HTTP functions
41
  // Ability to re-scan existing cloud storage
 
42
  // Dropbox uses one mcrypt function - port to phpseclib for more portability
43
  // Store meta-data on which version of UD the backup was made with (will help if we ever introduce quirks that need ironing)
44
  // Test restoration when uploads dir is /assets/ (e.g. with Shoestrap theme)
48
  //Do an automated test periodically for the success of loop-back connections
49
  //When a manual backup is run, use a timer to update the 'Download backups and logs' section, just like 'Last finished backup run'. Beware of over-writing anything that's in there from a resumable downloader.
50
  //Change DB encryption to not require whole gzip in memory (twice)
51
+ //Add DreamObjects, Box.Net, SugarSync, Me.Ga support??
52
  //Make it easier to find add-ons
53
  //The restorer has a hard-coded wp-content - fix
54
  //?? On 'backup now', open up a modal, count down 5 seconds, open page via modal, then start examining the log file (if it can be found)
104
  if (is_file(UPDRAFTPLUS_DIR.'/premium.php')) require_once(UPDRAFTPLUS_DIR.'/premium.php');
105
  if (is_file(UPDRAFTPLUS_DIR.'/autoload.php')) require_once(UPDRAFTPLUS_DIR.'/autoload.php');
106
 
107
+ if (is_dir(UPDRAFTPLUS_DIR.'/addons') && $dir_handle = opendir(UPDRAFTPLUS_DIR.'/addons')) {
108
  while ($e = readdir($dir_handle)) {
109
  if (is_file(UPDRAFTPLUS_DIR.'/addons/'.$e) && preg_match('/\.php$/', $e)) {
110
  include_once(UPDRAFTPLUS_DIR.'/addons/'.$e);
241
  function handle_url_actions() {
242
 
243
  // First, basic security check: must be an admin page, with ability to manage options, with the right parameters
244
+ // Also, only on GET because WordPress on the options page repeats parameters sometimes when POST-ing via the _wp_referer field
245
+ if (isset($_SERVER['REQUEST_METHOD']) && 'GET' == $_SERVER['REQUEST_METHOD'] && UpdraftPlus_Options::user_can_manage() && isset( $_GET['page'] ) && $_GET['page'] == 'updraftplus' && isset($_GET['action']) ) {
246
  if (preg_match("/^updraftmethod-([a-z]+)-([a-z]+)$/", $_GET['action'], $matches) && file_exists(UPDRAFTPLUS_DIR.'/methods/'.$matches[1].'.php')) {
247
  $method = $matches[1];
248
  require_once(UPDRAFTPLUS_DIR.'/methods/'.$method.'.php');
431
 
432
  $arr = apply_filters('updraft_backupable_file_entities', $arr, $full_info);
433
 
434
+ // We then add 'others' on to the end
435
  if ($include_others) {
436
  if ($full_info) {
437
  $arr['others'] = array('path' => WP_CONTENT_DIR, 'description' => __('Others','updraftplus'));
440
  }
441
  }
442
 
443
+ // Entries that should be added after 'others'
444
+ $arr = apply_filters('updraft_backupable_file_entities_final', $arr, $full_info);
445
+
446
  return $arr;
447
 
448
  }
1286
 
1287
  function backup_db_header() {
1288
 
1289
+ @include(ABSPATH.'wp-includes/version.php');
1290
+ global $wp_version;
1291
+
1292
+ $this->stow("# WordPress MySQL database backup\n");
1293
+ $this->stow("# Created by UpdraftPlus version ".$this->version." (http://updraftplus.com)\n");
1294
+ $this->stow("# WordPress Version: $wp_version, running on PHP ".phpversion()." (".$_SERVER["SERVER_SOFTWARE"].")\n");
1295
+ $this->stow("# Backup of: ".site_url()."\n");
1296
+
1297
  $this->stow("#\n");
1298
  $this->stow("# " . sprintf(__('Generated: %s','wp-db-backup'),date("l j. F Y H:i T")) . "\n");
1299
  $this->stow("# " . sprintf(__('Hostname: %s','wp-db-backup'),DB_HOST) . "\n");
1309
  $this->stow("/*!40101 SET foreign_key_checks = 0 */;\n");
1310
  }
1311
 
1312
+ // The purpose of this function is to make sure that the options table is put in the database first, then the usermeta table
1313
+ function backup_db_sorttables($a, $b) {
1314
+ global $table_prefix;
1315
+ if ($a == $b) return 0;
1316
+ if ($a == $table_prefix.'options') return -1;
1317
+ if ($b == $table_prefix.'options') return 1;
1318
+ if ($a == $table_prefix.'usermeta') return -1;
1319
+ if ($b == $table_prefix.'usermeta') return 1;
1320
+ return strcmp($a, $b);
1321
+ }
1322
+
1323
  /* This function is resumable, using the following method:
1324
  - Each table is written out to ($final_filename).table.tmp
1325
  - When the writing finishes, it is renamed to ($final_filename).table
1358
 
1359
  $stitch_files = array();
1360
 
1361
+ // Put the options table first
1362
+ usort($all_tables, array($this, 'backup_db_sorttables'));
1363
+
1364
  foreach ($all_tables as $table) {
1365
  $total_tables++;
1366
  // Increase script execution time-limit to 15 min for every table.
1489
  $this->stow("#\n");
1490
  $this->stow("\n");
1491
 
1492
+ $create_table = $wpdb->get_results("SHOW CREATE TABLE `$table`", ARRAY_N);
1493
  if (false === $create_table) {
1494
  $err_msg = sprintf(__('Error with SHOW CREATE TABLE for %s.','wp-db-backup'), $table);
1495
  //$this->error($err_msg);
1503
  }
1504
 
1505
  // Comment in SQL-file
1506
+ $this->stow("\n\n#\n# " . sprintf('Data contents of table %s',$this->backquote($table)) . "\n");
1507
+
1508
+ $table_status = $wpdb->get_row("SHOW TABLE STATUS WHERE Name='$table'");
1509
+ if (isset($table_status->Rows)) {
1510
+ $rows = $table_status->Rows;
1511
+ $this->log("Table $table: Total expected rows (approximate): ".$rows);
1512
+ $this->stow("# Approximate rows expected in table: $rows\n");
1513
+ if ($rows > 500000) {
1514
+ $this->log("Table $table: $rows is very many rows - we hope your web hosting company gives you enough resources to dump out that table in the backup");
1515
+ }
1516
+ }
1517
+
1518
+ $this->stow("#\n\n");
1519
+
1520
  }
1521
 
1522
  // In UpdraftPlus, segment is always 'none'