BackUpWordPress - Version 3.1.0

Version Description

= 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.1.0
Comparing to
See all releases

Code changes from version 3.0.4 to 3.1.0

admin/actions.php CHANGED
@@ -69,7 +69,7 @@ function hmbkp_request_do_backup() {
69
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
70
  check_ajax_referer( 'hmbkp_run_schedule', 'hmbkp_run_schedule_nonce' );
71
  } else {
72
- check_admin_referer( 'hmbkp-run-schedule', 'hmbkp-run-schedule' );
73
  }
74
 
75
  // Fixes an issue on servers which only allow a single session per client
@@ -89,12 +89,14 @@ function hmbkp_request_do_backup() {
89
 
90
  ignore_user_abort( true );
91
 
92
- hmbkp_cleanup();
93
 
94
  $schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( urldecode( $_GET['hmbkp_schedule_id'] ) ) );
95
 
96
  $schedule->run();
97
 
 
 
98
  $errors = array_merge( $schedule->get_errors(), $schedule->get_warnings() );
99
 
100
  $error_message = '';
@@ -123,7 +125,7 @@ function hmbkp_request_do_backup() {
123
 
124
  }
125
  add_action( 'wp_ajax_hmbkp_run_schedule', 'hmbkp_request_do_backup' );
126
- add_action( 'admin_post_hmbkp_request_do_backup', 'hmbkp_request_do_backup' );
127
 
128
  /**
129
  * Send the download file to the browser and then redirect back to the backups page
@@ -142,11 +144,7 @@ function hmbkp_request_download_backup() {
142
 
143
  if ( $is_apache ) {
144
 
145
- // Force the .htaccess to be rebuilt
146
- if ( file_exists( hmbkp_path() . '/.htaccess' ) )
147
- unlink( hmbkp_path() . '/.htaccess' );
148
-
149
- hmbkp_path();
150
 
151
  $url = add_query_arg( 'key', HMBKP_SECURE_KEY, $url );
152
 
@@ -177,7 +175,7 @@ function hmbkp_request_cancel_backup() {
177
  unlink( $schedule->get_schedule_running_path() );
178
  }
179
 
180
- hmbkp_cleanup();
181
 
182
  wp_safe_redirect( hmbkp_get_settings_url(), 303 );
183
 
@@ -193,7 +191,7 @@ function hmbkp_dismiss_error() {
193
 
194
  check_admin_referer( 'hmbkp_dismiss_error', 'hmbkp_dismiss_error_nonce' );
195
 
196
- hmbkp_cleanup();
197
 
198
  HMBKP_Notices::get_instance()->clear_all_notices();
199
 
@@ -537,24 +535,27 @@ add_action( 'load-' . HMBKP_ADMIN_PAGE, 'hmbkp_recalculate_directory_filesize' )
537
 
538
  function hmbkp_calculate_site_size() {
539
 
540
- if ( isset( $_GET['hmbkp_schedule_id'] ) ) {
 
541
  $current_schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( $_GET['hmbkp_schedule_id'] ) );
 
542
  } else {
 
543
  // Refresh the schedules from the database to make sure we have the latest changes
544
  HMBKP_Schedules::get_instance()->refresh_schedules();
545
 
546
  $schedules = HMBKP_Schedules::get_instance()->get_schedules();
547
 
548
- if ( ! empty( $_GET['hmbkp_schedule_id'] ) ) {
549
- $current_schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( $_GET['hmbkp_schedule_id'] ) );
550
- } else {
551
- $current_schedule = reset( $schedules );
552
- }
 
 
 
553
  }
554
 
555
- // Start calculating
556
- $root = new SplFileInfo( $current_schedule->get_root() );
557
- $size = $current_schedule->filesize( $root );
558
  }
559
  add_action( 'load-' . HMBKP_ADMIN_PAGE, 'hmbkp_calculate_site_size' );
560
 
@@ -563,20 +564,43 @@ add_action( 'load-' . HMBKP_ADMIN_PAGE, 'hmbkp_calculate_site_size' );
563
  */
564
  function hmbkp_heartbeat_received( $response, $data ) {
565
 
566
- if ( ! empty( $data['hmbkp_is_in_progress'] ) ) {
 
 
567
 
568
- $schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( urldecode( $data['hmbkp_is_in_progress'] ) ) );
569
 
570
- if ( ! $schedule->get_status() ) {
571
- $response['hmbkp_schedule_status'] = 0;
572
 
573
- } else {
574
- $response['hmbkp_schedule_status'] = hmbkp_schedule_status( $schedule, false );
 
 
 
 
 
 
 
575
 
576
  }
577
 
578
- }
579
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
580
  return $response;
581
 
582
  }
@@ -687,6 +711,16 @@ function hmbkp_ajax_cron_test() {
687
 
688
  check_ajax_referer( 'hmbkp_nonce', 'nonce' );
689
 
 
 
 
 
 
 
 
 
 
 
690
  if ( defined( 'ALTERNATE_WP_CRON' ) ) {
691
 
692
  delete_option( 'hmbkp_wp_cron_test_failed' );
@@ -697,17 +731,22 @@ function hmbkp_ajax_cron_test() {
697
 
698
  }
699
 
700
- $response = wp_remote_head( site_url( 'wp-cron.php' ), array( 'timeout' => 30 ) );
 
 
 
 
 
701
 
702
- if ( is_wp_error( $response ) ) {
703
 
704
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'backupwordpress' ) . '</strong> ' . sprintf( __( '%1$s is returning a %2$s response which could mean cron jobs aren\'t getting fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. See the %3$s for more details.', 'backupwordpress' ), '<code>wp-cron.php</code>', '<code>' . $response->get_error_message() . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
705
 
706
  update_option( 'hmbkp_wp_cron_test_failed', true );
707
 
708
- } elseif ( wp_remote_retrieve_response_code( $response ) !== 200 ) {
709
 
710
- echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'backupwordpress' ) . '</strong> ' . sprintf( __( '%1$s is returning a %2$s response which could mean cron jobs aren\'t getting fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. See the %3$s for more details.', 'backupwordpress' ), '<code>wp-cron.php</code>', '<code>' . esc_html( wp_remote_retrieve_response_code( $response ) ) . ' ' . esc_html( get_status_header_desc( wp_remote_retrieve_response_code( $response ) ) ) . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
711
 
712
  update_option( 'hmbkp_wp_cron_test_failed', true );
713
 
@@ -716,6 +755,7 @@ function hmbkp_ajax_cron_test() {
716
  echo 1;
717
 
718
  delete_option( 'hmbkp_wp_cron_test_failed' );
 
719
 
720
  }
721
 
69
  if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
70
  check_ajax_referer( 'hmbkp_run_schedule', 'hmbkp_run_schedule_nonce' );
71
  } else {
72
+ check_admin_referer( 'hmbkp_run_schedule', 'hmbkp_run_schedule_nonce' );
73
  }
74
 
75
  // Fixes an issue on servers which only allow a single session per client
89
 
90
  ignore_user_abort( true );
91
 
92
+ HMBKP_Path::get_instance()->cleanup();
93
 
94
  $schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( urldecode( $_GET['hmbkp_schedule_id'] ) ) );
95
 
96
  $schedule->run();
97
 
98
+ HMBKP_Notices::get_instance()->clear_all_notices();
99
+
100
  $errors = array_merge( $schedule->get_errors(), $schedule->get_warnings() );
101
 
102
  $error_message = '';
125
 
126
  }
127
  add_action( 'wp_ajax_hmbkp_run_schedule', 'hmbkp_request_do_backup' );
128
+ add_action( 'admin_post_hmbkp_run_schedule', 'hmbkp_request_do_backup' );
129
 
130
  /**
131
  * Send the download file to the browser and then redirect back to the backups page
144
 
145
  if ( $is_apache ) {
146
 
147
+ HMBKP_Path::get_instance()->protect_path( 'reset' );
 
 
 
 
148
 
149
  $url = add_query_arg( 'key', HMBKP_SECURE_KEY, $url );
150
 
175
  unlink( $schedule->get_schedule_running_path() );
176
  }
177
 
178
+ HMBKP_Path::get_instance()->cleanup();
179
 
180
  wp_safe_redirect( hmbkp_get_settings_url(), 303 );
181
 
191
 
192
  check_admin_referer( 'hmbkp_dismiss_error', 'hmbkp_dismiss_error_nonce' );
193
 
194
+ HMBKP_Path::get_instance()->cleanup();
195
 
196
  HMBKP_Notices::get_instance()->clear_all_notices();
197
 
535
 
536
  function hmbkp_calculate_site_size() {
537
 
538
+ if ( isset( $_GET['hmbkp_schedule_id'] ) ) {
539
+
540
  $current_schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( $_GET['hmbkp_schedule_id'] ) );
541
+
542
  } else {
543
+
544
  // Refresh the schedules from the database to make sure we have the latest changes
545
  HMBKP_Schedules::get_instance()->refresh_schedules();
546
 
547
  $schedules = HMBKP_Schedules::get_instance()->get_schedules();
548
 
549
+ $current_schedule = reset( $schedules );
550
+
551
+ }
552
+
553
+ if ( ! $current_schedule->is_site_size_cached() ) {
554
+ // Start calculating
555
+ $root = new SplFileInfo( $current_schedule->get_root() );
556
+ $size = $current_schedule->filesize( $root );
557
  }
558
 
 
 
 
559
  }
560
  add_action( 'load-' . HMBKP_ADMIN_PAGE, 'hmbkp_calculate_site_size' );
561
 
564
  */
565
  function hmbkp_heartbeat_received( $response, $data ) {
566
 
567
+ $response['heartbeat_interval'] = 'fast';
568
+
569
+ if ( ! empty( $data['hmbkp_schedule_id'] ) ) {
570
 
571
+ $schedule = new HMBKP_Scheduled_Backup( sanitize_text_field( urldecode( $data['hmbkp_schedule_id'] ) ) );
572
 
573
+ if ( ! empty( $data['hmbkp_is_in_progress'] ) ) {
 
574
 
575
+ if ( ! $schedule->get_status() ) {
576
+ $response['hmbkp_schedule_status'] = 0;
577
+
578
+ // Slow the heartbeat back down
579
+ $response['heartbeat_interval'] = 'slow';
580
+
581
+ } else {
582
+ $response['hmbkp_schedule_status'] = hmbkp_schedule_status( $schedule, false );
583
+ }
584
 
585
  }
586
 
587
+ if ( ! empty( $data['hmbkp_client_request'] ) ) {
588
 
589
+ // Pass the site size to be displayed when it's ready.
590
+ if ( $schedule->is_site_size_cached() ) {
591
+
592
+ $response['hmbkp_site_size'] = $schedule->get_formatted_site_size();
593
+
594
+ ob_start();
595
+ require( HMBKP_PLUGIN_PATH . 'admin/schedule-form-excludes.php' );
596
+ $response['hmbkp_dir_sizes'] = ob_get_clean();
597
+
598
+ // Slow the heartbeat back down
599
+ $response['heartbeat_interval'] = 'slow';
600
+ }
601
+ }
602
+
603
+ }
604
  return $response;
605
 
606
  }
711
 
712
  check_ajax_referer( 'hmbkp_nonce', 'nonce' );
713
 
714
+ // Only run the test once per week
715
+ if ( get_transient( 'hmbkp_wp_cron_test_beacon' ) ) {
716
+
717
+ echo 1;
718
+
719
+ die;
720
+
721
+ }
722
+
723
+ // Skip the test if they are using Alternate Cron
724
  if ( defined( 'ALTERNATE_WP_CRON' ) ) {
725
 
726
  delete_option( 'hmbkp_wp_cron_test_failed' );
731
 
732
  }
733
 
734
+ $url = site_url( 'wp-cron.php' );
735
+
736
+ // Attempt to load wp-cron.php 3 times, if we get the same error each time then inform the user.
737
+ $response1 = wp_remote_head( $url, array( 'timeout' => 30 ) );
738
+ $response2 = wp_remote_head( $url, array( 'timeout' => 30 ) );
739
+ $response3 = wp_remote_head( $url, array( 'timeout' => 30 ) );
740
 
741
+ if ( is_wp_error( $response1 ) && is_wp_error( $response2 ) && is_wp_error( $response3 ) ) {
742
 
743
+ echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'backupwordpress' ) . '</strong> ' . sprintf( __( '%1$s is returning a %2$s response which could mean cron jobs aren\'t getting fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. See the %3$s for more details.', 'backupwordpress' ), '<code>wp-cron.php</code>', '<code>' . $response1->get_error_message() . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
744
 
745
  update_option( 'hmbkp_wp_cron_test_failed', true );
746
 
747
+ } elseif ( ! in_array( 200, array_map( 'wp_remote_retrieve_response_code', array( $response1, $response2, $response3 ) ) ) ) {
748
 
749
+ echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'backupwordpress' ) . '</strong> ' . sprintf( __( '%1$s is returning a %2$s response which could mean cron jobs aren\'t getting fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. See the %3$s for more details.', 'backupwordpress' ), '<code>wp-cron.php</code>', '<code>' . esc_html( wp_remote_retrieve_response_code( $response1 ) ) . ' ' . esc_html( get_status_header_desc( wp_remote_retrieve_response_code( $response1 ) ) ) . '</code>', '<a href="http://wordpress.org/extend/plugins/backupwordpress/faq/">FAQ</a>' ) . '</p></div>';
750
 
751
  update_option( 'hmbkp_wp_cron_test_failed', true );
752
 
755
  echo 1;
756
 
757
  delete_option( 'hmbkp_wp_cron_test_failed' );
758
+ set_transient( 'hmbkp_wp_cron_test_beacon', 1, WEEK_IN_SECONDS );
759
 
760
  }
761
 
admin/constants.php CHANGED
@@ -14,7 +14,7 @@
14
  <p><?php printf( __( 'You\'ve set it to: %s', 'backupwordpress' ), '<code>' . HMBKP_PATH . '</code>' ); ?></p>
15
  <?php } ?>
16
 
17
- <p><?php printf( __( 'The path to folder you would like to store your backup files in, defaults to %s.', 'backupwordpress' ), '<code>' . esc_html( hmbkp_path_default() ) . '</code>' ); ?> <?php _e( 'e.g.', 'backupwordpress' ); ?> <code>define( 'HMBKP_PATH', '/home/willmot/backups' );</code></p>
18
 
19
  </td>
20
 
14
  <p><?php printf( __( 'You\'ve set it to: %s', 'backupwordpress' ), '<code>' . HMBKP_PATH . '</code>' ); ?></p>
15
  <?php } ?>
16
 
17
+ <p><?php printf( __( 'The path to folder you would like to store your backup files in, defaults to %s.', 'backupwordpress' ), '<code>' . esc_html( hmbkp_path() ) . '</code>' ); ?> <?php _e( 'e.g.', 'backupwordpress' ); ?> <code>define( 'HMBKP_PATH', '/home/willmot/backups' );</code></p>
18
 
19
  </td>
20
 
admin/schedule-sentence.php CHANGED
@@ -1,17 +1,6 @@
1
  <?php
2
 
3
- // Calculated filesize
4
- $cached = $schedule->is_site_size_cached();
5
-
6
- if ( 'database' === $schedule->get_type() ) {
7
- $cached = true;
8
- }
9
-
10
- $filesize = $cached ? '(<code title="' . __( 'Backups will be compressed and should be smaller than this.', 'backupwordpress' ) . '">' . esc_attr( $schedule->get_formatted_site_size() ) . '</code>)' : '(<code class="calculating" title="' . __( 'this shouldn\'t take long&hellip;', 'backupwordpress' ) . '">' . __( 'calculating the size of your backup&hellip;', 'backupwordpress' ) . '</code>)';
11
-
12
- if ( isset( $_GET['hmbkp_add_schedule'] ) ) {
13
- $filesize = '';
14
- }
15
 
16
  // Backup Type
17
  $type = strtolower( hmbkp_human_get_type( $schedule->get_type() ) );
@@ -143,4 +132,26 @@ if ( ! empty( $services ) && count( $services ) > 1 ) {
143
 
144
  <?php require( HMBKP_PLUGIN_PATH . 'admin/schedule-settings.php' ); ?>
145
 
146
- </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
 
3
+ $filesize = hmbkp_get_site_size_text( $schedule );
 
 
 
 
 
 
 
 
 
 
 
4
 
5
  // Backup Type
6
  $type = strtolower( hmbkp_human_get_type( $schedule->get_type() ) );
132
 
133
  <?php require( HMBKP_PLUGIN_PATH . 'admin/schedule-settings.php' ); ?>
134
 
135
+ </div>
136
+
137
+ <?php
138
+
139
+ /**
140
+ * Returns a formatted string containing the calculated total site size or a message
141
+ * to indicate it is being calculated.
142
+ *
143
+ * @param HMBKP_Scheduled_Backup $schedule
144
+ *
145
+ * @return string
146
+ */
147
+ function hmbkp_get_site_size_text( HMBKP_Scheduled_Backup $schedule ) {
148
+
149
+ if ( isset( $_GET['hmbkp_add_schedule'] ) ) {
150
+ return '';
151
+ } elseif ( ( 'database' === $schedule->get_type() ) || $schedule->is_site_size_cached() ) {
152
+ return sprintf( '(<code title="' . __( 'Backups will be compressed and should be smaller than this.', 'backupwordpress' ) . '">%s</code>)', esc_attr( $schedule->get_formatted_site_size() ) );
153
+ } else {
154
+ return sprintf('(<code class="calculating" title="' . __( 'this shouldn\'t take long&hellip;', 'backupwordpress' ) . '">' . __( 'calculating the size of your backup&hellip;', 'backupwordpress' ) . '</code>)');
155
+ }
156
+
157
+ }
admin/schedule-settings.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  <div class="hmbkp-schedule-actions row-actions">
4
 
5
- <a class="hmbkp-run" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'hmbkp_run_schedule', 'hmbkp_schedule_id' => $schedule->get_id() ), hmbkp_get_settings_url() ) ), 'hmbkp-run-schedule' ); ?>"><?php _e( 'Run now', 'backupwordpress' ); ?></a> |
6
 
7
  <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'hmbkp_edit_schedule', 'hmbkp_panel' => 'hmbkp_edit_schedule_settings', 'hmbkp_schedule_id' => $schedule->get_id() ), hmbkp_get_settings_url() ), 'hmbkp-edit-schedule' ); ?>"><?php _e( 'Settings', 'backupwordpress' ); ?></a> |
8
 
2
 
3
  <div class="hmbkp-schedule-actions row-actions">
4
 
5
+ <a class="hmbkp-run" href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'hmbkp_run_schedule', 'hmbkp_schedule_id' => $schedule->get_id() ), admin_url( 'admin-post.php' ) ), 'hmbkp_run_schedule', 'hmbkp_run_schedule_nonce' ) ); ?>"><?php _e( 'Run now', 'backupwordpress' ); ?></a> |
6
 
7
  <a href="<?php echo esc_url( add_query_arg( array( 'action' => 'hmbkp_edit_schedule', 'hmbkp_panel' => 'hmbkp_edit_schedule_settings', 'hmbkp_schedule_id' => $schedule->get_id() ), hmbkp_get_settings_url() ), 'hmbkp-edit-schedule' ); ?>"><?php _e( 'Settings', 'backupwordpress' ); ?></a> |
8
 
admin/server-info.php CHANGED
@@ -8,30 +8,58 @@
8
 
9
  <?php foreach ( HMBKP_Requirements::get_requirements( $group ) as $requirement ) : ?>
10
 
11
- <?php if ( ( is_string( $requirement->raw_result() ) && strlen( $requirement->result() ) < 20 ) || is_bool( $requirement->raw_result() ) ) { ?>
12
 
13
- <tr>
14
 
15
- <td><?php echo esc_html( $requirement->name() ); ?></td>
16
 
17
- <td>
18
- <code><?php echo esc_html( $requirement->result() ); ?></code>
19
- </td>
20
 
21
- </tr>
22
 
23
- <?php } else { ?>
24
 
25
- <tr>
26
 
27
- <td colspan="2">
28
- <?php echo esc_html( $requirement->name() ); ?>
29
- <pre><?php echo esc_html( $requirement->result() ); ?></pre>
30
- </td>
31
 
32
- </tr>
 
33
 
34
- <?php } ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
35
 
36
  <?php endforeach; ?>
37
 
8
 
9
  <?php foreach ( HMBKP_Requirements::get_requirements( $group ) as $requirement ) : ?>
10
 
11
+ <?php if ( ( is_string( $requirement->raw_result() ) && strlen( $requirement->result() ) < 20 ) || is_bool( $requirement->raw_result() ) ) : ?>
12
 
13
+ <tr>
14
 
15
+ <td><?php echo esc_html( $requirement->name() ); ?></td>
16
 
17
+ <td>
18
+ <code><?php echo esc_html( $requirement->result() ); ?></code>
19
+ </td>
20
 
21
+ </tr>
22
 
23
+ <?php elseif ( is_array( $requirement->raw_result() ) ) : ?>
24
 
25
+ <tr>
26
 
27
+ <td><?php echo esc_html( $requirement->name() ); ?></td>
 
 
 
28
 
29
+ <td>
30
+ <ul>
31
 
32
+ <?php foreach ( $requirement->raw_result() as $key => $item ) : ?>
33
+
34
+ <?php if ( is_array( $item ) ) : ?>
35
+
36
+ <pre><?php var_export( $item ); ?></pre>
37
+
38
+ <?php else : ?>
39
+
40
+ <li>
41
+ <?php printf( __( '%1$s - %2$s' ), esc_html( $key ), esc_html( $item ) ); ?>
42
+ </li>
43
+
44
+ <?php endif; ?>
45
+ <?php endforeach; ?>
46
+
47
+ </ul>
48
+ </td>
49
+ </tr>
50
+
51
+ <?php else : ?>
52
+
53
+ <tr>
54
+
55
+ <td colspan="2">
56
+ <?php echo esc_html( $requirement->name() ); ?>
57
+ <pre><?php echo esc_html( $requirement->result() ); ?></pre>
58
+ </td>
59
+
60
+ </tr>
61
+
62
+ <?php endif; ?>
63
 
64
  <?php endforeach; ?>
65
 
admin/upsell.php CHANGED
@@ -7,11 +7,20 @@
7
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-google-drive/">Google Drive</a> |
8
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-amazon-s3/">Amazon S3</a> |
9
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-ftp/">FTP</a> |
10
- <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-rackspace-cloud/" alt="Rackspace Cloud">Rackspace Cloud</a> |
11
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-windows-azure/">Windows Azure</a> |
12
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-dreamobjects/">DreamObjects</a>
13
- </span>
14
 
15
- &nbsp;<span>or buy the <a target="_blank" href="https://bwp.hmn.md/checkout?edd_action=add_to_cart&download_id=36">Developer Bundle</a> now for only &dollar;99 (all Destinations &amp; Unlimited Sites)</span>
16
 
 
 
 
 
 
 
 
 
 
17
  </div>
7
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-google-drive/">Google Drive</a> |
8
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-amazon-s3/">Amazon S3</a> |
9
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-ftp/">FTP</a> |
10
+ <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-rackspace-cloud/">Rackspace Cloud</a> |
11
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-windows-azure/">Windows Azure</a> |
12
  <a target="_blank" href="http://bwp.hmn.md/downloads/backupwordpress-to-dreamobjects/">DreamObjects</a>
13
+ </span>&nbsp;
14
 
15
+ <?php
16
 
17
+ printf(
18
+ __( '%1$sor buy the %2$sDeveloper Bundle%3$s now for only &dollar;99 (all Destinations &amp; Unlimited Sites)%4$s', 'backupwordpress' ),
19
+ '<span>',
20
+ '<a target="_blank" href="https://bwp.hmn.md/checkout?edd_action=add_to_cart&download_id=36">',
21
+ '</a>',
22
+ '</span>'
23
+ );
24
+
25
+ ?>
26
  </div>
assets/hmbkp.css CHANGED
@@ -61,7 +61,7 @@ thead td { border-bottom: 1px solid #e1e1e1; }
61
  .server-info { overflow: auto; max-height: 50%; outline: black 1px solid; }
62
  .server-info pre { max-height: 100px; overflow-x:hidden; }
63
 
64
- #intercom-info { background: #0074a2; color:#fff; display: inline-block;}
65
  #intercom-info:hover { background: #2ea2cc; color:#fff;}
66
  #intercom-info span.dashicons-admin-users { position: relative; display:inline-block; vertical-align: middle; top:-2px; }
67
 
61
  .server-info { overflow: auto; max-height: 50%; outline: black 1px solid; }
62
  .server-info pre { max-height: 100px; overflow-x:hidden; }
63
 
64
+ #intercom-info { background: #0074a2; color:#fff; display: inline-block; margin-bottom: -3px; padding: 3px 8px; }
65
  #intercom-info:hover { background: #2ea2cc; color:#fff;}
66
  #intercom-info span.dashicons-admin-users { position: relative; display:inline-block; vertical-align: middle; top:-2px; }
67
 
assets/hmbkp.js CHANGED
@@ -1,218 +1,212 @@
1
- jQuery( document ).ready( function( $ ) {
2
 
3
- // Don't ever cache ajax requests
4
- $.ajaxSetup( { 'cache' : false } );
5
 
6
- if ( $('select#hmbkp_schedule_recurrence_type').size() ) {
7
 
8
- hmbkpToggleScheduleFields( $('select#hmbkp_schedule_recurrence_type').val() );
9
 
10
- $( document ).on( 'change', 'select#hmbkp_schedule_recurrence_type', function() {
11
- hmbkpToggleScheduleFields( $( this ).val() );
12
- } );
13
 
14
- }
15
 
16
- // Show delete confirm message for delete schedule
17
- $( document ).on( 'click', '.hmbkp-schedule-actions .delete-action', function( e ) {
18
 
19
- if ( ! confirm( hmbkp.delete_schedule ) )
20
- e.preventDefault();
 
21
 
22
- } );
23
 
24
- // Show delete confirm message for delete backup
25
- $( document ).on( 'click', '.hmbkp_manage_backups_row .delete-action', function( e ) {
26
 
27
- if ( ! confirm( hmbkp.delete_backup ) )
28
- e.preventDefault();
 
29
 
30
- } );
31
 
32
- // Show delete confirm message for remove exclude rule
33
- $( document ).on( 'click', '.hmbkp-edit-schedule-excludes-form .delete-action', function( e ) {
34
 
35
- if ( ! confirm( hmbkp.remove_exclude_rule ) )
36
- e.preventDefault();
 
37
 
38
- } );
39
 
40
- // Test the cron response using ajax
41
- $.post( ajaxurl, { 'nonce' : hmbkp.nonce, 'action' : 'hmbkp_cron_test' },
42
- function( data ) {
43
- if ( data != 1 ) {
44
- $( '.wrap > h2' ).after( data );
45
- }
46
- }
47
- );
48
 
49
- // Calculate the estimated backup size
50
- if ( $( '.hmbkp-schedule-sentence .calculating' ).size() ) {
51
 
52
- $.post( ajaxurl, { 'nonce' : hmbkp.nonce, 'action' : 'hmbkp_calculate', 'hmbkp_schedule_id' : $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) },
53
 
54
- function( data ) {
55
 
56
- form = $( '.hmbkp-schedule-settings' ).clone( true );
57
 
58
- if ( data.indexOf( 'title' ) != -1 ) {
59
- $( '.hmbkp-schedule-sentence' ).replaceWith( data );
60
- $( '.hmbkp-schedule-sentence' ).append( form );
61
- }
 
 
 
 
62
 
63
- // Fail silently for now
64
- else {
65
- $( '.calculating' ).remove();
66
- }
67
 
68
- }
69
- ).error( function() {
70
 
71
- // Fail silently for now
72
- $( '.calculating' ).remove();
73
 
74
- } );
75
- }
76
 
77
- // Run a backup
78
- $( document ).on( 'click', '.hmbkp-run', function( e ) {
79
 
80
- $( this ).closest( '.hmbkp-schedule-sentence' ).addClass( 'hmbkp-running' );
81
 
82
- $( '.hmbkp-error' ).removeClass( 'hmbkp-error' );
 
83
 
84
- scheduleId = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' );
85
 
86
- ajaxRequest = $.get(
87
- ajaxurl,
88
- { 'hmbkp_run_schedule_nonce': hmbkp.hmbkp_run_schedule_nonce, 'action' : 'hmbkp_run_schedule', 'hmbkp_schedule_id' : scheduleId }
89
- ).done( function( data ) {
90
 
91
- hmbkpCatchResponseAndOfferToEmail( data );
 
 
 
92
 
93
- // Redirect back on error
94
- } ).fail( function( jqXHR, textStatus ) {
95
 
96
- hmbkpCatchResponseAndOfferToEmail( jqXHR.responseText );
 
97
 
98
- } );
 
 
 
99
 
100
- e.preventDefault();
 
 
 
101
 
102
- } );
 
103
 
104
- // Send the schedule id with the heartbeat
105
- $( document ).on( 'heartbeat-send', function( e, data ) {
106
- if ( $( '.hmbkp-schedule-sentence.hmbkp-running' ).size() ) {
107
- data['hmbkp_is_in_progress'] = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' ) ;
108
- }
109
- } );
110
 
111
- // Update schedule status on heartbeat tick
112
- $( document ).on( 'heartbeat-tick', function( e, data ) {
113
 
114
- // If the schedule has finished then reload the page
115
- if ( data['hmbkp_schedule_status'] === 0 && ! $( '.hmbkp-error' ).size() ) {
116
- location.reload( true );
117
- }
118
 
119
- // If the schedule is still running then update the schedule status
120
- if ( data['hmbkp_schedule_status'] !== 0 ) {
121
- $( '.hmbkp-status' ).replaceWith( data['hmbkp_schedule_status'] );
122
- }
123
 
124
- } );
125
 
126
- } );
 
 
127
 
128
- function hmbkpToggleScheduleFields( recurrence ){
129
 
130
- recurrence = ( typeof recurrence !== 'undefined' ) ? recurrence : 'manually';
 
 
131
 
132
- var settingFields = jQuery( '.recurring-setting');
133
- var scheduleSettingFields = jQuery( '#schedule-start');
134
- var twiceDailyNote = jQuery( 'p.twice-js' );
 
 
 
135
 
136
- switch( recurrence ) {
 
 
 
 
137
 
138
- case 'manually':
139
- settingFields.hide();
140
- break;
 
 
 
 
141
 
142
- case 'hmbkp_hourly' : // fall through
143
- case 'hmbkp_daily' :
144
- settingFields.hide();
145
- scheduleSettingFields.show();
146
- twiceDailyNote.hide();
147
- break;
148
 
149
- case 'hmbkp_twicedaily' :
150
- settingFields.hide();
151
- scheduleSettingFields.show();
152
- twiceDailyNote.show();
153
- break;
154
-
155
- case 'hmbkp_weekly' : // fall through
156
- case 'hmbkp_fortnightly' :
157
- settingFields.hide();
158
- jQuery( '#start-day' ).show();
159
- scheduleSettingFields.show();
160
- twiceDailyNote.hide();
161
- break;
162
-
163
- case 'hmbkp_monthly' :
164
- settingFields.hide();
165
- scheduleSettingFields.show();
166
- jQuery( '#start-date' ).show();
167
- twiceDailyNote.hide();
168
- break;
169
-
170
- }
171
 
172
  }
173
 
174
  function hmbkpCatchResponseAndOfferToEmail( data ) {
175
 
176
- // Backup Succeeded
177
- if ( ! data || data == 0 ) {
178
- location.reload( true );
179
- }
180
 
181
- // The backup failed, show the error and offer to have it emailed back
182
- else {
183
 
184
- jQuery( '.hmbkp-schedule-sentence.hmbkp-running' ).removeClass( 'hmbkp-running' ).addClass( 'hmbkp-error' );
185
 
186
- jQuery.post(
187
- ajaxurl,
188
- { 'nonce' : hmbkp.nonce, 'action' : 'hmbkp_backup_error', 'hmbkp_error' : data },
189
- function( data ) {
190
 
191
- if ( ! data || data == 0 ) {
192
  return;
193
  } else {
194
- location.reload(true);
195
  }
196
- }
197
- );
198
-
199
- }
200
 
201
- jQuery( document ).one( 'click', '.hmbkp_send_error_via_email', function( e ) {
202
 
203
- e.preventDefault();
204
 
205
- jQuery( this ).addClass( 'hmbkp-ajax-loading' ).attr( 'disabled', 'disabled' );
206
 
207
- jQuery.post(
208
- ajaxurl,
209
- { 'nonce' : hmbkp.nonce, 'action' : 'hmbkp_email_error', 'hmbkp_error' : data },
210
- function( data ) {
211
- //jQuery.colorbox.close();
212
- }
213
 
214
- )
 
 
 
 
 
 
215
 
216
- } );
217
 
218
  }
1
+ jQuery(document).ready(function ( $ ) {
2
 
3
+ // Don't ever cache ajax requests
4
+ $.ajaxSetup( {'cache': false} );
5
 
6
+ if ( $( 'select#hmbkp_schedule_recurrence_type' ).size() ) {
7
 
8
+ hmbkpToggleScheduleFields( $( 'select#hmbkp_schedule_recurrence_type' ).val() );
9
 
10
+ $( document ).on( 'change', 'select#hmbkp_schedule_recurrence_type', function () {
11
+ hmbkpToggleScheduleFields( $( this ).val() );
12
+ });
13
 
14
+ }
15
 
16
+ // Show delete confirm message for delete schedule
17
+ $( document ).on( 'click', '.hmbkp-schedule-actions .delete-action', function ( e ) {
18
 
19
+ if ( ! confirm( hmbkp.delete_schedule ) ) {
20
+ e.preventDefault();
21
+ }
22
 
23
+ } );
24
 
25
+ // Show delete confirm message for delete backup
26
+ $( document ).on( 'click', '.hmbkp_manage_backups_row .delete-action', function ( e ) {
27
 
28
+ if ( ! confirm(hmbkp.delete_backup ) ) {
29
+ e.preventDefault();
30
+ }
31
 
32
+ } );
33
 
34
+ // Show delete confirm message for remove exclude rule
35
+ $( document ).on( 'click', '.hmbkp-edit-schedule-excludes-form .delete-action', function ( e ) {
36
 
37
+ if ( ! confirm(hmbkp.remove_exclude_rule ) ) {
38
+ e.preventDefault();
39
+ }
40
 
41
+ });
42
 
43
+ // Test the cron response using ajax
44
+ $.post( ajaxurl, {'nonce': hmbkp.nonce, 'action': 'hmbkp_cron_test'},
45
+ function ( data ) {
46
+ if ( data !== '1' ) {
47
+ $( '.wrap > h2' ).after( data );
48
+ }
49
+ }
50
+ );
51
 
52
+ // Run a backup
53
+ $( document ).on( 'click', '.hmbkp-run', function ( e ) {
54
 
55
+ $( this ).closest( '.hmbkp-schedule-sentence' ).addClass('hmbkp-running' );
56
 
57
+ $( '.hmbkp-error' ).removeClass( 'hmbkp-error' );
58
 
59
+ var scheduleId = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' );
60
 
61
+ var ajaxRequest = $.get(
62
+ ajaxurl,
63
+ {
64
+ 'hmbkp_run_schedule_nonce': hmbkp.hmbkp_run_schedule_nonce,
65
+ 'action': 'hmbkp_run_schedule',
66
+ 'hmbkp_schedule_id': scheduleId
67
+ }
68
+ ).done( function ( data ) {
69
 
70
+ hmbkpCatchResponseAndOfferToEmail( data );
 
 
 
71
 
72
+ // Redirect back on error
73
+ }).fail( function ( jqXHR ) {
74
 
75
+ hmbkpCatchResponseAndOfferToEmail( jqXHR.responseText );
 
76
 
77
+ });
 
78
 
79
+ e.preventDefault();
 
80
 
81
+ });
82
 
83
+ // Send the schedule id with the heartbeat
84
+ $( document ).on( 'heartbeat-send', function ( e, data ) {
85
 
86
+ data.hmbkp_schedule_id = $( '[data-hmbkp-schedule-id]' ).attr( 'data-hmbkp-schedule-id' );
87
 
88
+ if ( $( '.hmbkp-schedule-sentence.hmbkp-running' ).size() ) {
 
 
 
89
 
90
+ data.hmbkp_is_in_progress = true;
91
+ } else {
92
+ data.hmbkp_client_request = 'site_size';
93
+ }
94
 
95
+ } );
 
96
 
97
+ // Update schedule status on heartbeat tick
98
+ $( document ).on( 'heartbeat-tick', function ( e, data ) {
99
 
100
+ // If the schedule has finished then reload the page
101
+ if ( data.hmbkp_schedule_status === 0 && ! $( '.hmbkp-error' ).size() ) {
102
+ location.reload(true);
103
+ }
104
 
105
+ // If the schedule is still running then update the schedule status
106
+ if ( ( data.hmbkp_schedule_status !== 0 ) && ( data.hmbkp_schedule_status !== undefined ) ) {
107
+ $( '.hmbkp-status' ).replaceWith( data.hmbkp_schedule_status );
108
+ }
109
 
110
+ if ( ( data.hmbkp_site_size !== undefined ) && ( $( 'code.calculating' ).size() ) ) {
111
+ $( 'code.calculating' ).text( data.hmbkp_site_size );
112
 
113
+ var excludes = $( '.hmbkp-exclude-settings' );
114
+ if ( excludes.size() ) {
115
+ excludes.replaceWith( data.hmbkp_dir_sizes );
116
+ }
117
+ }
 
118
 
119
+ });
 
120
 
121
+ });
 
 
 
122
 
123
+ function hmbkpToggleScheduleFields( recurrence ) {
 
 
 
124
 
125
+ recurrence = ( typeof recurrence !== 'undefined' ) ? recurrence : 'manually';
126
 
127
+ var settingFields = jQuery( '.recurring-setting' );
128
+ var scheduleSettingFields = jQuery( '#schedule-start' );
129
+ var twiceDailyNote = jQuery( 'p.twice-js' );
130
 
131
+ switch ( recurrence ) {
132
 
133
+ case 'manually':
134
+ settingFields.hide();
135
+ break;
136
 
137
+ case 'hmbkp_hourly' : // fall through
138
+ case 'hmbkp_daily' :
139
+ settingFields.hide();
140
+ scheduleSettingFields.show();
141
+ twiceDailyNote.hide();
142
+ break;
143
 
144
+ case 'hmbkp_twicedaily' :
145
+ settingFields.hide();
146
+ scheduleSettingFields.show();
147
+ twiceDailyNote.show();
148
+ break;
149
 
150
+ case 'hmbkp_weekly' : // fall through
151
+ case 'hmbkp_fortnightly' :
152
+ settingFields.hide();
153
+ jQuery('#start-day').show();
154
+ scheduleSettingFields.show();
155
+ twiceDailyNote.hide();
156
+ break;
157
 
158
+ case 'hmbkp_monthly' :
159
+ settingFields.hide();
160
+ scheduleSettingFields.show();
161
+ jQuery('#start-date').show();
162
+ twiceDailyNote.hide();
163
+ break;
164
 
165
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
166
 
167
  }
168
 
169
  function hmbkpCatchResponseAndOfferToEmail( data ) {
170
 
171
+ // Backup Succeeded
172
+ if ( ! data || data === 0 ) {
173
+ location.reload( true );
174
+ }
175
 
176
+ // The backup failed, show the error and offer to have it emailed back
177
+ else {
178
 
179
+ jQuery( '.hmbkp-schedule-sentence.hmbkp-running' ).removeClass( 'hmbkp-running' ).addClass( 'hmbkp-error' );
180
 
181
+ jQuery.post(
182
+ ajaxurl,
183
+ {'nonce': hmbkp.nonce, 'action': 'hmbkp_backup_error', 'hmbkp_error': data},
184
+ function ( data ) {
185
 
186
+ if ( ! data || data === 0 ) {
187
  return;
188
  } else {
189
+ location.reload( true );
190
  }
191
+ }
192
+ );
 
 
193
 
194
+ }
195
 
196
+ jQuery( document ).one( 'click', '.hmbkp_send_error_via_email', function ( e ) {
197
 
198
+ e.preventDefault();
199
 
200
+ jQuery( this ).addClass( 'hmbkp-ajax-loading' ).attr( 'disabled', 'disabled' );
 
 
 
 
 
201
 
202
+ jQuery.post(
203
+ ajaxurl,
204
+ {'nonce': hmbkp.nonce, 'action': 'hmbkp_email_error', 'hmbkp_error': data},
205
+ function () {
206
+ //jQuery.colorbox.close();
207
+ }
208
+ );
209
 
210
+ });
211
 
212
  }
assets/hmbkp.min.css CHANGED
@@ -1 +1 @@
1
- .hmbkp_active td:first-child>code:before{content:"\00a0 \2713 ";font-size:11px}.hmbkp_active{background:#E5F7E8}div#hmbkp-warning,h2.nav-tab-wrapper+div[id^=hmbkp]{margin:20px 0 15px}h2+div[id^=hmbkp] input{max-width:100%}.nav-tab.hmbkp-running:not(.nav-tab-active):before{width:20px;height:20px;margin:0 10px -4px 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-upsell{margin-top:40px;padding-top:16px;border-top:1px solid #ccc}.hmbkp-upsell a{color:#57792b}.hmbkp-upsell a:hover{color:#98c063}.hmbkp-upsell-sep{color:#bbb}.hmbkp-upsell ul{overflow:hidden}.hmbkp-upsell li{float:left;margin:0 20px 20px 0}.hmbkp-upsell img{display:block;margin:0 auto;max-width:120px;min-height:60px}.hmbkp-upsell ul a{display:block;margin-bottom:0;width:120px}.hmbkp-upsell .howto{font-weight:400;display:inline}.hmbkp-upsell .hmbkp_hide{float:right}.hmbkp-schedule-sentence{font-size:16px;font-weight:lighter;margin:20px 0;background-color:#FBFBFB;padding:20px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.hmbkp-schedule-sentence::before{content:"\2714";margin-right:10px;width:16px;height:60px;display:block;float:left}.hmbkp-schedule-sentence.hmbkp-error:before{content:"\2718"}.hmbkp-schedule-sentence.hmbkp-running:before{width:20px;height:80px;margin:-1px 10px 0 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-schedule-sentence .hmbkp-status{display:none;font-size:12px;color:#666;margin:2px 0 0 30px}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-status{display:block}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-schedule-actions{display:none}.hmbkp-schedule-sentence :not(a)[title]{border-bottom:1px dotted #CCC;cursor:help}.hmbkp-schedule-sentence .hmbkp-status[title]{border-bottom:none}.hmbkp-schedule-sentence .submit{padding:0}.hmbkp-schedule-sentence .hmbkp-schedule-actions{visibility:visible;font-size:12px;font-weight:400;margin:0 0 0 26px}.hmbkp-schedule-actions a{white-space:nowrap}.hmbkp-schedule-settings{border-top:1px solid #e5e5e5;margin:20px -20px -20px;background-color:#f5f5f5;padding:0 20px 20px}.hmbkp-ajax-loading,button.hmbkp-ajax-loading{padding-left:20px;position:relative}.hmbkp-ajax-loading::after{content:"";width:16px;height:16px;background-image:url(spinner-2x.gif);background-size:16px 16px;background-repeat:no-repeat;background-position:0 0;position:absolute;right:-30px;top:5px}.delete-action{color:#a00;-webkit-transition:all 300ms ease;-moz-transition:all 300ms ease;-ms-transition:all 300ms ease;-o-transition:all 300ms ease;transition:all 300ms ease}.delete-action:hover .delete-action:focus{color:red;-webkit-transition:all 300ms ease;-moz-transition:all 300ms ease;-ms-transition:all 300ms ease;-o-transition:all 300ms ease;transition:all 300ms ease}.strikethrough{text-decoration:line-through}table.widefat tbody tr:nth-child(even){background-color:#f9f9f9}.hmbkp-exclude-settings td:first-child,.hmbkp-exclude-settings th:first-child{width:20px;padding-right:0}.hmbkp-exclude-settings thead tr:last-child{background-color:#f9f9f9}.hmbkp-exclude-settings table .button-secondary{line-height:18px;height:20px}thead td{border-bottom:1px solid #e1e1e1}.hmbkp-exclude-settings table .spinner{display:block;float:left;margin:0}.hmbkp-schedule-settings .column-format code{white-space:nowrap}.column-filesize code{position:relative}.column-filesize .dashicons-update{display:none;overflow:hidden;position:absolute;width:100%;left:0;text-align:center;background-color:rgba(255,255,255,.8)}.column-filesize .dashicons-update span{display:none}.column-filesize:hover .dashicons-update{display:inline-block}.hmbkp-exclude-settings td span.reason{color:#CCC}.server-info{overflow:auto;max-height:50%;outline:#000 1px solid}.server-info pre{max-height:100px;overflow-x:hidden}#intercom-info{background:#0074a2;color:#fff;display:inline-block}#intercom-info:hover{background:#2ea2cc;color:#fff}#intercom-info span.dashicons-admin-users{position:relative;display:inline-block;vertical-align:middle;top:-2px}pre{background-color:#eee;padding:10px;white-space:pre;max-height:320px;overflow:auto;word-wrap:normal!important}@media screen and (max-width:768px){.wrap h2{padding:10px 0 0}.hmbkp-schedule-sentence::before{height:80px}h2 .nav-tab{display:block;padding:10px;margin:0}.hmbkp-schedule-sentence{margin:10px 0;padding:10px}#intercom-info{display:none}.hmbkp-schedule-settings{padding:0 10px 10px}.hmbkp-exclude-settings table{margin:0 -10px;border-left:none;border-right:none;width:calc(100% + 20px)}.hmbkp-exclude-settings tr>:first-child,.hmbkp-schedule-settings thead tr:nth-child(2),.hmbkp-schedule-settings tr :nth-child(4),.hmbkp-schedule-settings tr :nth-child(5){display:none}.hmbkp-schedule-settings{margin-left:-10px;margin-right:-10px;margin-bottom:-10px}table.widefat tbody tr:nth-child(even){background-color:#fff}table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}}
1
+ .hmbkp_active td:first-child>code:before{content:"\00a0 \2713 ";font-size:11px}.hmbkp_active{background:#E5F7E8}div#hmbkp-warning,h2.nav-tab-wrapper+div[id^=hmbkp]{margin:20px 0 15px}h2+div[id^=hmbkp] input{max-width:100%}.nav-tab.hmbkp-running:not(.nav-tab-active):before{width:20px;height:20px;margin:0 10px -4px 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-upsell{margin-top:40px;padding-top:16px;border-top:1px solid #ccc}.hmbkp-upsell a{color:#57792b}.hmbkp-upsell a:hover{color:#98c063}.hmbkp-upsell-sep{color:#bbb}.hmbkp-upsell ul{overflow:hidden}.hmbkp-upsell li{float:left;margin:0 20px 20px 0}.hmbkp-upsell img{display:block;margin:0 auto;max-width:120px;min-height:60px}.hmbkp-upsell ul a{display:block;margin-bottom:0;width:120px}.hmbkp-upsell .howto{font-weight:400;display:inline}.hmbkp-upsell .hmbkp_hide{float:right}.hmbkp-schedule-sentence{font-size:16px;font-weight:lighter;margin:20px 0;background-color:#FBFBFB;padding:20px;border:1px solid #e5e5e5;box-shadow:0 1px 1px rgba(0,0,0,.04)}.hmbkp-schedule-sentence::before{content:"\2714";margin-right:10px;width:16px;height:60px;display:block;float:left}.hmbkp-schedule-sentence.hmbkp-error:before{content:"\2718"}.hmbkp-schedule-sentence.hmbkp-running:before{width:20px;height:80px;margin:-1px 10px 0 0;content:"";background:transparent url(spinner-2x.gif) no-repeat 0 0;background-size:20px;display:inline-block}.hmbkp-schedule-sentence .hmbkp-status{display:none;font-size:12px;color:#666;margin:2px 0 0 30px}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-status{display:block}.hmbkp-schedule-sentence.hmbkp-running .hmbkp-schedule-actions{display:none}.hmbkp-schedule-sentence :not(a)[title]{border-bottom:1px dotted #CCC;cursor:help}.hmbkp-schedule-sentence .hmbkp-status[title]{border-bottom:none}.hmbkp-schedule-sentence .submit{padding:0}.hmbkp-schedule-sentence .hmbkp-schedule-actions{visibility:visible;font-size:12px;font-weight:400;margin:0 0 0 26px}.hmbkp-schedule-actions a{white-space:nowrap}.hmbkp-schedule-settings{border-top:1px solid #e5e5e5;margin:20px -20px -20px;background-color:#f5f5f5;padding:0 20px 20px}.hmbkp-ajax-loading,button.hmbkp-ajax-loading{padding-left:20px;position:relative}.hmbkp-ajax-loading::after{content:"";width:16px;height:16px;background-image:url(spinner-2x.gif);background-size:16px 16px;background-repeat:no-repeat;background-position:0 0;position:absolute;right:-30px;top:5px}.delete-action{color:#a00;-webkit-transition:all 300ms ease;-moz-transition:all 300ms ease;-ms-transition:all 300ms ease;-o-transition:all 300ms ease;transition:all 300ms ease}.delete-action:hover .delete-action:focus{color:red;-webkit-transition:all 300ms ease;-moz-transition:all 300ms ease;-ms-transition:all 300ms ease;-o-transition:all 300ms ease;transition:all 300ms ease}.strikethrough{text-decoration:line-through}table.widefat tbody tr:nth-child(even){background-color:#f9f9f9}.hmbkp-exclude-settings td:first-child,.hmbkp-exclude-settings th:first-child{width:20px;padding-right:0}.hmbkp-exclude-settings thead tr:last-child{background-color:#f9f9f9}.hmbkp-exclude-settings table .button-secondary{line-height:18px;height:20px}thead td{border-bottom:1px solid #e1e1e1}.hmbkp-exclude-settings table .spinner{display:block;float:left;margin:0}.hmbkp-schedule-settings .column-format code{white-space:nowrap}.column-filesize code{position:relative}.column-filesize .dashicons-update{display:none;overflow:hidden;position:absolute;width:100%;left:0;text-align:center;background-color:rgba(255,255,255,.8)}.column-filesize .dashicons-update span{display:none}.column-filesize:hover .dashicons-update{display:inline-block}.hmbkp-exclude-settings td span.reason{color:#CCC}.server-info{overflow:auto;max-height:50%;outline:#000 1px solid}.server-info pre{max-height:100px;overflow-x:hidden}#intercom-info{background:#0074a2;color:#fff;display:inline-block;margin-bottom:-3px;padding:3px 8px}#intercom-info:hover{background:#2ea2cc;color:#fff}#intercom-info span.dashicons-admin-users{position:relative;display:inline-block;vertical-align:middle;top:-2px}pre{background-color:#eee;padding:10px;white-space:pre;max-height:320px;overflow:auto;word-wrap:normal!important}@media screen and (max-width:768px){.wrap h2{padding:10px 0 0}.hmbkp-schedule-sentence::before{height:80px}h2 .nav-tab{display:block;padding:10px;margin:0}.hmbkp-schedule-sentence{margin:10px 0;padding:10px}#intercom-info{display:none}.hmbkp-schedule-settings{padding:0 10px 10px}.hmbkp-exclude-settings table{margin:0 -10px;border-left:none;border-right:none;width:calc(100% + 20px)}.hmbkp-exclude-settings tr>:first-child,.hmbkp-schedule-settings thead tr:nth-child(2),.hmbkp-schedule-settings tr :nth-child(4),.hmbkp-schedule-settings tr :nth-child(5){display:none}.hmbkp-schedule-settings{margin-left:-10px;margin-right:-10px;margin-bottom:-10px}table.widefat tbody tr:nth-child(even){background-color:#fff}table.widefat tbody tr:nth-child(odd){background-color:#f9f9f9}}
assets/hmbkp.min.js CHANGED
@@ -1 +1 @@
1
- function hmbkpToggleScheduleFields(a){a="undefined"!=typeof a?a:"manually";var b=jQuery(".recurring-setting"),c=jQuery("#schedule-start"),d=jQuery("p.twice-js");switch(a){case"manually":b.hide();break;case"hmbkp_hourly":case"hmbkp_daily":b.hide(),c.show(),d.hide();break;case"hmbkp_twicedaily":b.hide(),c.show(),d.show();break;case"hmbkp_weekly":case"hmbkp_fortnightly":b.hide(),jQuery("#start-day").show(),c.show(),d.hide();break;case"hmbkp_monthly":b.hide(),c.show(),jQuery("#start-date").show(),d.hide()}}function hmbkpCatchResponseAndOfferToEmail(a){a&&0!=a?(jQuery(".hmbkp-schedule-sentence.hmbkp-running").removeClass("hmbkp-running").addClass("hmbkp-error"),jQuery.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_backup_error",hmbkp_error:a},function(a){a&&0!=a&&location.reload(!0)})):location.reload(!0),jQuery(document).one("click",".hmbkp_send_error_via_email",function(b){b.preventDefault(),jQuery(this).addClass("hmbkp-ajax-loading").attr("disabled","disabled"),jQuery.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_email_error",hmbkp_error:a},function(){})})}jQuery(document).ready(function(a){a.ajaxSetup({cache:!1}),a("select#hmbkp_schedule_recurrence_type").size()&&(hmbkpToggleScheduleFields(a("select#hmbkp_schedule_recurrence_type").val()),a(document).on("change","select#hmbkp_schedule_recurrence_type",function(){hmbkpToggleScheduleFields(a(this).val())})),a(document).on("click",".hmbkp-schedule-actions .delete-action",function(a){confirm(hmbkp.delete_schedule)||a.preventDefault()}),a(document).on("click",".hmbkp_manage_backups_row .delete-action",function(a){confirm(hmbkp.delete_backup)||a.preventDefault()}),a(document).on("click",".hmbkp-edit-schedule-excludes-form .delete-action",function(a){confirm(hmbkp.remove_exclude_rule)||a.preventDefault()}),a.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_cron_test"},function(b){1!=b&&a(".wrap > h2").after(b)}),a(".hmbkp-schedule-sentence .calculating").size()&&a.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_calculate",hmbkp_schedule_id:a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id")},function(b){form=a(".hmbkp-schedule-settings").clone(!0),-1!=b.indexOf("title")?(a(".hmbkp-schedule-sentence").replaceWith(b),a(".hmbkp-schedule-sentence").append(form)):a(".calculating").remove()}).error(function(){a(".calculating").remove()}),a(document).on("click",".hmbkp-run",function(b){a(this).closest(".hmbkp-schedule-sentence").addClass("hmbkp-running"),a(".hmbkp-error").removeClass("hmbkp-error"),scheduleId=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id"),ajaxRequest=a.get(ajaxurl,{hmbkp_run_schedule_nonce:hmbkp.hmbkp_run_schedule_nonce,action:"hmbkp_run_schedule",hmbkp_schedule_id:scheduleId}).done(function(a){hmbkpCatchResponseAndOfferToEmail(a)}).fail(function(a){hmbkpCatchResponseAndOfferToEmail(a.responseText)}),b.preventDefault()}),a(document).on("heartbeat-send",function(b,c){a(".hmbkp-schedule-sentence.hmbkp-running").size()&&(c.hmbkp_is_in_progress=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id"))}),a(document).on("heartbeat-tick",function(b,c){0!==c.hmbkp_schedule_status||a(".hmbkp-error").size()||location.reload(!0),0!==c.hmbkp_schedule_status&&a(".hmbkp-status").replaceWith(c.hmbkp_schedule_status)})});
1
+ function hmbkpToggleScheduleFields(a){a="undefined"!=typeof a?a:"manually";var b=jQuery(".recurring-setting"),c=jQuery("#schedule-start"),d=jQuery("p.twice-js");switch(a){case"manually":b.hide();break;case"hmbkp_hourly":case"hmbkp_daily":b.hide(),c.show(),d.hide();break;case"hmbkp_twicedaily":b.hide(),c.show(),d.show();break;case"hmbkp_weekly":case"hmbkp_fortnightly":b.hide(),jQuery("#start-day").show(),c.show(),d.hide();break;case"hmbkp_monthly":b.hide(),c.show(),jQuery("#start-date").show(),d.hide()}}function hmbkpCatchResponseAndOfferToEmail(a){a&&0!==a?(jQuery(".hmbkp-schedule-sentence.hmbkp-running").removeClass("hmbkp-running").addClass("hmbkp-error"),jQuery.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_backup_error",hmbkp_error:a},function(a){a&&0!==a&&location.reload(!0)})):location.reload(!0),jQuery(document).one("click",".hmbkp_send_error_via_email",function(b){b.preventDefault(),jQuery(this).addClass("hmbkp-ajax-loading").attr("disabled","disabled"),jQuery.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_email_error",hmbkp_error:a},function(){})})}jQuery(document).ready(function(a){a.ajaxSetup({cache:!1}),a("select#hmbkp_schedule_recurrence_type").size()&&(hmbkpToggleScheduleFields(a("select#hmbkp_schedule_recurrence_type").val()),a(document).on("change","select#hmbkp_schedule_recurrence_type",function(){hmbkpToggleScheduleFields(a(this).val())})),a(document).on("click",".hmbkp-schedule-actions .delete-action",function(a){confirm(hmbkp.delete_schedule)||a.preventDefault()}),a(document).on("click",".hmbkp_manage_backups_row .delete-action",function(a){confirm(hmbkp.delete_backup)||a.preventDefault()}),a(document).on("click",".hmbkp-edit-schedule-excludes-form .delete-action",function(a){confirm(hmbkp.remove_exclude_rule)||a.preventDefault()}),a.post(ajaxurl,{nonce:hmbkp.nonce,action:"hmbkp_cron_test"},function(b){"1"!==b&&a(".wrap > h2").after(b)}),a(document).on("click",".hmbkp-run",function(b){a(this).closest(".hmbkp-schedule-sentence").addClass("hmbkp-running"),a(".hmbkp-error").removeClass("hmbkp-error");{var c=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id");a.get(ajaxurl,{hmbkp_run_schedule_nonce:hmbkp.hmbkp_run_schedule_nonce,action:"hmbkp_run_schedule",hmbkp_schedule_id:c}).done(function(a){hmbkpCatchResponseAndOfferToEmail(a)}).fail(function(a){hmbkpCatchResponseAndOfferToEmail(a.responseText)})}b.preventDefault()}),a(document).on("heartbeat-send",function(b,c){c.hmbkp_schedule_id=a("[data-hmbkp-schedule-id]").attr("data-hmbkp-schedule-id"),a(".hmbkp-schedule-sentence.hmbkp-running").size()?c.hmbkp_is_in_progress=!0:c.hmbkp_client_request="site_size"}),a(document).on("heartbeat-tick",function(b,c){if(0!==c.hmbkp_schedule_status||a(".hmbkp-error").size()||location.reload(!0),0!==c.hmbkp_schedule_status&&void 0!==c.hmbkp_schedule_status&&a(".hmbkp-status").replaceWith(c.hmbkp_schedule_status),void 0!==c.hmbkp_site_size&&a("code.calculating").size()){a("code.calculating").text(c.hmbkp_site_size);var d=a(".hmbkp-exclude-settings");d.size()&&d.replaceWith(c.hmbkp_dir_sizes)}})});
backdrop/server.php CHANGED
@@ -3,12 +3,12 @@
3
  class HM_Backdrop_Server {
4
  public function run() {
5
  if ( empty( $_POST['key'] ) ) {
6
- return new WP_Error( 'hm_backdrop_no_key', __( 'No key supplied', 'backupwordpress' ) );
7
  }
8
 
9
  $data = get_transient( 'hm_backdrop-' . $_POST['key'] );
10
  if ( empty( $data ) ) {
11
- return new WP_Error( 'hm_backdrop_invalid_key', __( 'Supplied key was not valid', 'backupwordpress' ) );
12
  }
13
 
14
  $result = call_user_func_array( $data['callback'], $data['params'] );
3
  class HM_Backdrop_Server {
4
  public function run() {
5
  if ( empty( $_POST['key'] ) ) {
6
+ return new WP_Error( 'hm_backdrop_no_key', __( 'No key supplied', 'hm_backdrop' ) );
7
  }
8
 
9
  $data = get_transient( 'hm_backdrop-' . $_POST['key'] );
10
  if ( empty( $data ) ) {
11
+ return new WP_Error( 'hm_backdrop_invalid_key', __( 'Supplied key was not valid', 'hm_backdrop' ) );
12
  }
13
 
14
  $result = call_user_func_array( $data['callback'], $data['params'] );
backdrop/task.php CHANGED
@@ -19,7 +19,7 @@ class HM_Backdrop_Task {
19
  public function schedule() {
20
 
21
  if ( $this->is_scheduled() ) {
22
- return new WP_Error( 'hm_backdrop_scheduled', __( 'Task is already scheduled to run', 'backupwordpress' ) );
23
  }
24
 
25
  $data = array(
@@ -38,7 +38,7 @@ class HM_Backdrop_Task {
38
 
39
  public function cancel() {
40
  if ( ! $this->is_scheduled() ) {
41
- return new WP_Error( 'hm_backdrop_not_scheduled', __( 'Task is not scheduled to run', 'backupwordpress' ) );
42
  }
43
 
44
  delete_transient( 'hm_backdrop-' . $this->key );
19
  public function schedule() {
20
 
21
  if ( $this->is_scheduled() ) {
22
+ return new WP_Error( 'hm_backdrop_scheduled', __( 'Task is already scheduled to run', 'hm_backdrop' ) );
23
  }
24
 
25
  $data = array(
38
 
39
  public function cancel() {
40
  if ( ! $this->is_scheduled() ) {
41
+ return new WP_Error( 'hm_backdrop_not_scheduled', __( 'Task is not scheduled to run', 'hm_backdrop' ) );
42
  }
43
 
44
  delete_transient( 'hm_backdrop-' . $this->key );
backupwordpress.php CHANGED
@@ -1,15 +1,14 @@
1
  <?php
2
-
3
  /*
4
  Plugin Name: BackUpWordPress
5
  Plugin URI: http://bwp.hmn.md/
6
- Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools &rarr; Backups</strong>.
 
7
  Author: Human Made Limited
8
- Version: 3.0.4
9
  Author URI: http://hmn.md/
10
  License: GPL-2.0+
11
  License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
- Text Domain: hmbkp
13
  Domain Path: /languages
14
  Network: true
15
  */
@@ -32,350 +31,411 @@ along with this program; if not, write to the Free Software
32
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
33
  */
34
 
35
- if ( ! defined( 'HMBKP_REQUIRED_PHP_VERSION' ) ) {
36
- define( 'HMBKP_REQUIRED_PHP_VERSION', '5.3.2' );
37
- }
38
 
39
- hmbkp_maybe_self_deactivate();
 
40
 
41
- if ( ! defined( 'HMBKP_PLUGIN_SLUG' ) ) {
42
- define( 'HMBKP_PLUGIN_SLUG', basename( dirname( __FILE__ ) ) );
43
- }
 
44
 
45
- if ( ! defined( 'HMBKP_PLUGIN_PATH' ) ) {
46
- define( 'HMBKP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
47
- }
48
 
49
- if ( ! defined( 'HMBKP_PLUGIN_URL' ) ) {
50
- define( 'HMBKP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
51
- }
 
52
 
53
- define( 'HMBKP_PLUGIN_LANG_DIR', apply_filters( 'hmbkp_filter_lang_dir', HMBKP_PLUGIN_SLUG . '/languages/' ) );
 
 
 
54
 
55
- if ( ! defined( 'HMBKP_ADMIN_URL' ) ) {
 
 
 
 
 
 
 
 
56
 
57
- if ( is_multisite() ) {
58
- define( 'HMBKP_ADMIN_URL', add_query_arg( 'page', HMBKP_PLUGIN_SLUG, network_admin_url( 'settings.php' ) ) );
 
59
 
60
- } else {
61
- define( 'HMBKP_ADMIN_URL', add_query_arg( 'page', HMBKP_PLUGIN_SLUG, admin_url( 'tools.php' ) ) );
62
  }
63
 
64
- }
 
 
 
65
 
66
- $key = array( ABSPATH, time() );
67
 
68
- foreach ( array( 'AUTH_KEY', 'SECURE_AUTH_KEY', 'LOGGED_IN_KEY', 'NONCE_KEY', 'AUTH_SALT', 'SECURE_AUTH_SALT', 'LOGGED_IN_SALT', 'NONCE_SALT', 'SECRET_KEY' ) as $constant ) {
69
 
70
- if ( defined( $constant ) ) {
71
- $key[] = constant( $constant );
72
- }
73
 
74
- }
75
 
76
- shuffle( $key );
77
 
78
- define( 'HMBKP_SECURE_KEY', md5( serialize( $key ) ) );
 
79
 
80
- if ( ! defined( 'HMBKP_REQUIRED_WP_VERSION' ) ) {
81
- define( 'HMBKP_REQUIRED_WP_VERSION', '3.9.3' );
82
- }
83
 
84
- // Max memory limit isn't defined in old versions of WordPress
85
- if ( ! defined( 'WP_MAX_MEMORY_LIMIT' ) ) {
86
- define( 'WP_MAX_MEMORY_LIMIT', '256M' );
87
- }
 
88
 
89
- if ( ! defined( 'HMBKP_ADMIN_PAGE' ) ) {
90
 
91
- if ( is_multisite() ) {
92
- define( 'HMBKP_ADMIN_PAGE', 'settings_page_' . HMBKP_PLUGIN_SLUG );
93
 
94
- } else {
95
- define( 'HMBKP_ADMIN_PAGE', 'tools_page_' . HMBKP_PLUGIN_SLUG );
96
  }
97
 
98
- }
 
 
 
99
 
100
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-notices.php' );
 
 
101
 
102
- // Load the admin menu
103
- require_once( HMBKP_PLUGIN_PATH . 'admin/menu.php' );
104
- require_once( HMBKP_PLUGIN_PATH . 'admin/actions.php' );
105
 
106
- // Load hm-backup
107
- if ( ! class_exists( 'HM_Backup' ) )
108
- require_once( HMBKP_PLUGIN_PATH . 'hm-backup/hm-backup.php' );
109
 
110
- // Load Backdrop
111
- require_once( HMBKP_PLUGIN_PATH . 'backdrop/hm-backdrop.php' );
 
112
 
113
- // Load the schedules
114
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-schedule.php' );
115
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-schedules.php' );
116
 
117
- // Load the core functions
118
- require_once( HMBKP_PLUGIN_PATH . 'functions/core.php' );
119
- require_once( HMBKP_PLUGIN_PATH . 'functions/interface.php' );
120
 
121
- // Load Services
122
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-services.php' );
123
 
124
- // Load the email service
125
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-email.php' );
126
 
127
- // Load the webhook services
128
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-webhooks.php' );
129
- require_once( HMBKP_PLUGIN_PATH . 'classes/class-webhook-wpremote.php' );
130
 
131
- // Load the wp cli command
132
- if ( defined( 'WP_CLI' ) && WP_CLI ) {
133
- include( HMBKP_PLUGIN_PATH . 'classes/wp-cli.php' );
134
- }
135
 
136
- // Hook in the activation and deactivation actions
137
- register_activation_hook( HMBKP_PLUGIN_SLUG . '/backupwordpress.php', 'hmbkp_activate' );
138
- register_deactivation_hook( HMBKP_PLUGIN_SLUG . '/backupwordpress.php', 'hmbkp_deactivate' );
139
 
140
- // Handle any advanced option changes
141
- hmbkp_constant_changes();
142
 
143
- /**
144
- * Plugin setup
145
- *
146
- * @return null
147
- */
148
- function hmbkp_init() {
149
 
150
- $plugin_data = get_plugin_data( __FILE__ );
 
 
 
151
 
152
- // define the plugin version
153
- define( 'HMBKP_VERSION', $plugin_data['Version'] );
154
 
155
- // Fire the update action
156
- if ( HMBKP_VERSION != get_option( 'hmbkp_plugin_version' ) ) {
157
- hmbkp_update();
158
- }
159
 
160
- }
161
- add_action( 'admin_init', 'hmbkp_init' );
 
 
162
 
163
- /**
164
- * Enqueue plugin scripts
165
- */
166
- function hmbkp_load_scripts() {
167
 
168
- $screen = get_current_screen();
169
 
170
- if ( ! isset( $screen ) ) {
171
- return;
172
- }
173
 
174
- if ( ! in_array( $screen->id, array( 'tools_page_backupwordpress', 'settings_page_backupwordpress' ) ) ) {
175
- return;
176
- }
177
 
178
- $js_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.min.js';
 
 
179
 
180
- if ( WP_DEBUG ) {
181
- $js_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.js';
182
- }
183
 
184
- wp_enqueue_script( 'hmbkp', $js_file, array( 'heartbeat' ), sanitize_key( HMBKP_VERSION ) );
185
-
186
- wp_localize_script(
187
- 'hmbkp',
188
- 'hmbkp',
189
- array(
190
- 'page_slug' => HMBKP_PLUGIN_SLUG,
191
- 'nonce' => wp_create_nonce( 'hmbkp_nonce' ),
192
- 'hmbkp_run_schedule_nonce' => wp_create_nonce( 'hmbkp_run_schedule' ),
193
- 'update' => __( 'Update', 'backupwordpress' ),
194
- 'cancel' => __( 'Cancel', 'backupwordpress' ),
195
- 'delete_schedule' => __( 'Are you sure you want to delete this schedule? All of it\'s backups will also be deleted.', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
196
- 'delete_backup' => __( 'Are you sure you want to delete this backup?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
197
- 'remove_exclude_rule' => __( 'Are you sure you want to remove this exclude rule?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
198
- 'remove_old_backups' => __( 'Reducing the number of backups that are stored on this server will cause some of your existing backups to be deleted, are you sure that\'s what you want?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n"
199
- )
200
- );
201
 
202
- }
203
- add_action( 'admin_enqueue_scripts', 'hmbkp_load_scripts' );
 
204
 
205
- /**
206
- * Load Intercom and send across user information and server info
207
- *
208
- * Only loaded if the user has opted in.
209
- *
210
- * @return void
211
- */
212
- function hmbkp_load_intercom_script() {
213
 
214
- if ( ! get_option( 'hmbkp_enable_support' ) ) {
215
- return;
216
  }
217
 
218
- require_once HMBKP_PLUGIN_PATH . 'classes/class-requirements.php';
 
 
 
219
 
220
- foreach ( HMBKP_Requirements::get_requirement_groups() as $group ) {
221
 
222
- foreach ( HMBKP_Requirements::get_requirements( $group ) as $requirement ) {
223
 
224
- $info[ $requirement->name() ] = $requirement->result();
225
 
226
- }
 
 
 
 
 
 
227
 
228
  }
229
 
230
- foreach ( HMBKP_Services::get_services() as $file => $service ) {
231
- array_merge( $info, call_user_func( array( $service, 'intercom_data' ) ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
232
  }
233
 
234
- $current_user = wp_get_current_user();
 
 
 
 
 
235
 
236
- $info['user_hash'] = hash_hmac( 'sha256', $current_user->user_email, 'fcUEt7Vi4ym5PXdcr2UNpGdgZTEvxX9NJl8YBTxK' );
237
- $info['email'] = $current_user->user_email;
238
- $info['created_at'] = strtotime( $current_user->user_registered );
239
- $info['app_id'] = '7f1l4qyq';
240
- $info['name'] = $current_user->display_name;
241
- $info['widget'] = array( 'activator' => '#intercom' ); ?>
242
 
243
- <script id="IntercomSettingsScriptTag">
244
- window.intercomSettings = <?php echo json_encode( $info ); ?>;
245
- </script>
246
- <script>(function(){var w=window;var ic=w.Intercom;if(typeof ic==="function"){ic('reattach_activator');ic('update',intercomSettings);}else{var d=document;var i=function(){i.c(arguments)};i.q=[];i.c=function(args){i.q.push(args)};w.Intercom=i;function l(){var s=d.createElement('script');s.type='text/javascript';s.async=true;s.src='https://static.intercomcdn.com/intercom.v1.js';var x=d.getElementsByTagName('script')[0];x.parentNode.insertBefore(s,x);}if(w.attachEvent){w.attachEvent('onload',l);}else{w.addEventListener('load',l,false);}};})()</script>
247
 
248
- <?php }
249
- add_action( 'admin_footer-' . HMBKP_ADMIN_PAGE, 'hmbkp_load_intercom_script' );
250
 
251
- /**
252
- * Enqueue the plugin styles
253
- */
254
- function hmbkp_load_styles(){
255
 
256
- $css_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.min.css';
 
257
 
258
- if ( WP_DEBUG ) {
259
- $css_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.css';
260
  }
261
 
262
- wp_enqueue_style( 'hmbkp', $css_file, false, sanitize_key( HMBKP_VERSION ) );
 
 
 
263
 
264
- }
265
- add_action( 'admin_print_styles-' . HMBKP_ADMIN_PAGE, 'hmbkp_load_styles' );
 
 
266
 
267
- /**
268
- * Function to run when the schedule cron fires
269
- * @param $schedule_id
270
- */
271
- function hmbkp_schedule_hook_run( $schedule_id ) {
272
 
273
- $schedules = HMBKP_Schedules::get_instance();
274
- $schedule = $schedules->get_schedule( $schedule_id );
 
 
275
 
276
- if ( ! $schedule ) {
277
- return;
278
  }
279
 
280
- $schedule->run();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
281
 
282
- }
283
- add_action( 'hmbkp_schedule_hook', 'hmbkp_schedule_hook_run' );
284
 
285
- /**
286
- * Loads the plugin text domain for translation
287
- * This setup allows a user to just drop his custom translation files into the WordPress language directory
288
- * Files will need to be in a subdirectory with the name of the textdomain 'hmbkp'
289
- */
290
- function hmbkp_plugin_textdomain() {
291
 
292
- // Set unique textdomain string
293
- $textdomain = 'backupwordpress';
294
 
295
- // The 'plugin_locale' filter is also used by default in load_plugin_textdomain()
296
- $locale = apply_filters( 'plugin_locale', get_locale(), $textdomain );
 
 
297
 
298
- // Set filter for WordPress languages directory
299
- $hmbkp_wp_lang_dir = apply_filters( 'hmbkp_do_filter_wp_lang_dir', trailingslashit( WP_LANG_DIR ) . trailingslashit( $textdomain ) . $textdomain . '-' . $locale . '.mo' );
300
 
301
- // Translations: First, look in WordPress' "languages" folder = custom & update-secure!
302
- load_textdomain( $textdomain, $hmbkp_wp_lang_dir );
303
 
304
- // Translations: Secondly, look in plugin's "languages" folder = default
305
- load_plugin_textdomain( $textdomain, false, HMBKP_PLUGIN_LANG_DIR );
306
 
307
- }
308
- add_action( 'init', 'hmbkp_plugin_textdomain', 1 );
309
 
310
- /**
311
- * Ensure BackUpWordPress is loaded before addons
312
- */
313
- function hmbkp_load_first() {
314
 
315
- $active_plugins = get_option( 'active_plugins' );
316
 
317
- $plugin_path = plugin_basename( __FILE__ );
318
 
319
- $key = array_search( $plugin_path, $active_plugins );
320
 
321
- if ( $key > 0 ) {
 
 
 
 
 
322
 
323
- array_splice( $active_plugins, $key, 1 );
 
 
324
 
325
- array_unshift( $active_plugins, $plugin_path );
 
326
 
327
- update_option( 'active_plugins', $active_plugins );
 
 
 
 
328
 
329
  }
330
 
331
- }
332
- add_action( 'activated_plugin', 'hmbkp_load_first' );
 
 
 
 
333
 
334
- /**
335
- * Determine if the installation meets the PHP version requirements.
336
- */
337
- function hmbkp_maybe_self_deactivate() {
 
 
 
 
 
 
 
338
 
339
- if ( ! function_exists( 'deactivate_plugins' ) || ! function_exists( 'current_action' ) ) {
340
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
341
  }
342
 
343
- // Don't activate on anything less than PHP required version
344
- if ( version_compare( phpversion(), HMBKP_REQUIRED_PHP_VERSION, '<' ) ) {
345
- deactivate_plugins( plugin_basename( __FILE__ ) );
 
 
 
346
 
347
- if ( 'plugins_loaded' === current_action() ) {
348
- add_action( 'admin_notices', 'hmbkp_display_admin_notices' );
349
- } else {
350
- wp_die( hmbkp_get_notice_message(), __( 'BackUpWordPress', 'backupwordpress' ), array( 'back_link' => true ) );
351
  }
352
- }
353
 
354
- }
355
- add_action( 'plugins_loaded', 'hmbkp_maybe_self_deactivate' );
356
 
357
- /**
358
- * Displays a message as notice in the admin.
359
- */
360
- function hmbkp_display_admin_notices() {
361
 
362
- echo '<div class="error"><p>' . hmbkp_get_notice_message() . '</p></div>';
363
 
364
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
365
 
366
- /**
367
- * Returns a localized user friendly error message.
368
- *
369
- * @return string
370
- */
371
- function hmbkp_get_notice_message() {
372
-
373
- return sprintf(
374
- __( 'BackUpWordPress requires PHP version %1$s or later. It is not active. %2$s%3$s%4$sLearn more%5$s', 'backupwordpress' ),
375
- HMBKP_REQUIRED_PHP_VERSION,
376
- '<a href="',
377
- 'https://bwp.hmn.md/unsupported-php-version-error/',
378
- '">',
379
- '</a>'
380
- );
381
  }
 
 
1
  <?php
 
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.1.0
7
  Author: Human Made Limited
 
8
  Author URI: http://hmn.md/
9
  License: GPL-2.0+
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.txt
11
+ Text Domain: backupwordpress
12
  Domain Path: /languages
13
  Network: true
14
  */
31
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
32
  */
33
 
34
+ include_once( dirname( __FILE__ ) . '/classes/class-setup.php' );
 
 
35
 
36
+ register_activation_hook( __FILE__, array( 'BackUpWordPress_Setup', 'activate' ) );
37
+ register_deactivation_hook( __FILE__, array( 'BackUpWordPress_Setup', 'deactivate' ) );
38
 
39
+ /**
40
+ * Class BackUpWordPress_Plugin
41
+ */
42
+ class BackUpWordPress_Plugin {
43
 
44
+ const PLUGIN_VERSION = '3.1.0';
 
 
45
 
46
+ /**
47
+ * @var BackUpWordPress_Plugin The singleton instance.
48
+ */
49
+ private static $instance;
50
 
51
+ /**
52
+ * Instantiates a new BackUpWordPress_Plugin object.
53
+ */
54
+ private function __construct() {
55
 
56
+ add_action( 'plugins_loaded', array( $this, 'plugins_loaded' ) );
57
+ }
58
+
59
+ /**
60
+ * Insures we always return the same object.
61
+ *
62
+ * @return BackUpWordPress_Plugin
63
+ */
64
+ public static function get_instance() {
65
 
66
+ if ( ! ( self::$instance instanceof BackUpWordPress_Plugin ) ) {
67
+ self::$instance = new BackUpWordPress_Plugin();
68
+ }
69
 
70
+ return self::$instance;
 
71
  }
72
 
73
+ /**
74
+ * Initialize the plugin.
75
+ */
76
+ public function plugins_loaded() {
77
 
78
+ if ( false !== $this->maybe_self_deactivate() ) {
79
 
80
+ $this->constants();
81
 
82
+ $this->includes();
 
 
83
 
84
+ $this->hooks();
85
 
86
+ $this->text_domain();
87
 
88
+ // If we get here, then BWP is loaded
89
+ do_action( 'backupwordpress_loaded' );
90
 
91
+ }
 
 
92
 
93
+ }
94
+
95
+ public function maybe_self_deactivate() {
96
+
97
+ if ( ! BackUpWordPress_Setup::meets_requirements() ) {
98
 
99
+ add_action( 'admin_init', array( 'BackUpWordPress_Setup', 'self_deactivate' ) );
100
 
101
+ add_action( 'admin_notices', array( 'BackUpWordPress_Setup', 'display_admin_notices' ) );
102
+ }
103
 
 
 
104
  }
105
 
106
+ /**
107
+ * Define all the constants.
108
+ */
109
+ public function constants() {
110
 
111
+ if ( ! defined( 'HMBKP_PLUGIN_SLUG' ) ) {
112
+ define( 'HMBKP_PLUGIN_SLUG', dirname( plugin_basename( __FILE__ ) ) );
113
+ }
114
 
115
+ if ( ! defined( 'HMBKP_PLUGIN_PATH' ) ) {
116
+ define( 'HMBKP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
117
+ }
118
 
119
+ if ( ! defined( 'HMBKP_PLUGIN_URL' ) ) {
120
+ define( 'HMBKP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
121
+ }
122
 
123
+ if ( ! defined( 'HMBKP_PLUGIN_LANG_DIR' ) ) {
124
+ define( 'HMBKP_PLUGIN_LANG_DIR', apply_filters( 'hmbkp_filter_lang_dir', HMBKP_PLUGIN_SLUG . '/languages/' ) );
125
+ }
126
 
127
+ if ( ! defined( 'HMBKP_ADMIN_URL' ) ) {
 
 
128
 
129
+ $page = is_multisite() ? network_admin_url( 'settings.php' ) : admin_url( 'tools.php' );
 
 
130
 
131
+ define( 'HMBKP_ADMIN_URL', add_query_arg( 'page', HMBKP_PLUGIN_SLUG, $page ) );
 
132
 
133
+ }
 
134
 
135
+ if ( ! defined( 'HMBKP_ADMIN_PAGE' ) ) {
 
 
136
 
137
+ $prefix = is_multisite() ? 'settings_page_' : 'tools_page_';
 
 
 
138
 
139
+ define( 'HMBKP_ADMIN_PAGE', $prefix . HMBKP_PLUGIN_SLUG );
140
+ }
 
141
 
142
+ define( 'HMBKP_SECURE_KEY', $this->generate_key() );
 
143
 
144
+ }
 
 
 
 
 
145
 
146
+ /**
147
+ * Load all BackUpWordPress functions.
148
+ */
149
+ protected function includes() {
150
 
151
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-notices.php' );
 
152
 
153
+ // Load the admin menu
154
+ require_once( HMBKP_PLUGIN_PATH . 'admin/menu.php' );
155
+ require_once( HMBKP_PLUGIN_PATH . 'admin/actions.php' );
 
156
 
157
+ // Load hm-backup
158
+ if ( ! class_exists( 'HM_Backup' ) ) {
159
+ require_once( HMBKP_PLUGIN_PATH . 'hm-backup/hm-backup.php' );
160
+ }
161
 
162
+ // Load Backdrop if necessary.
163
+ if ( ! class_exists( 'HM_Backdrop_Task' ) ) {
164
+ require_once( HMBKP_PLUGIN_PATH . 'backdrop/hm-backdrop.php' );
165
+ }
166
 
167
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-requirements.php' );
168
 
169
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-hmbkp-path.php' );
 
 
170
 
171
+ // Load the schedules
172
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-schedule.php' );
173
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-schedules.php' );
174
 
175
+ // Load the core functions
176
+ require_once( HMBKP_PLUGIN_PATH . 'functions/core.php' );
177
+ require_once( HMBKP_PLUGIN_PATH . 'functions/interface.php' );
178
 
179
+ // Load Services
180
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-services.php' );
 
181
 
182
+ // Load the email service
183
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-email.php' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
 
185
+ // Load the webhook services
186
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-webhooks.php' );
187
+ require_once( HMBKP_PLUGIN_PATH . 'classes/class-webhook-wpremote.php' );
188
 
189
+ // Load the wp cli command
190
+ if ( defined( 'WP_CLI' ) && WP_CLI ) {
191
+ include( HMBKP_PLUGIN_PATH . 'classes/wp-cli.php' );
192
+ }
 
 
 
 
193
 
 
 
194
  }
195
 
196
+ /**
197
+ * Hook into WordPress page lifecycle and execute BackUpWordPress functions.
198
+ */
199
+ public function hooks() {
200
 
201
+ add_action( 'activated_plugin', array( $this, 'load_first' ) );
202
 
203
+ add_action( 'admin_init', array( $this, 'upgrade' ) );
204
 
205
+ add_action( 'admin_init', array( $this, 'init' ) );
206
 
207
+ add_action( 'hmbkp_schedule_hook', array( $this, 'schedule_hook_run' ) );
208
+
209
+ add_action( 'admin_enqueue_scripts', array( $this, 'scripts' ) );
210
+
211
+ add_action( 'admin_footer-' . HMBKP_ADMIN_PAGE, array( $this, 'load_intercom_script' ) );
212
+
213
+ add_action( 'admin_enqueue_scripts', array( $this, 'styles' ) );
214
 
215
  }
216
 
217
+ /**
218
+ * Load the Javascript in the admin.
219
+ *
220
+ * @param $hook The name of the admin page hook.
221
+ */
222
+ public function scripts( $hook ) {
223
+
224
+ if ( HMBKP_ADMIN_PAGE !== $hook ) {
225
+ return;
226
+ }
227
+
228
+ $js_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.min.js';
229
+
230
+ if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
231
+ $js_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.js';
232
+ }
233
+
234
+ wp_enqueue_script( 'hmbkp', $js_file, array( 'heartbeat' ), sanitize_key( self::PLUGIN_VERSION ) );
235
+
236
+ wp_localize_script(
237
+ 'hmbkp',
238
+ 'hmbkp',
239
+ array(
240
+ 'page_slug' => HMBKP_PLUGIN_SLUG,
241
+ 'nonce' => wp_create_nonce( 'hmbkp_nonce' ),
242
+ 'hmbkp_run_schedule_nonce' => wp_create_nonce( 'hmbkp_run_schedule' ),
243
+ 'update' => __( 'Update', 'backupwordpress' ),
244
+ 'cancel' => __( 'Cancel', 'backupwordpress' ),
245
+ 'delete_schedule' => __( 'Are you sure you want to delete this schedule? All of it\'s backups will also be deleted.', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
246
+ 'delete_backup' => __( 'Are you sure you want to delete this backup?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
247
+ 'remove_exclude_rule' => __( 'Are you sure you want to remove this exclude rule?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n",
248
+ 'remove_old_backups' => __( 'Reducing the number of backups that are stored on this server will cause some of your existing backups to be deleted, are you sure that\'s what you want?', 'backupwordpress' ) . "\n\n" . __( '\'Cancel\' to go back, \'OK\' to delete.', 'backupwordpress' ) . "\n"
249
+ )
250
+ );
251
+
252
  }
253
 
254
+ /**
255
+ * Loads the plugin text domain for translation.
256
+ * This setup allows a user to just drop his custom translation files into the WordPress language directory
257
+ * Files will need to be in a subdirectory with the name of the textdomain 'backupwordpress'
258
+ */
259
+ public function text_domain() {
260
 
261
+ // Set unique textdomain string
262
+ $textdomain = 'backupwordpress';
 
 
 
 
263
 
264
+ // The 'plugin_locale' filter is also used by default in load_plugin_textdomain()
265
+ $locale = apply_filters( 'plugin_locale', get_locale(), $textdomain );
 
 
266
 
267
+ // Set filter for WordPress languages directory
268
+ $hmbkp_wp_lang_dir = apply_filters( 'hmbkp_do_filter_wp_lang_dir', trailingslashit( WP_LANG_DIR ) . trailingslashit( $textdomain ) . $textdomain . '-' . $locale . '.mo' );
269
 
270
+ // Translations: First, look in WordPress' "languages" folder = custom & update-secure!
271
+ load_textdomain( $textdomain, $hmbkp_wp_lang_dir );
 
 
272
 
273
+ // Translations: Secondly, look in plugin's "languages" folder = default
274
+ load_plugin_textdomain( $textdomain, false, HMBKP_PLUGIN_LANG_DIR );
275
 
 
 
276
  }
277
 
278
+ /**
279
+ * Determine if we need to run an upgrade routine.
280
+ */
281
+ public function upgrade() {
282
 
283
+ // Fire the update action
284
+ if ( self::PLUGIN_VERSION != get_option( 'hmbkp_plugin_version' ) ) {
285
+ hmbkp_update();
286
+ }
287
 
288
+ }
 
 
 
 
289
 
290
+ /**
291
+ * Runs on every admin page load
292
+ */
293
+ public function init() {
294
 
295
+ // If we have multiple paths for some reason then clean them up
296
+ HMBKP_Path::get_instance()->merge_existing_paths();
297
  }
298
 
299
+ /**
300
+ * Generate a unique key.
301
+ *
302
+ * @return string
303
+ */
304
+ protected function generate_key() {
305
+
306
+ $key = array( ABSPATH, time() );
307
+
308
+ foreach (
309
+ array(
310
+ 'AUTH_KEY',
311
+ 'SECURE_AUTH_KEY',
312
+ 'LOGGED_IN_KEY',
313
+ 'NONCE_KEY',
314
+ 'AUTH_SALT',
315
+ 'SECURE_AUTH_SALT',
316
+ 'LOGGED_IN_SALT',
317
+ 'NONCE_SALT',
318
+ 'SECRET_KEY',
319
+ ) as $constant
320
+ ) {
321
+
322
+ if ( defined( $constant ) ) {
323
+ $key[] = constant( $constant );
324
+ }
325
+ }
326
 
327
+ shuffle( $key );
 
328
 
329
+ return md5( serialize( $key ) );
 
 
 
 
 
330
 
331
+ }
 
332
 
333
+ /**
334
+ * Ensure BackUpWordPress is loaded before add-ons, changes the order of the serialized values in the DB field.
335
+ */
336
+ public function load_first() {
337
 
338
+ $active_plugins = get_option( 'active_plugins' );
 
339
 
340
+ $plugin_path = plugin_basename( __FILE__ );
 
341
 
342
+ $key = array_search( $plugin_path, $active_plugins );
 
343
 
344
+ if ( $key > 0 ) {
 
345
 
346
+ array_splice( $active_plugins, $key, 1 );
347
+
348
+ array_unshift( $active_plugins, $plugin_path );
 
349
 
350
+ update_option( 'active_plugins', $active_plugins );
351
 
352
+ }
353
 
354
+ }
355
 
356
+ /**
357
+ * Function to run when the schedule cron fires.
358
+ *
359
+ * @param $schedule_id
360
+ */
361
+ public function schedule_hook_run( $schedule_id ) {
362
 
363
+ if ( ! hmbkp_possible() ) {
364
+ return;
365
+ }
366
 
367
+ $schedules = HMBKP_Schedules::get_instance();
368
+ $schedule = $schedules->get_schedule( $schedule_id );
369
 
370
+ if ( ! $schedule ) {
371
+ return;
372
+ }
373
+
374
+ $schedule->run();
375
 
376
  }
377
 
378
+ /**
379
+ * Enqueue the plugin styles.
380
+ *
381
+ * @param $hook
382
+ */
383
+ public function styles( $hook ) {
384
 
385
+ if ( HMBKP_ADMIN_PAGE !== $hook ) {
386
+ return;
387
+ }
388
+
389
+ $css_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.min.css';
390
+
391
+ if ( WP_DEBUG ) {
392
+ $css_file = HMBKP_PLUGIN_URL . 'assets/hmbkp.css';
393
+ }
394
+
395
+ wp_enqueue_style( 'backupwordpress', $css_file, false, sanitize_key( self::PLUGIN_VERSION ) );
396
 
 
 
397
  }
398
 
399
+ /**
400
+ * Load Intercom and send across user information and server info. Only loaded if the user has opted in.
401
+ *
402
+ * @param $hook
403
+ */
404
+ public function load_intercom_script() {
405
 
406
+ if ( ! get_option( 'hmbkp_enable_support' ) ) {
407
+ return;
 
 
408
  }
 
409
 
410
+ foreach ( HMBKP_Requirements::get_requirement_groups() as $group ) {
 
411
 
412
+ foreach ( HMBKP_Requirements::get_requirements( $group ) as $requirement ) {
 
 
 
413
 
414
+ $info[ $requirement->name() ] = $requirement->result();
415
 
416
+ }
417
+ }
418
+
419
+ foreach ( HMBKP_Services::get_services() as $file => $service ) {
420
+ array_merge( $info, call_user_func( array( $service, 'intercom_data' ) ) );
421
+ }
422
+
423
+ $current_user = wp_get_current_user();
424
+
425
+ $info['user_hash'] = hash_hmac( 'sha256', $current_user->user_email, 'fcUEt7Vi4ym5PXdcr2UNpGdgZTEvxX9NJl8YBTxK' );
426
+ $info['email'] = $current_user->user_email;
427
+ $info['created_at'] = strtotime( $current_user->user_registered );
428
+ $info['app_id'] = '7f1l4qyq';
429
+ $info['name'] = $current_user->display_name;
430
+ $info['widget'] = array( 'activator' => '#intercom' ); ?>
431
+
432
+ <script id="IntercomSettingsScriptTag">
433
+ window.intercomSettings = <?php echo json_encode( $info ); ?>;
434
+ </script>
435
+ <script>!function(){function e(){var a=c.createElement("script");a.type="text/javascript",a.async=!0,a.src="https://static.intercomcdn.com/intercom.v1.js";var b=c.getElementsByTagName("script")[0];b.parentNode.insertBefore(a,b)}var a=window,b=a.Intercom;if("function"==typeof b)b("reattach_activator"),b("update",intercomSettings);else{var c=document,d=function(){d.c(arguments)};d.q=[],d.c=function(a){d.q.push(a)},a.Intercom=d,a.attachEvent?a.attachEvent("onload",e):a.addEventListener("load",e,!1)}}();</script>
436
+
437
+ <?php }
438
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
439
  }
440
+
441
+ BackUpWordPress_Plugin::get_instance();
classes/class-email.php CHANGED
@@ -27,7 +27,7 @@ class HMBKP_Email_Service extends HMBKP_Service {
27
  </th>
28
 
29
  <td>
30
- <input type="email" id="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" value="<?php echo esc_attr( $this->get_field_value( 'email' ) ); ?>" placeholder="name@youremail.com" />
31
 
32
  <p class="description"><?php printf( __( 'Receive a notification email when a backup completes, if the backup is small enough (&lt; %s) then it will be attached to the email. Separate multiple email addresses with a comma.', 'backupwordpress' ), '<code>' . size_format( hmbkp_get_max_attachment_size() ) . '</code>' ); ?></p>
33
  </td>
27
  </th>
28
 
29
  <td>
30
+ <input type="text" id="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'email' ) ); ?>" value="<?php echo esc_attr( $this->get_field_value( 'email' ) ); ?>" placeholder="name@youremail.com" />
31
 
32
  <p class="description"><?php printf( __( 'Receive a notification email when a backup completes, if the backup is small enough (&lt; %s) then it will be attached to the email. Separate multiple email addresses with a comma.', 'backupwordpress' ), '<code>' . size_format( hmbkp_get_max_attachment_size() ) . '</code>' ); ?></p>
33
  </td>
classes/class-hmbkp-path.php ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package BackUpWordPress
4
+ * @subpackage BackUpWordPress/classes
5
+ */
6
+
7
+ /**
8
+ * Returns the backup path
9
+ *
10
+ * @see HMBKP_Path
11
+ * @todo remove the need for this
12
+ */
13
+ function hmbkp_path() {
14
+ return HMBKP_Path::get_instance()->get_path();
15
+ }
16
+
17
+ /**
18
+ * The Backup Path class
19
+ *
20
+ * Handles calculating & protecting the directory that backups will be stored in
21
+ *
22
+ * @todo Should be a singleton?
23
+ */
24
+ class HMBKP_Path {
25
+
26
+ /**
27
+ * The path to the directory that backup files are stored in
28
+ *
29
+ * @var string $this->path
30
+ */
31
+ protected $path;
32
+
33
+ /**
34
+ * The path to the directory that backup files are stored in
35
+ *
36
+ * @var string $this->path
37
+ */
38
+ protected $custom_path;
39
+
40
+ /**
41
+ * Protected constructor to prevent creating a new instance of the
42
+ * *Singleton* via the `new` operator from outside of this class.
43
+ */
44
+ protected function __construct() {}
45
+
46
+ /**
47
+ * Private clone method to prevent cloning of the instance of the
48
+ * *Singleton* instance.
49
+ *
50
+ * @return void
51
+ */
52
+ private function __clone() {}
53
+
54
+ /**
55
+ * Private unserialize method to prevent unserializing of the *Singleton*
56
+ * instance.
57
+ *
58
+ * @return void
59
+ */
60
+ private function __wakeup() {}
61
+
62
+ /**
63
+ * Returns the *Singleton* instance of this class.
64
+ *
65
+ * @staticvar HMBKP_PAth $instance The *Singleton* instances of this class.
66
+ *
67
+ * @return HMBKP_Path The *Singleton* instance.
68
+ */
69
+ public static function get_instance() {
70
+
71
+ static $instance = null;
72
+
73
+ if ( null === $instance ) {
74
+ $instance = new static();
75
+ }
76
+
77
+ return $instance;
78
+
79
+ }
80
+
81
+ /**
82
+ * Get the path to the directory where backups will be stored
83
+ */
84
+ public function get_path() {
85
+
86
+ // Calculate the path if needed
87
+ if ( empty( $this->path ) || ! wp_is_writable( $this->path ) ) {
88
+ $this->calculate_path();
89
+ }
90
+
91
+ // Ensure the backup directory is protected
92
+ $this->protect_path();
93
+
94
+ return $this->path;
95
+
96
+ }
97
+
98
+ /**
99
+ * Set the path directly, overriding the default
100
+ *
101
+ * @param $path
102
+ */
103
+ public function set_path( $path ) {
104
+
105
+ $this->custom_path = $path;
106
+
107
+ // Re-calculate the backup path
108
+ $this->calculate_path();
109
+
110
+ }
111
+
112
+ /**
113
+ * Get the path to the default backup location in wp-content
114
+ */
115
+ public function get_default_path() {
116
+ return trailingslashit( WP_CONTENT_DIR ) . 'backupwordpress-' . substr( HMBKP_SECURE_KEY, 0, 10 ) . '-backups';
117
+ }
118
+
119
+ /**
120
+ * Get the path to the fallback backup location in uploads
121
+ */
122
+ public function get_fallback_path() {
123
+
124
+ $upload_dir = wp_upload_dir();
125
+
126
+ return trailingslashit( $upload_dir['basedir'] ) . 'backupwordpress-' . substr( HMBKP_SECURE_KEY, 0, 10 ) . '-backups';
127
+
128
+ }
129
+
130
+ /**
131
+ * Get the path to the custom backup location if it's been set
132
+ */
133
+ public function get_custom_path() {
134
+
135
+ if ( $this->custom_path ) {
136
+ return $this->custom_path;
137
+ }
138
+
139
+ if ( defined( 'HMBKP_PATH' ) && wp_is_writable( HMBKP_PATH ) ) {
140
+ return HMBKP_PATH;
141
+ }
142
+
143
+ return '';
144
+
145
+ }
146
+
147
+ /**
148
+ * Builds an array containing existing backups folders.
149
+ *
150
+ * @return array
151
+ */
152
+ public function get_existing_paths() {
153
+
154
+ if ( false === $default = glob( WP_CONTENT_DIR . '/backupwordpress-*-backups', GLOB_ONLYDIR ) ) {
155
+ $default = array();
156
+ }
157
+
158
+ $upload_dir = wp_upload_dir();
159
+
160
+ if ( false === $fallback = glob( $upload_dir['basedir'] . '/backupwordpress-*-backups', GLOB_ONLYDIR ) ) {
161
+ $fallback = array();
162
+ }
163
+
164
+ $paths = array_merge( $default, $fallback );
165
+
166
+ return $paths;
167
+
168
+ }
169
+
170
+ /**
171
+ * Returns the first existing path if there is one
172
+ *
173
+ * @return string Backup path if found empty string if not
174
+ */
175
+ public function get_existing_path() {
176
+
177
+ $paths = $this->get_existing_paths();
178
+
179
+ if ( ! empty( $paths[0] ) ) {
180
+ return $paths[0];
181
+ }
182
+
183
+ return '';
184
+
185
+ }
186
+
187
+ /**
188
+ * Calculate the backup path and create the directory if it doesn't exist.
189
+ *
190
+ * Tries all possible locations and uses the first one possible
191
+ *
192
+ * @return
193
+ */
194
+ public function calculate_path() {
195
+
196
+ $paths = array();
197
+
198
+ // If we have a custom path then try to use it
199
+ if ( $this->get_custom_path() ) {
200
+ $paths[] = $this->get_custom_path();
201
+ }
202
+
203
+ // If there is already a backups directory then try to use that
204
+ if ( $this->get_existing_path() ) {
205
+ $paths[] = $this->get_existing_path();
206
+ }
207
+
208
+ // If not then default to a new directory in wp-content
209
+ $paths[] = $this->get_default_path();
210
+
211
+ // If that didn't work then fallback to a new directory in uploads
212
+ $paths[] = $this->get_fallback_path();
213
+
214
+ // Loop through possible paths, use the first one that exists/can be created and is writable
215
+ foreach ( $paths as $path ) {
216
+ if ( wp_mkdir_p( $path ) ) { // Also handles fixing perms / directory already exists
217
+ break;
218
+ }
219
+ }
220
+
221
+ if ( isset( $path ) ) {
222
+ $this->path = $path;
223
+ }
224
+
225
+ }
226
+
227
+ /**
228
+ * @param string $reset
229
+ */
230
+ public function protect_path( $reset = 'no' ) {
231
+
232
+ global $is_apache;
233
+
234
+ // Protect against directory browsing by including an index.html file
235
+ $index = $this->path . '/index.html';
236
+
237
+ if ( ( 'reset' === $reset ) && file_exists( $index ) ) {
238
+ @unlink( $index );
239
+ }
240
+
241
+ if ( ! file_exists( $index ) && wp_is_writable( $this->path ) ) {
242
+ file_put_contents( $index, '' );
243
+ }
244
+
245
+ $htaccess = $this->path . '/.htaccess';
246
+
247
+ if ( ( 'reset' === $reset ) && file_exists( $htaccess ) ) {
248
+ @unlink( $htaccess );
249
+ }
250
+
251
+ // Protect the directory with a .htaccess file on Apache servers
252
+ if ( $is_apache && function_exists( 'insert_with_markers' ) && ! file_exists( $htaccess ) && wp_is_writable( $this->path ) ) {
253
+
254
+ $contents[] = '# ' . sprintf( __( 'This %s file ensures that other people cannot download your backup files.', 'hmbkp' ), '.htaccess' );
255
+ $contents[] = '';
256
+ $contents[] = '<IfModule mod_rewrite.c>';
257
+ $contents[] = 'RewriteEngine On';
258
+ $contents[] = 'RewriteCond %{QUERY_STRING} !key=' . HMBKP_SECURE_KEY;
259
+ $contents[] = 'RewriteRule (.*) - [F]';
260
+ $contents[] = '</IfModule>';
261
+ $contents[] = '';
262
+
263
+ insert_with_markers( $htaccess, 'BackUpWordPress', $contents );
264
+
265
+ }
266
+
267
+ }
268
+
269
+ /**
270
+ * If we have more than one path then move any existing backups to the current path and remove them
271
+ */
272
+ public function merge_existing_paths() {
273
+
274
+ $paths = $this->get_existing_paths();
275
+
276
+ if ( ( $paths && $this->get_custom_path() ) || count( $paths ) > 1 ) {
277
+ foreach ( $paths as $old_path ) {
278
+ $this->move_old_backups( $old_path );
279
+ }
280
+ }
281
+
282
+ }
283
+
284
+ /**
285
+ * Move backup files from an existing directory and the new
286
+ * location
287
+ *
288
+ * @param string $path The path to move the backups from
289
+ * @return void
290
+ */
291
+ public function move_old_backups( $from ) {
292
+
293
+ if ( ! is_readable( $from ) ) {
294
+ return;
295
+ }
296
+
297
+ if ( ! wp_is_writable( $this->get_path() ) ) {
298
+ return;
299
+ }
300
+
301
+ // Move any existing backups
302
+ if ( $handle = opendir( $from ) ) {
303
+
304
+ // Loop through the backup directory
305
+ while ( false !== ( $file = readdir( $handle ) ) ) {
306
+
307
+ // Find all zips
308
+ if ( 'zip' === pathinfo( $file, PATHINFO_EXTENSION ) ) {
309
+
310
+ // Try to move them
311
+ if ( ! @rename( trailingslashit( $from ) . $file, trailingslashit( $this->get_path() ) . $file ) ) {
312
+
313
+
314
+ // If we can't move them then try to copy them
315
+ copy( trailingslashit( $from ) . $file, trailingslashit( $this->get_path() ) . $file );
316
+
317
+ }
318
+
319
+ }
320
+ }
321
+
322
+ closedir( $handle );
323
+
324
+ }
325
+
326
+ // Delete the old directory if it's inside WP_CONTENT_DIR
327
+ if ( false !== strpos( $from, WP_CONTENT_DIR ) && $from !== $this->get_path() ) {
328
+ hmbkp_rmdirtree( $from );
329
+ }
330
+
331
+ }
332
+
333
+ /**
334
+ * Clean any temporary / incomplete backups from the backups directory
335
+ */
336
+ public function cleanup() {
337
+
338
+ // Don't cleanup a custom path, who knows what other stuff is there
339
+ if ( $this->get_path() === $this->get_custom_path() ) {
340
+ return;
341
+ }
342
+
343
+ if ( $handle = opendir( $this->get_path() ) ) {
344
+
345
+ while ( false !== ( $file = readdir( $handle ) ) ) {
346
+
347
+ if ( ! in_array( $file, array( '.', '..', 'index.html' ) ) && 'zip' !== pathinfo( $file, PATHINFO_EXTENSION ) && false === strpos( $file, '-running' ) ) {
348
+
349
+ @unlink( $file );
350
+
351
+ }
352
+ }
353
+
354
+ closedir( $handle );
355
+
356
+ }
357
+
358
+ }
359
+
360
+ }
classes/class-notices.php CHANGED
@@ -10,6 +10,8 @@ class HMBKP_Notices {
10
  */
11
  private static $_instance;
12
 
 
 
13
  /**
14
  *
15
  */
@@ -23,24 +25,28 @@ class HMBKP_Notices {
23
  if ( ! ( self::$_instance instanceof HMBKP_Notices ) ) {
24
  self::$_instance = new HMBKP_Notices();
25
  }
 
26
  return self::$_instance;
 
27
  }
28
 
29
  /**
30
  * @param string $context
31
  * @param array $messages
 
32
  *
33
  * @return mixed|void
34
  */
35
- public function set_notices( $context, array $messages ) {
36
 
37
- $all_notices = get_option( 'hmbkp_notices' );
38
 
39
- $all_notices[ $context ] = $messages;
40
-
41
- update_option( 'hmbkp_notices', $all_notices );
 
 
42
 
43
- return get_option( 'hmbkp_notices' );
44
  }
45
 
46
  /**
@@ -53,23 +59,34 @@ class HMBKP_Notices {
53
  */
54
  public function get_notices( $context = '' ) {
55
 
56
- if ( $all_notices = get_option( 'hmbkp_notices' ) ) {
 
 
57
 
58
- if ( 0 < trim( strlen( $context ) ) ) {
59
- return $all_notices[ $context ];
60
  }
61
 
62
- return $all_notices;
63
  }
64
 
65
  return array();
66
 
67
  }
68
 
 
 
 
 
69
  /**
70
  * Delete all notices from the DB.
71
  */
72
  public function clear_all_notices() {
73
- return delete_option( 'hmbkp_notices' );
 
 
 
 
74
  }
 
75
  }
10
  */
11
  private static $_instance;
12
 
13
+ private $notices;
14
+
15
  /**
16
  *
17
  */
25
  if ( ! ( self::$_instance instanceof HMBKP_Notices ) ) {
26
  self::$_instance = new HMBKP_Notices();
27
  }
28
+
29
  return self::$_instance;
30
+
31
  }
32
 
33
  /**
34
  * @param string $context
35
  * @param array $messages
36
+ * @param bool $persistant whether to save the notices to the database
37
  *
38
  * @return mixed|void
39
  */
40
+ public function set_notices( $context, array $messages, $persistant = true ) {
41
 
42
+ $this->notices[ $context ] = $messages;
43
 
44
+ if ( $persistant ) {
45
+ $notices = get_option( 'hmbkp_notices' );
46
+ $notices[ $context ] = $messages;
47
+ update_option( 'hmbkp_notices', $notices );
48
+ }
49
 
 
50
  }
51
 
52
  /**
59
  */
60
  public function get_notices( $context = '' ) {
61
 
62
+ $notices = $this->get_all_notices();
63
+
64
+ if ( $notices ) {
65
 
66
+ if ( $context && isset( $notices[ $context ] ) ) {
67
+ return $notices[ $context ];
68
  }
69
 
70
+ return $notices;
71
  }
72
 
73
  return array();
74
 
75
  }
76
 
77
+ private function get_all_notices() {
78
+ return array_merge_recursive( (array) $this->notices, (array) get_option( 'hmbkp_notices' ) );
79
+ }
80
+
81
  /**
82
  * Delete all notices from the DB.
83
  */
84
  public function clear_all_notices() {
85
+
86
+ $this->notices = array();
87
+
88
+ delete_option( 'hmbkp_notices' );
89
+
90
  }
91
+
92
  }
classes/class-requirements.php CHANGED
@@ -255,7 +255,7 @@ class HMBKP_Requirement_PHP_User extends HMBKP_Requirement {
255
  return '';
256
  }
257
 
258
- return shell_exec( 'whoami' );
259
 
260
  }
261
 
@@ -282,7 +282,7 @@ class HMBKP_Requirement_PHP_Group extends HMBKP_Requirement {
282
  return '';
283
  }
284
 
285
- return shell_exec( 'groups' );
286
 
287
  }
288
 
@@ -332,7 +332,7 @@ class HMBKP_Requirement_Cron_Array extends HMBKP_Requirement {
332
  return false;
333
  }
334
 
335
- return $cron;
336
 
337
  }
338
 
@@ -451,7 +451,7 @@ class HMBKP_Requirement_Backup_Path extends HMBKP_Requirement {
451
  * @return string
452
  */
453
  protected function test() {
454
- return hmbkp_path();
455
  }
456
 
457
  }
@@ -600,6 +600,37 @@ class HMBKP_Requirement_Calculated_Size extends HMBKP_Requirement {
600
 
601
  HMBKP_Requirements::register( 'HMBKP_Requirement_Calculated_Size', 'Site' );
602
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
603
  /**
604
  * Class HMBKP_Requirement_WP_Cron_Test_Response
605
  */
@@ -941,7 +972,7 @@ class HMBKP_Requirement_Plugin_Version extends HMBKP_Requirement {
941
  var $name = 'Plugin Version';
942
 
943
  protected function test() {
944
- return HMBKP_VERSION;
945
  }
946
  }
947
  HMBKP_Requirements::register( 'HMBKP_Requirement_Plugin_Version', 'constants' );
255
  return '';
256
  }
257
 
258
+ return trim( shell_exec( 'whoami' ) );
259
 
260
  }
261
 
282
  return '';
283
  }
284
 
285
+ return trim( shell_exec( 'groups' ) );
286
 
287
  }
288
 
332
  return false;
333
  }
334
 
335
+ return json_encode( $cron );
336
 
337
  }
338
 
451
  * @return string
452
  */
453
  protected function test() {
454
+ return HMBKP_Path::get_instance()->get_path();
455
  }
456
 
457
  }
600
 
601
  HMBKP_Requirements::register( 'HMBKP_Requirement_Calculated_Size', 'Site' );
602
 
603
+ /**
604
+ * Class HMBKP_Average_Backup_Duration
605
+ */
606
+ class HMBKP_Average_Backup_Duration extends HMBKP_Requirement {
607
+
608
+ protected $name = 'Average backup duration';
609
+
610
+ public function __get( $property ) {
611
+ return $this->{$property};
612
+ }
613
+
614
+ /**
615
+ * Retrieves the average backup duration for each schedule.
616
+ *
617
+ * @return array The average backup duration for all schedules.
618
+ */
619
+ public function test() {
620
+
621
+ $schedule_average_durations = array();
622
+
623
+ $schedules = HMBKP_Schedules::get_instance();
624
+
625
+ foreach ( $schedules->get_schedules() as $schedule ) {
626
+ $schedule_average_durations[ sprintf( __( 'Schedule: %s', 'backupwordpress' ), $schedule->get_id() ) ] = sprintf( __( 'Duration: %s', 'backupwordpress' ), $schedule->get_schedule_average_duration() );
627
+ }
628
+
629
+ return array_filter( $schedule_average_durations );
630
+ }
631
+ }
632
+ HMBKP_Requirements::register( 'HMBKP_Average_Backup_Duration', 'Site' );
633
+
634
  /**
635
  * Class HMBKP_Requirement_WP_Cron_Test_Response
636
  */
972
  var $name = 'Plugin Version';
973
 
974
  protected function test() {
975
+ return BackUpWordPress_Plugin::PLUGIN_VERSION;
976
  }
977
  }
978
  HMBKP_Requirements::register( 'HMBKP_Requirement_Plugin_Version', 'constants' );
classes/class-schedule.php CHANGED
@@ -61,10 +61,6 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
61
  $this->set_root( HMBKP_ROOT );
62
  }
63
 
64
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH ) {
65
- $this->set_path( HMBKP_PATH );
66
- }
67
-
68
  if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE ) {
69
  parent::set_excludes( HMBKP_EXCLUDE, true );
70
  }
@@ -126,6 +122,22 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
126
 
127
  }
128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
129
  /**
130
  * Get the name of this backup schedule
131
  *
@@ -343,16 +355,16 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
343
  * @return int The total of the file or directory
344
  */
345
  function is_site_size_being_calculated() {
346
- return get_transient( 'hmbkp_directory_filesizes_running' );
347
  }
348
 
349
  /**
350
  * Whether the total filesize is being calculated
351
  *
352
- * @return int The total of the file or directory
353
  */
354
  function is_site_size_cached() {
355
- return get_transient( 'hmbkp_directory_filesizes' );
356
  }
357
 
358
  /**
@@ -843,19 +855,15 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
843
  */
844
  public function set_status( $message ) {
845
 
846
- if ( ! $handle = fopen( $this->get_schedule_running_path(), 'w' ) ) {
847
- return;
848
- }
849
-
850
  $status = json_encode( (object) array(
851
  'filename' => $this->get_archive_filename(),
852
  'started' => $this->get_schedule_running_start_time(),
853
  'status' => $message,
854
  ) );
855
 
856
- fwrite( $handle, $status );
857
-
858
- fclose( $handle );
859
 
860
  }
861
 
@@ -921,6 +929,8 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
921
  case 'hmbkp_backup_complete' :
922
 
923
  $this->set_status( __( 'Finishing Backup', 'backupwordpress' ) );
 
 
924
  break;
925
 
926
  case 'hmbkp_error' :
@@ -972,6 +982,79 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
972
  do_action( 'hmbkp_action_complete', $action, $this );
973
  }
974
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
975
  /**
976
  * Get the backups created by this schedule
977
  *
@@ -1107,17 +1190,6 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1107
  // Leftover backup folders can be either under content dir, or under the uploads dir
1108
  $hmn_upload_dir = wp_upload_dir();
1109
 
1110
- $hmbkp_folders = array_merge(
1111
- $this->find_backup_folders( 'backupwordpress-', WP_CONTENT_DIR ),
1112
- $this->find_backup_folders( 'backupwordpress-', $hmn_upload_dir['path'] )
1113
- );
1114
-
1115
- if ( ! empty( $hmbkp_folders ) ) {
1116
- foreach ( $hmbkp_folders as $path ) {
1117
- $excluded[] = $path;
1118
- }
1119
- }
1120
-
1121
  $backupwp_folders = $this->find_backup_folders( 'backwpup-', $hmn_upload_dir['path'] );
1122
 
1123
  if ( ! empty( $backupwp_folders ) ) {
@@ -1143,6 +1215,7 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1143
  }
1144
 
1145
  // version control dirs
 
1146
  $excluded[] = '.svn/';
1147
  $excluded[] = '.git/';
1148
 
@@ -1151,7 +1224,7 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1151
 
1152
 
1153
  /**
1154
- * Returns an array with the BackUpWordPress backup folders in the specified directory
1155
  *
1156
  * @param $needle
1157
  * @param $haystack
@@ -1162,6 +1235,7 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1162
 
1163
  $found_folders = array();
1164
 
 
1165
  $folders_to_search = glob( $haystack . '/*', GLOB_ONLYDIR | GLOB_NOSORT );
1166
 
1167
  if ( ! empty( $folders_to_search ) ) {
@@ -1170,12 +1244,8 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1170
 
1171
  $pos = strpos( $folder, $needle );
1172
 
1173
- $default_path = get_option( 'hmbkp_default_path' );
1174
-
1175
- if ( ( false !== $pos ) && ( $folder !== $default_path ) ) {
1176
-
1177
  $found_folders[] = trailingslashit( $folder );
1178
-
1179
  }
1180
 
1181
  }
@@ -1183,6 +1253,7 @@ class HMBKP_Scheduled_Backup extends HM_Backup {
1183
  }
1184
 
1185
  return $found_folders;
 
1186
  }
1187
 
1188
  }
61
  $this->set_root( HMBKP_ROOT );
62
  }
63
 
 
 
 
 
64
  if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE ) {
65
  parent::set_excludes( HMBKP_EXCLUDE, true );
66
  }
122
 
123
  }
124
 
125
+ /**
126
+ * Returns the given option value or WP_Error if it doesn't exist
127
+ *
128
+ * @param $option_name
129
+ *
130
+ * @return WP_Error
131
+ */
132
+ public function get_schedule_option( $option_name ) {
133
+
134
+ if ( isset( $this->options[ $option_name ] ) ) {
135
+ return $this->options[ $option_name ];
136
+ } else {
137
+ return new WP_Error( 'invalid_option_name', __( 'Invalid Option Name', 'backupwordpress' ) );
138
+ }
139
+ }
140
+
141
  /**
142
  * Get the name of this backup schedule
143
  *
355
  * @return int The total of the file or directory
356
  */
357
  function is_site_size_being_calculated() {
358
+ return false !== get_transient( 'hmbkp_directory_filesizes_running' );
359
  }
360
 
361
  /**
362
  * Whether the total filesize is being calculated
363
  *
364
+ * @return bool The total of the file or directory
365
  */
366
  function is_site_size_cached() {
367
+ return false !== get_transient( 'hmbkp_directory_filesizes' );
368
  }
369
 
370
  /**
855
  */
856
  public function set_status( $message ) {
857
 
 
 
 
 
858
  $status = json_encode( (object) array(
859
  'filename' => $this->get_archive_filename(),
860
  'started' => $this->get_schedule_running_start_time(),
861
  'status' => $message,
862
  ) );
863
 
864
+ if ( false === @file_put_contents( $this->get_schedule_running_path(), $status ) ) {
865
+ throw new RuntimeException( sprintf( __( 'Error writing to file. (%s)', 'backpwordpress' ), $this->get_schedule_running_path() ) );
866
+ }
867
 
868
  }
869
 
929
  case 'hmbkp_backup_complete' :
930
 
931
  $this->set_status( __( 'Finishing Backup', 'backupwordpress' ) );
932
+ $this->update_average_schedule_run_time( $this->get_schedule_running_start_time(), time() );
933
+
934
  break;
935
 
936
  case 'hmbkp_error' :
982
  do_action( 'hmbkp_action_complete', $action, $this );
983
  }
984
 
985
+ /**
986
+ * Calculate schedule run time.
987
+ *
988
+ * @param int Timestamp $end
989
+ */
990
+ public function update_average_schedule_run_time( $start, $end ) {
991
+
992
+ if ( $end <= $start ) {
993
+ // Something went wrong, ignore.
994
+ return;
995
+ }
996
+
997
+ $diff = (int) abs( $end - $start );
998
+
999
+ if ( isset( $this->options['duration_total'] ) && isset( $this->options['backup_run_count'] ) ) {
1000
+
1001
+ $this->options['duration_total'] += $diff;
1002
+ $this->options['backup_run_count'] ++;
1003
+
1004
+ } else {
1005
+
1006
+ $this->options['duration_total'] = $diff;
1007
+ $this->options['backup_run_count'] = 1;
1008
+
1009
+ }
1010
+
1011
+ $this->save();
1012
+ }
1013
+
1014
+ /**
1015
+ * Calculates the average run time for this schedule.
1016
+ *
1017
+ * @return string
1018
+ */
1019
+ public function get_schedule_average_duration() {
1020
+
1021
+ $duration = 'Unknown';
1022
+
1023
+ if ( ! isset( $this->options['duration_total'] ) || ! isset( $this->options['backup_run_count'] ) ) {
1024
+ return $duration;
1025
+ }
1026
+
1027
+ if ( 0 === (int) $this->options['backup_run_count'] ) {
1028
+ return $duration;
1029
+ }
1030
+
1031
+ $average_run_time = (int) $this->options['duration_total'] / (int) $this->options['backup_run_count'];
1032
+
1033
+ if ( $average_run_time < HOUR_IN_SECONDS ) {
1034
+
1035
+ $mins = round( $average_run_time / MINUTE_IN_SECONDS );
1036
+
1037
+ if ( $mins <= 1 ) {
1038
+ $mins = 1;
1039
+ }
1040
+
1041
+ /* translators: min=minute */
1042
+ $duration = sprintf( _n( '%s min', '%s mins', $mins, 'backupwordpress' ), $mins );
1043
+
1044
+ } elseif ( $average_run_time < DAY_IN_SECONDS && $average_run_time >= HOUR_IN_SECONDS ) {
1045
+
1046
+ $hours = round( $average_run_time / HOUR_IN_SECONDS );
1047
+
1048
+ if ( $hours <= 1 ) {
1049
+ $hours = 1;
1050
+ }
1051
+
1052
+ $duration = sprintf( _n( '%s hour', '%s hours', $hours, 'backupwordpress' ), $hours );
1053
+ }
1054
+
1055
+ return $duration;
1056
+ }
1057
+
1058
  /**
1059
  * Get the backups created by this schedule
1060
  *
1190
  // Leftover backup folders can be either under content dir, or under the uploads dir
1191
  $hmn_upload_dir = wp_upload_dir();
1192
 
 
 
 
 
 
 
 
 
 
 
 
1193
  $backupwp_folders = $this->find_backup_folders( 'backwpup-', $hmn_upload_dir['path'] );
1194
 
1195
  if ( ! empty( $backupwp_folders ) ) {
1215
  }
1216
 
1217
  // version control dirs
1218
+ // @todo stop excluding these once they are skipped entirely
1219
  $excluded[] = '.svn/';
1220
  $excluded[] = '.git/';
1221
 
1224
 
1225
 
1226
  /**
1227
+ * Returns an array of other backup folders in the specified directory
1228
  *
1229
  * @param $needle
1230
  * @param $haystack
1235
 
1236
  $found_folders = array();
1237
 
1238
+ // @todo can be simplified
1239
  $folders_to_search = glob( $haystack . '/*', GLOB_ONLYDIR | GLOB_NOSORT );
1240
 
1241
  if ( ! empty( $folders_to_search ) ) {
1244
 
1245
  $pos = strpos( $folder, $needle );
1246
 
1247
+ if ( false !== $pos ) {
 
 
 
1248
  $found_folders[] = trailingslashit( $folder );
 
1249
  }
1250
 
1251
  }
1253
  }
1254
 
1255
  return $found_folders;
1256
+
1257
  }
1258
 
1259
  }
classes/class-setup.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ defined( 'ABSPATH' ) or exit;
4
+
5
+ /**
6
+ * Class BackUpWordPress_Setup
7
+ */
8
+ class BackUpWordPress_Setup {
9
+
10
+ /**
11
+ * Defines the minimum version of WordPress required by BWP.
12
+ */
13
+ const MIN_WP_VERSION = '3.9.3';
14
+
15
+ /**
16
+ * Defines the minimum version of PHP required by BWP.
17
+ */
18
+ const MIN_PHP_VERSION = '5.3.2';
19
+
20
+ /**
21
+ * Setup the plugin defaults on activation
22
+ */
23
+ public static function activate() {
24
+
25
+ // loads the translation files for the Error message in the wp_die call.
26
+ load_plugin_textdomain( 'backupwordpress', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
27
+
28
+ if ( ! current_user_can( 'activate_plugins' ) ) {
29
+ return;
30
+ }
31
+
32
+ if ( ! self::meets_requirements() ) {
33
+
34
+ wp_die( self::get_notice_message(), __( 'BackUpWordPress', 'backupwordpress' ), array( 'back_link' => true ) );
35
+
36
+ }
37
+
38
+ // Run deactivate on activation in-case it was deactivated manually
39
+ self::deactivate();
40
+
41
+ }
42
+
43
+ /**
44
+ * Cleanup on plugin deactivation
45
+ *
46
+ * Removes options and clears all cron schedules
47
+ */
48
+ public static function deactivate() {
49
+
50
+ if ( ! current_user_can( 'activate_plugins' ) ) {
51
+ return;
52
+ }
53
+
54
+ // Determine if we need to do any cleanup
55
+ if ( ! class_exists( 'HMBKP_Schedules' ) ) {
56
+ return;
57
+ }
58
+
59
+ $schedules = HMBKP_Schedules::get_instance();
60
+
61
+ if ( empty( $schedules ) ) {
62
+ return;
63
+ }
64
+
65
+ // Clear schedule crons
66
+ foreach ( $schedules->get_schedules() as $schedule ) {
67
+ $schedule->unschedule();
68
+ }
69
+
70
+ // Opt them out of support
71
+ delete_option( 'hmbkp_enable_support' );
72
+
73
+ // Remove the directory filesize cache
74
+ delete_transient( 'hmbkp_directory_filesizes' );
75
+
76
+ }
77
+
78
+ /**
79
+ * Deactivate BackUpWordPress.
80
+ */
81
+ public static function self_deactivate() {
82
+
83
+ if ( ! current_user_can( 'activate_plugins' ) ) {
84
+ return;
85
+ }
86
+
87
+ if ( ! function_exists( 'deactivate_plugins' ) ) {
88
+ require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
89
+ }
90
+
91
+ deactivate_plugins( dirname( __DIR__ ) . '/backupwordpress.php' );
92
+
93
+ if ( isset( $_GET['activate'] ) ) {
94
+ unset( $_GET['activate'] );
95
+ }
96
+
97
+ }
98
+
99
+ /**
100
+ * Determine if this WordPress install meets the minimum requirements for BWP to run.
101
+ *
102
+ * @return bool
103
+ */
104
+ public static function meets_requirements() {
105
+
106
+ if ( false === self::is_supported_php_version() ) {
107
+ return false;
108
+ }
109
+
110
+ if ( false === self::is_supported_wp_version() ) {
111
+ return false;
112
+ }
113
+
114
+ return true;
115
+ }
116
+
117
+ /**
118
+ * Checks the current PHP version against the required version.
119
+ *
120
+ * @return bool 'Operator' parameter specified, returns a boolean.
121
+ */
122
+ protected static function is_supported_php_version() {
123
+
124
+ return version_compare( phpversion(), self::MIN_PHP_VERSION, '>=' );
125
+ }
126
+
127
+ /**
128
+ * Checks the current WordPress version against the required version.
129
+ *
130
+ * @return bool 'Operator' parameter specified, returns a boolean.
131
+ */
132
+ protected static function is_supported_wp_version() {
133
+
134
+ return version_compare( get_bloginfo( 'version' ), self::MIN_WP_VERSION, '>=' );
135
+ }
136
+
137
+ /**
138
+ * Displays a user friendly message in the WordPress admin.
139
+ */
140
+ public static function display_admin_notices() {
141
+
142
+ echo '<div class="error"><p>' . self::get_notice_message() . '</p></div>';
143
+
144
+ }
145
+
146
+ /**
147
+ * Returns a localized user friendly error message.
148
+ *
149
+ * @return string
150
+ */
151
+ public static function get_notice_message() {
152
+
153
+ return sprintf(
154
+ __( 'BackUpWordPress requires PHP version %1$s or later and WordPress version %2$s or later to run. It has not been activated. %3$s%4$s%5$sLearn more%6$s', 'backupwordpress' ),
155
+ self::MIN_PHP_VERSION,
156
+ self::MIN_WP_VERSION,
157
+ '<a href="',
158
+ 'https://bwp.hmn.md/unsupported-php-version-error/',
159
+ '">',
160
+ '</a>'
161
+ );
162
+ }
163
+
164
+ }
classes/wp-cli.php CHANGED
@@ -10,7 +10,7 @@
10
  class BackUpCommand extends WP_CLI_Command {
11
 
12
  /**
13
- * Generate some posts.
14
  *
15
  * ## OPTIONS
16
  *
@@ -21,7 +21,7 @@ class BackUpCommand extends WP_CLI_Command {
21
  * : Backup database only, defaults to off
22
  *
23
  * [--path]
24
- * : dir that the backup should be save in, defaults to wp-content/backups/
25
  *
26
  * [--root]
27
  * : dir that should be backed up, defaults to site root.
@@ -35,69 +35,74 @@ class BackUpCommand extends WP_CLI_Command {
35
  * ## Usage
36
  *
37
  * wp backupwordpress backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]
 
38
  */
39
  public function backup( $args, $assoc_args ) {
40
 
41
- // Make sure it's possible to do a backup
42
- if ( HM_Backup::is_safe_mode_active() )
43
- WP_CLI::error( sprintf( __( 'BackUpWordPress may not work when php is running with %s on', 'backupwordpress' ), 'safe_mode' ) );
44
-
45
- add_action( 'hmbkp_mysqldump_started', function() {
46
  WP_CLI::line( __( 'Backup: Dumping database...', 'backupwordpress' ) );
47
  } );
48
 
49
- add_action( 'hmbkp_archive_started', function() {
50
  WP_CLI::line( __( 'Backup: Zipping everything up...', 'backupwordpress' ) );
51
  } );
52
 
53
- // Clean up any mess left by a previous backup
54
- hmbkp_cleanup();
55
-
56
  $hm_backup = new HM_Backup();
57
 
58
- if ( ! empty( $assoc_args['path'] ) )
59
- $hm_backup->set_path( $assoc_args['path'] );
 
 
 
60
 
61
- if ( ! empty( $assoc_args['root'] ) )
 
 
62
  $hm_backup->set_root( $assoc_args['root'] );
 
63
 
64
  if ( ( ! is_dir( $hm_backup->get_path() ) && ( ! is_writable( dirname( $hm_backup->get_path() ) ) || ! wp_mkdir_p( $hm_backup->get_path() ) ) ) || ! is_writable( $hm_backup->get_path() ) ) {
65
  WP_CLI::error( __( 'Invalid backup path', 'backupwordpress' ) );
 
66
  return false;
67
  }
68
 
69
  if ( ! is_dir( $hm_backup->get_root() ) || ! is_readable( $hm_backup->get_root() ) ) {
70
  WP_CLI::error( __( 'Invalid root path', 'backupwordpress' ) );
 
71
  return false;
72
  }
73
 
74
- if ( ! empty( $assoc_args['files_only'] ) )
75
  $hm_backup->set_type( 'file' );
 
76
 
77
- if ( ! empty( $assoc_args['database_only'] ) )
78
  $hm_backup->set_type( 'database' );
 
79
 
80
- if ( isset( $assoc_args['mysqldump_command_path'] ) )
81
  $hm_backup->set_mysqldump_command_path( $assoc_args['mysqldump_command_path'] );
 
82
 
83
- if ( isset( $assoc_args['zip_command_path'] ) )
84
  $hm_backup->set_zip_command_path( $assoc_args['zip_command_path'] );
 
85
 
86
- if ( ! empty( $assoc_args['excludes'] ) )
87
  $hm_backup->set_excludes( $assoc_args['excludes'] );
 
88
 
89
  $hm_backup->backup();
90
 
91
- // Delete any old backup files
92
- //hmbkp_delete_old_backups();
93
-
94
- if ( file_exists( $hm_backup->get_archive_filepath() ) )
95
  WP_CLI::success( __( 'Backup Complete: ', 'backupwordpress' ) . $hm_backup->get_archive_filepath() );
96
-
97
- else
98
  WP_CLI::error( __( 'Backup Failed', 'backupwordpress' ) );
 
99
 
100
  }
101
 
102
  }
 
103
  WP_CLI::add_command( 'backupwordpress', 'BackUpCommand' );
10
  class BackUpCommand extends WP_CLI_Command {
11
 
12
  /**
13
+ * Perform a Backup.
14
  *
15
  * ## OPTIONS
16
  *
21
  * : Backup database only, defaults to off
22
  *
23
  * [--path]
24
+ * : dir that the backup should be save in, defaults to your existing backups directory
25
  *
26
  * [--root]
27
  * : dir that should be backed up, defaults to site root.
35
  * ## Usage
36
  *
37
  * wp backupwordpress backup [--files_only] [--database_only] [--path<dir>] [--root<dir>] [--zip_command_path=<path>] [--mysqldump_command_path=<path>]
38
+ *
39
  */
40
  public function backup( $args, $assoc_args ) {
41
 
42
+ add_action( 'hmbkp_mysqldump_started', function () {
 
 
 
 
43
  WP_CLI::line( __( 'Backup: Dumping database...', 'backupwordpress' ) );
44
  } );
45
 
46
+ add_action( 'hmbkp_archive_started', function () {
47
  WP_CLI::line( __( 'Backup: Zipping everything up...', 'backupwordpress' ) );
48
  } );
49
 
 
 
 
50
  $hm_backup = new HM_Backup();
51
 
52
+ if ( ! empty( $assoc_args['path'] ) ) {
53
+ HMBKP_Path::get_instance()->set_path( $assoc_args['path'] );
54
+ }
55
+
56
+ $hm_backup->set_path( HMBKP_Path::get_instance()->get_path() );
57
 
58
+ HMBKP_Path::get_instance()->cleanup();
59
+
60
+ if ( ! empty( $assoc_args['root'] ) ) {
61
  $hm_backup->set_root( $assoc_args['root'] );
62
+ }
63
 
64
  if ( ( ! is_dir( $hm_backup->get_path() ) && ( ! is_writable( dirname( $hm_backup->get_path() ) ) || ! wp_mkdir_p( $hm_backup->get_path() ) ) ) || ! is_writable( $hm_backup->get_path() ) ) {
65
  WP_CLI::error( __( 'Invalid backup path', 'backupwordpress' ) );
66
+
67
  return false;
68
  }
69
 
70
  if ( ! is_dir( $hm_backup->get_root() ) || ! is_readable( $hm_backup->get_root() ) ) {
71
  WP_CLI::error( __( 'Invalid root path', 'backupwordpress' ) );
72
+
73
  return false;
74
  }
75
 
76
+ if ( ! empty( $assoc_args['files_only'] ) ) {
77
  $hm_backup->set_type( 'file' );
78
+ }
79
 
80
+ if ( ! empty( $assoc_args['database_only'] ) ) {
81
  $hm_backup->set_type( 'database' );
82
+ }
83
 
84
+ if ( isset( $assoc_args['mysqldump_command_path'] ) ) {
85
  $hm_backup->set_mysqldump_command_path( $assoc_args['mysqldump_command_path'] );
86
+ }
87
 
88
+ if ( isset( $assoc_args['zip_command_path'] ) ) {
89
  $hm_backup->set_zip_command_path( $assoc_args['zip_command_path'] );
90
+ }
91
 
92
+ if ( ! empty( $assoc_args['excludes'] ) ) {
93
  $hm_backup->set_excludes( $assoc_args['excludes'] );
94
+ }
95
 
96
  $hm_backup->backup();
97
 
98
+ if ( file_exists( $hm_backup->get_archive_filepath() ) ) {
 
 
 
99
  WP_CLI::success( __( 'Backup Complete: ', 'backupwordpress' ) . $hm_backup->get_archive_filepath() );
100
+ } else {
 
101
  WP_CLI::error( __( 'Backup Failed', 'backupwordpress' ) );
102
+ }
103
 
104
  }
105
 
106
  }
107
+
108
  WP_CLI::add_command( 'backupwordpress', 'BackUpCommand' );
content/custom/example-org-test-merge-existing-path-complete-2014-12-10-01-08-33.zip DELETED
Binary file
content/custom/example-org-test-merge-existing-path-complete-2014-12-10-01-10-29.zip DELETED
Binary file
content/custom/example-org-test-merge-existing-path-complete-2014-12-10-01-12-39.zip DELETED
Binary file
content/custom/index.html DELETED
File without changes
content/default/index.html DELETED
File without changes
default/index.html DELETED
File without changes
functions/core.php CHANGED
@@ -1,58 +1,5 @@
1
  <?php
2
 
3
- /**
4
- * Setup the plugin defaults on activation
5
- */
6
- function hmbkp_activate() {
7
-
8
- // loads the translation files
9
- load_plugin_textdomain( 'hmbkp', false, HMBKP_PLUGIN_LANG_DIR );
10
-
11
- // Don't activate on old versions of WordPress
12
- global $wp_version;
13
-
14
- if ( version_compare( $wp_version, HMBKP_REQUIRED_WP_VERSION, '<' ) ) {
15
-
16
- require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
17
- deactivate_plugins( __FILE__ );
18
-
19
- if ( isset( $_GET['action'] ) && ( 'activate' === $_GET['action'] || 'error_scrape' === $_GET['action'] ) ) {
20
- wp_die( sprintf( __( 'BackUpWordPress requires WordPress version %s or greater.', 'backupwordpress' ), HMBKP_REQUIRED_WP_VERSION ), __( 'BackUpWordPress', 'backupwordpress' ), array( 'back_link' => true ) );
21
- }
22
- }
23
-
24
- // Run deactivate on activation in-case it was deactivated manually
25
- hmbkp_deactivate();
26
-
27
- }
28
-
29
- /**
30
- * Cleanup on plugin deactivation
31
- *
32
- * Removes options and clears all cron schedules
33
- */
34
- function hmbkp_deactivate() {
35
-
36
- hmbkp_maybe_self_deactivate();
37
-
38
- // Clean up the backups directory
39
- hmbkp_cleanup();
40
-
41
- $schedules = HMBKP_Schedules::get_instance();
42
-
43
- // Clear schedule crons
44
- foreach ( $schedules->get_schedules() as $schedule ) {
45
- $schedule->unschedule();
46
- }
47
-
48
- // Opt them out of support
49
- delete_option( 'hmbkp_enable_support' );
50
-
51
- // Remove the directory filesize cache
52
- delete_transient( 'hmbkp_directory_filesizes' );
53
-
54
- }
55
-
56
  /**
57
  * Handles anything that needs to be
58
  * done when the plugin is updated
@@ -195,42 +142,29 @@ function hmbkp_update() {
195
  // Remove the plugin data cache
196
  delete_transient( 'hmbkp_plugin_data' );
197
 
198
- //
199
-
200
  }
201
 
202
- // Every update
203
- if ( get_option( 'hmbkp_plugin_version' ) && version_compare( HMBKP_VERSION, get_option( 'hmbkp_plugin_version' ), '>' ) ) {
204
-
205
- hmbkp_deactivate();
206
-
207
- // re-calcuate the backups directory and move to it.
208
- if ( ! defined( 'HMBKP_PATH' ) ) {
209
-
210
- $old_path = hmbkp_path();
211
 
212
- delete_option( 'hmbkp_path' );
213
- delete_option( 'hmbkp_default_path' );
 
214
 
215
- hmbkp_path_move( $old_path, hmbkp_path() );
216
 
217
- }
 
218
 
219
- // Force .htaccess to be re-written
220
- if ( file_exists( hmbkp_path() . '/.htaccess' ) ) {
221
- unlink( hmbkp_path() . '/.htaccess' );
222
- }
223
 
224
- // Force index.html to be re-written
225
- if ( file_exists( hmbkp_path() . '/index.html' ) ) {
226
- unlink( hmbkp_path() . '/index.html' );
227
- }
228
 
229
  }
230
 
231
  // Update the stored version
232
- if ( get_option( 'hmbkp_plugin_version' ) !== HMBKP_VERSION ) {
233
- update_option( 'hmbkp_plugin_version', HMBKP_VERSION );
234
  }
235
 
236
  }
@@ -335,149 +269,6 @@ function hmbkp_rmdirtree( $dir ) {
335
  return true;
336
  }
337
 
338
- /**
339
- * Get the path to the backups directory
340
- *
341
- * Will try to create it if it doesn't exist
342
- * and will fallback to default if a custom dir
343
- * isn't writable.
344
- */
345
- function hmbkp_path() {
346
-
347
- global $is_apache;
348
-
349
- $path = untrailingslashit( get_option( 'hmbkp_path' ) );
350
-
351
- // Allow the backups path to be defined
352
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
353
- $path = untrailingslashit( HMBKP_PATH );
354
-
355
- // If the dir doesn't exist or isn't writable then use the default path instead instead
356
- if ( ( ! $path || ( is_dir( $path ) && ! wp_is_writable( $path ) ) || ( ! is_dir( $path ) && ! wp_is_writable( dirname( $path ) ) ) ) && $path !== hmbkp_path_default() )
357
- $path = hmbkp_path_default();
358
-
359
- // Create the backups directory if it doesn't exist
360
- if ( ! is_dir( $path ) && is_writable( dirname( $path ) ) )
361
- wp_mkdir_p( $path );
362
-
363
- // If the path has changed then cache it
364
- if ( get_option( 'hmbkp_path' ) !== $path )
365
- update_option( 'hmbkp_path', $path );
366
-
367
- // Protect against directory browsing by including a index.html file
368
- $index = $path . '/index.html';
369
-
370
- if ( ! file_exists( $index ) && wp_is_writable( $path ) )
371
- file_put_contents( $index, '' );
372
-
373
- $htaccess = $path . '/.htaccess';
374
-
375
- // Protect the directory with a .htaccess file on Apache servers
376
- if ( $is_apache && function_exists( 'insert_with_markers' ) && ! file_exists( $htaccess ) && wp_is_writable( $path ) ) {
377
-
378
- $contents[] = '# ' . sprintf( __( 'This %s file ensures that other people cannot download your backup files.', 'backupwordpress' ), '.htaccess' );
379
- $contents[] = '';
380
- $contents[] = '<IfModule mod_rewrite.c>';
381
- $contents[] = 'RewriteEngine On';
382
- $contents[] = 'RewriteCond %{QUERY_STRING} !key=' . HMBKP_SECURE_KEY;
383
- $contents[] = 'RewriteRule (.*) - [F]';
384
- $contents[] = '</IfModule>';
385
- $contents[] = '';
386
-
387
- insert_with_markers( $htaccess, 'BackUpWordPress', $contents );
388
-
389
- }
390
-
391
- return HM_Backup::conform_dir( $path );
392
-
393
- }
394
-
395
- /**
396
- * Return the default backup path
397
- *
398
- * @return string path
399
- */
400
- function hmbkp_path_default() {
401
-
402
- $path = untrailingslashit( get_option( 'hmbkp_default_path' ) );
403
-
404
- $content_dir = HM_Backup::conform_dir( trailingslashit( WP_CONTENT_DIR ) );
405
-
406
- $pos = strpos( $path, $content_dir );
407
-
408
- // no path set or current path doesn't match the database value
409
- if ( empty( $path ) || ( false === $pos ) || ( 0 !== $pos ) ) {
410
-
411
- $path = HM_Backup::conform_dir( trailingslashit( WP_CONTENT_DIR ) . 'backupwordpress-' . substr( HMBKP_SECURE_KEY, 0, 10 ) . '-backups' );
412
-
413
- update_option( 'hmbkp_default_path', $path );
414
-
415
- }
416
-
417
- $upload_dir = wp_upload_dir();
418
-
419
- // If the backups dir can't be created in WP_CONTENT_DIR then fallback to uploads
420
- if ( ( ( ! is_dir( $path ) && ! wp_is_writable( dirname( $path ) ) ) || ( is_dir( $path ) && ! wp_is_writable( $path ) ) ) && false === strpos( $path, $upload_dir['basedir'] ) ) {
421
-
422
- hmbkp_path_move( $path, $path = HM_Backup::conform_dir( trailingslashit( $upload_dir['basedir'] ) . 'backupwordpress-' . substr( HMBKP_SECURE_KEY, 0, 10 ) . '-backups' ) );
423
-
424
- update_option( 'hmbkp_default_path', $path );
425
-
426
- }
427
-
428
- return $path;
429
-
430
- }
431
-
432
- /**
433
- * Move the backup directory and all existing backup files to a new
434
- * location
435
- *
436
- * @param string $from path to move the backups dir from
437
- * @param string $to path to move the backups dir to
438
- * @return void
439
- */
440
- function hmbkp_path_move( $from, $to ) {
441
-
442
- if ( ! trim( untrailingslashit( trim( $from ) ) ) || ! trim( untrailingslashit( trim( $to ) ) ) )
443
- return;
444
-
445
- // Create the new directory if it doesn't exist
446
- if ( is_writable( dirname( $to ) ) && ! is_dir( $to ) )
447
- wp_mkdir_p( $to );
448
-
449
- // Bail if we couldn't
450
- if ( ! is_dir( $to ) || ! wp_is_writable( $to ) )
451
- return false;
452
-
453
- update_option( 'hmbkp_path', $to );
454
-
455
- // Bail if the old directory doesn't exist
456
- if ( ! is_dir( $from ) )
457
- return false;
458
-
459
- // Cleanup before we start moving things
460
- hmbkp_cleanup();
461
-
462
- // Move any existing backups
463
- if ( $handle = opendir( $from ) ) {
464
-
465
- while ( false !== ( $file = readdir( $handle ) ) ) {
466
- if ( 'zip' === pathinfo( $file, PATHINFO_EXTENSION ) )
467
- if ( ! @rename( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file ) )
468
- copy( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file );
469
- }
470
-
471
- closedir( $handle );
472
-
473
- }
474
-
475
- // Only delete the old directory if it's inside WP_CONTENT_DIR
476
- if ( false !==strpos( $from, WP_CONTENT_DIR ) )
477
- hmbkp_rmdirtree( $from );
478
-
479
- }
480
-
481
  /**
482
  * Check if a backup is possible with regards to file
483
  * permissions etc.
@@ -492,59 +283,11 @@ function hmbkp_possible() {
492
 
493
  $test_backup = new HMBKP_Scheduled_Backup( 'test_backup' );
494
 
495
- if ( ! is_readable( $test_backup->get_root() ) )
496
  return false;
497
-
498
- return true;
499
- }
500
-
501
- /**
502
- * Remove any non backup.zip files from the backups dir.
503
- *
504
- * @return void
505
- */
506
- function hmbkp_cleanup() {
507
-
508
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
509
- return;
510
-
511
- $hmbkp_path = hmbkp_path();
512
-
513
- if ( ! is_dir( $hmbkp_path ) )
514
- return;
515
-
516
- if ( $handle = opendir( $hmbkp_path ) ) {
517
-
518
- while ( false !== ( $file = readdir( $handle ) ) ) {
519
- if ( ! in_array( $file, array( '.', '..', 'index.html' ) ) && 'zip' !== pathinfo( $file, PATHINFO_EXTENSION ) && false === strpos( $file, '-running' ) )
520
- hmbkp_rmdirtree( trailingslashit( $hmbkp_path ) . $file );
521
- }
522
-
523
- closedir( $handle );
524
-
525
  }
526
 
527
- }
528
-
529
- /**
530
- * Handles changes in the defined Constants
531
- * that users can define to control advanced
532
- * settings
533
- */
534
- function hmbkp_constant_changes() {
535
-
536
- // If a custom backup path has been set or changed
537
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && HM_Backup::conform_dir( HMBKP_PATH ) !== ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) )
538
- hmbkp_path_move( $from, HMBKP_PATH );
539
-
540
- // If a custom backup path has been removed
541
- if ( ( ( defined( 'HMBKP_PATH' ) && ! HMBKP_PATH ) || ! defined( 'HMBKP_PATH' ) && hmbkp_path_default() !== ( $from = HM_Backup::conform_dir( get_option( 'hmbkp_path' ) ) ) ) )
542
- hmbkp_path_move( $from, hmbkp_path_default() );
543
-
544
- // If the custom path has changed and the new directory isn't writable
545
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && ! wp_is_writable( HMBKP_PATH ) && get_option( 'hmbkp_path' ) === HMBKP_PATH && is_dir( HMBKP_PATH ) )
546
- hmbkp_path_move( HMBKP_PATH, hmbkp_path_default() );
547
-
548
  }
549
 
550
  /**
1
  <?php
2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  /**
4
  * Handles anything that needs to be
5
  * done when the plugin is updated
142
  // Remove the plugin data cache
143
  delete_transient( 'hmbkp_plugin_data' );
144
 
 
 
145
  }
146
 
147
+ // Update to 3.1
148
+ if ( get_option( 'hmbkp_plugin_version' ) && version_compare( '3.0', get_option( 'hmbkp_plugin_version' ), '>' ) ) {
 
 
 
 
 
 
 
149
 
150
+ // Remove the plugin data cache
151
+ delete_option( 'hmbkp_path' );
152
+ delete_option( 'hmbkp_default_path' );
153
 
154
+ }
155
 
156
+ // Every update
157
+ if ( get_option( 'hmbkp_plugin_version' ) && version_compare( BackUpWordPress_Plugin::PLUGIN_VERSION, get_option( 'hmbkp_plugin_version' ), '>' ) ) {
158
 
159
+ BackUpWordPress_Setup::deactivate();
 
 
 
160
 
161
+ HMBKP_Path::get_instance()->protect_path( 'reset' );
 
 
 
162
 
163
  }
164
 
165
  // Update the stored version
166
+ if ( get_option( 'hmbkp_plugin_version' ) !== BackUpWordPress_Plugin::PLUGIN_VERSION ) {
167
+ update_option( 'hmbkp_plugin_version', BackUpWordPress_Plugin::PLUGIN_VERSION );
168
  }
169
 
170
  }
269
  return true;
270
  }
271
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  /**
273
  * Check if a backup is possible with regards to file
274
  * permissions etc.
283
 
284
  $test_backup = new HMBKP_Scheduled_Backup( 'test_backup' );
285
 
286
+ if ( ! is_readable( $test_backup->get_root() ) ) {
287
  return false;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
288
  }
289
 
290
+ return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
  }
292
 
293
  /**
functions/interface.php CHANGED
@@ -47,8 +47,14 @@ function hmbkp_get_backup_row( $file, HMBKP_Scheduled_Backup $schedule ) {
47
  */
48
  function hmbkp_admin_notices() {
49
 
 
 
 
 
 
 
50
  $notices = HMBKP_Notices::get_instance()->get_notices();
51
-
52
  if ( empty( $notices ) ) {
53
  return;
54
  }
@@ -67,7 +73,7 @@ function hmbkp_admin_notices() {
67
 
68
  <ul>
69
  <?php foreach ( $notices['backup_errors'] as $notice ) : ?>
70
- <li><?php echo esc_html( $notice ); ?></li>
71
  <?php endforeach; ?>
72
  </ul>
73
 
@@ -77,17 +83,13 @@ function hmbkp_admin_notices() {
77
  <?php if ( ! empty( $notices['server_config'] ) ) : ?>
78
 
79
  <div id="hmbkp-warning" class="error fade">
80
- <p>
81
- <strong><?php _e( 'BackUpWordPress has detected a problem.', 'backupwordpress' ); ?></strong>
82
- <a href="<?php echo esc_url( wp_nonce_url( add_query_arg( array( 'action' => 'hmbkp_dismiss_error' ), admin_url( 'admin-post.php' ) ), 'hmbkp_dismiss_error', 'hmbkp_dismiss_error_nonce' ) ); ?>" style="float: right;" class="button">
83
- <?php _e( 'Dismiss', 'backupwordpress' ); ?>
84
- </a>
85
- </p>
86
- <ul>
87
- <?php foreach ( $notices['server_config'] as $notice ) : ?>
88
- <li><?php echo $notice; ?></li>
89
- <?php endforeach; ?>
90
- </ul>
91
  </div>
92
 
93
  <?php endif; ?>
@@ -96,6 +98,7 @@ function hmbkp_admin_notices() {
96
 
97
  }
98
  add_action( 'admin_notices', 'hmbkp_admin_notices' );
 
99
 
100
  function hmbkp_set_server_config_notices() {
101
 
@@ -113,37 +116,49 @@ function hmbkp_set_server_config_notices() {
113
  }
114
 
115
  if ( ! is_dir( hmbkp_path() ) ) {
116
-
117
- $messages[] = sprintf( __( 'The backups directory can\'t be created because your %1$s directory isn\'t writable, run %2$s or %3$s or create the folder yourself.', 'backupwordpress' ), '<code>wp-content</code>', '<code>chown ' . esc_html( $php_user ) . ':' . esc_html( $php_group ) . ' ' . esc_html( dirname( hmbkp_path() ) ) . '</code>', '<code>chmod 777 ' . esc_html( dirname( hmbkp_path() ) ) . '</code>' );
118
-
119
  }
120
 
121
  if ( is_dir( hmbkp_path() ) && ! wp_is_writable( hmbkp_path() ) ) {
122
-
123
  $messages[] = sprintf( __( 'Your backups directory isn\'t writable, run %1$s or %2$s or set the permissions yourself.', 'backupwordpress' ), '<code>chown -R ' . esc_html( $php_user ) . ':' . esc_html( $php_group ) . ' ' . esc_html( hmbkp_path() ) . '</code>', '<code>chmod -R 777 ' . esc_html( hmbkp_path() ) . '</code>' );
124
-
125
  }
126
 
127
  if ( HM_Backup::is_safe_mode_active() ) {
128
  $messages[] = sprintf( __( '%1$s is running in %2$s, please contact your host and ask them to disable it. BackUpWordPress may not work correctly whilst %3$s is on.', 'backupwordpress' ), '<code>PHP</code>', sprintf( '<a href="%1$s">%2$s</a>', __( 'http://php.net/manual/en/features.safe-mode.php', 'backupwordpress' ), __( 'Safe Mode', 'backupwordpress' ) ), '<code>' . __( 'Safe Mode', 'backupwordpress' ) . '</code>' );
129
  }
130
 
131
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && ! is_dir( HMBKP_PATH ) ) {
132
- $messages[] = sprintf( __( 'Your custom backups directory %1$s doesn\'t exist and can\'t be created, your backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( hmbkp_path() ) . '</code>' );
133
- }
 
134
 
135
- if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && is_dir( HMBKP_PATH ) && ! wp_is_writable( HMBKP_PATH ) ) {
136
- $messages[] = sprintf( __( 'Your custom backups directory %1$s isn\'t writable, new backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( hmbkp_path() ) . '</code>' );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
137
  }
138
 
139
  $test_backup = new HMBKP_Scheduled_Backup( 'test_backup' );
140
 
141
  if ( ! is_readable( $test_backup->get_root() ) ) {
142
- $messages[] = sprintf( __( 'Your backup root path %s isn\'t readable.', 'backupwordpress' ), '<code>' . $test_backup->get_root() . '</code>' );
143
  }
144
 
145
  if ( count( $messages ) > 0 ) {
146
- $notices->set_notices( 'server_config', $messages );
147
  }
148
 
149
  }
@@ -157,8 +172,9 @@ add_action( 'admin_init', 'hmbkp_set_server_config_notices' );
157
  */
158
  function hmbkp_plugin_row( $plugins ) {
159
 
160
- if ( isset( $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php'] ) )
161
  $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] = str_replace( 'Once activated you\'ll find me under <strong>Tools &rarr; Backups</strong>', 'Find me under <strong><a href="' . esc_url( hmbkp_get_settings_url() ) . '">Tools &rarr; Backups</a></strong>', $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] );
 
162
 
163
  return $plugins;
164
 
@@ -369,3 +385,28 @@ function hmbkp_get_settings_errors() {
369
  function hmbkp_clear_settings_errors(){
370
  return delete_transient( 'hmbkp_settings_errors' );
371
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  */
48
  function hmbkp_admin_notices() {
49
 
50
+ $current_screen = get_current_screen();
51
+
52
+ if ( ! isset( $current_screen ) || HMBKP_ADMIN_PAGE !== $current_screen->id ) {
53
+ return;
54
+ }
55
+
56
  $notices = HMBKP_Notices::get_instance()->get_notices();
57
+
58
  if ( empty( $notices ) ) {
59
  return;
60
  }
73
 
74
  <ul>
75
  <?php foreach ( $notices['backup_errors'] as $notice ) : ?>
76
+ <li><pre><?php echo esc_html( $notice ); ?></pre></li>
77
  <?php endforeach; ?>
78
  </ul>
79
 
83
  <?php if ( ! empty( $notices['server_config'] ) ) : ?>
84
 
85
  <div id="hmbkp-warning" class="error fade">
86
+
87
+ <ul>
88
+ <?php foreach ( $notices['server_config'] as $notice ) : ?>
89
+ <li><?php echo wp_kses_data( $notice ); ?></li>
90
+ <?php endforeach; ?>
91
+ </ul>
92
+
 
 
 
 
93
  </div>
94
 
95
  <?php endif; ?>
98
 
99
  }
100
  add_action( 'admin_notices', 'hmbkp_admin_notices' );
101
+ add_action( 'network_admin_notices', 'hmbkp_admin_notices' );
102
 
103
  function hmbkp_set_server_config_notices() {
104
 
116
  }
117
 
118
  if ( ! is_dir( hmbkp_path() ) ) {
119
+ $messages[] = sprintf( __( 'The backups directory can\'t be created because your %1$s directory isn\'t writable, run %2$s or %3$s or create the folder yourself.', 'backupwordpress' ), '<code>' . esc_html( dirname( hmbkp_path() ) ) . '</code>', '<code>chown ' . esc_html( $php_user ) . ':' . esc_html( $php_group ) . ' ' . esc_html( dirname( hmbkp_path() ) ) . '</code>', '<code>chmod 777 ' . esc_html( dirname( hmbkp_path() ) ) . '</code>' );
 
 
120
  }
121
 
122
  if ( is_dir( hmbkp_path() ) && ! wp_is_writable( hmbkp_path() ) ) {
 
123
  $messages[] = sprintf( __( 'Your backups directory isn\'t writable, run %1$s or %2$s or set the permissions yourself.', 'backupwordpress' ), '<code>chown -R ' . esc_html( $php_user ) . ':' . esc_html( $php_group ) . ' ' . esc_html( hmbkp_path() ) . '</code>', '<code>chmod -R 777 ' . esc_html( hmbkp_path() ) . '</code>' );
 
124
  }
125
 
126
  if ( HM_Backup::is_safe_mode_active() ) {
127
  $messages[] = sprintf( __( '%1$s is running in %2$s, please contact your host and ask them to disable it. BackUpWordPress may not work correctly whilst %3$s is on.', 'backupwordpress' ), '<code>PHP</code>', sprintf( '<a href="%1$s">%2$s</a>', __( 'http://php.net/manual/en/features.safe-mode.php', 'backupwordpress' ), __( 'Safe Mode', 'backupwordpress' ) ), '<code>' . __( 'Safe Mode', 'backupwordpress' ) . '</code>' );
128
  }
129
 
130
+ if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH ) {
131
+
132
+ // Suppress open_basedir warning https://bugs.php.net/bug.php?id=53041
133
+ if ( ! @file_exists( HMBKP_PATH ) ) {
134
 
135
+ $messages[] = sprintf( __( 'Your custom path does not exist', 'backupwordpress' ) );
136
+
137
+ } elseif ( hmbkp_is_restricted_custom_path() ) {
138
+
139
+ $messages[] = sprintf( __( 'Your custom path is unreachable due to a restriction set in your PHP configuration (open_basedir)', 'backupwordpress' ) );
140
+
141
+ } else {
142
+
143
+ if ( ! @is_dir( HMBKP_PATH ) ) {
144
+ $messages[] = sprintf( __( 'Your custom backups directory %1$s doesn\'t exist and can\'t be created, your backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( hmbkp_path() ) . '</code>' );
145
+ }
146
+
147
+ if ( @is_dir( HMBKP_PATH ) && ! wp_is_writable( HMBKP_PATH ) ) {
148
+ $messages[] = sprintf( __( 'Your custom backups directory %1$s isn\'t writable, new backups will be saved to %2$s instead.', 'backupwordpress' ), '<code>' . esc_html( HMBKP_PATH ) . '</code>', '<code>' . esc_html( hmbkp_path() ) . '</code>' );
149
+
150
+ }
151
+ }
152
  }
153
 
154
  $test_backup = new HMBKP_Scheduled_Backup( 'test_backup' );
155
 
156
  if ( ! is_readable( $test_backup->get_root() ) ) {
157
+ $messages[] = sprintf( __( 'Your site root path %s isn\'t readable.', 'backupwordpress' ), '<code>' . $test_backup->get_root() . '</code>' );
158
  }
159
 
160
  if ( count( $messages ) > 0 ) {
161
+ $notices->set_notices( 'server_config', $messages, false );
162
  }
163
 
164
  }
172
  */
173
  function hmbkp_plugin_row( $plugins ) {
174
 
175
+ if ( isset( $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php'] ) ) {
176
  $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] = str_replace( 'Once activated you\'ll find me under <strong>Tools &rarr; Backups</strong>', 'Find me under <strong><a href="' . esc_url( hmbkp_get_settings_url() ) . '">Tools &rarr; Backups</a></strong>', $plugins[HMBKP_PLUGIN_SLUG . '/backupwordpress.php']['Description'] );
177
+ }
178
 
179
  return $plugins;
180
 
385
  function hmbkp_clear_settings_errors(){
386
  return delete_transient( 'hmbkp_settings_errors' );
387
  }
388
+
389
+ function hmbkp_is_restricted_custom_path() {
390
+
391
+ $open_basedir = @ini_get( 'open_basedir' );
392
+
393
+ if ( 0 === strlen( $open_basedir ) ) {
394
+ return false;
395
+ }
396
+
397
+ $open_basedir_paths = array_map( 'trim', explode( ':', $open_basedir ) );
398
+
399
+ // Is backups path in the open_basedir allowed paths?
400
+ if ( in_array( HMBKP_PATH, $open_basedir_paths ) ) {
401
+ return false;
402
+ }
403
+
404
+ // Is backups path a subdirectory of one of the allowed paths?
405
+ foreach ( $open_basedir_paths as $path ) {
406
+ if ( 0 === strpos( HMBKP_PATH, $path ) ) {
407
+ return false;
408
+ }
409
+ }
410
+
411
+ return true;
412
+ }
languages/backupwordpress-fr_FR.mo CHANGED
Binary file
languages/backupwordpress-fr_FR.po CHANGED
@@ -2,199 +2,562 @@
2
  # This file is distributed under the same license as the 3.x package.
3
  msgid ""
4
  msgstr ""
5
- "PO-Revision-Date: 2014-12-05 15:22-0300\n"
 
 
 
 
 
6
  "MIME-Version: 1.0\n"
7
  "Content-Type: text/plain; charset=UTF-8\n"
8
  "Content-Transfer-Encoding: 8bit\n"
9
  "Plural-Forms: nplurals=2; plural=n > 1;\n"
10
  "X-Generator: Poedit 1.5.7\n"
11
- "Project-Id-Version: 3.x\n"
12
- "POT-Creation-Date: \n"
13
- "Last-Translator: Human Made Limited <hello@hmn.md>\n"
14
- "Language-Team: \n"
15
 
16
- #: admin/faq.php:46
17
- msgid ""
18
- "Try adding <code>define( 'ALTERNATE_WP_CRON', true );</code> to your "
19
- "<code>wp-config.php</code>, do automatic backups work?"
20
- msgstr ""
21
- "Essayez d'ajouter <code>define( 'ALTERNATE_WP_CRON', true );</code> à votre "
22
- "fichier <code>wp-config.php</code>, est-ce que les sauvegardes automatiques "
23
- "fonctionnent ?"
24
 
25
- #: admin/faq.php:48
26
- msgid ""
27
- "Is your site private (I.E. is it behind some kind of authentication, "
28
- "maintenance plugin, .htaccess) if so wp-cron won't work until you remove it, "
29
- "if you are and you temporarily remove the authentication, do backups start "
30
- "working?"
31
- msgstr ""
32
- "Est-ce que votre site est privé ? ( protégé par une forme d'identification, "
33
- "un plugin de maintenance, ou .htaccess). Si oui, wp-cron ne fonctionnera pas "
34
- "tant que vous n'aurez pas désactivé la restriction. Vérifiez si la "
35
- "désactivation de la restriction solutionne le problème."
36
 
37
- #: admin/faq.php:50
38
- msgid ""
39
- "Report the results to our support team for further help. To do this, either "
40
- "enable suport from your Admin Dashboard (recommended), or email support@hmn."
41
- "md"
42
- msgstr ""
43
- "Envoyer un rapport des résultats à notre équipe de support technique pour "
44
- "obtenir de l'aide. Pour ce faire, activez le support via l'admin "
45
- "(recommandé) ou envoyez un courriel à support@hmn.md"
46
 
47
- #: admin/faq.php:52
48
- msgid "How to get BackUpWordPress working in Heart Internet"
49
- msgstr "Instructions spécifiques pour l'hébergeur Heart Internet."
50
 
51
- #: admin/faq.php:54
52
- msgid ""
53
- "The script to be entered into the Heart Internet cPanel is: <code>/usr/bin/"
54
- "php5 /home/sites/yourdomain.com/public_html/wp-cron.php</code> (note the "
55
- "space between php5 and the location of the file). The file <code>wp-cron."
56
- "php</code> <code>chmod</code> must be set to <code>711</code>."
57
- msgstr ""
58
- "Le script à ajouter au cPanel de Heart Internet est le suivant: <code>/usr/"
59
- "bin/php5 /home/sites/yourdomain.com/public_html/wp-cron.php</code> ( espace "
60
- "entre php5 et le chemin ). Les permissions <code>chmod</code> du fichier "
61
- "<code>wp-cron.php</code> doit être <code>711</code>."
62
 
63
- #: admin/faq.php:56
64
- msgid "My backups seem to be failing?"
65
- msgstr "Mes sauvegardes échouent !"
66
 
67
- #: admin/faq.php:58
68
- msgid ""
69
- "If your backups are failing - it's commonly caused by lack of available "
70
- "resources on your server. The easiest way to establish this to exclude some "
71
- "[of] or your entire uploades folder, running a backup an if that succeeds. "
72
- "If so, we know it's probably a server issue. If not, report the results to "
73
- "our support team for further help. To do this, either enable suport from "
74
- "your Admin Dashboard (recommended), or email support@hmn.md"
75
- msgstr ""
76
- "Si vos sauvegardes échouent, la cause la plus commune est un manque de "
77
- "ressources du serveur. Afin de vérifier si cela en est réellement la cause, "
78
- "excluez votre répertoire wp-uploads et démarrez une sauvegarde. Si la "
79
- "sauvegarde réussit, alors c'est très probablement une question de ressources "
80
- "insuffisantes. Sinon, envoyez les résultats à notre support technique qui "
81
- "pourra vous aider. Pour ce faire, activez le support sur la page de "
82
- "configuration du plugin, ou envoyez un courriel à support@hmn.md"
83
 
84
- #: admin/menu.php:12 admin/menu.php:14
85
- msgid "Manage Backups"
86
- msgstr "Gérer les sauvegardes"
87
 
88
- #: admin/menu.php:12 admin/menu.php:14 admin/menu.php:39
89
- msgid "Backups"
90
- msgstr "Sauvegardes"
91
 
92
- #: admin/menu.php:67
93
- msgid "FAQ"
94
- msgstr "FAQ"
95
 
96
- #: admin/menu.php:72
97
- msgid "For more information:"
98
- msgstr "Pour de plus amples informations:"
99
 
100
- #: admin/menu.php:74
101
- msgid "Support Forums"
102
- msgstr "Forums de support"
103
 
104
- #: admin/menu.php:75
105
- msgid "Help with translation"
106
- msgstr "Aider à la traduction"
107
 
108
- #: admin/page.php:7
109
  msgid ""
110
- "If you're finding BackUpWordPress useful, please %1$s rate it on the plugin "
111
- "directory%2$s."
 
112
  msgstr ""
113
- "Si vous aimez BackUpWordPress, n'hésitez pas à %1$slaisser une évaluation "
114
- "positive sur WordPress.org%2$s."
 
115
 
116
- #: admin/schedule-form-excludes.php:5
117
- msgid "Currently Excluded"
118
- msgstr "Exclusions actives"
119
 
120
- #: admin/schedule-form-excludes.php:40
121
- msgid "Default rule"
122
- msgstr "Règle par défaut"
123
 
124
- #: admin/schedule-form-excludes.php:44
125
- msgid "Defined in wp-config.php"
126
- msgstr "Défini dans le fichier wp-config.php"
127
 
128
- #: admin/schedule-form-excludes.php:48
129
- msgid "Remove"
130
- msgstr "Retirer"
131
 
132
- #: admin/schedule-form-excludes.php:64
133
- msgid "Directory Listing"
134
- msgstr "Contenu du répertoire"
135
 
136
- #: admin/schedule-form-excludes.php:66
 
 
 
 
 
 
 
 
137
  msgid ""
138
- "Here's a directory listing of all files on your site, you can browse through "
139
- "and exclude files or folders that you don't want included in your backup."
140
  msgstr ""
141
- "Voici l'arborescence de tous les fichiers de votre site, vous pouvez "
142
- "naviguer et exclure les fichiers et répertoire que vous ne voulez pas "
143
- "sauvegardez."
144
 
145
- #: admin/schedule-form-excludes.php:97
146
- msgid "Name"
147
- msgstr "Nom"
148
 
149
- #: admin/schedule-form-excludes.php:99
150
- msgid "Permissions"
151
- msgstr "Permissions"
152
 
153
- #: admin/schedule-form-excludes.php:101
154
- msgid "Status"
155
- msgstr "Statut"
 
 
156
 
157
- #: admin/schedule-form-excludes.php:158 admin/schedule-form-excludes.php:269
158
- msgid "Refresh"
159
- msgstr "Rafraîchir"
 
 
160
 
161
- #: admin/schedule-form-excludes.php:175 admin/schedule-form-excludes.php:293
162
- msgid "Symlink"
163
- msgstr "Alias"
 
 
164
 
165
- #: admin/schedule-form-excludes.php:179 admin/schedule-form-excludes.php:297
166
- msgid "Folder"
167
- msgstr "Répertoire"
 
 
 
 
168
 
169
- #: admin/schedule-form-excludes.php:269
170
- msgid "Recalculate the size of this directory"
171
- msgstr "Recalculer la taille de ce répertoire"
172
 
173
- #: admin/schedule-form-excludes.php:301
174
- msgid "File"
175
- msgstr "Fichier"
 
 
 
 
176
 
177
- #: admin/schedule-form-excludes.php:311
178
- msgid "Unreadable files won't be backed up."
179
- msgstr "Les fichiers illisibles ne seront pas sauvegardés."
180
 
181
- #: admin/schedule-form-excludes.php:311
182
- msgid "Unreadable"
183
- msgstr "Illisible"
 
 
 
 
184
 
185
- #: admin/schedule-form-excludes.php:315
186
- msgid "Excluded"
187
- msgstr "Exclus"
188
 
189
- #: admin/schedule-form-excludes.php:326
190
- msgid "Exclude &rarr;"
191
- msgstr "Exclure &rarr;"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
 
193
  #: admin/schedule-form-excludes.php:345 admin/schedule-form.php:185
194
- #: admin/schedule-settings.php:77
195
  msgid "Done"
196
  msgstr "Terminé"
197
 
 
 
 
 
198
  #: admin/schedule-form.php:31
199
  msgid "Backup"
200
  msgstr "Sauvegarde"
@@ -349,10 +712,6 @@ msgstr "ne stocker aucune sauvegarde sur ce serveur"
349
  msgid "store the last %1$s backups in %2$s"
350
  msgstr "stocker les %1$s sauvegardes ici:%2$s"
351
 
352
- #: admin/schedule-sentence.php:128
353
- msgid "Backup my %1$s %2$s %3$s, %4$s. "
354
- msgstr "Sauvegarder %1$s %2$s %3$s, %4$s."
355
-
356
  #: admin/schedule-sentence.php:131
357
  msgid "%s. "
358
  msgstr "%s. "
@@ -365,47 +724,36 @@ msgstr "Envoyer une copie de chaque sauvegarde à %s."
365
  msgid "Run now"
366
  msgstr "Exécuter maintenant"
367
 
368
- #: admin/schedule-settings.php:7
369
- msgid "Settings"
370
- msgstr "Paramètres"
371
-
372
- #: admin/schedule-settings.php:11
373
  msgid "Excludes"
374
  msgstr "Exclusions"
375
 
376
- #: admin/schedule-settings.php:23 functions/interface.php:35
377
  msgid "Delete"
378
  msgstr "Supprimer"
379
 
380
- #: backdrop/server.php:6
381
- msgid "No key supplied"
382
- msgstr "Aucune clé fournie"
383
-
384
- #: backdrop/server.php:11
385
- msgid "Supplied key was not valid"
386
- msgstr "La clé fournie est invalide"
387
-
388
- #: backdrop/task.php:22
389
- msgid "Task is already scheduled to run"
390
- msgstr "La tâche a déjà été programmée"
391
-
392
- #: backdrop/task.php:41
393
- msgid "Task is not scheduled to run"
394
- msgstr "La tâche n'a pas été programmée"
395
 
396
- #: backupwordpress.php:136
397
- msgid "BackUpWordPress requires WordPress version %s or greater."
398
- msgstr "BackUpWordPress nécessite WordPress version %s ou plus récent."
 
 
 
 
399
 
400
- #: backupwordpress.php:184
401
  msgid "Update"
402
  msgstr "Enregistrer"
403
 
404
- #: backupwordpress.php:185
405
  msgid "Cancel"
406
  msgstr "Annuler"
407
 
408
- #: backupwordpress.php:186
409
  msgid ""
410
  "Are you sure you want to delete this schedule? All of it's backups will also "
411
  "be deleted."
@@ -413,20 +761,20 @@ msgstr ""
413
  "Etes-vous sûr(e) de vouloir supprimer cette planification de sauvegarde ? "
414
  "Toutes les sauvegardes associées seront aussi supprimées."
415
 
416
- #: backupwordpress.php:186 backupwordpress.php:187 backupwordpress.php:188
417
- #: backupwordpress.php:189
418
  msgid "'Cancel' to go back, 'OK' to delete."
419
  msgstr "Annuler pour retourner, OK pour supprimer"
420
 
421
- #: backupwordpress.php:187
422
  msgid "Are you sure you want to delete this backup?"
423
  msgstr "Etes-vous sûr(e) de vouloir supprimer cette sauvegarde ?"
424
 
425
- #: backupwordpress.php:188
426
  msgid "Are you sure you want to remove this exclude rule?"
427
  msgstr "Etes-vous sûr(e) de vouloir supprimer cette règle d'exclusion ?"
428
 
429
- #: backupwordpress.php:189
430
  msgid ""
431
  "Reducing the number of backups that are stored on this server will cause "
432
  "some of your existing backups to be deleted, are you sure that's what you "
@@ -436,10 +784,6 @@ msgstr ""
436
  "certaines de vos sauvegardes. Etes-vous sûr(e) de vouloir effectuer cette "
437
  "action ?"
438
 
439
- #: backupwordpress.php:314
440
- msgid "Server Info"
441
- msgstr "Info serveur"
442
-
443
  #: classes/class-email.php:26
444
  msgid "Email notification"
445
  msgstr "Notification par e-mail"
@@ -470,7 +814,7 @@ msgstr "Envoyer une confirmation par courrier électronique à %s"
470
  msgid "%s isn't a valid email"
471
  msgstr "%s n'est pas une addresse email valable"
472
 
473
- #: classes/class-email.php:175
474
  msgid "Backup of %s Failed"
475
  msgstr "La sauvegarde de %s a échoué"
476
 
@@ -527,78 +871,99 @@ msgstr ""
527
  "Malheureusement le fichier de sauvegarde est trop gros pour être joint à ce "
528
  "courrier électronique."
529
 
530
- #: classes/class-schedule.php:235
 
 
 
 
 
 
 
531
  msgid "Argument 1 for %s must be a valid integer"
532
  msgstr "Paramètre 1 de %s doit être un nombre entier valide."
533
 
534
- #: classes/class-schedule.php:573
535
  msgid "Argument 1 for %s must be a valid future timestamp"
536
  msgstr "Paramètre 1 de %s doit être un horodatage futur valide"
537
 
538
- #: classes/class-schedule.php:610
539
  msgid "Argument 1 for %s must be a valid cron reoccurrence or \"manually\""
540
  msgstr ""
541
  "Paramètre 1 pour %s doit être un intervalle de cron valide ou \"manuel\""
542
 
543
- #: classes/class-schedule.php:738 functions/interface.php:214
544
  msgid "Starting Backup"
545
  msgstr "Début de la sauvegarde"
546
 
547
- #: classes/class-schedule.php:856
 
 
 
 
548
  msgid "Dumping Database %s"
549
  msgstr "Export de la BDD %s en cours"
550
 
551
- #: classes/class-schedule.php:861
552
  msgid "Verifying Database Dump %s"
553
  msgstr "Vérification de l'export de la base de données %s"
554
 
555
- #: classes/class-schedule.php:866
556
  msgid "Creating zip archive %s"
557
  msgstr "Création de l'archive zip %s"
558
 
559
- #: classes/class-schedule.php:871
560
  msgid "Verifying Zip Archive %s"
561
  msgstr "Vérification de l'archive zip %s"
562
 
563
- #: classes/class-schedule.php:876
564
  msgid "Finishing Backup"
565
  msgstr "Fin de la sauvegarde"
566
 
567
- #: classes/class-schedule.php:978
568
  msgid "Argument 1 for %s must be a non empty string"
569
  msgstr "Paramètre 1 pour %s doit être une chaîne de caractères non vide"
570
 
571
- #: classes/class-schedule.php:982
572
  msgid "%s doesn't exist"
573
  msgstr "%s n'existe pas"
574
 
575
- #: classes/class-schedule.php:986
576
  msgid "That backup wasn't created by this schedule"
577
  msgstr "Cette sauvegarde n'a pas été créée par cet horaire"
578
 
579
- #: classes/class-services.php:273
580
  msgid "Argument 1 for %s must be a valid filepath"
581
  msgstr "Paramètre 1 de %s doit être un chemin valide"
582
 
583
- #: classes/class-services.php:288
584
  msgid "Argument 1 for %s must be a registered service"
585
  msgstr "Paramètre 1 pour %s doit être un Service enregistré"
586
 
587
- #: classes/class-services.php:305
588
  msgid "Argument 1 for %s must be a valid class"
589
  msgstr "Paramètre 1 de %s doit être une classe existante"
590
 
591
- #: classes/wp-cli.php:43
592
- msgid "BackUpWordPress may not work when php is running with %s on"
 
 
 
 
 
 
593
  msgstr ""
594
- "BackUpWordPress peut ne pas fonctionner correctement lorsque PHP s'exécute "
595
- "avec %s activé"
596
 
597
- #: classes/wp-cli.php:46
 
 
 
 
598
  msgid "Backup: Dumping database..."
599
  msgstr "Sauvegarde: export de la BDD"
600
 
601
- #: classes/wp-cli.php:50
602
  msgid "Backup: Zipping everything up..."
603
  msgstr "Sauvegarde: compression"
604
 
@@ -606,23 +971,23 @@ msgstr "Sauvegarde: compression"
606
  msgid "Invalid backup path"
607
  msgstr "Chemin de sauvegarde incorrect"
608
 
609
- #: classes/wp-cli.php:70
610
  msgid "Invalid root path"
611
  msgstr "Le chemin racine est invalide"
612
 
613
- #: classes/wp-cli.php:95
614
  msgid "Backup Complete: "
615
  msgstr "Sauvegarde terminée :"
616
 
617
- #: classes/wp-cli.php:98
618
  msgid "Backup Failed"
619
  msgstr "La sauvegarde a échoué"
620
 
621
- #: functions/core.php:247
622
  msgid "BackUpWordPress has setup your default schedules."
623
  msgstr "BackUpWordPress a réglé les planifications de sauvegarde par défaut."
624
 
625
- #: functions/core.php:247
626
  msgid ""
627
  "By default BackUpWordPress performs a daily backup of your database and a "
628
  "weekly backup of your database &amp; files. You can modify these schedules."
@@ -631,52 +996,50 @@ msgstr ""
631
  "base de données et une sauvegarde hebdomadaire de votre base de données "
632
  "&amp; des fichiers. Vous pouvez modifier cette fréquence."
633
 
634
- #: functions/core.php:264
635
  msgid "Once Hourly"
636
  msgstr "Toutes les heures"
637
 
638
- #: functions/core.php:265
639
  msgid "Twice Daily"
640
  msgstr "Deux fois par jour"
641
 
642
- #: functions/core.php:266
643
  msgid "Once Daily"
644
  msgstr "Quotidiennement"
645
 
646
- #: functions/core.php:267
647
  msgid "Once Weekly"
648
  msgstr "Hebdomadaire"
649
 
650
- #: functions/core.php:268
651
  msgid "Once Biweekly"
652
  msgstr "Toutes les deux semaines"
653
 
654
- #: functions/core.php:269
655
  msgid "Once Monthly"
656
  msgstr "Mensuel"
657
 
658
- #: functions/core.php:287
659
  msgid "You can only delete directories inside your WordPress installation"
660
  msgstr ""
661
  "Vous ne pouvez supprimer que les sauvegardes sous votre installation de "
662
  "WordPress"
663
 
664
- #: functions/core.php:352
665
- msgid ""
666
- "This %s file ensures that other people cannot download your backup files."
667
- msgstr ""
668
- "Ce fichier %s permet de s'assurer que personne d'autre ne puisse télécharger "
669
- "vos fichiers de sauvegarde."
670
-
671
- #: functions/interface.php:32
672
  msgid "Download"
673
  msgstr "Télécharger"
674
 
675
- #: functions/interface.php:57 functions/interface.php:70
676
- msgid "BackUpWordPress is almost ready."
677
- msgstr "BackUpWordPress a presque terminé."
 
 
 
 
 
678
 
679
- #: functions/interface.php:57
680
  msgid ""
681
  "The backups directory can't be created because your %1$s directory isn't "
682
  "writable, run %2$s or %3$s or create the folder yourself."
@@ -685,7 +1048,7 @@ msgstr ""
685
  "l'autorisation d'écriture. Exécutez %2$s ou %3$s, ou réglez les permissions "
686
  "adéquates."
687
 
688
- #: functions/interface.php:70
689
  msgid ""
690
  "Your backups directory isn't writable, run %1$s or %2$s or set the "
691
  "permissions yourself."
@@ -693,7 +1056,7 @@ msgstr ""
693
  "Votre dossier de sauvegarde n'a pas l'autorisation d'écriture. Exécutez %1$s "
694
  "ou %2$s, ou réglez les permissions adéquates."
695
 
696
- #: functions/interface.php:81
697
  msgid ""
698
  "%1$s is running in %2$s, please contact your host and ask them to disable "
699
  "it. BackUpWordPress may not work correctly whilst %3$s is on."
@@ -702,15 +1065,15 @@ msgstr ""
702
  "demande de désactiver cela. BackUpWordPress peut ne pas fonctionner "
703
  "correctement tant que %3$s est activé."
704
 
705
- #: functions/interface.php:81
706
  msgid "http://php.net/manual/en/features.safe-mode.php"
707
  msgstr "http://br2.php.net/manual/fr/features.safe-mode.php"
708
 
709
- #: functions/interface.php:81
710
  msgid "Safe Mode"
711
  msgstr "Safe mode"
712
 
713
- #: functions/interface.php:92
714
  msgid ""
715
  "Your custom backups directory %1$s doesn't exist and can't be created, your "
716
  "backups will be saved to %2$s instead."
@@ -718,7 +1081,7 @@ msgstr ""
718
  "Le dossier de sauvegarde %1$s n'existe pas et ne peut être créé. Vos "
719
  "sauvegardes seront stockées dans %2$s."
720
 
721
- #: functions/interface.php:103
722
  msgid ""
723
  "Your custom backups directory %1$s isn't writable, new backups will be saved "
724
  "to %2$s instead."
@@ -726,571 +1089,245 @@ msgstr ""
726
  "Le dossier de sauvegarde %1$s n'a pas l'autorisation d'écriture. Les "
727
  "nouvelles sauvegardes seront stockées dans %2$s."
728
 
729
- #: functions/interface.php:114
730
- msgid "BackUpWordPress detected issues with your last backup."
731
- msgstr ""
732
- "BackUpWordPress a détecté des problèmes lors de la dernière sauvegarde."
733
-
734
- #: functions/interface.php:127
735
- msgid "Your backup root path %s isn't readable."
736
  msgstr ""
737
  "Permission insuffisante en lecture de la racine du chemin de sauvegarde %s."
738
 
739
- #: functions/interface.php:187
740
  msgid "Database and Files"
741
  msgstr "Base de données et fichiers"
742
 
743
- #: functions/interface.php:190
744
  msgid "Files"
745
  msgstr "Fichiers"
746
 
747
- #: functions/interface.php:193
748
  msgid "Database"
749
  msgstr "Base de données"
750
 
751
- #: functions/interface.php:198
752
  msgid "Legacy"
753
  msgstr "Contribution"
754
 
755
- #: functions/interface.php:213
756
  msgid "Started %s ago"
757
  msgstr "Démarré il y a %s"
758
 
759
- #: functions/interface.php:215
760
  msgid "cancel"
761
  msgstr "annuler"
762
 
763
- #: functions/interface.php:261
764
- msgid "% Backups Completed"
765
- msgstr "% Sauvegardes terminées"
766
-
767
- #: functions/interface.php:263
768
- msgid "No Backups Completed"
769
  msgstr "Aucune Sauvegarde Terminée"
770
 
771
- #: functions/interface.php:265
772
- msgid "1 Backup Completed"
773
- msgstr "1 Sauvegarde Disponible"
774
-
775
- #: functions/interface.php:273
776
  msgid "Complete Hourly"
777
  msgstr "Complet toutes les heures"
778
 
779
- #: functions/interface.php:274
780
  msgid "File Hourly"
781
  msgstr "Fichier une fois l'heure"
782
 
783
- #: functions/interface.php:275
784
  msgid "Database Hourly"
785
  msgstr "BDD une fois l'heure"
786
 
787
- #: functions/interface.php:276
788
  msgid "Complete Twicedaily"
789
  msgstr "Complet deux fois par jour"
790
 
791
- #: functions/interface.php:277
792
  msgid "File Twicedaily"
793
  msgstr "Fichier deux fois par jour"
794
 
795
- #: functions/interface.php:278
796
  msgid "Database Twicedaily"
797
  msgstr "BDD deux fois par jour"
798
 
799
- #: functions/interface.php:279
800
  msgid "Complete Daily"
801
  msgstr "Complet quotidiennement"
802
 
803
- #: functions/interface.php:280
804
  msgid "File Daily"
805
  msgstr "Fichier quotidiennement"
806
 
807
- #: functions/interface.php:281
808
- msgid "Database Daily"
809
- msgstr "BDD quotidien"
810
-
811
- #: functions/interface.php:282
812
- msgid "Complete Weekly"
813
- msgstr "Complet hebdomadaire"
814
-
815
- #: functions/interface.php:283
816
- msgid "File Weekly"
817
- msgstr "Fichier hebdomadaire"
818
-
819
- #: functions/interface.php:284
820
- msgid "Database Weekly"
821
- msgstr "BDD hebdomadaire"
822
-
823
- #: functions/interface.php:285
824
- msgid "Complete Biweekly"
825
- msgstr "Complet bi hebdomadaire"
826
-
827
- #: functions/interface.php:286
828
- msgid "File Biweekly"
829
- msgstr "Fichiers bihebdomadaire"
830
-
831
- #: functions/interface.php:287
832
- msgid "Database Biweekly"
833
- msgstr "BDD bihebdomadaire"
834
-
835
  #: functions/interface.php:288
836
- msgid "Complete Monthly"
837
- msgstr "Complet mensuel"
838
-
839
- #: functions/interface.php:289
840
- msgid "File Monthly"
841
- msgstr "Fichier mensuel"
842
-
843
- #: functions/interface.php:290
844
- msgid "Database Monthly"
845
- msgstr "BDD mensuel"
846
-
847
- #: functions/interface.php:291
848
- msgid "Complete Manually"
849
- msgstr "Complet mensuel"
850
-
851
- #: functions/interface.php:292
852
- msgid "File Manually"
853
- msgstr "Fichier manuel"
854
-
855
- #: functions/interface.php:293
856
- msgid "Database Manually"
857
- msgstr "BDD manuel"
858
-
859
- #: hm-backup/hm-backup.php:302
860
- msgid "archive filename must be a non empty string"
861
- msgstr "le nom de fichier doit être une chaîne de cqrqctères non vide"
862
-
863
- #: hm-backup/hm-backup.php:305
864
- msgid "invalid file extension for archive filename <code>%s</code>"
865
- msgstr "extension de fichier incorrect pour le fichier de nom <code>%s</code>"
866
-
867
- #: hm-backup/hm-backup.php:345
868
- msgid "database dump filename must be a non empty string"
869
- msgstr "le nom de fichier pour l'export de la BDD ne peut être vide"
870
-
871
- #: hm-backup/hm-backup.php:348
872
- msgid "invalid file extension for database dump filename <code>%s</code>"
873
- msgstr ""
874
- "l'extension de fichier de l'export de la BDD est invalide <code>%s</code>"
875
-
876
- #: hm-backup/hm-backup.php:379
877
- msgid "Invalid root path <code>%s</code> must be a valid directory path"
878
- msgstr "Répertoire racine <code>%s</code> doit être un chemin valide"
879
-
880
- #: hm-backup/hm-backup.php:408
881
- msgid "Invalid backup path <code>%s</code> must be a non empty (string)"
882
- msgstr "Chemin de sauvegarde invalide <code>%s</code>, ne peut pas être vide"
883
-
884
- #: hm-backup/hm-backup.php:460
885
- msgid ""
886
- "Invalid backup type <code>%s</code> must be one of (string) file, database "
887
- "or complete"
888
- msgstr ""
889
- "Type de sauvegarde invalide <code>%s</code> doit être parmi les suivants: "
890
- "file, database ou complete"
891
-
892
- msgid "BackUpWordPress"
893
- msgstr "BackUpWordPress"
894
-
895
- msgid "http://bwp.hmn.md/"
896
- msgstr "http://bwp.hmn.md/"
897
-
898
- msgid ""
899
- "Simple automated backups of your WordPress powered website. Once activated "
900
- "you'll find me under <strong>Tools &rarr; Backups</strong>."
901
- msgstr ""
902
- "Sauvegardes automatiques et faciles de votre site WordPress. Une fois "
903
- "activé, les règlages se trouvent ici: <strong>Outils > Sauvegardes</strong>"
904
-
905
- msgid "Human Made Limited"
906
- msgstr "Human Made Limited"
907
-
908
- msgid "http://hmn.md/"
909
- msgstr "http://hmn.md/"
910
-
911
- #: admin/actions.php:221
912
- msgid "The schedule ID was not provided. Aborting."
913
- msgstr "L'identifiant d'horaire non fourni. Execution interrompue."
914
-
915
- #: admin/actions.php:278
916
- msgid "Backup type cannot be empty"
917
- msgstr "Le type de sauvegarde doit être indiqué"
918
-
919
- #: admin/actions.php:282
920
- msgid "Invalid backup type"
921
- msgstr "Type de sauvegarde inexistant"
922
-
923
- #: admin/actions.php:296
924
- msgid "Schedule cannot be empty"
925
- msgstr "La planification doit être indiquée"
926
-
927
- #: admin/actions.php:300
928
- msgid "Invalid schedule"
929
- msgstr "Horaire incorrect"
930
-
931
- #: admin/actions.php:314
932
- msgid "Day of the week must be a valid lowercase day name"
933
- msgstr "Le jour de la semain doit être un nom de jour existant en minuscules"
934
-
935
- #: admin/actions.php:333
936
- msgid "Day of month must be between 1 and 31"
937
- msgstr "La valeur pour jour du mois doit être un nombre entre 1 et 31"
938
-
939
- #: admin/actions.php:352
940
- msgid "Hours must be between 0 and 23"
941
- msgstr "La valeur pour les heures doit être entre 0 et 23"
942
-
943
- #: admin/actions.php:371
944
- msgid "Minutes must be between 0 and 59"
945
- msgstr "Doit être un nombre entre 0 et 59"
946
-
947
- #: admin/actions.php:385
948
- msgid "Max backups can't be empty"
949
- msgstr "Le nombre maximum de sauvegarde doit être indiqué"
950
-
951
- #: admin/actions.php:389
952
- msgid "Max backups must be a number"
953
- msgstr "Le nombre maximum de sauvegardes doit être un nombre"
954
-
955
- #: admin/actions.php:393
956
- msgid "Max backups must be greater than 0"
957
- msgstr "Le nombre maximum de sauvegardes doit être supérieur à 0"
958
-
959
- #: admin/actions.php:582
960
- msgid ""
961
- "Your backup completed but with the following errors / warnings, it's "
962
- "probably ok to ignore these."
963
- msgstr ""
964
- "La sauvegarde s'est achevée, mais a généré les erreurs suivantes, vous "
965
- "pouvez probablement les ignorer."
966
-
967
- #: admin/actions.php:586
968
- msgid "Your backup failed"
969
- msgstr "La sauvegarde a échoué"
970
-
971
- #: admin/actions.php:590
972
- msgid "Here's the response from the server:"
973
- msgstr "Voici la réponse du serveur :"
974
-
975
- #: admin/actions.php:594
976
- msgid ""
977
- "You can email details of this error to %s so they can look into the issue."
978
- msgstr ""
979
- "Vous pouvez envoyez les détails de cette erreur par e-mail ) %s afin qu'il "
980
- "l'analyse."
981
-
982
- #: admin/actions.php:596
983
- msgid "Close"
984
- msgstr "Fermer"
985
-
986
- #: admin/actions.php:597
987
- msgid "Email to Support"
988
- msgstr "Contacter le support technique par e-mail"
989
-
990
- #: admin/actions.php:705 admin/actions.php:711 functions/interface.php:81
991
- #: functions/interface.php:92 functions/interface.php:103
992
- #: functions/interface.php:127
993
- msgid "BackUpWordPress has detected a problem."
994
- msgstr "BackUpWordPress a détecté un problème."
995
-
996
- #: admin/actions.php:705 admin/actions.php:711
997
- msgid ""
998
- "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
999
- "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
1000
- "See the %3$s for more details."
1001
- msgstr ""
1002
- "%1$s retourne une réponse %2$s ce qui signifie que les tâches cron ne sont "
1003
- "pas lancées correctement. BackUpWordPress dépend du bon fonctionnement de wp-"
1004
- "cron pour lancer les sauvegardes programmées. Voir %3$s pour plus de détails."
1005
-
1006
- #: admin/backups-table.php:8 admin/schedule-form-excludes.php:98
1007
- msgid "Size"
1008
- msgstr "Taille"
1009
-
1010
- #: admin/backups-table.php:9 admin/schedule-form-excludes.php:100
1011
- msgid "Type"
1012
- msgstr "Type"
1013
-
1014
- #: admin/backups-table.php:10
1015
- msgid "Actions"
1016
- msgstr "Actions"
1017
-
1018
- #: admin/backups-table.php:35
1019
- msgid "This is where your backups will appear once you have some."
1020
- msgstr "Vos sauvegardes seront disponibles ici"
1021
-
1022
- #: admin/backups.php:22
1023
- msgid "add schedule"
1024
- msgstr "ajouter un horaire"
1025
-
1026
- #: admin/backups.php:26
1027
- msgid "Support"
1028
- msgstr "Support"
1029
-
1030
- #: admin/backups.php:32
1031
- msgid "Enable Support"
1032
- msgstr "Activer le support"
1033
-
1034
- #: admin/constants.php:3
1035
- msgid ""
1036
- "You can %1$s any of the following %2$s in your %3$s to control advanced "
1037
- "settings. %4$s. Defined %5$s will be highlighted."
1038
- msgstr ""
1039
- "Vous pouvez %1$s chacun des prochains %2$s dans votre %3$s pour régler les "
1040
- "paramètres avancés. %4$s. %5$s défini sera souligné."
1041
-
1042
- #: admin/constants.php:3 admin/menu.php:69
1043
- msgid "Constants"
1044
- msgstr "Constantes"
1045
-
1046
- #: admin/constants.php:3
1047
- msgid "The Codex can help"
1048
- msgstr "Le Codex peut aider"
1049
-
1050
- #: admin/constants.php:14 admin/constants.php:30 admin/constants.php:46
1051
- #: admin/constants.php:62 admin/constants.php:78 admin/constants.php:94
1052
- #: admin/constants.php:110 classes/class-email.php:58
1053
- msgid "You've set it to: %s"
1054
- msgstr "Vous l'avez défini comme suit: %s"
1055
-
1056
- #: admin/constants.php:17
1057
- msgid ""
1058
- "The path to folder you would like to store your backup files in, defaults to "
1059
- "%s."
1060
- msgstr "Le chemin du dossier de sauvegarde. Par défaut : %s."
1061
 
1062
- #: admin/constants.php:17 admin/constants.php:33 admin/constants.php:49
1063
- #: admin/constants.php:65 admin/constants.php:81 admin/constants.php:97
1064
- #: admin/constants.php:113 classes/class-email.php:61
1065
- msgid "e.g."
1066
- msgstr "par exemple"
1067
 
1068
- #: admin/constants.php:33
1069
- msgid ""
1070
- "The path to your %1$s executable. Will be used for the %2$s part of the back "
1071
- "up if available."
1072
- msgstr ""
1073
- "Le chemin de l'exécutable %1$s. Il sera utilisé pour la partie %2$s de la "
1074
- "sauvegarde, s'il est présent."
1075
 
1076
- #: admin/constants.php:33 admin/constants.php:49
1077
- msgid "database"
1078
- msgstr "base de données"
1079
 
1080
- #: admin/constants.php:49
1081
- msgid ""
1082
- "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s "
1083
- "if available."
1084
- msgstr ""
1085
- "Le chemin vers l'exécutable %1$s. Il sera utilisé pour compresser %2$s et "
1086
- "%3$s s'il est présent."
1087
 
1088
- #: admin/constants.php:49
1089
- msgid "files"
1090
- msgstr "fichiers"
1091
 
1092
- #: admin/constants.php:65
1093
- msgid ""
1094
- "Comma separated list of files or directories to exclude, the backups "
1095
- "directory is automatically excluded."
1096
- msgstr ""
1097
- "Liste, séparée par des virgules, des dossiers à exclure. Le dossier de "
1098
- "sauvegarde est automatiquement exclu."
1099
 
1100
- #: admin/constants.php:81
1101
- msgid "The capability to use when calling %1$s. Defaults to %2$s."
1102
- msgstr "La capacité à utiliser quand %1$s est appelé. Par défaut : %2$s."
1103
 
1104
- #: admin/constants.php:97
1105
- msgid "The root directory that is backed up. Defaults to %s."
1106
- msgstr "Le répertoire racine à sauvegarder. Par défaut : %s."
1107
 
1108
- #: admin/constants.php:113
1109
- msgid "The time that your schedules should run. Defaults to %s."
1110
- msgstr "L'heure à laquelle vos sauvegardes seront effectuées. Par défaut : %s."
1111
 
1112
- #: admin/enable-support.php:3
1113
- msgid "Enable BackUpWordPress Support"
1114
- msgstr "Activer le support "
1115
 
1116
- #: admin/enable-support.php:5
1117
- msgid ""
1118
- "BackUpWordPress uses %s to provide support. In addition to allowing you to "
1119
- "send and receive messages we also send the following server information "
1120
- "along with your requests:"
1121
- msgstr ""
1122
- "BqckUpWordPress utilise %s pour fournir du support technique. En plus de "
1123
- "vous permettre d'envoyer et recevoir des messages, de l'information "
1124
- "concernant la configuration du serveur est également jointe."
1125
 
1126
- #: admin/enable-support.php:58
1127
- msgid "You can disable support in the future by deactivating BackUpWordPress."
1128
- msgstr ""
1129
- "Vous pouvez désactiver le support tecnique en désactivant BackUpWordPress."
1130
 
1131
- #: admin/enable-support.php:60
1132
- msgid "No thanks"
1133
- msgstr "Non merci"
1134
 
1135
- #: admin/enable-support.php:61
1136
- msgid "Yes I want to enable support"
1137
- msgstr "Oui, je veux activer le support technique"
1138
 
1139
- #: admin/faq.php:2
1140
- msgid "Where does BackUpWordPress store the backup files?"
1141
- msgstr " sont stockées les sauvegardes ?"
1142
 
1143
- #: admin/faq.php:4
1144
- msgid ""
1145
- "Backups are stored on your server in <code>/wp-content/backups</code>, you "
1146
- "can change the directory."
1147
  msgstr ""
1148
- "Les sauvegardes sont stockées sur votre serveur sous <code>/wp-content/"
1149
- "backups</code>, vous pouvez changer ce répertoire."
1150
 
1151
- #: admin/faq.php:6
1152
- msgid ""
1153
- "Important: By default BackUpWordPress backs up everything in your site root "
1154
- "as well as your database, this includes any non WordPress folders that "
1155
- "happen to be in your site root. This does mean that your backup directory "
1156
- "can get quite large."
1157
- msgstr ""
1158
- "Important: Par défault, BackUpWordPress sauvegarde tout ce que contient la "
1159
- "racine de votre site ainsi que votre base de données, y compris d'éventuels "
1160
- "répertoires externes à WordPress. Ceci peut causer des archives de taille "
1161
- "conséquente."
1162
 
1163
- #: admin/faq.php:8
1164
- msgid "What if I want to back up my site to another destination?"
1165
- msgstr ""
1166
- "Et si je désire stocker mes sauvegardes ailleurs que sur l'hébergement ?"
1167
 
1168
- #: admin/faq.php:10
1169
  msgid ""
1170
- "BackUpWordPress Pro supports Dropbox, Google Drive, Amazon S3, Rackspace, "
1171
- "Azure, DreamObjects and FTP/SFTP. Check it out here: <a href=\"http://bwp."
1172
- "hmn.md/?utm_source=wordpress-org&utm_medium=plugin-"
1173
- "page&utm_campaign=freeplugin\" title=\"BackUpWordPress Homepage\" target="
1174
- "\"_blank\">https://bwp.hmn.md</a>"
1175
  msgstr ""
1176
- "BackUpWordPress Pro est compatible avec Dropbox, Google Drive, Amazon S3, "
1177
- "Rackspace, Azure, DreamObjects and FTP/SFTP. Plus d'infos: <a href=\"http://"
1178
- "bwp.hmn.md/?utm_source=wordpress-org&utm_medium=plugin-"
1179
- "page&utm_campaign=freeplugin\" title=\"BackUpWordPress Homepage\" target="
1180
- "\"_blank\">https://bwp.hmn.md</a>"
1181
 
1182
- #: admin/faq.php:12
1183
- msgid "How do I restore my site from a backup?"
1184
- msgstr "Comment restaurer mon site à partir d'une sauvegarde ?"
1185
 
1186
- #: admin/faq.php:14
 
1187
  msgid ""
1188
- "You need to download the latest backup file either by clicking download on "
1189
- "the backups page or via <code>FTP</code>. <code>Unzip</code> the files and "
1190
- "upload all the files to your server overwriting your site. You can then "
1191
- "import the database using your hosts database management tool (likely "
1192
- "<code>phpMyAdmin</code>)."
1193
  msgstr ""
1194
- "Vous devez télécharger l'archive la plus récente soit en cliquant "
1195
- "télécharger à partir de la page des sauvegardes ou via <code>FTP</code>. "
1196
- "<code>Extraire</code> les fichiers et les transférer sur votre serveur en "
1197
- "remplaçant les fichiers existants. Vous pouvez alors importer la base de "
1198
- "données en utilisant votre outil de gestion de base de données. Probablement "
1199
- "<code>phpMyAdmin</code>"
1200
 
1201
- #: admin/faq.php:16
1202
- msgid ""
1203
- "See this guide for more details - <a href=\"https://bwp.hmn.md/support-"
1204
- "center/restore-backup/\" title=\"Go to support center\" target=\"_blank"
1205
- "\">How to restore from backup</a>."
1206
- msgstr ""
1207
- "Voir ce guide pour plus de détails - <a href=\"https://bwp.hmn.md/support-"
1208
- "center/restore-backup/\" title=\"Go to support center\" target=\"_blank"
1209
- "\">Comment restaurer à partir d'une sauvegarde</a>."
1210
 
1211
- #: admin/faq.php:18
1212
- msgid "Does BackUpWordPress back up the backups directory?"
1213
- msgstr "Est-ce que BackUpWordPress sauvegarde le répertoire de sauvegardes ?"
1214
 
1215
- #: admin/faq.php:20
1216
- msgid "No."
1217
- msgstr "Non"
 
 
 
 
1218
 
1219
- #: admin/faq.php:22
1220
- msgid "I'm not receiving my backups by email?"
1221
- msgstr "Je ne reçois pas mes sauvegardes par email ?"
 
 
 
1222
 
1223
- #: admin/faq.php:24
1224
- msgid ""
1225
- "Most servers have a filesize limit on email attachments, it's generally "
1226
- "about 10mb. If your backup file is over that limit it won't be sent attached "
1227
- "to the email, instead you should receive an email with a link to download "
1228
- "the backup, if you aren't even receiving that then you likely have a mail "
1229
- "issue on your server that you'll need to contact your host about."
1230
- msgstr ""
1231
- "La plupart des serveurs limitent la taille des pièces jointes aux emails, "
1232
- "environ 10Mb en moyenne. Si votre archive est au delà de cette limite, elle "
1233
- "ne sera pas jointe à l'email. Vous recevrez un email avec un lien pour "
1234
- "télécharger le fichier. Si vous ne recevez aucun email, vous devrez "
1235
- "probablement contacter votre hébergeur "
1236
 
1237
- #: admin/faq.php:26
1238
- msgid "How many backups are stored by default?"
1239
- msgstr "Combien de sauvegardes sont stockées par défaut ?"
1240
 
1241
- #: admin/faq.php:28
1242
- msgid "BackUpWordPress stores the last 10 backups by default."
1243
- msgstr ""
1244
- "BackUpWordPress stocke les 10 sauvegardes les plus récentes par défaut."
1245
 
1246
- #: admin/faq.php:30
1247
- msgid "How long should a backup take?"
1248
- msgstr "Combien de temps en moyenne prend une sauvegarde ?"
1249
 
1250
- #: admin/faq.php:32
1251
- msgid ""
1252
- "Unless your site is very large (many gigabytes) it should only take a few "
1253
- "minutes to perform a back up, if your back up has been running for longer "
1254
- "than an hour it's safe to assume that something has gone wrong, try de-"
1255
- "activating and re-activating the plugin, if it keeps happening, contact "
1256
- "support."
1257
- msgstr ""
1258
- "A mois que la taille totale de votre site soit très grande, celq ne devrait "
1259
- "prendre que quelques minutes pour effectuer une sauvegarde, si celle-ci "
1260
- "n'est toujours pas terminée après une heure, vous pouvez être certain qu'un "
1261
- "problème s'est produit. Essayez de désactiver puis de réactiver le plugin."
1262
 
1263
- #: admin/faq.php:34
1264
- msgid "What do I do if I get the wp-cron error message?"
1265
- msgstr "Que dois-je faire si je reçois un message d'erreur pour wp-cron ?"
1266
 
1267
- #: admin/faq.php:36
1268
- msgid ""
1269
- "The issue is that your <code>wp-cron.php</code> is not returning a "
1270
- "<code>200</code> response when hit with a HTTP request originating from your "
1271
- "own server, it could be several things, in most cases, it's an issue with "
1272
- "the server / site."
1273
- msgstr ""
1274
- "Le problème est que le fichier <code>wp-cron.php</code> ne renvoie pas un "
1275
- "code <code>200</code> lorsqu'il reçoit une requête HTTP à pqrtir de votre "
1276
- "propre serveur. Plusieurs raisons peuvent causer ce problème. La plupart du "
1277
- "temps, c'est la faute du serveur / site."
1278
 
1279
- #: admin/faq.php:38
1280
- msgid "There are some things you can test to confirm this is the issue."
1281
- msgstr ""
1282
- "Il y a certaines choses que vous pouvez faire pour confirmer le problème."
1283
 
1284
- #: admin/faq.php:40
1285
- msgid "Are scheduled posts working? (They use wp-cron as well ). "
1286
- msgstr "Est-ce que la publication programmée fonctionne ?"
1287
 
1288
- #: admin/faq.php:42
1289
- msgid ""
1290
- "Are you hosted on Heart Internet? (wp-cron may not be supported by Heart "
1291
- "Internet, see below for work-around)."
1292
- msgstr "Est-ce que votre site est hébergé par Heart Internet ?"
 
1293
 
1294
- #: admin/faq.php:44
1295
- msgid "If you click manual backup does it work?"
1296
- msgstr "Est-ce que la sauvegarde manuelle fonctionne ?"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  # This file is distributed under the same license as the 3.x package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: 3.x\n"
6
+ "Report-Msgid-Bugs-To: support@humanmade.co.uk\n"
7
+ "POT-Creation-Date: 2014-12-30 12:38:35+00:00\n"
8
+ "PO-Revision-Date: 2015-01-05 19:03-0300\n"
9
+ "Last-Translator: Human Made Limited <hello@hmn.md>\n"
10
+ "Language-Team: \n"
11
  "MIME-Version: 1.0\n"
12
  "Content-Type: text/plain; charset=UTF-8\n"
13
  "Content-Transfer-Encoding: 8bit\n"
14
  "Plural-Forms: nplurals=2; plural=n > 1;\n"
15
  "X-Generator: Poedit 1.5.7\n"
 
 
 
 
16
 
17
+ #: admin/actions.php:215
18
+ msgid "The schedule ID was not provided. Aborting."
19
+ msgstr "L'identifiant d'horaire non fourni. Execution interrompue."
 
 
 
 
 
20
 
21
+ #: admin/actions.php:271
22
+ msgid "Backup type cannot be empty"
23
+ msgstr "Le type de sauvegarde doit être indiqué"
 
 
 
 
 
 
 
 
24
 
25
+ #: admin/actions.php:275
26
+ msgid "Invalid backup type"
27
+ msgstr "Type de sauvegarde inexistant"
 
 
 
 
 
 
28
 
29
+ #: admin/actions.php:289
30
+ msgid "Schedule cannot be empty"
31
+ msgstr "La planification doit être indiquée"
32
 
33
+ #: admin/actions.php:293
34
+ msgid "Invalid schedule"
35
+ msgstr "Horaire incorrect"
 
 
 
 
 
 
 
 
36
 
37
+ #: admin/actions.php:307
38
+ msgid "Day of the week must be a valid lowercase day name"
39
+ msgstr "Le jour de la semain doit être un nom de jour existant en minuscules"
40
 
41
+ #: admin/actions.php:326
42
+ msgid "Day of month must be between 1 and 31"
43
+ msgstr "La valeur pour jour du mois doit être un nombre entre 1 et 31"
 
 
 
 
 
 
 
 
 
 
 
 
 
44
 
45
+ #: admin/actions.php:345
46
+ msgid "Hours must be between 0 and 23"
47
+ msgstr "La valeur pour les heures doit être entre 0 et 23"
48
 
49
+ #: admin/actions.php:364
50
+ msgid "Minutes must be between 0 and 59"
51
+ msgstr "Doit être un nombre entre 0 et 59"
52
 
53
+ #: admin/actions.php:378
54
+ msgid "Max backups can't be empty"
55
+ msgstr "Le nombre maximum de sauvegarde doit être indiqué"
56
 
57
+ #: admin/actions.php:382
58
+ msgid "Max backups must be a number"
59
+ msgstr "Le nombre maximum de sauvegardes doit être un nombre"
60
 
61
+ #: admin/actions.php:386
62
+ msgid "Max backups must be greater than 0"
63
+ msgstr "Le nombre maximum de sauvegardes doit être supérieur à 0"
64
 
65
+ #: admin/actions.php:702 admin/actions.php:708
66
+ msgid "BackUpWordPress has detected a problem."
67
+ msgstr "BackUpWordPress a détecté un problème."
68
 
69
+ #: admin/actions.php:702 admin/actions.php:708
70
  msgid ""
71
+ "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
72
+ "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
73
+ "See the %3$s for more details."
74
  msgstr ""
75
+ "%1$s retourne une réponse %2$s ce qui signifie que les tâches cron ne sont "
76
+ "pas lancées correctement. BackUpWordPress dépend du bon fonctionnement de wp-"
77
+ "cron pour lancer les sauvegardes programmées. Voir %3$s pour plus de détails."
78
 
79
+ #: admin/backups-table.php:8 admin/schedule-form-excludes.php:98
80
+ msgid "Size"
81
+ msgstr "Taille"
82
 
83
+ #: admin/backups-table.php:9 admin/schedule-form-excludes.php:100
84
+ msgid "Type"
85
+ msgstr "Type"
86
 
87
+ #: admin/backups-table.php:10
88
+ msgid "Actions"
89
+ msgstr "Actions"
90
 
91
+ #: admin/backups-table.php:35
92
+ msgid "This is where your backups will appear once you have some."
93
+ msgstr "Vos sauvegardes seront disponibles ici"
94
 
95
+ #: admin/backups.php:22
96
+ msgid "add schedule"
97
+ msgstr "ajouter un horaire"
98
 
99
+ #: admin/backups.php:26
100
+ msgid "Support"
101
+ msgstr "Support"
102
+
103
+ #: admin/backups.php:32
104
+ msgid "Enable Support"
105
+ msgstr "Activer le support"
106
+
107
+ #: admin/constants.php:3
108
  msgid ""
109
+ "You can %1$s any of the following %2$s in your %3$s to control advanced "
110
+ "settings. %4$s. Defined %5$s will be highlighted."
111
  msgstr ""
112
+ "Vous pouvez %1$s chacun des prochains %2$s dans votre %3$s pour régler les "
113
+ "paramètres avancés. %4$s. %5$s défini sera souligné."
 
114
 
115
+ #: admin/constants.php:3 admin/menu.php:69
116
+ msgid "Constants"
117
+ msgstr "Constantes"
118
 
119
+ #: admin/constants.php:3
120
+ msgid "The Codex can help"
121
+ msgstr "Le Codex peut aider"
122
 
123
+ #: admin/constants.php:14 admin/constants.php:30 admin/constants.php:46
124
+ #: admin/constants.php:62 admin/constants.php:78 admin/constants.php:94
125
+ #: admin/constants.php:110 classes/class-email.php:58
126
+ msgid "You've set it to: %s"
127
+ msgstr "Vous l'avez défini comme suit: %s"
128
 
129
+ #: admin/constants.php:17
130
+ msgid ""
131
+ "The path to folder you would like to store your backup files in, defaults to "
132
+ "%s."
133
+ msgstr "Le chemin du dossier de sauvegarde. Par défaut : %s."
134
 
135
+ #: admin/constants.php:17 admin/constants.php:33 admin/constants.php:49
136
+ #: admin/constants.php:65 admin/constants.php:81 admin/constants.php:97
137
+ #: admin/constants.php:113 classes/class-email.php:61
138
+ msgid "e.g."
139
+ msgstr "par exemple"
140
 
141
+ #: admin/constants.php:33
142
+ msgid ""
143
+ "The path to your %1$s executable. Will be used for the %2$s part of the back "
144
+ "up if available."
145
+ msgstr ""
146
+ "Le chemin de l'exécutable %1$s. Il sera utilisé pour la partie %2$s de la "
147
+ "sauvegarde, s'il est présent."
148
 
149
+ #: admin/constants.php:33 admin/constants.php:49
150
+ msgid "database"
151
+ msgstr "base de données"
152
 
153
+ #: admin/constants.php:49
154
+ msgid ""
155
+ "The path to your %1$s executable. Will be used to zip up your %2$s and %3$s "
156
+ "if available."
157
+ msgstr ""
158
+ "Le chemin vers l'exécutable %1$s. Il sera utilisé pour compresser %2$s et "
159
+ "%3$s s'il est présent."
160
 
161
+ #: admin/constants.php:49
162
+ msgid "files"
163
+ msgstr "fichiers"
164
 
165
+ #: admin/constants.php:65
166
+ msgid ""
167
+ "Comma separated list of files or directories to exclude, the backups "
168
+ "directory is automatically excluded."
169
+ msgstr ""
170
+ "Liste, séparée par des virgules, des dossiers à exclure. Le dossier de "
171
+ "sauvegarde est automatiquement exclu."
172
 
173
+ #: admin/constants.php:81
174
+ msgid "The capability to use when calling %1$s. Defaults to %2$s."
175
+ msgstr "La capacité à utiliser quand %1$s est appelé. Par défaut : %2$s."
176
 
177
+ #: admin/constants.php:97
178
+ msgid "The root directory that is backed up. Defaults to %s."
179
+ msgstr "Le répertoire racine à sauvegarder. Par défaut : %s."
180
+
181
+ #: admin/constants.php:113
182
+ msgid "The time that your schedules should run. Defaults to %s."
183
+ msgstr "L'heure à laquelle vos sauvegardes seront effectuées. Par défaut : %s."
184
+
185
+ #: admin/enable-support.php:3
186
+ msgid "Enable BackUpWordPress Support"
187
+ msgstr "Activer le support "
188
+
189
+ #: admin/enable-support.php:5
190
+ msgid ""
191
+ "BackUpWordPress uses %s to provide support. In addition to allowing you to "
192
+ "send and receive messages we also send the following server information "
193
+ "along with your requests:"
194
+ msgstr ""
195
+ "BqckUpWordPress utilise %s pour fournir du support technique. En plus de "
196
+ "vous permettre d'envoyer et recevoir des messages, de l'information "
197
+ "concernant la configuration du serveur est également jointe."
198
+
199
+ #: admin/enable-support.php:58
200
+ msgid "You can disable support in the future by deactivating BackUpWordPress."
201
+ msgstr ""
202
+ "Vous pouvez désactiver le support tecnique en désactivant BackUpWordPress."
203
+
204
+ #: admin/enable-support.php:60
205
+ msgid "No thanks"
206
+ msgstr "Non merci"
207
+
208
+ #: admin/enable-support.php:61
209
+ msgid "Yes I want to enable support"
210
+ msgstr "Oui, je veux activer le support technique"
211
+
212
+ #: admin/faq.php:2
213
+ msgid "Where does BackUpWordPress store the backup files?"
214
+ msgstr "Où sont stockées les sauvegardes ?"
215
+
216
+ #: admin/faq.php:4
217
+ msgid ""
218
+ "Backups are stored on your server in <code>/wp-content/backups</code>, you "
219
+ "can change the directory."
220
+ msgstr ""
221
+ "Les sauvegardes sont stockées sur votre serveur sous <code>/wp-content/"
222
+ "backups</code>, vous pouvez changer ce répertoire."
223
+
224
+ #: admin/faq.php:6
225
+ msgid ""
226
+ "Important: By default BackUpWordPress backs up everything in your site root "
227
+ "as well as your database, this includes any non WordPress folders that "
228
+ "happen to be in your site root. This does mean that your backup directory "
229
+ "can get quite large."
230
+ msgstr ""
231
+ "Important: Par défault, BackUpWordPress sauvegarde tout ce que contient la "
232
+ "racine de votre site ainsi que votre base de données, y compris d'éventuels "
233
+ "répertoires externes à WordPress. Ceci peut causer des archives de taille "
234
+ "conséquente."
235
+
236
+ #: admin/faq.php:8
237
+ msgid "What if I want to back up my site to another destination?"
238
+ msgstr ""
239
+ "Et si je désire stocker mes sauvegardes ailleurs que sur l'hébergement ?"
240
+
241
+ #: admin/faq.php:10
242
+ msgid ""
243
+ "BackUpWordPress Pro supports Dropbox, Google Drive, Amazon S3, Rackspace, "
244
+ "Azure, DreamObjects and FTP/SFTP. Check it out here: <a href=\"http://bwp."
245
+ "hmn.md/?utm_source=wordpress-org&utm_medium=plugin-"
246
+ "page&utm_campaign=freeplugin\" title=\"BackUpWordPress Homepage\" target="
247
+ "\"_blank\">https://bwp.hmn.md</a>"
248
+ msgstr ""
249
+ "BackUpWordPress Pro est compatible avec Dropbox, Google Drive, Amazon S3, "
250
+ "Rackspace, Azure, DreamObjects and FTP/SFTP. Plus d'infos: <a href=\"http://"
251
+ "bwp.hmn.md/?utm_source=wordpress-org&utm_medium=plugin-"
252
+ "page&utm_campaign=freeplugin\" title=\"BackUpWordPress Homepage\" target="
253
+ "\"_blank\">https://bwp.hmn.md</a>"
254
+
255
+ #: admin/faq.php:12
256
+ msgid "How do I restore my site from a backup?"
257
+ msgstr "Comment restaurer mon site à partir d'une sauvegarde ?"
258
+
259
+ #: admin/faq.php:14
260
+ msgid ""
261
+ "You need to download the latest backup file either by clicking download on "
262
+ "the backups page or via <code>FTP</code>. <code>Unzip</code> the files and "
263
+ "upload all the files to your server overwriting your site. You can then "
264
+ "import the database using your hosts database management tool (likely "
265
+ "<code>phpMyAdmin</code>)."
266
+ msgstr ""
267
+ "Vous devez télécharger l'archive la plus récente soit en cliquant "
268
+ "télécharger à partir de la page des sauvegardes ou via <code>FTP</code>. "
269
+ "<code>Extraire</code> les fichiers et les transférer sur votre serveur en "
270
+ "remplaçant les fichiers existants. Vous pouvez alors importer la base de "
271
+ "données en utilisant votre outil de gestion de base de données. Probablement "
272
+ "<code>phpMyAdmin</code>"
273
+
274
+ #: admin/faq.php:16
275
+ msgid ""
276
+ "See this guide for more details - <a href=\"https://bwp.hmn.md/support-"
277
+ "center/restore-backup/\" title=\"Go to support center\" target=\"_blank"
278
+ "\">How to restore from backup</a>."
279
+ msgstr ""
280
+ "Voir ce guide pour plus de détails - <a href=\"https://bwp.hmn.md/support-"
281
+ "center/restore-backup/\" title=\"Go to support center\" target=\"_blank"
282
+ "\">Comment restaurer à partir d'une sauvegarde</a>."
283
+
284
+ #: admin/faq.php:18
285
+ msgid "Does BackUpWordPress back up the backups directory?"
286
+ msgstr "Est-ce que BackUpWordPress sauvegarde le répertoire de sauvegardes ?"
287
+
288
+ #: admin/faq.php:20
289
+ msgid "No."
290
+ msgstr "Non"
291
+
292
+ #: admin/faq.php:22
293
+ msgid "I'm not receiving my backups by email?"
294
+ msgstr "Je ne reçois pas mes sauvegardes par email ?"
295
+
296
+ #: admin/faq.php:24
297
+ msgid ""
298
+ "Most servers have a filesize limit on email attachments, it's generally "
299
+ "about 10mb. If your backup file is over that limit it won't be sent attached "
300
+ "to the email, instead you should receive an email with a link to download "
301
+ "the backup, if you aren't even receiving that then you likely have a mail "
302
+ "issue on your server that you'll need to contact your host about."
303
+ msgstr ""
304
+ "La plupart des serveurs limitent la taille des pièces jointes aux emails, "
305
+ "environ 10Mb en moyenne. Si votre archive est au delà de cette limite, elle "
306
+ "ne sera pas jointe à l'email. Vous recevrez un email avec un lien pour "
307
+ "télécharger le fichier. Si vous ne recevez aucun email, vous devrez "
308
+ "probablement contacter votre hébergeur "
309
+
310
+ #: admin/faq.php:26
311
+ msgid "How many backups are stored by default?"
312
+ msgstr "Combien de sauvegardes sont stockées par défaut ?"
313
+
314
+ #: admin/faq.php:28
315
+ msgid "BackUpWordPress stores the last 10 backups by default."
316
+ msgstr ""
317
+ "BackUpWordPress stocke les 10 sauvegardes les plus récentes par défaut."
318
+
319
+ #: admin/faq.php:30
320
+ msgid "How long should a backup take?"
321
+ msgstr "Combien de temps en moyenne prend une sauvegarde ?"
322
+
323
+ #: admin/faq.php:32
324
+ msgid ""
325
+ "Unless your site is very large (many gigabytes) it should only take a few "
326
+ "minutes to perform a back up, if your back up has been running for longer "
327
+ "than an hour it's safe to assume that something has gone wrong, try de-"
328
+ "activating and re-activating the plugin, if it keeps happening, contact "
329
+ "support."
330
+ msgstr ""
331
+ "A mois que la taille totale de votre site soit très grande, celq ne devrait "
332
+ "prendre que quelques minutes pour effectuer une sauvegarde, si celle-ci "
333
+ "n'est toujours pas terminée après une heure, vous pouvez être certain qu'un "
334
+ "problème s'est produit. Essayez de désactiver puis de réactiver le plugin."
335
+
336
+ #: admin/faq.php:34
337
+ msgid "What do I do if I get the wp-cron error message?"
338
+ msgstr "Que dois-je faire si je reçois un message d'erreur pour wp-cron ?"
339
+
340
+ #: admin/faq.php:36
341
+ msgid ""
342
+ "The issue is that your <code>wp-cron.php</code> is not returning a "
343
+ "<code>200</code> response when hit with a HTTP request originating from your "
344
+ "own server, it could be several things, in most cases, it's an issue with "
345
+ "the server / site."
346
+ msgstr ""
347
+ "Le problème est que le fichier <code>wp-cron.php</code> ne renvoie pas un "
348
+ "code <code>200</code> lorsqu'il reçoit une requête HTTP à pqrtir de votre "
349
+ "propre serveur. Plusieurs raisons peuvent causer ce problème. La plupart du "
350
+ "temps, c'est la faute du serveur / site."
351
+
352
+ #: admin/faq.php:38
353
+ msgid "There are some things you can test to confirm this is the issue."
354
+ msgstr ""
355
+ "Il y a certaines choses que vous pouvez faire pour confirmer le problème."
356
+
357
+ #: admin/faq.php:40
358
+ msgid "Are scheduled posts working? (They use wp-cron as well ). "
359
+ msgstr "Est-ce que la publication programmée fonctionne ?"
360
+
361
+ #: admin/faq.php:42
362
+ msgid ""
363
+ "Are you hosted on Heart Internet? (wp-cron may not be supported by Heart "
364
+ "Internet, see below for work-around)."
365
+ msgstr "Est-ce que votre site est hébergé par Heart Internet ?"
366
+
367
+ #: admin/faq.php:44
368
+ msgid "If you click manual backup does it work?"
369
+ msgstr "Est-ce que la sauvegarde manuelle fonctionne ?"
370
+
371
+ #: admin/faq.php:46
372
+ msgid ""
373
+ "Try adding <code>define( 'ALTERNATE_WP_CRON', true );</code> to your "
374
+ "<code>wp-config.php</code>, do automatic backups work?"
375
+ msgstr ""
376
+ "Essayez d'ajouter <code>define( 'ALTERNATE_WP_CRON', true );</code> à votre "
377
+ "fichier <code>wp-config.php</code>, est-ce que les sauvegardes automatiques "
378
+ "fonctionnent ?"
379
+
380
+ #: admin/faq.php:48
381
+ msgid ""
382
+ "Is your site private (I.E. is it behind some kind of authentication, "
383
+ "maintenance plugin, .htaccess) if so wp-cron won't work until you remove it, "
384
+ "if you are and you temporarily remove the authentication, do backups start "
385
+ "working?"
386
+ msgstr ""
387
+ "Est-ce que votre site est privé ? ( protégé par une forme d'identification, "
388
+ "un plugin de maintenance, ou .htaccess). Si oui, wp-cron ne fonctionnera pas "
389
+ "tant que vous n'aurez pas désactivé la restriction. Vérifiez si la "
390
+ "désactivation de la restriction solutionne le problème."
391
+
392
+ #: admin/faq.php:50
393
+ msgid ""
394
+ "Report the results to our support team for further help. To do this, either "
395
+ "enable suport from your Admin Dashboard (recommended), or email support@hmn."
396
+ "md"
397
+ msgstr ""
398
+ "Envoyer un rapport des résultats à notre équipe de support technique pour "
399
+ "obtenir de l'aide. Pour ce faire, activez le support via l'admin "
400
+ "(recommandé) ou envoyez un courriel à support@hmn.md"
401
+
402
+ #: admin/faq.php:52
403
+ msgid "How to get BackUpWordPress working in Heart Internet"
404
+ msgstr "Instructions spécifiques pour l'hébergeur Heart Internet."
405
+
406
+ #: admin/faq.php:54
407
+ msgid ""
408
+ "The script to be entered into the Heart Internet cPanel is: <code>/usr/bin/"
409
+ "php5 /home/sites/yourdomain.com/public_html/wp-cron.php</code> (note the "
410
+ "space between php5 and the location of the file). The file <code>wp-cron."
411
+ "php</code> <code>chmod</code> must be set to <code>711</code>."
412
+ msgstr ""
413
+ "Le script à ajouter au cPanel de Heart Internet est le suivant: <code>/usr/"
414
+ "bin/php5 /home/sites/yourdomain.com/public_html/wp-cron.php</code> ( espace "
415
+ "entre php5 et le chemin ). Les permissions <code>chmod</code> du fichier "
416
+ "<code>wp-cron.php</code> doit être <code>711</code>."
417
+
418
+ #: admin/faq.php:56
419
+ msgid "My backups seem to be failing?"
420
+ msgstr "Mes sauvegardes échouent !"
421
+
422
+ #: admin/faq.php:58
423
+ msgid ""
424
+ "If your backups are failing - it's commonly caused by lack of available "
425
+ "resources on your server. The easiest way to establish this to exclude some "
426
+ "[of] or your entire uploades folder, running a backup an if that succeeds. "
427
+ "If so, we know it's probably a server issue. If not, report the results to "
428
+ "our support team for further help. To do this, either enable suport from "
429
+ "your Admin Dashboard (recommended), or email support@hmn.md"
430
+ msgstr ""
431
+ "Si vos sauvegardes échouent, la cause la plus commune est un manque de "
432
+ "ressources du serveur. Afin de vérifier si cela en est réellement la cause, "
433
+ "excluez votre répertoire wp-uploads et démarrez une sauvegarde. Si la "
434
+ "sauvegarde réussit, alors c'est très probablement une question de ressources "
435
+ "insuffisantes. Sinon, envoyez les résultats à notre support technique qui "
436
+ "pourra vous aider. Pour ce faire, activez le support sur la page de "
437
+ "configuration du plugin, ou envoyez un courriel à support@hmn.md"
438
+
439
+ #: admin/menu.php:12 admin/menu.php:14
440
+ msgid "Manage Backups"
441
+ msgstr "Gérer les sauvegardes"
442
+
443
+ #: admin/menu.php:12 admin/menu.php:14 admin/menu.php:39
444
+ msgid "Backups"
445
+ msgstr "Sauvegardes"
446
+
447
+ #: admin/menu.php:67
448
+ msgid "FAQ"
449
+ msgstr "FAQ"
450
+
451
+ #: admin/menu.php:79
452
+ msgid "Server Info"
453
+ msgstr "Info serveur"
454
+
455
+ #: admin/menu.php:86
456
+ msgid "For more information:"
457
+ msgstr "Pour de plus amples informations:"
458
+
459
+ #: admin/menu.php:88
460
+ msgid "Support Forums"
461
+ msgstr "Forums de support"
462
+
463
+ #: admin/menu.php:89
464
+ msgid "Help with translation"
465
+ msgstr "Aider à la traduction"
466
+
467
+ #: admin/page.php:7
468
+ msgid ""
469
+ "If you're finding BackUpWordPress useful, please %1$s rate it on the plugin "
470
+ "directory%2$s."
471
+ msgstr ""
472
+ "Si vous aimez BackUpWordPress, n'hésitez pas à %1$slaisser une évaluation "
473
+ "positive sur WordPress.org%2$s."
474
+
475
+ #: admin/schedule-form-excludes.php:5
476
+ msgid "Currently Excluded"
477
+ msgstr "Exclusions actives"
478
+
479
+ #: admin/schedule-form-excludes.php:40
480
+ msgid "Default rule"
481
+ msgstr "Règle par défaut"
482
+
483
+ #: admin/schedule-form-excludes.php:44
484
+ msgid "Defined in wp-config.php"
485
+ msgstr "Défini dans le fichier wp-config.php"
486
+
487
+ #: admin/schedule-form-excludes.php:48
488
+ msgid "Stop excluding"
489
+ msgstr "Ne plus exclure"
490
+
491
+ #: admin/schedule-form-excludes.php:64
492
+ msgid "Directory Listing"
493
+ msgstr "Contenu du répertoire"
494
+
495
+ #: admin/schedule-form-excludes.php:66
496
+ msgid ""
497
+ "Here's a directory listing of all files on your site, you can browse through "
498
+ "and exclude files or folders that you don't want included in your backup."
499
+ msgstr ""
500
+ "Voici l'arborescence de tous les fichiers de votre site, vous pouvez "
501
+ "naviguer et exclure les fichiers et répertoire que vous ne voulez pas "
502
+ "sauvegardez."
503
+
504
+ #: admin/schedule-form-excludes.php:97
505
+ msgid "Name"
506
+ msgstr "Nom"
507
+
508
+ #: admin/schedule-form-excludes.php:99
509
+ msgid "Permissions"
510
+ msgstr "Permissions"
511
+
512
+ #: admin/schedule-form-excludes.php:101
513
+ msgid "Status"
514
+ msgstr "Statut"
515
+
516
+ #: admin/schedule-form-excludes.php:158 admin/schedule-form-excludes.php:269
517
+ msgid "Refresh"
518
+ msgstr "Rafraîchir"
519
+
520
+ #: admin/schedule-form-excludes.php:175 admin/schedule-form-excludes.php:293
521
+ msgid "Symlink"
522
+ msgstr "Alias"
523
+
524
+ #: admin/schedule-form-excludes.php:179 admin/schedule-form-excludes.php:297
525
+ msgid "Folder"
526
+ msgstr "Répertoire"
527
+
528
+ #: admin/schedule-form-excludes.php:269
529
+ msgid "Recalculate the size of this directory"
530
+ msgstr "Recalculer la taille de ce répertoire"
531
+
532
+ #: admin/schedule-form-excludes.php:301
533
+ msgid "File"
534
+ msgstr "Fichier"
535
+
536
+ #: admin/schedule-form-excludes.php:311
537
+ msgid "Unreadable files won't be backed up."
538
+ msgstr "Les fichiers illisibles ne seront pas sauvegardés."
539
+
540
+ #: admin/schedule-form-excludes.php:311
541
+ msgid "Unreadable"
542
+ msgstr "Illisible"
543
+
544
+ #: admin/schedule-form-excludes.php:315
545
+ msgid "Excluded"
546
+ msgstr "Exclus"
547
+
548
+ #: admin/schedule-form-excludes.php:326
549
+ msgid "Exclude &rarr;"
550
+ msgstr "Exclure &rarr;"
551
 
552
  #: admin/schedule-form-excludes.php:345 admin/schedule-form.php:185
553
+ #: admin/schedule-settings.php:79
554
  msgid "Done"
555
  msgstr "Terminé"
556
 
557
+ #: admin/schedule-form.php:1 admin/schedule-settings.php:7
558
+ msgid "Settings"
559
+ msgstr "Paramètres"
560
+
561
  #: admin/schedule-form.php:31
562
  msgid "Backup"
563
  msgstr "Sauvegarde"
712
  msgid "store the last %1$s backups in %2$s"
713
  msgstr "stocker les %1$s sauvegardes ici:%2$s"
714
 
 
 
 
 
715
  #: admin/schedule-sentence.php:131
716
  msgid "%s. "
717
  msgstr "%s. "
724
  msgid "Run now"
725
  msgstr "Exécuter maintenant"
726
 
727
+ #: admin/schedule-settings.php:13
 
 
 
 
728
  msgid "Excludes"
729
  msgstr "Exclusions"
730
 
731
+ #: admin/schedule-settings.php:25 functions/interface.php:34
732
  msgid "Delete"
733
  msgstr "Supprimer"
734
 
735
+ #: admin/upsell.php:3
736
+ #, fuzzy
737
+ msgid "Backup to"
738
+ msgstr "Sauvegarde"
 
 
 
 
 
 
 
 
 
 
 
739
 
740
+ #: admin/upsell.php:15
741
+ msgid ""
742
+ "%1$sor buy the %2$sDeveloper Bundle%3$s now for only &dollar;99 (all "
743
+ "Destinations &amp; Unlimited Sites)%4$s"
744
+ msgstr ""
745
+ "%1$sou achetez la %2$scollection developpeur%3$s maintenant pour seulement "
746
+ "&dollar;99 ( nombre illimité de sites et toutes les destinations )%4$s"
747
 
748
+ #: backupwordpress.php:241
749
  msgid "Update"
750
  msgstr "Enregistrer"
751
 
752
+ #: backupwordpress.php:242
753
  msgid "Cancel"
754
  msgstr "Annuler"
755
 
756
+ #: backupwordpress.php:243
757
  msgid ""
758
  "Are you sure you want to delete this schedule? All of it's backups will also "
759
  "be deleted."
761
  "Etes-vous sûr(e) de vouloir supprimer cette planification de sauvegarde ? "
762
  "Toutes les sauvegardes associées seront aussi supprimées."
763
 
764
+ #: backupwordpress.php:243 backupwordpress.php:244 backupwordpress.php:245
765
+ #: backupwordpress.php:246
766
  msgid "'Cancel' to go back, 'OK' to delete."
767
  msgstr "Annuler pour retourner, OK pour supprimer"
768
 
769
+ #: backupwordpress.php:244
770
  msgid "Are you sure you want to delete this backup?"
771
  msgstr "Etes-vous sûr(e) de vouloir supprimer cette sauvegarde ?"
772
 
773
+ #: backupwordpress.php:245
774
  msgid "Are you sure you want to remove this exclude rule?"
775
  msgstr "Etes-vous sûr(e) de vouloir supprimer cette règle d'exclusion ?"
776
 
777
+ #: backupwordpress.php:246
778
  msgid ""
779
  "Reducing the number of backups that are stored on this server will cause "
780
  "some of your existing backups to be deleted, are you sure that's what you "
784
  "certaines de vos sauvegardes. Etes-vous sûr(e) de vouloir effectuer cette "
785
  "action ?"
786
 
 
 
 
 
787
  #: classes/class-email.php:26
788
  msgid "Email notification"
789
  msgstr "Notification par e-mail"
814
  msgid "%s isn't a valid email"
815
  msgstr "%s n'est pas une addresse email valable"
816
 
817
+ #: classes/class-email.php:175 classes/class-webhooks.php:58
818
  msgid "Backup of %s Failed"
819
  msgstr "La sauvegarde de %s a échoué"
820
 
871
  "Malheureusement le fichier de sauvegarde est trop gros pour être joint à ce "
872
  "courrier électronique."
873
 
874
+ #: classes/class-hmbkp-path.php:249
875
+ msgid ""
876
+ "This %s file ensures that other people cannot download your backup files."
877
+ msgstr ""
878
+ "Ce fichier %s permet de s'assurer que personne d'autre ne puisse télécharger "
879
+ "vos fichiers de sauvegarde."
880
+
881
+ #: classes/class-schedule.php:241
882
  msgid "Argument 1 for %s must be a valid integer"
883
  msgstr "Paramètre 1 de %s doit être un nombre entier valide."
884
 
885
+ #: classes/class-schedule.php:596
886
  msgid "Argument 1 for %s must be a valid future timestamp"
887
  msgstr "Paramètre 1 de %s doit être un horodatage futur valide"
888
 
889
+ #: classes/class-schedule.php:634
890
  msgid "Argument 1 for %s must be a valid cron reoccurrence or \"manually\""
891
  msgstr ""
892
  "Paramètre 1 pour %s doit être un intervalle de cron valide ou \"manuel\""
893
 
894
+ #: classes/class-schedule.php:769 functions/interface.php:221
895
  msgid "Starting Backup"
896
  msgstr "Début de la sauvegarde"
897
 
898
+ #: classes/class-schedule.php:849
899
+ msgid "Error writing to file. (%s)"
900
+ msgstr "Erreur lors de l'écriture de fichier."
901
+
902
+ #: classes/class-schedule.php:895
903
  msgid "Dumping Database %s"
904
  msgstr "Export de la BDD %s en cours"
905
 
906
+ #: classes/class-schedule.php:900
907
  msgid "Verifying Database Dump %s"
908
  msgstr "Vérification de l'export de la base de données %s"
909
 
910
+ #: classes/class-schedule.php:905
911
  msgid "Creating zip archive %s"
912
  msgstr "Création de l'archive zip %s"
913
 
914
+ #: classes/class-schedule.php:910
915
  msgid "Verifying Zip Archive %s"
916
  msgstr "Vérification de l'archive zip %s"
917
 
918
+ #: classes/class-schedule.php:915
919
  msgid "Finishing Backup"
920
  msgstr "Fin de la sauvegarde"
921
 
922
+ #: classes/class-schedule.php:1024
923
  msgid "Argument 1 for %s must be a non empty string"
924
  msgstr "Paramètre 1 pour %s doit être une chaîne de caractères non vide"
925
 
926
+ #: classes/class-schedule.php:1029
927
  msgid "%s doesn't exist"
928
  msgstr "%s n'existe pas"
929
 
930
+ #: classes/class-schedule.php:1034
931
  msgid "That backup wasn't created by this schedule"
932
  msgstr "Cette sauvegarde n'a pas été créée par cet horaire"
933
 
934
+ #: classes/class-services.php:278
935
  msgid "Argument 1 for %s must be a valid filepath"
936
  msgstr "Paramètre 1 de %s doit être un chemin valide"
937
 
938
+ #: classes/class-services.php:293
939
  msgid "Argument 1 for %s must be a registered service"
940
  msgstr "Paramètre 1 pour %s doit être un Service enregistré"
941
 
942
+ #: classes/class-services.php:310
943
  msgid "Argument 1 for %s must be a valid class"
944
  msgstr "Paramètre 1 de %s doit être une classe existante"
945
 
946
+ #. Plugin Name of the plugin/theme
947
+ msgid "BackUpWordPress"
948
+ msgstr "BackUpWordPress"
949
+
950
+ #: classes/class-setup.php:154
951
+ msgid ""
952
+ "BackUpWordPress requires PHP version %1$s or later and WordPress version "
953
+ "%2$s or later to run. It has not been activated. %3$s%4$s%5$sLearn more%6$s"
954
  msgstr ""
955
+ "Pour fonctionner, BackUpWordPress requiert la version %1$s de PHP et la "
956
+ "version %2$s de WordPress ou supérieur. Il n'a pas ete activé"
957
 
958
+ #: classes/class-webhooks.php:102
959
+ msgid "Error: %s"
960
+ msgstr "Erreur: %s"
961
+
962
+ #: classes/wp-cli.php:43
963
  msgid "Backup: Dumping database..."
964
  msgstr "Sauvegarde: export de la BDD"
965
 
966
+ #: classes/wp-cli.php:47
967
  msgid "Backup: Zipping everything up..."
968
  msgstr "Sauvegarde: compression"
969
 
971
  msgid "Invalid backup path"
972
  msgstr "Chemin de sauvegarde incorrect"
973
 
974
+ #: classes/wp-cli.php:71
975
  msgid "Invalid root path"
976
  msgstr "Le chemin racine est invalide"
977
 
978
+ #: classes/wp-cli.php:99
979
  msgid "Backup Complete: "
980
  msgstr "Sauvegarde terminée :"
981
 
982
+ #: classes/wp-cli.php:101
983
  msgid "Backup Failed"
984
  msgstr "La sauvegarde a échoué"
985
 
986
+ #: functions/core.php:207
987
  msgid "BackUpWordPress has setup your default schedules."
988
  msgstr "BackUpWordPress a réglé les planifications de sauvegarde par défaut."
989
 
990
+ #: functions/core.php:207
991
  msgid ""
992
  "By default BackUpWordPress performs a daily backup of your database and a "
993
  "weekly backup of your database &amp; files. You can modify these schedules."
996
  "base de données et une sauvegarde hebdomadaire de votre base de données "
997
  "&amp; des fichiers. Vous pouvez modifier cette fréquence."
998
 
999
+ #: functions/core.php:224
1000
  msgid "Once Hourly"
1001
  msgstr "Toutes les heures"
1002
 
1003
+ #: functions/core.php:225
1004
  msgid "Twice Daily"
1005
  msgstr "Deux fois par jour"
1006
 
1007
+ #: functions/core.php:226
1008
  msgid "Once Daily"
1009
  msgstr "Quotidiennement"
1010
 
1011
+ #: functions/core.php:227
1012
  msgid "Once Weekly"
1013
  msgstr "Hebdomadaire"
1014
 
1015
+ #: functions/core.php:228
1016
  msgid "Once Biweekly"
1017
  msgstr "Toutes les deux semaines"
1018
 
1019
+ #: functions/core.php:229
1020
  msgid "Once Monthly"
1021
  msgstr "Mensuel"
1022
 
1023
+ #: functions/core.php:247
1024
  msgid "You can only delete directories inside your WordPress installation"
1025
  msgstr ""
1026
  "Vous ne pouvez supprimer que les sauvegardes sous votre installation de "
1027
  "WordPress"
1028
 
1029
+ #: functions/interface.php:31
 
 
 
 
 
 
 
1030
  msgid "Download"
1031
  msgstr "Télécharger"
1032
 
1033
+ #: functions/interface.php:62
1034
+ msgid "BackUpWordPress detected issues with your last backup."
1035
+ msgstr ""
1036
+ "BackUpWordPress a détecté des problèmes lors de la dernière sauvegarde."
1037
+
1038
+ #: functions/interface.php:64
1039
+ msgid "Dismiss"
1040
+ msgstr "Ignorer"
1041
 
1042
+ #: functions/interface.php:112
1043
  msgid ""
1044
  "The backups directory can't be created because your %1$s directory isn't "
1045
  "writable, run %2$s or %3$s or create the folder yourself."
1048
  "l'autorisation d'écriture. Exécutez %2$s ou %3$s, ou réglez les permissions "
1049
  "adéquates."
1050
 
1051
+ #: functions/interface.php:116
1052
  msgid ""
1053
  "Your backups directory isn't writable, run %1$s or %2$s or set the "
1054
  "permissions yourself."
1056
  "Votre dossier de sauvegarde n'a pas l'autorisation d'écriture. Exécutez %1$s "
1057
  "ou %2$s, ou réglez les permissions adéquates."
1058
 
1059
+ #: functions/interface.php:120
1060
  msgid ""
1061
  "%1$s is running in %2$s, please contact your host and ask them to disable "
1062
  "it. BackUpWordPress may not work correctly whilst %3$s is on."
1065
  "demande de désactiver cela. BackUpWordPress peut ne pas fonctionner "
1066
  "correctement tant que %3$s est activé."
1067
 
1068
+ #: functions/interface.php:120
1069
  msgid "http://php.net/manual/en/features.safe-mode.php"
1070
  msgstr "http://br2.php.net/manual/fr/features.safe-mode.php"
1071
 
1072
+ #: functions/interface.php:120
1073
  msgid "Safe Mode"
1074
  msgstr "Safe mode"
1075
 
1076
+ #: functions/interface.php:124
1077
  msgid ""
1078
  "Your custom backups directory %1$s doesn't exist and can't be created, your "
1079
  "backups will be saved to %2$s instead."
1081
  "Le dossier de sauvegarde %1$s n'existe pas et ne peut être créé. Vos "
1082
  "sauvegardes seront stockées dans %2$s."
1083
 
1084
+ #: functions/interface.php:128
1085
  msgid ""
1086
  "Your custom backups directory %1$s isn't writable, new backups will be saved "
1087
  "to %2$s instead."
1089
  "Le dossier de sauvegarde %1$s n'a pas l'autorisation d'écriture. Les "
1090
  "nouvelles sauvegardes seront stockées dans %2$s."
1091
 
1092
+ #: functions/interface.php:134
1093
+ #, fuzzy
1094
+ msgid "Your site root path %s isn't readable."
 
 
 
 
1095
  msgstr ""
1096
  "Permission insuffisante en lecture de la racine du chemin de sauvegarde %s."
1097
 
1098
+ #: functions/interface.php:194
1099
  msgid "Database and Files"
1100
  msgstr "Base de données et fichiers"
1101
 
1102
+ #: functions/interface.php:197
1103
  msgid "Files"
1104
  msgstr "Fichiers"
1105
 
1106
+ #: functions/interface.php:200
1107
  msgid "Database"
1108
  msgstr "Base de données"
1109
 
1110
+ #: functions/interface.php:205
1111
  msgid "Legacy"
1112
  msgstr "Contribution"
1113
 
1114
+ #: functions/interface.php:220
1115
  msgid "Started %s ago"
1116
  msgstr "Démarré il y a %s"
1117
 
1118
+ #: functions/interface.php:222
1119
  msgid "cancel"
1120
  msgstr "annuler"
1121
 
1122
+ #: functions/interface.php:268
1123
+ #, fuzzy
1124
+ msgid "No backups completed"
 
 
 
1125
  msgstr "Aucune Sauvegarde Terminée"
1126
 
1127
+ #: functions/interface.php:280
 
 
 
 
1128
  msgid "Complete Hourly"
1129
  msgstr "Complet toutes les heures"
1130
 
1131
+ #: functions/interface.php:281
1132
  msgid "File Hourly"
1133
  msgstr "Fichier une fois l'heure"
1134
 
1135
+ #: functions/interface.php:282
1136
  msgid "Database Hourly"
1137
  msgstr "BDD une fois l'heure"
1138
 
1139
+ #: functions/interface.php:283
1140
  msgid "Complete Twicedaily"
1141
  msgstr "Complet deux fois par jour"
1142
 
1143
+ #: functions/interface.php:284
1144
  msgid "File Twicedaily"
1145
  msgstr "Fichier deux fois par jour"
1146
 
1147
+ #: functions/interface.php:285
1148
  msgid "Database Twicedaily"
1149
  msgstr "BDD deux fois par jour"
1150
 
1151
+ #: functions/interface.php:286
1152
  msgid "Complete Daily"
1153
  msgstr "Complet quotidiennement"
1154
 
1155
+ #: functions/interface.php:287
1156
  msgid "File Daily"
1157
  msgstr "Fichier quotidiennement"
1158
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1159
  #: functions/interface.php:288
1160
+ msgid "Database Daily"
1161
+ msgstr "BDD quotidien"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1162
 
1163
+ #: functions/interface.php:289
1164
+ msgid "Complete Weekly"
1165
+ msgstr "Complet hebdomadaire"
 
 
1166
 
1167
+ #: functions/interface.php:290
1168
+ msgid "File Weekly"
1169
+ msgstr "Fichier hebdomadaire"
 
 
 
 
1170
 
1171
+ #: functions/interface.php:291
1172
+ msgid "Database Weekly"
1173
+ msgstr "BDD hebdomadaire"
1174
 
1175
+ #: functions/interface.php:292
1176
+ msgid "Complete Biweekly"
1177
+ msgstr "Complet bi hebdomadaire"
 
 
 
 
1178
 
1179
+ #: functions/interface.php:293
1180
+ msgid "File Biweekly"
1181
+ msgstr "Fichiers bihebdomadaire"
1182
 
1183
+ #: functions/interface.php:294
1184
+ msgid "Database Biweekly"
1185
+ msgstr "BDD bihebdomadaire"
 
 
 
 
1186
 
1187
+ #: functions/interface.php:295
1188
+ msgid "Complete Monthly"
1189
+ msgstr "Complet mensuel"
1190
 
1191
+ #: functions/interface.php:296
1192
+ msgid "File Monthly"
1193
+ msgstr "Fichier mensuel"
1194
 
1195
+ #: functions/interface.php:297
1196
+ msgid "Database Monthly"
1197
+ msgstr "BDD mensuel"
1198
 
1199
+ #: functions/interface.php:298
1200
+ msgid "Complete Manually"
1201
+ msgstr "Complet mensuel"
1202
 
1203
+ #: functions/interface.php:299
1204
+ msgid "File Manually"
1205
+ msgstr "Fichier manuel"
 
 
 
 
 
 
1206
 
1207
+ #: functions/interface.php:300
1208
+ msgid "Database Manually"
1209
+ msgstr "BDD manuel"
 
1210
 
1211
+ #: hm-backup/hm-backup.php:286
1212
+ msgid "archive filename must be a non empty string"
1213
+ msgstr "le nom de fichier doit être une chaîne de cqrqctères non vide"
1214
 
1215
+ #: hm-backup/hm-backup.php:289
1216
+ msgid "invalid file extension for archive filename <code>%s</code>"
1217
+ msgstr "extension de fichier incorrect pour le fichier de nom <code>%s</code>"
1218
 
1219
+ #: hm-backup/hm-backup.php:329
1220
+ msgid "database dump filename must be a non empty string"
1221
+ msgstr "le nom de fichier pour l'export de la BDD ne peut être vide"
1222
 
1223
+ #: hm-backup/hm-backup.php:332
1224
+ msgid "invalid file extension for database dump filename <code>%s</code>"
 
 
1225
  msgstr ""
1226
+ "l'extension de fichier de l'export de la BDD est invalide <code>%s</code>"
 
1227
 
1228
+ #: hm-backup/hm-backup.php:363
1229
+ msgid "Invalid root path <code>%s</code> must be a valid directory path"
1230
+ msgstr "Répertoire racine <code>%s</code> doit être un chemin valide"
 
 
 
 
 
 
 
 
1231
 
1232
+ #: hm-backup/hm-backup.php:392
1233
+ msgid "Invalid backup path <code>%s</code> must be a non empty (string)"
1234
+ msgstr "Chemin de sauvegarde invalide <code>%s</code>, ne peut pas être vide"
 
1235
 
1236
+ #: hm-backup/hm-backup.php:444
1237
  msgid ""
1238
+ "Invalid backup type <code>%s</code> must be one of (string) file, database "
1239
+ "or complete"
 
 
 
1240
  msgstr ""
1241
+ "Type de sauvegarde invalide <code>%s</code> doit être parmi les suivants: "
1242
+ "file, database ou complete"
 
 
 
1243
 
1244
+ #. Plugin URI of the plugin/theme
1245
+ msgid "http://bwp.hmn.md/"
1246
+ msgstr "http://bwp.hmn.md/"
1247
 
1248
+ #. Description of the plugin/theme
1249
+ #, fuzzy
1250
  msgid ""
1251
+ "Simple automated backups of your WordPress powered website. Once activated "
1252
+ "you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, "
1253
+ "you'll find me under the Network Settings menu."
 
 
1254
  msgstr ""
1255
+ "Sauvegardes automatiques et faciles de votre site WordPress. Une fois "
1256
+ "activé, les règlages se trouvent ici: <strong>Outils > Sauvegardes</strong>"
 
 
 
 
1257
 
1258
+ #. Author of the plugin/theme
1259
+ msgid "Human Made Limited"
1260
+ msgstr "Human Made Limited"
 
 
 
 
 
 
1261
 
1262
+ #. Author URI of the plugin/theme
1263
+ msgid "http://hmn.md/"
1264
+ msgstr "http://hmn.md/"
1265
 
1266
+ #: admin/schedule-sentence.php:128
1267
+ #, fuzzy
1268
+ msgctxt ""
1269
+ "1: Backup Type 2: Total size of backup 3: Schedule 4: Number of backups to "
1270
+ "store"
1271
+ msgid "Backup my %1$s %2$s %3$s, %4$s."
1272
+ msgstr "Sauvegarder %1$s %2$s %3$s, %4$s."
1273
 
1274
+ #: functions/interface.php:270
1275
+ msgctxt "backups count"
1276
+ msgid "One backup completed"
1277
+ msgid_plural "%1$s backups completed"
1278
+ msgstr[0] "1 Sauvegarde Disponible"
1279
+ msgstr[1] "%1$s sauvegardss disponibles"
1280
 
1281
+ #~ msgid "Remove"
1282
+ #~ msgstr "Retirer"
 
 
 
 
 
 
 
 
 
 
 
1283
 
1284
+ #~ msgid "No key supplied"
1285
+ #~ msgstr "Aucune clé fournie"
 
1286
 
1287
+ #~ msgid "Supplied key was not valid"
1288
+ #~ msgstr "La clé fournie est invalide"
 
 
1289
 
1290
+ #~ msgid "Task is already scheduled to run"
1291
+ #~ msgstr "La tâche a déjà été programmée"
 
1292
 
1293
+ #~ msgid "Task is not scheduled to run"
1294
+ #~ msgstr "La tâche n'a pas été programmée"
 
 
 
 
 
 
 
 
 
 
1295
 
1296
+ #~ msgid "BackUpWordPress requires WordPress version %s or greater."
1297
+ #~ msgstr "BackUpWordPress nécessite WordPress version %s ou plus récent."
 
1298
 
1299
+ #~ msgid "BackUpWordPress may not work when php is running with %s on"
1300
+ #~ msgstr ""
1301
+ #~ "BackUpWordPress peut ne pas fonctionner correctement lorsque PHP "
1302
+ #~ "s'exécute avec %s activé"
 
 
 
 
 
 
 
1303
 
1304
+ #~ msgid "BackUpWordPress is almost ready."
1305
+ #~ msgstr "BackUpWordPress a presque terminé."
 
 
1306
 
1307
+ #~ msgid "% Backups Completed"
1308
+ #~ msgstr "% Sauvegardes terminées"
 
1309
 
1310
+ #~ msgid ""
1311
+ #~ "Your backup completed but with the following errors / warnings, it's "
1312
+ #~ "probably ok to ignore these."
1313
+ #~ msgstr ""
1314
+ #~ "La sauvegarde s'est achevée, mais a généré les erreurs suivantes, vous "
1315
+ #~ "pouvez probablement les ignorer."
1316
 
1317
+ #~ msgid "Your backup failed"
1318
+ #~ msgstr "La sauvegarde a échoué"
1319
+
1320
+ #~ msgid "Here's the response from the server:"
1321
+ #~ msgstr "Voici la réponse du serveur :"
1322
+
1323
+ #~ msgid ""
1324
+ #~ "You can email details of this error to %s so they can look into the issue."
1325
+ #~ msgstr ""
1326
+ #~ "Vous pouvez envoyez les détails de cette erreur par e-mail ) %s afin "
1327
+ #~ "qu'il l'analyse."
1328
+
1329
+ #~ msgid "Close"
1330
+ #~ msgstr "Fermer"
1331
+
1332
+ #~ msgid "Email to Support"
1333
+ #~ msgstr "Contacter le support technique par e-mail"
languages/backupwordpress.pot CHANGED
@@ -1,71 +1,71 @@
1
- # Copyright (C) 2014 Human Made Limited
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: BackUpWordPress 3.0.4\n"
6
  "Report-Msgid-Bugs-To: support@humanmade.co.uk\n"
7
- "POT-Creation-Date: 2014-12-10 23:02:57+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2014-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Human Made Limited\n"
13
  "Language-Team: Human Made Limited\n"
14
  "X-Generator: grunt-wp-i18n 0.4.9\n"
15
 
16
- #: admin/actions.php:217
17
  msgid "The schedule ID was not provided. Aborting."
18
  msgstr ""
19
 
20
- #: admin/actions.php:273
21
  msgid "Backup type cannot be empty"
22
  msgstr ""
23
 
24
- #: admin/actions.php:277
25
  msgid "Invalid backup type"
26
  msgstr ""
27
 
28
- #: admin/actions.php:291
29
  msgid "Schedule cannot be empty"
30
  msgstr ""
31
 
32
- #: admin/actions.php:295
33
  msgid "Invalid schedule"
34
  msgstr ""
35
 
36
- #: admin/actions.php:309
37
  msgid "Day of the week must be a valid lowercase day name"
38
  msgstr ""
39
 
40
- #: admin/actions.php:328
41
  msgid "Day of month must be between 1 and 31"
42
  msgstr ""
43
 
44
- #: admin/actions.php:347
45
  msgid "Hours must be between 0 and 23"
46
  msgstr ""
47
 
48
- #: admin/actions.php:366
49
  msgid "Minutes must be between 0 and 59"
50
  msgstr ""
51
 
52
- #: admin/actions.php:380
53
  msgid "Max backups can't be empty"
54
  msgstr ""
55
 
56
- #: admin/actions.php:384
57
  msgid "Max backups must be a number"
58
  msgstr ""
59
 
60
- #: admin/actions.php:388
61
  msgid "Max backups must be greater than 0"
62
  msgstr ""
63
 
64
- #: admin/actions.php:704 admin/actions.php:710 functions/interface.php:81
65
  msgid "BackUpWordPress has detected a problem."
66
  msgstr ""
67
 
68
- #: admin/actions.php:704 admin/actions.php:710
69
  msgid ""
70
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
71
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
@@ -570,78 +570,78 @@ msgstr ""
570
  msgid "This schedule will store a maximum of %s of backups."
571
  msgstr ""
572
 
573
- #: admin/schedule-sentence.php:10
574
- msgid "Backups will be compressed and should be smaller than this."
575
- msgstr ""
576
-
577
- #: admin/schedule-sentence.php:10
578
- msgid "this shouldn't take long&hellip;"
579
- msgstr ""
580
-
581
- #: admin/schedule-sentence.php:10
582
- msgid "calculating the size of your backup&hellip;"
583
- msgstr ""
584
-
585
- #: admin/schedule-sentence.php:22
586
  msgid "The next backup will be on %1$s at %2$s %3$s"
587
  msgstr ""
588
 
589
- #: admin/schedule-sentence.php:29
590
  msgid "hourly on the hour"
591
  msgstr ""
592
 
593
- #: admin/schedule-sentence.php:29
594
  msgid "hourly at %s minutes past the hour"
595
  msgstr ""
596
 
597
- #: admin/schedule-sentence.php:35
598
  msgid "daily at %s"
599
  msgstr ""
600
 
601
- #: admin/schedule-sentence.php:46
602
  msgid "every 12 hours at %1$s &amp; %2$s"
603
  msgstr ""
604
 
605
- #: admin/schedule-sentence.php:52
606
  msgid "weekly on %1$s at %2$s"
607
  msgstr ""
608
 
609
- #: admin/schedule-sentence.php:58
610
  msgid "biweekly on %1$s at %2$s"
611
  msgstr ""
612
 
613
- #: admin/schedule-sentence.php:64
614
  msgid "on the %1$s of each month at %2$s"
615
  msgstr ""
616
 
617
- #: admin/schedule-sentence.php:70
618
  msgid "manually"
619
  msgstr ""
620
 
621
- #: admin/schedule-sentence.php:80
622
  msgid "this server"
623
  msgstr ""
624
 
625
- #: admin/schedule-sentence.php:88
626
  msgid "store the most recent backup in %s"
627
  msgstr ""
628
 
629
- #: admin/schedule-sentence.php:94
630
  msgid "don't store any backups in on this server"
631
  msgstr ""
632
 
633
- #: admin/schedule-sentence.php:100
634
  msgid "store the last %1$s backups in %2$s"
635
  msgstr ""
636
 
637
- #: admin/schedule-sentence.php:131
638
  msgid "%s. "
639
  msgstr ""
640
 
641
- #: admin/schedule-sentence.php:135
642
  msgid "Send a copy of each backup to %s."
643
  msgstr ""
644
 
 
 
 
 
 
 
 
 
 
 
 
 
645
  #: admin/schedule-settings.php:5
646
  msgid "Run now"
647
  msgstr ""
@@ -654,54 +654,54 @@ msgstr ""
654
  msgid "Delete"
655
  msgstr ""
656
 
 
 
 
 
657
  #: admin/upsell.php:3
658
  msgid "Backup to"
659
  msgstr ""
660
 
661
- #: backupwordpress.php:193
 
 
 
 
 
 
662
  msgid "Update"
663
  msgstr ""
664
 
665
- #: backupwordpress.php:194
666
  msgid "Cancel"
667
  msgstr ""
668
 
669
- #: backupwordpress.php:195
670
  msgid ""
671
  "Are you sure you want to delete this schedule? All of it's backups will "
672
  "also be deleted."
673
  msgstr ""
674
 
675
- #: backupwordpress.php:195 backupwordpress.php:196 backupwordpress.php:197
676
- #: backupwordpress.php:198
677
  msgid "'Cancel' to go back, 'OK' to delete."
678
  msgstr ""
679
 
680
- #: backupwordpress.php:196
681
  msgid "Are you sure you want to delete this backup?"
682
  msgstr ""
683
 
684
- #: backupwordpress.php:197
685
  msgid "Are you sure you want to remove this exclude rule?"
686
  msgstr ""
687
 
688
- #: backupwordpress.php:198
689
  msgid ""
690
  "Reducing the number of backups that are stored on this server will cause "
691
  "some of your existing backups to be deleted, are you sure that's what you "
692
  "want?"
693
  msgstr ""
694
 
695
- #. Plugin Name of the plugin/theme
696
- msgid "BackUpWordPress"
697
- msgstr ""
698
-
699
- #: backupwordpress.php:374
700
- msgid ""
701
- "BackUpWordPress requires PHP version %1$s or later. It is not active. "
702
- "%2$s%3$s%4$sLearn more%5$s"
703
- msgstr ""
704
-
705
  #: classes/class-email.php:26
706
  msgid "Email notification"
707
  msgstr ""
@@ -777,51 +777,84 @@ msgstr ""
777
  msgid "Unfortunately the backup file was too large to attach to this email."
778
  msgstr ""
779
 
780
- #: classes/class-schedule.php:245
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
781
  msgid "Argument 1 for %s must be a valid integer"
782
  msgstr ""
783
 
784
- #: classes/class-schedule.php:600
785
  msgid "Argument 1 for %s must be a valid future timestamp"
786
  msgstr ""
787
 
788
- #: classes/class-schedule.php:638
789
  msgid "Argument 1 for %s must be a valid cron reoccurrence or \"manually\""
790
  msgstr ""
791
 
792
- #: classes/class-schedule.php:773 functions/interface.php:228
793
  msgid "Starting Backup"
794
  msgstr ""
795
 
796
- #: classes/class-schedule.php:903
 
 
 
 
797
  msgid "Dumping Database %s"
798
  msgstr ""
799
 
800
- #: classes/class-schedule.php:908
801
  msgid "Verifying Database Dump %s"
802
  msgstr ""
803
 
804
- #: classes/class-schedule.php:913
805
  msgid "Creating zip archive %s"
806
  msgstr ""
807
 
808
- #: classes/class-schedule.php:918
809
  msgid "Verifying Zip Archive %s"
810
  msgstr ""
811
 
812
- #: classes/class-schedule.php:923
813
  msgid "Finishing Backup"
814
  msgstr ""
815
 
816
- #: classes/class-schedule.php:1032
 
 
 
 
 
 
 
 
 
 
 
 
 
817
  msgid "Argument 1 for %s must be a non empty string"
818
  msgstr ""
819
 
820
- #: classes/class-schedule.php:1037
821
  msgid "%s doesn't exist"
822
  msgstr ""
823
 
824
- #: classes/class-schedule.php:1042
825
  msgid "That backup wasn't created by this schedule"
826
  msgstr ""
827
 
@@ -837,19 +870,25 @@ msgstr ""
837
  msgid "Argument 1 for %s must be a valid class"
838
  msgstr ""
839
 
 
 
 
 
 
 
 
 
 
 
840
  #: classes/class-webhooks.php:102
841
  msgid "Error: %s"
842
  msgstr ""
843
 
844
  #: classes/wp-cli.php:43
845
- msgid "BackUpWordPress may not work when php is running with %s on"
846
- msgstr ""
847
-
848
- #: classes/wp-cli.php:46
849
  msgid "Backup: Dumping database..."
850
  msgstr ""
851
 
852
- #: classes/wp-cli.php:50
853
  msgid "Backup: Zipping everything up..."
854
  msgstr ""
855
 
@@ -857,77 +896,69 @@ msgstr ""
857
  msgid "Invalid backup path"
858
  msgstr ""
859
 
860
- #: classes/wp-cli.php:70
861
  msgid "Invalid root path"
862
  msgstr ""
863
 
864
- #: classes/wp-cli.php:95
865
  msgid "Backup Complete: "
866
  msgstr ""
867
 
868
- #: classes/wp-cli.php:98
869
  msgid "Backup Failed"
870
  msgstr ""
871
 
872
- #: functions/core.php:20
873
- msgid "BackUpWordPress requires WordPress version %s or greater."
874
- msgstr ""
875
-
876
- #: functions/core.php:273
877
  msgid "BackUpWordPress has setup your default schedules."
878
  msgstr ""
879
 
880
- #: functions/core.php:273
881
  msgid ""
882
  "By default BackUpWordPress performs a daily backup of your database and a "
883
  "weekly backup of your database &amp; files. You can modify these schedules."
884
  msgstr ""
885
 
886
- #: functions/core.php:290
887
  msgid "Once Hourly"
888
  msgstr ""
889
 
890
- #: functions/core.php:291
891
  msgid "Twice Daily"
892
  msgstr ""
893
 
894
- #: functions/core.php:292
895
  msgid "Once Daily"
896
  msgstr ""
897
 
898
- #: functions/core.php:293
899
  msgid "Once Weekly"
900
  msgstr ""
901
 
902
- #: functions/core.php:294
903
  msgid "Once Biweekly"
904
  msgstr ""
905
 
906
- #: functions/core.php:295
907
  msgid "Once Monthly"
908
  msgstr ""
909
 
910
- #: functions/core.php:313
911
  msgid "You can only delete directories inside your WordPress installation"
912
  msgstr ""
913
 
914
- #: functions/core.php:378
915
- msgid "This %s file ensures that other people cannot download your backup files."
916
- msgstr ""
917
-
918
  #: functions/interface.php:31
919
  msgid "Download"
920
  msgstr ""
921
 
922
- #: functions/interface.php:62
923
  msgid "BackUpWordPress detected issues with your last backup."
924
  msgstr ""
925
 
926
- #: functions/interface.php:64 functions/interface.php:83
927
  msgid "Dismiss"
928
  msgstr ""
929
 
930
- #: functions/interface.php:117
931
  msgid ""
932
  "The backups directory can't be created because your %1$s directory isn't "
933
  "writable, run %2$s or %3$s or create the folder yourself."
@@ -939,145 +970,155 @@ msgid ""
939
  "permissions yourself."
940
  msgstr ""
941
 
942
- #: functions/interface.php:128
943
  msgid ""
944
  "%1$s is running in %2$s, please contact your host and ask them to disable "
945
  "it. BackUpWordPress may not work correctly whilst %3$s is on."
946
  msgstr ""
947
 
948
- #: functions/interface.php:128
949
  msgid "http://php.net/manual/en/features.safe-mode.php"
950
  msgstr ""
951
 
952
- #: functions/interface.php:128
953
  msgid "Safe Mode"
954
  msgstr ""
955
 
956
- #: functions/interface.php:132
 
 
 
 
 
 
 
 
 
 
957
  msgid ""
958
  "Your custom backups directory %1$s doesn't exist and can't be created, your "
959
  "backups will be saved to %2$s instead."
960
  msgstr ""
961
 
962
- #: functions/interface.php:136
963
  msgid ""
964
  "Your custom backups directory %1$s isn't writable, new backups will be "
965
  "saved to %2$s instead."
966
  msgstr ""
967
 
968
- #: functions/interface.php:142
969
- msgid "Your backup root path %s isn't readable."
970
  msgstr ""
971
 
972
- #: functions/interface.php:201
973
  msgid "Database and Files"
974
  msgstr ""
975
 
976
- #: functions/interface.php:204
977
  msgid "Files"
978
  msgstr ""
979
 
980
- #: functions/interface.php:207
981
  msgid "Database"
982
  msgstr ""
983
 
984
- #: functions/interface.php:212
985
  msgid "Legacy"
986
  msgstr ""
987
 
988
- #: functions/interface.php:227
989
  msgid "Started %s ago"
990
  msgstr ""
991
 
992
- #: functions/interface.php:229
993
  msgid "cancel"
994
  msgstr ""
995
 
996
- #: functions/interface.php:275
997
  msgid "No backups completed"
998
  msgstr ""
999
 
1000
- #: functions/interface.php:287
1001
  msgid "Complete Hourly"
1002
  msgstr ""
1003
 
1004
- #: functions/interface.php:288
1005
  msgid "File Hourly"
1006
  msgstr ""
1007
 
1008
- #: functions/interface.php:289
1009
  msgid "Database Hourly"
1010
  msgstr ""
1011
 
1012
- #: functions/interface.php:290
1013
  msgid "Complete Twicedaily"
1014
  msgstr ""
1015
 
1016
- #: functions/interface.php:291
1017
  msgid "File Twicedaily"
1018
  msgstr ""
1019
 
1020
- #: functions/interface.php:292
1021
  msgid "Database Twicedaily"
1022
  msgstr ""
1023
 
1024
- #: functions/interface.php:293
1025
  msgid "Complete Daily"
1026
  msgstr ""
1027
 
1028
- #: functions/interface.php:294
1029
  msgid "File Daily"
1030
  msgstr ""
1031
 
1032
- #: functions/interface.php:295
1033
  msgid "Database Daily"
1034
  msgstr ""
1035
 
1036
- #: functions/interface.php:296
1037
  msgid "Complete Weekly"
1038
  msgstr ""
1039
 
1040
- #: functions/interface.php:297
1041
  msgid "File Weekly"
1042
  msgstr ""
1043
 
1044
- #: functions/interface.php:298
1045
  msgid "Database Weekly"
1046
  msgstr ""
1047
 
1048
- #: functions/interface.php:299
1049
  msgid "Complete Biweekly"
1050
  msgstr ""
1051
 
1052
- #: functions/interface.php:300
1053
  msgid "File Biweekly"
1054
  msgstr ""
1055
 
1056
- #: functions/interface.php:301
1057
  msgid "Database Biweekly"
1058
  msgstr ""
1059
 
1060
- #: functions/interface.php:302
1061
  msgid "Complete Monthly"
1062
  msgstr ""
1063
 
1064
- #: functions/interface.php:303
1065
  msgid "File Monthly"
1066
  msgstr ""
1067
 
1068
- #: functions/interface.php:304
1069
  msgid "Database Monthly"
1070
  msgstr ""
1071
 
1072
- #: functions/interface.php:305
1073
  msgid "Complete Manually"
1074
  msgstr ""
1075
 
1076
- #: functions/interface.php:306
1077
  msgid "File Manually"
1078
  msgstr ""
1079
 
1080
- #: functions/interface.php:307
1081
  msgid "Database Manually"
1082
  msgstr ""
1083
 
@@ -1118,7 +1159,8 @@ msgstr ""
1118
  #. Description of the plugin/theme
1119
  msgid ""
1120
  "Simple automated backups of your WordPress powered website. Once activated "
1121
- "you'll find me under <strong>Tools &rarr; Backups</strong>."
 
1122
  msgstr ""
1123
 
1124
  #. Author of the plugin/theme
@@ -1129,14 +1171,14 @@ msgstr ""
1129
  msgid "http://hmn.md/"
1130
  msgstr ""
1131
 
1132
- #: admin/schedule-sentence.php:128
1133
  msgctxt ""
1134
  "1: Backup Type 2: Total size of backup 3: Schedule 4: Number of backups to "
1135
  "store"
1136
  msgid "Backup my %1$s %2$s %3$s, %4$s."
1137
  msgstr ""
1138
 
1139
- #: functions/interface.php:277
1140
  msgctxt "backups count"
1141
  msgid "One backup completed"
1142
  msgid_plural "%1$s backups completed"
1
+ # Copyright (C) 2015 Human Made Limited
2
  # This file is distributed under the GPL-2.0+.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: BackUpWordPress 3.1.0\n"
6
  "Report-Msgid-Bugs-To: support@humanmade.co.uk\n"
7
+ "POT-Creation-Date: 2015-01-13 13:30:57+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2015-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: Human Made Limited\n"
13
  "Language-Team: Human Made Limited\n"
14
  "X-Generator: grunt-wp-i18n 0.4.9\n"
15
 
16
+ #: admin/actions.php:215
17
  msgid "The schedule ID was not provided. Aborting."
18
  msgstr ""
19
 
20
+ #: admin/actions.php:271
21
  msgid "Backup type cannot be empty"
22
  msgstr ""
23
 
24
+ #: admin/actions.php:275
25
  msgid "Invalid backup type"
26
  msgstr ""
27
 
28
+ #: admin/actions.php:289
29
  msgid "Schedule cannot be empty"
30
  msgstr ""
31
 
32
+ #: admin/actions.php:293
33
  msgid "Invalid schedule"
34
  msgstr ""
35
 
36
+ #: admin/actions.php:307
37
  msgid "Day of the week must be a valid lowercase day name"
38
  msgstr ""
39
 
40
+ #: admin/actions.php:326
41
  msgid "Day of month must be between 1 and 31"
42
  msgstr ""
43
 
44
+ #: admin/actions.php:345
45
  msgid "Hours must be between 0 and 23"
46
  msgstr ""
47
 
48
+ #: admin/actions.php:364
49
  msgid "Minutes must be between 0 and 59"
50
  msgstr ""
51
 
52
+ #: admin/actions.php:378
53
  msgid "Max backups can't be empty"
54
  msgstr ""
55
 
56
+ #: admin/actions.php:382
57
  msgid "Max backups must be a number"
58
  msgstr ""
59
 
60
+ #: admin/actions.php:386
61
  msgid "Max backups must be greater than 0"
62
  msgstr ""
63
 
64
+ #: admin/actions.php:743 admin/actions.php:749
65
  msgid "BackUpWordPress has detected a problem."
66
  msgstr ""
67
 
68
+ #: admin/actions.php:743 admin/actions.php:749
69
  msgid ""
70
  "%1$s is returning a %2$s response which could mean cron jobs aren't getting "
71
  "fired properly. BackUpWordPress relies on wp-cron to run scheduled backups. "
570
  msgid "This schedule will store a maximum of %s of backups."
571
  msgstr ""
572
 
573
+ #: admin/schedule-sentence.php:11
 
 
 
 
 
 
 
 
 
 
 
 
574
  msgid "The next backup will be on %1$s at %2$s %3$s"
575
  msgstr ""
576
 
577
+ #: admin/schedule-sentence.php:18
578
  msgid "hourly on the hour"
579
  msgstr ""
580
 
581
+ #: admin/schedule-sentence.php:18
582
  msgid "hourly at %s minutes past the hour"
583
  msgstr ""
584
 
585
+ #: admin/schedule-sentence.php:24
586
  msgid "daily at %s"
587
  msgstr ""
588
 
589
+ #: admin/schedule-sentence.php:35
590
  msgid "every 12 hours at %1$s &amp; %2$s"
591
  msgstr ""
592
 
593
+ #: admin/schedule-sentence.php:41
594
  msgid "weekly on %1$s at %2$s"
595
  msgstr ""
596
 
597
+ #: admin/schedule-sentence.php:47
598
  msgid "biweekly on %1$s at %2$s"
599
  msgstr ""
600
 
601
+ #: admin/schedule-sentence.php:53
602
  msgid "on the %1$s of each month at %2$s"
603
  msgstr ""
604
 
605
+ #: admin/schedule-sentence.php:59
606
  msgid "manually"
607
  msgstr ""
608
 
609
+ #: admin/schedule-sentence.php:69
610
  msgid "this server"
611
  msgstr ""
612
 
613
+ #: admin/schedule-sentence.php:77
614
  msgid "store the most recent backup in %s"
615
  msgstr ""
616
 
617
+ #: admin/schedule-sentence.php:83
618
  msgid "don't store any backups in on this server"
619
  msgstr ""
620
 
621
+ #: admin/schedule-sentence.php:89
622
  msgid "store the last %1$s backups in %2$s"
623
  msgstr ""
624
 
625
+ #: admin/schedule-sentence.php:120
626
  msgid "%s. "
627
  msgstr ""
628
 
629
+ #: admin/schedule-sentence.php:124
630
  msgid "Send a copy of each backup to %s."
631
  msgstr ""
632
 
633
+ #: admin/schedule-sentence.php:152
634
+ msgid "Backups will be compressed and should be smaller than this."
635
+ msgstr ""
636
+
637
+ #: admin/schedule-sentence.php:154
638
+ msgid "this shouldn't take long&hellip;"
639
+ msgstr ""
640
+
641
+ #: admin/schedule-sentence.php:154
642
+ msgid "calculating the size of your backup&hellip;"
643
+ msgstr ""
644
+
645
  #: admin/schedule-settings.php:5
646
  msgid "Run now"
647
  msgstr ""
654
  msgid "Delete"
655
  msgstr ""
656
 
657
+ #: admin/server-info.php:41
658
+ msgid "%1$s - %2$s"
659
+ msgstr ""
660
+
661
  #: admin/upsell.php:3
662
  msgid "Backup to"
663
  msgstr ""
664
 
665
+ #: admin/upsell.php:18
666
+ msgid ""
667
+ "%1$sor buy the %2$sDeveloper Bundle%3$s now for only &dollar;99 (all "
668
+ "Destinations &amp; Unlimited Sites)%4$s"
669
+ msgstr ""
670
+
671
+ #: backupwordpress.php:243
672
  msgid "Update"
673
  msgstr ""
674
 
675
+ #: backupwordpress.php:244
676
  msgid "Cancel"
677
  msgstr ""
678
 
679
+ #: backupwordpress.php:245
680
  msgid ""
681
  "Are you sure you want to delete this schedule? All of it's backups will "
682
  "also be deleted."
683
  msgstr ""
684
 
685
+ #: backupwordpress.php:245 backupwordpress.php:246 backupwordpress.php:247
686
+ #: backupwordpress.php:248
687
  msgid "'Cancel' to go back, 'OK' to delete."
688
  msgstr ""
689
 
690
+ #: backupwordpress.php:246
691
  msgid "Are you sure you want to delete this backup?"
692
  msgstr ""
693
 
694
+ #: backupwordpress.php:247
695
  msgid "Are you sure you want to remove this exclude rule?"
696
  msgstr ""
697
 
698
+ #: backupwordpress.php:248
699
  msgid ""
700
  "Reducing the number of backups that are stored on this server will cause "
701
  "some of your existing backups to be deleted, are you sure that's what you "
702
  "want?"
703
  msgstr ""
704
 
 
 
 
 
 
 
 
 
 
 
705
  #: classes/class-email.php:26
706
  msgid "Email notification"
707
  msgstr ""
777
  msgid "Unfortunately the backup file was too large to attach to this email."
778
  msgstr ""
779
 
780
+ #: classes/class-hmbkp-path.php:254
781
+ msgid "This %s file ensures that other people cannot download your backup files."
782
+ msgstr ""
783
+
784
+ #: classes/class-requirements.php:626
785
+ msgid "Schedule: %s"
786
+ msgstr ""
787
+
788
+ #: classes/class-requirements.php:626
789
+ msgid "Duration: %s"
790
+ msgstr ""
791
+
792
+ #: classes/class-schedule.php:137
793
+ msgid "Invalid Option Name"
794
+ msgstr ""
795
+
796
+ #: classes/class-schedule.php:257
797
  msgid "Argument 1 for %s must be a valid integer"
798
  msgstr ""
799
 
800
+ #: classes/class-schedule.php:612
801
  msgid "Argument 1 for %s must be a valid future timestamp"
802
  msgstr ""
803
 
804
+ #: classes/class-schedule.php:650
805
  msgid "Argument 1 for %s must be a valid cron reoccurrence or \"manually\""
806
  msgstr ""
807
 
808
+ #: classes/class-schedule.php:785 functions/interface.php:244
809
  msgid "Starting Backup"
810
  msgstr ""
811
 
812
+ #: classes/class-schedule.php:865
813
+ msgid "Error writing to file. (%s)"
814
+ msgstr ""
815
+
816
+ #: classes/class-schedule.php:911
817
  msgid "Dumping Database %s"
818
  msgstr ""
819
 
820
+ #: classes/class-schedule.php:916
821
  msgid "Verifying Database Dump %s"
822
  msgstr ""
823
 
824
+ #: classes/class-schedule.php:921
825
  msgid "Creating zip archive %s"
826
  msgstr ""
827
 
828
+ #: classes/class-schedule.php:926
829
  msgid "Verifying Zip Archive %s"
830
  msgstr ""
831
 
832
+ #: classes/class-schedule.php:931
833
  msgid "Finishing Backup"
834
  msgstr ""
835
 
836
+ #: classes/class-schedule.php:1042
837
+ #. translators: min=minute
838
+ msgid "%s min"
839
+ msgid_plural "%s mins"
840
+ msgstr[0] ""
841
+ msgstr[1] ""
842
+
843
+ #: classes/class-schedule.php:1052
844
+ msgid "%s hour"
845
+ msgid_plural "%s hours"
846
+ msgstr[0] ""
847
+ msgstr[1] ""
848
+
849
+ #: classes/class-schedule.php:1115
850
  msgid "Argument 1 for %s must be a non empty string"
851
  msgstr ""
852
 
853
+ #: classes/class-schedule.php:1120
854
  msgid "%s doesn't exist"
855
  msgstr ""
856
 
857
+ #: classes/class-schedule.php:1125
858
  msgid "That backup wasn't created by this schedule"
859
  msgstr ""
860
 
870
  msgid "Argument 1 for %s must be a valid class"
871
  msgstr ""
872
 
873
+ #. Plugin Name of the plugin/theme
874
+ msgid "BackUpWordPress"
875
+ msgstr ""
876
+
877
+ #: classes/class-setup.php:154
878
+ msgid ""
879
+ "BackUpWordPress requires PHP version %1$s or later and WordPress version "
880
+ "%2$s or later to run. It has not been activated. %3$s%4$s%5$sLearn more%6$s"
881
+ msgstr ""
882
+
883
  #: classes/class-webhooks.php:102
884
  msgid "Error: %s"
885
  msgstr ""
886
 
887
  #: classes/wp-cli.php:43
 
 
 
 
888
  msgid "Backup: Dumping database..."
889
  msgstr ""
890
 
891
+ #: classes/wp-cli.php:47
892
  msgid "Backup: Zipping everything up..."
893
  msgstr ""
894
 
896
  msgid "Invalid backup path"
897
  msgstr ""
898
 
899
+ #: classes/wp-cli.php:71
900
  msgid "Invalid root path"
901
  msgstr ""
902
 
903
+ #: classes/wp-cli.php:99
904
  msgid "Backup Complete: "
905
  msgstr ""
906
 
907
+ #: classes/wp-cli.php:101
908
  msgid "Backup Failed"
909
  msgstr ""
910
 
911
+ #: functions/core.php:207
 
 
 
 
912
  msgid "BackUpWordPress has setup your default schedules."
913
  msgstr ""
914
 
915
+ #: functions/core.php:207
916
  msgid ""
917
  "By default BackUpWordPress performs a daily backup of your database and a "
918
  "weekly backup of your database &amp; files. You can modify these schedules."
919
  msgstr ""
920
 
921
+ #: functions/core.php:224
922
  msgid "Once Hourly"
923
  msgstr ""
924
 
925
+ #: functions/core.php:225
926
  msgid "Twice Daily"
927
  msgstr ""
928
 
929
+ #: functions/core.php:226
930
  msgid "Once Daily"
931
  msgstr ""
932
 
933
+ #: functions/core.php:227
934
  msgid "Once Weekly"
935
  msgstr ""
936
 
937
+ #: functions/core.php:228
938
  msgid "Once Biweekly"
939
  msgstr ""
940
 
941
+ #: functions/core.php:229
942
  msgid "Once Monthly"
943
  msgstr ""
944
 
945
+ #: functions/core.php:247
946
  msgid "You can only delete directories inside your WordPress installation"
947
  msgstr ""
948
 
 
 
 
 
949
  #: functions/interface.php:31
950
  msgid "Download"
951
  msgstr ""
952
 
953
+ #: functions/interface.php:68
954
  msgid "BackUpWordPress detected issues with your last backup."
955
  msgstr ""
956
 
957
+ #: functions/interface.php:70
958
  msgid "Dismiss"
959
  msgstr ""
960
 
961
+ #: functions/interface.php:119
962
  msgid ""
963
  "The backups directory can't be created because your %1$s directory isn't "
964
  "writable, run %2$s or %3$s or create the folder yourself."
970
  "permissions yourself."
971
  msgstr ""
972
 
973
+ #: functions/interface.php:127
974
  msgid ""
975
  "%1$s is running in %2$s, please contact your host and ask them to disable "
976
  "it. BackUpWordPress may not work correctly whilst %3$s is on."
977
  msgstr ""
978
 
979
+ #: functions/interface.php:127
980
  msgid "http://php.net/manual/en/features.safe-mode.php"
981
  msgstr ""
982
 
983
+ #: functions/interface.php:127
984
  msgid "Safe Mode"
985
  msgstr ""
986
 
987
+ #: functions/interface.php:135
988
+ msgid "Your custom path does not exist"
989
+ msgstr ""
990
+
991
+ #: functions/interface.php:139
992
+ msgid ""
993
+ "Your custom path is unreachable due to a restriction set in your PHP "
994
+ "configuration (open_basedir)"
995
+ msgstr ""
996
+
997
+ #: functions/interface.php:144
998
  msgid ""
999
  "Your custom backups directory %1$s doesn't exist and can't be created, your "
1000
  "backups will be saved to %2$s instead."
1001
  msgstr ""
1002
 
1003
+ #: functions/interface.php:148
1004
  msgid ""
1005
  "Your custom backups directory %1$s isn't writable, new backups will be "
1006
  "saved to %2$s instead."
1007
  msgstr ""
1008
 
1009
+ #: functions/interface.php:157
1010
+ msgid "Your site root path %s isn't readable."
1011
  msgstr ""
1012
 
1013
+ #: functions/interface.php:217
1014
  msgid "Database and Files"
1015
  msgstr ""
1016
 
1017
+ #: functions/interface.php:220
1018
  msgid "Files"
1019
  msgstr ""
1020
 
1021
+ #: functions/interface.php:223
1022
  msgid "Database"
1023
  msgstr ""
1024
 
1025
+ #: functions/interface.php:228
1026
  msgid "Legacy"
1027
  msgstr ""
1028
 
1029
+ #: functions/interface.php:243
1030
  msgid "Started %s ago"
1031
  msgstr ""
1032
 
1033
+ #: functions/interface.php:245
1034
  msgid "cancel"
1035
  msgstr ""
1036
 
1037
+ #: functions/interface.php:291
1038
  msgid "No backups completed"
1039
  msgstr ""
1040
 
1041
+ #: functions/interface.php:303
1042
  msgid "Complete Hourly"
1043
  msgstr ""
1044
 
1045
+ #: functions/interface.php:304
1046
  msgid "File Hourly"
1047
  msgstr ""
1048
 
1049
+ #: functions/interface.php:305
1050
  msgid "Database Hourly"
1051
  msgstr ""
1052
 
1053
+ #: functions/interface.php:306
1054
  msgid "Complete Twicedaily"
1055
  msgstr ""
1056
 
1057
+ #: functions/interface.php:307
1058
  msgid "File Twicedaily"
1059
  msgstr ""
1060
 
1061
+ #: functions/interface.php:308
1062
  msgid "Database Twicedaily"
1063
  msgstr ""
1064
 
1065
+ #: functions/interface.php:309
1066
  msgid "Complete Daily"
1067
  msgstr ""
1068
 
1069
+ #: functions/interface.php:310
1070
  msgid "File Daily"
1071
  msgstr ""
1072
 
1073
+ #: functions/interface.php:311
1074
  msgid "Database Daily"
1075
  msgstr ""
1076
 
1077
+ #: functions/interface.php:312
1078
  msgid "Complete Weekly"
1079
  msgstr ""
1080
 
1081
+ #: functions/interface.php:313
1082
  msgid "File Weekly"
1083
  msgstr ""
1084
 
1085
+ #: functions/interface.php:314
1086
  msgid "Database Weekly"
1087
  msgstr ""
1088
 
1089
+ #: functions/interface.php:315
1090
  msgid "Complete Biweekly"
1091
  msgstr ""
1092
 
1093
+ #: functions/interface.php:316
1094
  msgid "File Biweekly"
1095
  msgstr ""
1096
 
1097
+ #: functions/interface.php:317
1098
  msgid "Database Biweekly"
1099
  msgstr ""
1100
 
1101
+ #: functions/interface.php:318
1102
  msgid "Complete Monthly"
1103
  msgstr ""
1104
 
1105
+ #: functions/interface.php:319
1106
  msgid "File Monthly"
1107
  msgstr ""
1108
 
1109
+ #: functions/interface.php:320
1110
  msgid "Database Monthly"
1111
  msgstr ""
1112
 
1113
+ #: functions/interface.php:321
1114
  msgid "Complete Manually"
1115
  msgstr ""
1116
 
1117
+ #: functions/interface.php:322
1118
  msgid "File Manually"
1119
  msgstr ""
1120
 
1121
+ #: functions/interface.php:323
1122
  msgid "Database Manually"
1123
  msgstr ""
1124
 
1159
  #. Description of the plugin/theme
1160
  msgid ""
1161
  "Simple automated backups of your WordPress powered website. Once activated "
1162
+ "you'll find me under <strong>Tools &rarr; Backups</strong>. On multisite, "
1163
+ "you'll find me under the Network Settings menu."
1164
  msgstr ""
1165
 
1166
  #. Author of the plugin/theme
1171
  msgid "http://hmn.md/"
1172
  msgstr ""
1173
 
1174
+ #: admin/schedule-sentence.php:117
1175
  msgctxt ""
1176
  "1: Backup Type 2: Total size of backup 3: Schedule 4: Number of backups to "
1177
  "store"
1178
  msgid "Backup my %1$s %2$s %3$s, %4$s."
1179
  msgstr ""
1180
 
1181
+ #: functions/interface.php:293
1182
  msgctxt "backups count"
1183
  msgid "One backup completed"
1184
  msgid_plural "%1$s backups completed"
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === BackUpWordPress ===
2
  Contributors: humanmade, willmot, pauldewouters, joehoyle, mattheu, tcrsavage, cuvelier
3
  Tags: back up, backup, backups, database, zip, db, files, archive, wp-cli, humanmade
4
- Requires at least: 3.8.4
5
- Tested up to: 4.1
6
- Stable tag: 3.0.4
7
 
8
  Simple automated backups of your WordPress powered website.
9
 
@@ -132,6 +132,71 @@ You can also tweet <a href="http://twitter.com/humanmadeltd">@humanmadeltd</a> o
132
 
133
  == Changelog ==
134
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  #### 3.0.4 / 2014-12-10
136
 
137
  * Simplify the backup count display
1
  === BackUpWordPress ===
2
  Contributors: humanmade, willmot, pauldewouters, joehoyle, mattheu, tcrsavage, cuvelier
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.2-alpha
6
+ Stable tag: 3.1.0
7
 
8
  Simple automated backups of your WordPress powered website.
9
 
132
 
133
  == Changelog ==
134
 
135
+ #### 3.1.0 / 2015-01-13
136
+
137
+ * Correct $response1 variable
138
+ * (origin/issue-652, issue-652) Suppress warnings from filesystem functions
139
+ * Remove debugging function
140
+ * (origin/issue-475, issue-475) Fix a French string
141
+ * Format the intercom data better
142
+ * Load Intercom in the admin footer
143
+ * Fix some HTML issues
144
+ * Add a function that returns a given option value
145
+ * Return Unknown if no average exists or invalid
146
+ * Add a start parameter to function
147
+ * Pass in the start time as a parameter
148
+ * Make strings translatable
149
+ * Escape values
150
+ * Adds a function to track backup duration and another to display it
151
+ * Adds Average Backup Duration Info
152
+ * Improve display of arrays
153
+ * Fixes open_basedir warnings
154
+ * Replace spaces with tabs for indentation
155
+ * (wp-cron-test-improvements) Improve the reliability of the wp-cron test
156
+ * Pop in the directory sizes
157
+ * Adapt heartbeat pulse
158
+ * Update Javascript
159
+ * Update constant name
160
+ * Load the default translations so that activation error message is in user language
161
+ * Fix a few translatable strings
162
+ * Update French translations
163
+ * Re-uglify Intercom js
164
+ * Use provided callback argument to determine current screen
165
+ * remove deprecated code
166
+ * Only show notices on BWP admin page
167
+ * Fix class name
168
+ * Make function public for now
169
+ * Get an instance of BWP to load functions
170
+ * Fix conditional
171
+ * Show admin notice if fails to meet requirements
172
+ * Remove unneeded function
173
+ * Fix references
174
+ * Refactor main class after addition of the Setup class
175
+ * Introduce a setup class
176
+ * Determine if we need to run a cleanup routine
177
+ * Introduce a custom hook for addons
178
+ * Refactor main plugin file into a singleton class
179
+ * Bring activation and deactivation into main plugin class
180
+ * css changes to fix support button alignment
181
+ * Fixes issue preventing backups from running without JS
182
+ * Remove back compat memory limit define
183
+ * Refactor HMBKP_Notices to support non-persistant notices
184
+ * Minor refactor for PHP minimum requirements notice
185
+ * Clear previous backup notices when running a new backup
186
+ * Fix issues with custom paths
187
+ * Improved singleton pattern
188
+ * Display errors in network admin
189
+ * Change to text input so multiple email address are supported
190
+ * Removes HTML tag from string
191
+ * Account for new schedule
192
+ * Make upsell sentence translatable
193
+ * fix return type
194
+ * Return true if transient exists
195
+ * Check if constant is defined
196
+ * Request the site size via heartbeat send
197
+ * Pass site size through heartbeat
198
+ * Only calculate if necessary
199
+
200
  #### 3.0.4 / 2014-12-10
201
 
202
  * Simplify the backup count display