UpdraftPlus WordPress Backup Plugin - Version 1.12.39

Version Description

  • 01/Apr/2017 =

  • FIX: The free version of 1.12.37/38 in some circumstances could fail to complete Dropbox authentication

Download this release

Release Info

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

Code changes from version 1.12.37 to 1.12.39

admin.php CHANGED
@@ -92,11 +92,16 @@ class UpdraftPlus_Admin {
92
  if ($return_instead_of_echo) return ob_get_clean();
93
  }
94
 
95
- private function setup_all_admin_notices_global($service){
 
 
 
 
 
96
 
97
  global $updraftplus;
98
 
99
- if ('googledrive' === $service || (is_array($service) && in_array('googledrive', $service))) {
100
  $settings = $updraftplus->update_remote_storage_options_format('googledrive');
101
 
102
  if (is_wp_error($settings)) {
@@ -116,7 +121,7 @@ class UpdraftPlus_Admin {
116
  }
117
  }
118
  }
119
- if ('googlecloud' === $service || (is_array($service) && in_array('googlecloud', $service))) {
120
  $opts = UpdraftPlus_Options::get_updraft_option('updraft_googlecloud');
121
  if (!empty($opts)) {
122
  $clientid = $opts['clientid'];
@@ -125,7 +130,7 @@ class UpdraftPlus_Admin {
125
  if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googlecloud'));
126
  }
127
 
128
- if ('dropbox' === $service || (is_array($service) && in_array('dropbox', $service))) {
129
  $settings = $updraftplus->update_remote_storage_options_format('dropbox');
130
 
131
  if (is_wp_error($settings)) {
@@ -142,7 +147,7 @@ class UpdraftPlus_Admin {
142
  }
143
  }
144
 
145
- if ('onedrive' === $service || (is_array($service) && in_array('onedrive', $service))) {
146
  $opts = UpdraftPlus_Options::get_updraft_option('updraft_onedrive');
147
  //if (((!empty($opts['clientid']) && !empty($opts['secret'])) || !empty($opts['use_master'])) && empty($opts['refresh_token']))
148
  if((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)){
@@ -152,7 +157,7 @@ class UpdraftPlus_Admin {
152
  }
153
  }
154
 
155
- if ('updraftvault' === $service || (is_array($service) && in_array('updraftvault', $service))) {
156
  $vault_settings = UpdraftPlus_Options::get_updraft_option('updraft_updraftvault');
157
  $connected = (is_array($vault_settings) && !empty($vault_settings['token']) && !empty($vault_settings['email'])) ? true : false;
158
  if (!$connected) add_action('all_admin_notices', array($this,'show_admin_warning_updraftvault') );
92
  if ($return_instead_of_echo) return ob_get_clean();
93
  }
94
 
95
+ /**
96
+ * Add actions for any needed dashboard notices for remote storage services
97
+ *
98
+ * @param String|Array $services - a list of services, or single service
99
+ */
100
+ private function setup_all_admin_notices_global($services) {
101
 
102
  global $updraftplus;
103
 
104
+ if ('googledrive' === $services || (is_array($services) && in_array('googledrive', $services))) {
105
  $settings = $updraftplus->update_remote_storage_options_format('googledrive');
106
 
107
  if (is_wp_error($settings)) {
121
  }
122
  }
123
  }
124
+ if ('googlecloud' === $services || (is_array($services) && in_array('googlecloud', $services))) {
125
  $opts = UpdraftPlus_Options::get_updraft_option('updraft_googlecloud');
126
  if (!empty($opts)) {
127
  $clientid = $opts['clientid'];
130
  if (!empty($clientid) && empty($token)) add_action('all_admin_notices', array($this,'show_admin_warning_googlecloud'));
131
  }
132
 
133
+ if ('dropbox' === $services || (is_array($services) && in_array('dropbox', $services))) {
134
  $settings = $updraftplus->update_remote_storage_options_format('dropbox');
135
 
136
  if (is_wp_error($settings)) {
147
  }
148
  }
149
 
150
+ if ('onedrive' === $services || (is_array($services) && in_array('onedrive', $services))) {
151
  $opts = UpdraftPlus_Options::get_updraft_option('updraft_onedrive');
152
  //if (((!empty($opts['clientid']) && !empty($opts['secret'])) || !empty($opts['use_master'])) && empty($opts['refresh_token']))
153
  if((defined('UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP') && UPDRAFTPLUS_CUSTOM_ONEDRIVE_APP)){
157
  }
158
  }
159
 
160
+ if ('updraftvault' === $services || (is_array($services) && in_array('updraftvault', $services))) {
161
  $vault_settings = UpdraftPlus_Options::get_updraft_option('updraft_updraftvault');
162
  $connected = (is_array($vault_settings) && !empty($vault_settings['token']) && !empty($vault_settings['email'])) ? true : false;
163
  if (!$connected) add_action('all_admin_notices', array($this,'show_admin_warning_updraftvault') );
class-updraftplus.php CHANGED
@@ -3569,33 +3569,37 @@ class UpdraftPlus {
3569
  if (!isset($dropbox['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3570
  }
3571
 
3572
- foreach ($dropbox['settings'] as $instance_id => $storage_options) {
3573
- if (!empty($opts['settings'][$instance_id]['tk_access_token'])) {
3574
-
3575
- $current_app_key = empty($opts['settings'][$instance_id]['appkey']) ? false : $opts['settings'][$instance_id]['appkey'];
3576
- $new_app_key = empty($storage_options['appkey']) ? false : $storage_options['appkey'];
3577
-
3578
- // If a different app key is being used, then wipe the stored token as it cannot belong to the new app
3579
- if ($current_app_key !== $new_app_key) {
3580
- unset($opts['settings'][$instance_id]['tk_access_token']);
3581
- unset($opts['settings'][$instance_id]['ownername']);
3582
- unset($opts['settings'][$instance_id]['CSRF']);
 
 
 
 
3583
  }
3584
-
3585
- }
3586
-
3587
- // Now loop over the new options, and replace old options with them
3588
- foreach ($storage_options as $key => $value) {
3589
- if (null === $value) {
3590
- unset($opts['settings'][$instance_id][$key]);
3591
- } else {
3592
- if (!isset($opts['settings'][$instance_id])) $opts['settings'][$instance_id] = array();
3593
- $opts['settings'][$instance_id][$key] = $value;
3594
  }
 
 
 
3595
  }
3596
 
3597
- if (!empty($opts['settings'][$instance_id]['folder']) && preg_match('#^https?://(www.)dropbox\.com/home/Apps/UpdraftPlus(.Com)?([^/]*)/(.*)$#i', $opts['settings'][$instance_id]['folder'], $matches)) $opts['settings'][$instance_id]['folder'] = $matches[3];
3598
-
3599
  }
3600
 
3601
  return $opts;
3569
  if (!isset($dropbox['settings'][$instance_id])) unset($opts['settings'][$instance_id]);
3570
  }
3571
 
3572
+ if (!empty($dropbox['settings'])) {
3573
+
3574
+ foreach ($dropbox['settings'] as $instance_id => $storage_options) {
3575
+ if (!empty($opts['settings'][$instance_id]['tk_access_token'])) {
3576
+
3577
+ $current_app_key = empty($opts['settings'][$instance_id]['appkey']) ? false : $opts['settings'][$instance_id]['appkey'];
3578
+ $new_app_key = empty($storage_options['appkey']) ? false : $storage_options['appkey'];
3579
+
3580
+ // If a different app key is being used, then wipe the stored token as it cannot belong to the new app
3581
+ if ($current_app_key !== $new_app_key) {
3582
+ unset($opts['settings'][$instance_id]['tk_access_token']);
3583
+ unset($opts['settings'][$instance_id]['ownername']);
3584
+ unset($opts['settings'][$instance_id]['CSRF']);
3585
+ }
3586
+
3587
  }
3588
+
3589
+ // Now loop over the new options, and replace old options with them
3590
+ foreach ($storage_options as $key => $value) {
3591
+ if (null === $value) {
3592
+ unset($opts['settings'][$instance_id][$key]);
3593
+ } else {
3594
+ if (!isset($opts['settings'][$instance_id])) $opts['settings'][$instance_id] = array();
3595
+ $opts['settings'][$instance_id][$key] = $value;
3596
+ }
 
3597
  }
3598
+
3599
+ if (!empty($opts['settings'][$instance_id]['folder']) && preg_match('#^https?://(www.)dropbox\.com/home/Apps/UpdraftPlus(.Com)?([^/]*)/(.*)$#i', $opts['settings'][$instance_id]['folder'], $matches)) $opts['settings'][$instance_id]['folder'] = $matches[3];
3600
+
3601
  }
3602
 
 
 
3603
  }
3604
 
3605
  return $opts;
includes/updraft-admin.js CHANGED
@@ -637,9 +637,9 @@ function updraft_activejobs_update(force) {
637
  var log_append_array = resp.u;
638
  if (log_append_array.nonce == updraft_poplog_log_nonce) {
639
  updraft_poplog_log_pointer = log_append_array.pointer;
640
- if (log_append_array.html != null && log_append_array.html != '') {
641
  var oldscroll = jQuery('#updraft-poplog').scrollTop();
642
- jQuery('#updraft-poplog-content').append(log_append_array.html);
643
  if (updraft_poplog_lastscroll == oldscroll || updraft_poplog_lastscroll == -1) {
644
  jQuery('#updraft-poplog').scrollTop(jQuery('#updraft-poplog-content').prop("scrollHeight"));
645
  updraft_poplog_lastscroll = jQuery('#updraft-poplog').scrollTop();
637
  var log_append_array = resp.u;
638
  if (log_append_array.nonce == updraft_poplog_log_nonce) {
639
  updraft_poplog_log_pointer = log_append_array.pointer;
640
+ if (log_append_array.log != null && log_append_array.log != '') {
641
  var oldscroll = jQuery('#updraft-poplog').scrollTop();
642
+ jQuery('#updraft-poplog-content').append(log_append_array.log);
643
  if (updraft_poplog_lastscroll == oldscroll || updraft_poplog_lastscroll == -1) {
644
  jQuery('#updraft-poplog').scrollTop(jQuery('#updraft-poplog-content').prop("scrollHeight"));
645
  updraft_poplog_lastscroll = jQuery('#updraft-poplog').scrollTop();
languages/updraftplus-cs_CZ.mo CHANGED
Binary file
languages/updraftplus-cs_CZ.po CHANGED
@@ -2,7 +2,7 @@
2
  # This file is distributed under the same license as the UpdraftPlus package.
3
  msgid ""
4
  msgstr ""
5
- "PO-Revision-Date: 2017-02-23 20:39:08+0000\n"
6
  "MIME-Version: 1.0\n"
7
  "Content-Type: text/plain; charset=UTF-8\n"
8
  "Content-Transfer-Encoding: 8bit\n"
@@ -13,7 +13,7 @@ msgstr ""
13
 
14
  #: methods/updraftvault.php:49
15
  msgid "UpdraftVault"
16
- msgstr ""
17
 
18
  #: includes/updraftplus-notices.php:260
19
  msgid "get more info"
@@ -53,7 +53,7 @@ msgstr ""
53
 
54
  #: admin.php:705
55
  msgid "Loading log file"
56
- msgstr ""
57
 
58
  #: admin.php:704
59
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
2
  # This file is distributed under the same license as the UpdraftPlus package.
3
  msgid ""
4
  msgstr ""
5
+ "PO-Revision-Date: 2017-03-31 13:35:31+0000\n"
6
  "MIME-Version: 1.0\n"
7
  "Content-Type: text/plain; charset=UTF-8\n"
8
  "Content-Transfer-Encoding: 8bit\n"
13
 
14
  #: methods/updraftvault.php:49
15
  msgid "UpdraftVault"
16
+ msgstr "UpdraftVault"
17
 
18
  #: includes/updraftplus-notices.php:260
19
  msgid "get more info"
53
 
54
  #: admin.php:705
55
  msgid "Loading log file"
56
+ msgstr "Probíhá načítání protokolu"
57
 
58
  #: admin.php:704
59
  msgid "Unable to download file. This could be caused by a timeout. It would be best to download the zip to your computer."
methods/backup-module.php CHANGED
@@ -283,7 +283,7 @@ abstract class UpdraftPlus_BackupModule {
283
  $options = reset($options_full['settings']);
284
 
285
  if (false === $options) {
286
- $updraftplus->log("Options retrieval failure (no options set): ".$options->get_error_code().": ".$options->get_error_message()." (".json_encode($options->get_error_data()).")");
287
  return array();
288
  }
289
  $instance_id = key($options_full['settings']);
283
  $options = reset($options_full['settings']);
284
 
285
  if (false === $options) {
286
+ $updraftplus->log("Options retrieval failure (no options set)");
287
  return array();
288
  }
289
  $instance_id = key($options_full['settings']);
methods/dropbox.php CHANGED
@@ -8,6 +8,15 @@ if (!defined('UPDRAFTPLUS_DIR')) die('No direct access allowed.');
8
 
9
  if (!class_exists('UpdraftPlus_BackupModule')) require_once(UPDRAFTPLUS_DIR.'/methods/backup-module.php');
10
 
 
 
 
 
 
 
 
 
 
11
  class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
12
 
13
  private $current_file_hash;
@@ -457,6 +466,7 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
457
  }
458
 
459
  public function config_print() {
 
460
  $opts = $this->get_options();
461
 
462
  $classes = $this->get_css_classes();
@@ -470,15 +480,13 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
470
  </tr>
471
 
472
  <tr class="<?php echo $classes;?>">
473
- <th></th>
474
- <td>
475
- <?php
476
- // Check requirements.
477
- global $updraftplus_admin;
478
-
479
- $updraftplus_admin->curl_check('Dropbox', false, 'dropbox');
480
- ?>
481
- </td>
482
  </tr>
483
 
484
  <?php
@@ -486,7 +494,11 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
486
  $defmsg = '<tr class="'.$classes.'"><td></td><td><strong>'.__('Need to use sub-folders?','updraftplus').'</strong> '.__('Backups are saved in','updraftplus').' apps/UpdraftPlus. '.__('If you back up several sites into the same Dropbox and want to organise with sub-folders, then ','updraftplus').'<a href="https://updraftplus.com/shop/">'.__("there's an add-on for that.",'updraftplus').'</a></td></tr>';
487
 
488
  $defmsg = '<tr class="'.$classes.'"><td></td><td><strong>'.__('Need to use sub-folders?','updraftplus').'</strong> '.__('Backups are saved in','updraftplus').' apps/UpdraftPlus. '.__('If you back up several sites into the same Dropbox and want to organise with sub-folders, then ','updraftplus').'<a href="'.apply_filters("updraftplus_com_link","https://updraftplus.com/shop/").'">'.__("there's an add-on for that.",'updraftplus').'</a></td></tr>';
489
- echo apply_filters('updraftplus_dropbox_extra_config', $defmsg, $this); ?>
 
 
 
 
490
 
491
  <tr class="<?php echo $classes;?>">
492
  <th><?php echo sprintf(__('Authenticate with %s', 'updraftplus'), __('Dropbox', 'updraftplus'));?>:</th>
@@ -533,8 +545,11 @@ class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
533
  <td><input type="text" style="width:332px" <?php $this->output_settings_field_name_and_id('secret');?> value="<?php echo esc_attr($secret); ?>" /></td>
534
  </tr>
535
 
 
 
 
 
536
  <?php } ?>
537
-
538
  <?php
539
  }
540
 
8
 
9
  if (!class_exists('UpdraftPlus_BackupModule')) require_once(UPDRAFTPLUS_DIR.'/methods/backup-module.php');
10
 
11
+ # Fix a potential problem for users who had the short-lived 1.12.35-1.12.38 free versions (see: https://wordpress.org/support/topic/1-12-37-dropbox-auth-broken/page/2/#post-8981457)
12
+ # Can be removed after a few months
13
+ $potential_options = UpdraftPlus_Options::get_updraft_option('updraft_dropbox');
14
+ if (is_array($potential_options) && isset($potential_options['version']) && isset($potential_options['settings']) && array() === $potential_options['settings']) {
15
+ // Wipe it, which wil force its re-creation in proper format
16
+ UpdraftPlus_Options::delete_updraft_option('updraft_dropbox');
17
+ }
18
+
19
+
20
  class UpdraftPlus_BackupModule_dropbox extends UpdraftPlus_BackupModule {
21
 
22
  private $current_file_hash;
466
  }
467
 
468
  public function config_print() {
469
+
470
  $opts = $this->get_options();
471
 
472
  $classes = $this->get_css_classes();
480
  </tr>
481
 
482
  <tr class="<?php echo $classes;?>">
483
+ <th></th>
484
+ <td>
485
+ <?php
486
+ global $updraftplus_admin;
487
+ $updraftplus_admin->curl_check('Dropbox', false, 'dropbox');
488
+ ?>
489
+ </td>
 
 
490
  </tr>
491
 
492
  <?php
494
  $defmsg = '<tr class="'.$classes.'"><td></td><td><strong>'.__('Need to use sub-folders?','updraftplus').'</strong> '.__('Backups are saved in','updraftplus').' apps/UpdraftPlus. '.__('If you back up several sites into the same Dropbox and want to organise with sub-folders, then ','updraftplus').'<a href="https://updraftplus.com/shop/">'.__("there's an add-on for that.",'updraftplus').'</a></td></tr>';
495
 
496
  $defmsg = '<tr class="'.$classes.'"><td></td><td><strong>'.__('Need to use sub-folders?','updraftplus').'</strong> '.__('Backups are saved in','updraftplus').' apps/UpdraftPlus. '.__('If you back up several sites into the same Dropbox and want to organise with sub-folders, then ','updraftplus').'<a href="'.apply_filters("updraftplus_com_link","https://updraftplus.com/shop/").'">'.__("there's an add-on for that.",'updraftplus').'</a></td></tr>';
497
+
498
+ $extra_config = apply_filters('updraftplus_dropbox_extra_config', $defmsg, $this);
499
+
500
+ echo $extra_config;
501
+ ?>
502
 
503
  <tr class="<?php echo $classes;?>">
504
  <th><?php echo sprintf(__('Authenticate with %s', 'updraftplus'), __('Dropbox', 'updraftplus'));?>:</th>
545
  <td><input type="text" style="width:332px" <?php $this->output_settings_field_name_and_id('secret');?> value="<?php echo esc_attr($secret); ?>" /></td>
546
  </tr>
547
 
548
+ <?php } elseif (false === strpos($extra_config, '<input')) {
549
+ // We need to make sure that it is not the case that the module has no settings whatsoever - this can result in the module being effectively invisible.
550
+ ?>
551
+ <input type="hidden" <?php $this->output_settings_field_name_and_id('tk_access_token');?> value="0">
552
  <?php } ?>
 
553
  <?php
554
  }
555
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: Backup with UpdraftPlus, DavidAnderson, DNutbourne, aporter, snigh
3
  Tags: backup, restore, database backup, wordpress backup, cloud backup, s3, dropbox, google drive, onedrive, ftp, backups
4
  Requires at least: 3.2
5
  Tested up to: 4.7
6
- Stable tag: 1.12.37
7
  Author URI: https://updraftplus.com
8
  Donate link: https://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
@@ -125,7 +125,16 @@ Thanks for asking; yes, we've got a few. Check out this profile page - https://p
125
 
126
  The <a href="https://updraftplus.com/news/">UpdraftPlus backup blog</a> is the best place to learn in more detail about any important changes.
127
 
128
- N.B. Paid versions of UpdraftPlus Backup / Restore have a version number which is 1 higher in the first digit, and has an extra component on the end, but the changelog below still applies. i.e. changes listed for 1.12.36 of the free version correspond to changes made in 2.12.36.x of the paid version.
 
 
 
 
 
 
 
 
 
129
 
130
  = 1.12.37 - 31/Mar/2017 =
131
 
@@ -137,7 +146,6 @@ N.B. Paid versions of UpdraftPlus Backup / Restore have a version number which i
137
  * TWEAK: Allow chunked database encryption to try and resume in the event of an error
138
  * TWEAK: Improve the premium/extension tab content
139
  * TWEAK: Fix an issue whereby the UpdraftVault settings section could show a bogus problem with checking quota immediately after initial setup
140
- * TWEAK: Dropbox API v2 call to de-authorise a token was failing
141
  * TWEAK: When requesting a download, work around buggy browser/server that continued after Connection: close
142
  * TWEAK: Improve the UI experience when downloading a log file for display fails
143
  * TWEAK: Prevent PHP notice if another plugin cancels a cron event
@@ -437,4 +445,4 @@ We recognise and thank the following for code and/or libraries used and/or modif
437
 
438
 
439
  == Upgrade Notice ==
440
- * 1.12.37: Allow other WP dashboard pages to call a backup easily. Various tweaks and small improvements.
3
  Tags: backup, restore, database backup, wordpress backup, cloud backup, s3, dropbox, google drive, onedrive, ftp, backups
4
  Requires at least: 3.2
5
  Tested up to: 4.7
6
+ Stable tag: 1.12.39
7
  Author URI: https://updraftplus.com
8
  Donate link: https://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
125
 
126
  The <a href="https://updraftplus.com/news/">UpdraftPlus backup blog</a> is the best place to learn in more detail about any important changes.
127
 
128
+ N.B. Paid versions of UpdraftPlus Backup / Restore have a version number which is 1 higher in the first digit, and has an extra component on the end, but the changelog below still applies. i.e. changes listed for 1.12.38 of the free version correspond to changes made in 2.12.38.x of the paid version.
129
+
130
+ = 1.12.39 - 01/Apr/2017 =
131
+
132
+ * FIX: The free version of 1.12.37/38 in some circumstances could fail to complete Dropbox authentication
133
+
134
+ = 1.12.38 - 31/Mar/2017 =
135
+
136
+ * TWEAK: Dropbox API v2 call to de-authorise a token was failing
137
+ * FIX: Prevent a fatal error when attempting to use a backup method with no options set
138
 
139
  = 1.12.37 - 31/Mar/2017 =
140
 
146
  * TWEAK: Allow chunked database encryption to try and resume in the event of an error
147
  * TWEAK: Improve the premium/extension tab content
148
  * TWEAK: Fix an issue whereby the UpdraftVault settings section could show a bogus problem with checking quota immediately after initial setup
 
149
  * TWEAK: When requesting a download, work around buggy browser/server that continued after Connection: close
150
  * TWEAK: Improve the UI experience when downloading a log file for display fails
151
  * TWEAK: Prevent PHP notice if another plugin cancels a cron event
445
 
446
 
447
  == Upgrade Notice ==
448
+ * 1.12.39: The free version of 1.12.37/38 in some circumstances could fail to complete Dropbox authentication
templates/wp-admin/settings/form-contents.php CHANGED
@@ -170,6 +170,11 @@ foreach ($default_options as $k => $v) {
170
  $settings = array('settings' => array());
171
  }
172
 
 
 
 
 
 
173
  if (!empty($settings['settings'])) {
174
  foreach ($settings['settings'] as $instance_id => $storage_options) {
175
  $remote_storage->set_options($storage_options, false, $instance_id);
170
  $settings = array('settings' => array());
171
  }
172
 
173
+ if (empty($settings['settings'])) {
174
+ // See: https://wordpress.org/support/topic/cannot-setup-connectionauthenticate-with-dropbox/
175
+ error_log("UpdraftPlus: Warning: settings for $method are empty. A dummy field is usually needed so that something is saved.");
176
+ }
177
+
178
  if (!empty($settings['settings'])) {
179
  foreach ($settings['settings'] as $instance_id => $storage_options) {
180
  $remote_storage->set_options($storage_options, false, $instance_id);
updraftplus.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: UpdraftPlus - Backup/Restore
4
  Plugin URI: https://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.12.37
8
  Donate link: https://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus
4
  Plugin URI: https://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.12.39
8
  Donate link: https://david.dw-perspective.org.uk/donate
9
  License: GPLv3 or later
10
  Text Domain: updraftplus