BackUpWordPress - Version 3.5

Version Description

= 3.4 =

  • This version introduces a major refactoring of the code responsible for the core backup engine. We made sure to write unit tests for the new code, and we have tested it on several user's sites. It fixes a lot of old bugs, and Windows users should see major improvements to reliability.

= 3.3.4 =

  • WordPress 4.4 compatibility.

= 3.3.1 =

  • Fixes a bug that would prevent downloading backups since 3.3.0 - please update.

= 3.2.5 =

  • Security fixes related to add_query_arg

= 3.2.1 =

  • Important bug fixes. Please upgrade to this version to avoid incomplete or broken backups.

= 3.1.3 =

  • Fixes backwards compatibility for add-ons and avoids a Fatal Error. Please upgrade straight to this version before upgrading your add-ons.

= 3.0.4 =

  • Fixes a few minor bugs. Immediate update is recommended.

= 3.0.2 =

  • Important: we have dropped support for PHP 5.2, you will not be able to activate BackUpWordPress on a server running PHP versions older than PHP 5.3.29

= 3.0.1 =

  • This is a critical update. Fixes a bug in the core backup library. Please update immediately.
Download this release

Release Info

Developer pauldewouters
Plugin Icon 128x128 BackUpWordPress
Version 3.5
Comparing to
See all releases

Code changes from version 3.5-beta to 3.5

admin/schedule-form-excludes.php CHANGED
@@ -17,56 +17,56 @@ $user_excludes = $excludes->get_user_excludes(); ?>
17
 
18
  <tbody>
19
 
20
- <?php foreach ( $user_excludes as $key => $exclude ) :
21
 
22
- $exclude_path = new \SplFileInfo( trailingslashit( Path::get_root() ) . ltrim( str_ireplace( Path::get_root(), '', $exclude ), '/' ) ); ?>
23
 
24
- <tr>
25
 
26
- <th scope="row">
27
 
28
- <?php if ( $exclude_path->isFile() ) { ?>
29
 
30
- <div class="dashicons dashicons-media-default"></div>
31
 
32
- <?php } elseif ( $exclude_path->isDir() ) { ?>
33
 
34
- <div class="dashicons dashicons-portfolio"></div>
35
 
36
- <?php } ?>
37
 
38
- </th>
39
 
40
- <td>
41
 
42
- <code><?php echo esc_html( str_ireplace( Path::get_root(), '', $exclude ) ); ?></code>
43
 
44
- </td>
45
 
46
- <td>
47
 
48
- <?php if ( ( in_array( $exclude, $excludes->get_default_excludes() ) ) || ( Path::get_path() === trailingslashit( Path::get_root() ) . untrailingslashit( $exclude ) ) ) : ?>
49
 
50
- <?php _e( 'Default rule', 'backupwordpress' ); ?>
51
 
52
- <?php elseif ( defined( 'HMBKP_EXCLUDE' ) && false !== strpos( HMBKP_EXCLUDE, $exclude ) ) : ?>
53
 
54
- <?php _e( 'Defined in wp-config.php', 'backupwordpress' ); ?>
55
 
56
- <?php else : ?>
57
 
58
- <a href="<?php echo admin_action_url( 'remove_exclude_rule', array(
59
- 'hmbkp_remove_exclude' => $exclude,
60
- 'hmbkp_schedule_id' => $schedule->get_id(),
61
- ) ); ?>" class="delete-action"><?php _e( 'Stop excluding', 'backupwordpress' ); ?></a>
62
 
63
- <?php endif; ?>
64
 
65
- </td>
66
 
67
- </tr>
68
 
69
- <?php endforeach; ?>
70
 
71
  </tbody>
72
 
@@ -93,10 +93,11 @@ $user_excludes = $excludes->get_user_excludes(); ?>
93
 
94
  $exclude_string = implode( '|', $excludes->get_excludes_for_regex() );
95
 
96
- $site_size = new Site_Size;
 
97
 
98
  // Kick off a recursive filesize scan
99
- $files = list_directory_by_total_filesize( $directory ); ?>
100
 
101
  <table class="widefat">
102
 
@@ -105,7 +106,7 @@ $user_excludes = $excludes->get_user_excludes(); ?>
105
  <tr>
106
  <th></th>
107
  <th scope="col"><?php _e( 'Name', 'backupwordpress' ); ?></th>
108
- <th scope="col" class="column-format"><?php _e( 'Size', 'backupwordpress' ); ?></th>
109
  <th scope="col" class="column-format"><?php _e( 'Permissions', 'backupwordpress' ); ?></th>
110
  <th scope="col" class="column-format"><?php _e( 'Type', 'backupwordpress' ); ?></th>
111
  <th scope="col" class="column-format"><?php _e( 'Status', 'backupwordpress' ); ?></th>
@@ -154,40 +155,31 @@ $user_excludes = $excludes->get_user_excludes(); ?>
154
  $root = new \SplFileInfo( Path::get_root() );
155
 
156
  $size = $site_size->filesize( $root );
157
-
158
- if ( false !== $size ) {
159
-
160
- $size = size_format( $size );
161
-
162
- if ( ! $size ) {
163
- $size = '0 B';
164
- } ?>
165
 
166
  <code>
167
-
168
- <?php echo esc_html( $size ); ?>
169
-
170
- <a class="dashicons dashicons-update"
171
- href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'hmbkp_recalculate_directory_filesize', urlencode( Path::get_root() ) ), 'hmbkp-recalculate_directory_filesize' ) ); ?>"><span><?php _e( 'Refresh', 'backupwordpress' ); ?></span></a>
172
-
173
  </code>
174
 
175
-
176
- <?php } ?>
177
-
178
  <?php } ?>
179
 
180
  <td>
181
- <?php echo esc_html( substr( sprintf( '%o', fileperms( Path::get_root() ) ), - 4 ) ); ?>
182
  </td>
183
 
184
  <td>
185
 
186
- <?php if ( is_link( Path::get_root() ) ) {
187
- _e( 'Symlink', 'backupwordpress' );
188
- } elseif ( is_dir( Path::get_root() ) ) {
189
- _e( 'Folder', 'backupwordpress' );
190
- } ?>
 
 
 
 
191
 
192
  </td>
193
 
@@ -265,19 +257,19 @@ $user_excludes = $excludes->get_user_excludes(); ?>
265
 
266
  if ( false !== $size ) {
267
 
268
- $size = size_format( $size );
269
-
270
- if ( ! $size ) {
271
- $size = '0 B';
272
- } ?>
273
 
274
  <code>
275
 
276
- <?php echo esc_html( $size ); ?>
277
-
278
- <?php if ( $file->isDir() ) { ?>
279
- <a title="<?php _e( 'Recalculate the size of this directory', 'backupwordpress' ); ?>" class="dashicons dashicons-update" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'hmbkp_recalculate_directory_filesize', urlencode( wp_normalize_path( $file->getPathname() ) ) ), 'hmbkp-recalculate_directory_filesize' ) ); ?>"><span><?php _e( 'Refresh', 'backupwordpress' ); ?></span></a>
280
- <?php } ?>
 
 
 
281
 
282
  </code>
283
 
@@ -291,13 +283,17 @@ $user_excludes = $excludes->get_user_excludes(); ?>
291
  </td>
292
 
293
  <td>
294
- <?php if ( ! $is_unreadable ) {
295
- echo esc_html( substr( sprintf( '%o', $file->getPerms() ), - 4 ) );
296
- } ?>
 
 
 
 
297
  </td>
298
 
299
  <td>
300
-
301
  <?php if ( $file->isLink() ) { ?>
302
 
303
  <span title="<?php echo esc_attr( wp_normalize_path( $file->getRealPath() ) ); ?>"><?php _e( 'Symlink', 'backupwordpress' ); ?></span>
@@ -307,7 +303,7 @@ $user_excludes = $excludes->get_user_excludes(); ?>
307
  } else {
308
  _e( 'File', 'backupwordpress' );
309
  } ?>
310
-
311
  </td>
312
 
313
  <td class="column-format">
17
 
18
  <tbody>
19
 
20
+ <?php foreach ( $user_excludes as $key => $exclude ) :
21
 
22
+ $exclude_path = new \SplFileInfo( trailingslashit( Path::get_root() ) . ltrim( str_ireplace( Path::get_root(), '', $exclude ), '/' ) ); ?>
23
 
24
+ <tr>
25
 
26
+ <th scope="row">
27
 
28
+ <?php if ( $exclude_path->isFile() ) { ?>
29
 
30
+ <div class="dashicons dashicons-media-default"></div>
31
 
32
+ <?php } elseif ( $exclude_path->isDir() ) { ?>
33
 
34
+ <div class="dashicons dashicons-portfolio"></div>
35
 
36
+ <?php } ?>
37
 
38
+ </th>
39
 
40
+ <td>
41
 
42
+ <code><?php echo esc_html( str_ireplace( Path::get_root(), '', $exclude ) ); ?></code>
43
 
44
+ </td>
45
 
46
+ <td>
47
 
48
+ <?php if ( ( in_array( $exclude, $excludes->get_default_excludes() ) ) || ( Path::get_path() === trailingslashit( Path::get_root() ) . untrailingslashit( $exclude ) ) ) : ?>
49
 
50
+ <?php _e( 'Default rule', 'backupwordpress' ); ?>
51
 
52
+ <?php elseif ( defined( 'HMBKP_EXCLUDE' ) && false !== strpos( HMBKP_EXCLUDE, $exclude ) ) : ?>
53
 
54
+ <?php _e( 'Defined in wp-config.php', 'backupwordpress' ); ?>
55
 
56
+ <?php else : ?>
57
 
58
+ <a href="<?php echo admin_action_url( 'remove_exclude_rule', array(
59
+ 'hmbkp_remove_exclude' => $exclude,
60
+ 'hmbkp_schedule_id' => $schedule->get_id(),
61
+ ) ); ?>" class="delete-action"><?php _e( 'Stop excluding', 'backupwordpress' ); ?></a>
62
 
63
+ <?php endif; ?>
64
 
65
+ </td>
66
 
67
+ </tr>
68
 
69
+ <?php endforeach; ?>
70
 
71
  </tbody>
72
 
93
 
94
  $exclude_string = implode( '|', $excludes->get_excludes_for_regex() );
95
 
96
+ $site_size = new Site_Size( 'file' );
97
+ $excluded_site_size = new Site_Size( 'file', $excludes );
98
 
99
  // Kick off a recursive filesize scan
100
+ $files = list_directory_by_total_filesize( $directory, $excludes ); ?>
101
 
102
  <table class="widefat">
103
 
106
  <tr>
107
  <th></th>
108
  <th scope="col"><?php _e( 'Name', 'backupwordpress' ); ?></th>
109
+ <th scope="col" class="column-format"><?php _e( 'Included Size', 'backupwordpress' ); ?></th>
110
  <th scope="col" class="column-format"><?php _e( 'Permissions', 'backupwordpress' ); ?></th>
111
  <th scope="col" class="column-format"><?php _e( 'Type', 'backupwordpress' ); ?></th>
112
  <th scope="col" class="column-format"><?php _e( 'Status', 'backupwordpress' ); ?></th>
155
  $root = new \SplFileInfo( Path::get_root() );
156
 
157
  $size = $site_size->filesize( $root );
158
+ $excluded_size = $excluded_site_size->filesize( $root ); ?>
 
 
 
 
 
 
 
159
 
160
  <code>
161
+ <?php $excluded_size = is_same_size_format( $size, $excluded_size ) ? (int) size_format( $excluded_size ) : size_format( $excluded_size ); ?>
162
+ <?php echo sprintf( __( '%s of %s', 'backupwordpress' ), esc_html( $excluded_size ), esc_html( size_format( $size ) ) ); ?>
163
+ <a class="dashicons dashicons-update" href="<?php echo esc_url( wp_nonce_url( add_query_arg( 'hmbkp_recalculate_directory_filesize', urlencode( Path::get_root() ) ), 'hmbkp-recalculate_directory_filesize' ) ); ?>"><span><?php _e( 'Refresh', 'backupwordpress' ); ?></span></a>
 
 
 
164
  </code>
165
 
 
 
 
166
  <?php } ?>
167
 
168
  <td>
169
+ <code><?php echo esc_html( substr( sprintf( '%o', fileperms( Path::get_root() ) ), - 4 ) ); ?></code>
170
  </td>
171
 
172
  <td>
173
 
174
+ <code>
175
+
176
+ <?php if ( is_link( Path::get_root() ) ) {
177
+ _e( 'Symlink', 'backupwordpress' );
178
+ } elseif ( is_dir( Path::get_root() ) ) {
179
+ _e( 'Folder', 'backupwordpress' );
180
+ } ?>
181
+
182
+ </code>
183
 
184
  </td>
185
 
257
 
258
  if ( false !== $size ) {
259
 
260
+ $size = size_format( $size ) ?: '0 B';
261
+ $excluded_size = size_format( $excluded_site_size->filesize( $file ) ) ?: '0'; ?>
 
 
 
262
 
263
  <code>
264
 
265
+ <?php if ( $file->isDir() ) {
266
+ $excluded_size = is_same_size_format( $size, $excluded_size ) ? (int) size_format( $excluded_size ) : size_format( $excluded_size );
267
+ echo sprintf( __( '%s of %s', 'backupwordpress' ), esc_html( $excluded_size ), esc_html( size_format( $size ) ) );
268
+ } elseif ( ! $is_unreadable ) {
269
+ echo esc_html( $size );
270
+ } else {
271
+ echo '-';
272
+ } ?>
273
 
274
  </code>
275
 
283
  </td>
284
 
285
  <td>
286
+ <code>
287
+ <?php if ( ! $is_unreadable ) {
288
+ echo esc_html( substr( sprintf( '%o', $file->getPerms() ), - 4 ) );
289
+ } else {
290
+ echo '-';
291
+ } ?>
292
+ </code>
293
  </td>
294
 
295
  <td>
296
+ <code>
297
  <?php if ( $file->isLink() ) { ?>
298
 
299
  <span title="<?php echo esc_attr( wp_normalize_path( $file->getRealPath() ) ); ?>"><?php _e( 'Symlink', 'backupwordpress' ); ?></span>
303
  } else {
304
  _e( 'File', 'backupwordpress' );
305
  } ?>
306
+ </code>
307
  </td>
308
 
309
  <td class="column-format">
backupwordpress.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: BackUpWordPress
4
  Plugin URI: http://bwp.hmn.md/
5
  Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, you'll find me under the Network Settings menu.
6
- Version: 3.5-beta
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  License: GPL-2+
3
  Plugin Name: BackUpWordPress
4
  Plugin URI: http://bwp.hmn.md/
5
  Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, you'll find me under the Network Settings menu.
6
+ Version: 3.5
7
  Author: Human Made Limited
8
  Author URI: http://hmn.md/
9
  License: GPL-2+
classes/class-plugin.php CHANGED
@@ -6,7 +6,7 @@ namespace HM\BackUpWordPress;
6
  * Class Plugin
7
  */
8
  final class Plugin {
9
- const PLUGIN_VERSION = '3.5-beta';
10
 
11
  /**
12
  * @var Plugin The singleton instance.
6
  * Class Plugin
7
  */
8
  final class Plugin {
9
+ const PLUGIN_VERSION = '3.5';
10
 
11
  /**
12
  * @var Plugin The singleton instance.
classes/class-scheduled-backup.php CHANGED
@@ -287,7 +287,7 @@ class Scheduled_Backup {
287
  /**
288
  * Set the schedule start time.
289
  *
290
- * @param timestamp $time
291
  */
292
  public function set_schedule_start_time( $time ) {
293
 
287
  /**
288
  * Set the schedule start time.
289
  *
290
+ * @param Int $time A valid timestamp
291
  */
292
  public function set_schedule_start_time( $time ) {
293
 
composer.json CHANGED
@@ -7,7 +7,7 @@
7
  ],
8
  "type" : "wordpress-plugin",
9
  "homepage" : "https://github.com/humanmade/backupwordpress",
10
- "license" : "GPL-3.0",
11
  "authors" : [
12
  {
13
  "name" : "Human Made Limited",
7
  ],
8
  "type" : "wordpress-plugin",
9
  "homepage" : "https://github.com/humanmade/backupwordpress",
10
+ "license" : "GPL-2.0",
11
  "authors" : [
12
  {
13
  "name" : "Human Made Limited",
functions/core.php CHANGED
@@ -613,7 +613,7 @@ function ignore_stderr() {
613
  * @todo doesn't really belong in this class, should just be a function
614
  * @return array returns an array of files ordered by filesize
615
  */
616
- function list_directory_by_total_filesize( $directory ) {
617
 
618
  $files = $files_with_no_size = $empty_files = $files_with_size = $unreadable_files = array();
619
 
@@ -627,7 +627,7 @@ function list_directory_by_total_filesize( $directory ) {
627
  $finder->ignoreUnreadableDirs();
628
  $finder->depth( '== 0' );
629
 
630
- $site_size = new Site_Size;
631
 
632
  $files = $finder->in( $directory );
633
 
613
  * @todo doesn't really belong in this class, should just be a function
614
  * @return array returns an array of files ordered by filesize
615
  */
616
+ function list_directory_by_total_filesize( $directory, Excludes $excludes ) {
617
 
618
  $files = $files_with_no_size = $empty_files = $files_with_size = $unreadable_files = array();
619
 
627
  $finder->ignoreUnreadableDirs();
628
  $finder->depth( '== 0' );
629
 
630
+ $site_size = new Site_Size( 'file', $excludes );
631
 
632
  $files = $finder->in( $directory );
633
 
functions/interface.php CHANGED
@@ -208,8 +208,8 @@ function plugin_row( $plugins ) {
208
 
209
  $menu = is_multisite() ? 'Settings' : 'Tools';
210
 
211
- if ( isset( $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php'] ) ) {
212
- $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] = str_replace( 'Once activated you\'ll find me under <strong>' . $menu . ' &rarr; Backups</strong>', 'Find me under <strong><a href="' . esc_url( get_settings_url() ) . '">' . $menu . ' &rarr; Backups</a></strong>', $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] );
213
  }
214
 
215
  return $plugins;
@@ -312,7 +312,7 @@ function translated_schedule_title( $slug, $title ) {
312
  'database-monthly' => esc_html__( 'Database Monthly', 'backupwordpress' ),
313
  'complete-manually' => esc_html__( 'Complete Manually', 'backupwordpress' ),
314
  'file-manually' => esc_html__( 'File Manually', 'backupwordpress' ),
315
- 'database-manually' => esc_html__( 'Database Manually', 'backupwordpress' )
316
  );
317
 
318
  if ( isset( $titles[ $slug ] ) ) {
@@ -379,7 +379,7 @@ function get_settings_errors() {
379
  *
380
  * @return bool
381
  */
382
- function clear_settings_errors(){
383
  return delete_transient( 'hmbkp_settings_errors' );
384
  }
385
 
@@ -412,3 +412,23 @@ function path_in_php_open_basedir( $path, $ini_get = 'ini_get' ) {
412
  return false;
413
 
414
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
 
209
  $menu = is_multisite() ? 'Settings' : 'Tools';
210
 
211
+ if ( isset( $plugins[ HMBKP_PLUGIN_SLUG . '/backupwordpress.php' ] ) ) {
212
+ $plugins[ HMBKP_PLUGIN_SLUG . '/backupwordpress.php' ]['Description'] = str_replace( 'Once activated you\'ll find me under <strong>' . $menu . ' &rarr; Backups</strong>', 'Find me under <strong><a href="' . esc_url( get_settings_url() ) . '">' . $menu . ' &rarr; Backups</a></strong>', $plugins[ HMBKP_PLUGIN_SLUG . '/backupwordpress.php' ]['Description'] );
213
  }
214
 
215
  return $plugins;
312
  'database-monthly' => esc_html__( 'Database Monthly', 'backupwordpress' ),
313
  'complete-manually' => esc_html__( 'Complete Manually', 'backupwordpress' ),
314
  'file-manually' => esc_html__( 'File Manually', 'backupwordpress' ),
315
+ 'database-manually' => esc_html__( 'Database Manually', 'backupwordpress' ),
316
  );
317
 
318
  if ( isset( $titles[ $slug ] ) ) {
379
  *
380
  * @return bool
381
  */
382
+ function clear_settings_errors() {
383
  return delete_transient( 'hmbkp_settings_errors' );
384
  }
385
 
412
  return false;
413
 
414
  }
415
+
416
+ /**
417
+ * Check if two filesizes are of the same size format
418
+ *
419
+ * E.g. 22 MB and 44 MB are both MB so return true. Whereas
420
+ * 22 KB and 12 TB are not so return false.
421
+ *
422
+ * @param int $size
423
+ * @param int $other_size
424
+ *
425
+ * @return boolean Whether the two filesizes are of the same magnitude
426
+ */
427
+ function is_same_size_format( $size, $other_size ) {
428
+
429
+ if ( ! is_int( $size ) || ! is_int( $other_size ) ) {
430
+ return false;
431
+ }
432
+
433
+ return preg_replace( '/[0-9]+/', '', size_format( $size ) ) === preg_replace( '/[0-9]+/', '', size_format( $other_size ) );
434
+ }
languages/backupwordpress.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the GPL-2+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: BackUpWordPress 3.4.6\n"
6
  "Report-Msgid-Bugs-To: backupwordpress@hmn.md\n"
7
- "POT-Creation-Date: 2016-03-03 11:11:49+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -80,11 +80,11 @@ msgid ""
80
  "for manual backups. See the %3$s for more details."
81
  msgstr ""
82
 
83
- #: admin/backups-table.php:14 admin/schedule-form-excludes.php:108
84
  msgid "Size"
85
  msgstr ""
86
 
87
- #: admin/backups-table.php:15 admin/schedule-form-excludes.php:110
88
  msgid "Type"
89
  msgstr ""
90
 
@@ -441,59 +441,63 @@ msgid ""
441
  "backup."
442
  msgstr ""
443
 
444
- #: admin/schedule-form-excludes.php:107
445
  msgid "Name"
446
  msgstr ""
447
 
448
  #: admin/schedule-form-excludes.php:109
 
 
 
 
449
  msgid "Permissions"
450
  msgstr ""
451
 
452
- #: admin/schedule-form-excludes.php:111
453
  msgid "Status"
454
  msgstr ""
455
 
456
- #: admin/schedule-form-excludes.php:171 admin/schedule-form-excludes.php:279
 
 
 
 
457
  msgid "Refresh"
458
  msgstr ""
459
 
460
- #: admin/schedule-form-excludes.php:187 admin/schedule-form-excludes.php:303
461
  msgid "Symlink"
462
  msgstr ""
463
 
464
- #: admin/schedule-form-excludes.php:189 admin/schedule-form-excludes.php:306
465
  msgid "Folder"
466
  msgstr ""
467
 
468
- #: admin/schedule-form-excludes.php:279
469
- msgid "Recalculate the size of this directory"
470
- msgstr ""
471
-
472
- #: admin/schedule-form-excludes.php:308
473
  msgid "File"
474
  msgstr ""
475
 
476
- #: admin/schedule-form-excludes.php:317
477
  msgid "Unreadable files won't be backed up."
478
  msgstr ""
479
 
480
- #: admin/schedule-form-excludes.php:317
481
  msgid "Unreadable"
482
  msgstr ""
483
 
484
- #: admin/schedule-form-excludes.php:321
485
  msgid "Excluded"
486
  msgstr ""
487
 
488
- #: admin/schedule-form-excludes.php:337
489
  msgid "Exclude &rarr;"
490
  msgstr ""
491
 
492
- #: admin/schedule-form-excludes.php:350
493
  msgid "This folder is empty"
494
  msgstr ""
495
 
496
- #: admin/schedule-form-excludes.php:361 admin/schedule-form.php:204
497
  #: admin/schedule-settings.php:90
498
  msgid "Done"
499
  msgstr ""
2
  # This file is distributed under the GPL-2+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: BackUpWordPress 3.5-beta\n"
6
  "Report-Msgid-Bugs-To: backupwordpress@hmn.md\n"
7
+ "POT-Creation-Date: 2016-03-10 17:03:08+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
80
  "for manual backups. See the %3$s for more details."
81
  msgstr ""
82
 
83
+ #: admin/backups-table.php:14
84
  msgid "Size"
85
  msgstr ""
86
 
87
+ #: admin/backups-table.php:15 admin/schedule-form-excludes.php:111
88
  msgid "Type"
89
  msgstr ""
90
 
441
  "backup."
442
  msgstr ""
443
 
444
+ #: admin/schedule-form-excludes.php:108
445
  msgid "Name"
446
  msgstr ""
447
 
448
  #: admin/schedule-form-excludes.php:109
449
+ msgid "Included Size"
450
+ msgstr ""
451
+
452
+ #: admin/schedule-form-excludes.php:110
453
  msgid "Permissions"
454
  msgstr ""
455
 
456
+ #: admin/schedule-form-excludes.php:112
457
  msgid "Status"
458
  msgstr ""
459
 
460
+ #: admin/schedule-form-excludes.php:162 admin/schedule-form-excludes.php:267
461
+ msgid "%s of %s"
462
+ msgstr ""
463
+
464
+ #: admin/schedule-form-excludes.php:163
465
  msgid "Refresh"
466
  msgstr ""
467
 
468
+ #: admin/schedule-form-excludes.php:177 admin/schedule-form-excludes.php:299
469
  msgid "Symlink"
470
  msgstr ""
471
 
472
+ #: admin/schedule-form-excludes.php:179 admin/schedule-form-excludes.php:302
473
  msgid "Folder"
474
  msgstr ""
475
 
476
+ #: admin/schedule-form-excludes.php:304
 
 
 
 
477
  msgid "File"
478
  msgstr ""
479
 
480
+ #: admin/schedule-form-excludes.php:313
481
  msgid "Unreadable files won't be backed up."
482
  msgstr ""
483
 
484
+ #: admin/schedule-form-excludes.php:313
485
  msgid "Unreadable"
486
  msgstr ""
487
 
488
+ #: admin/schedule-form-excludes.php:317
489
  msgid "Excluded"
490
  msgstr ""
491
 
492
+ #: admin/schedule-form-excludes.php:333
493
  msgid "Exclude &rarr;"
494
  msgstr ""
495
 
496
+ #: admin/schedule-form-excludes.php:346
497
  msgid "This folder is empty"
498
  msgstr ""
499
 
500
+ #: admin/schedule-form-excludes.php:357 admin/schedule-form.php:204
501
  #: admin/schedule-settings.php:90
502
  msgid "Done"
503
  msgstr ""
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: humanmade, willmot, pauldewouters, joehoyle, mattheu, tcrsavage, c
3
  Tags: back up, backup, backups, database, zip, db, files, archive, wp-cli, humanmade
4
  Requires at least: 3.9
5
  Tested up to: 4.4.2
6
- Stable tag: 3.4.5
7
 
8
  Simple automated backups of your WordPress-powered website.
9
 
@@ -158,6 +158,20 @@ users should see major improvements to reliability.
158
 
159
  == Changelog ==
160
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  ### 3.4.5 / 2016-02-23
162
 
163
  * Fix fatal error on upgrade
3
  Tags: back up, backup, backups, database, zip, db, files, archive, wp-cli, humanmade
4
  Requires at least: 3.9
5
  Tested up to: 4.4.2
6
+ Stable tag: 3.5
7
 
8
  Simple automated backups of your WordPress-powered website.
9
 
158
 
159
  == Changelog ==
160
 
161
+ ### 3.5 / 2016-03-10
162
+
163
+ * Reduce duplication and improve code readability when echoing filesizes
164
+ * Improve how filesizes are handled in the Your Site list
165
+ * Switch to storing site size data in a file, large sites could cause database errors when saving the option
166
+ * Re-remove the PHP User and Group Requirements
167
+ * Check that the backup file exists before attempting to check it's contents
168
+ * Only call getPerms on readable files to ensure we avoid a fatal error
169
+ * Ensure error are correctly check in verify_backup
170
+ * Use Symfony Process instead of shell_exec for all our system calls
171
+ * More unit tests
172
+ * Update dependencies
173
+ * Detect disabled functions defined in php.ini, now accounts for different separators.
174
+
175
  ### 3.4.5 / 2016-02-23
176
 
177
  * Fix fatal error on upgrade